Picproje Elektronik Sitesi

DERLEYİCİLER => Proton+ => Konuyu başlatan: ÜC - 23 Temmuz 2018, 14:31:51

Başlık: Proton TX pinini hapsetmiş
Gönderen: ÜC - 23 Temmuz 2018, 14:31:51
 Eğer hserout komutu kullanılırsa TX pinini kullanmamızı engelliyor ve low yapamıyorum bir türlü pini.Pbp ilede aynısı oluyor. Pini kullanabilmenin bir yolu varmı ? Bu engellemeyi nasıl kaldırır ve tekrar geri verebilirim ?
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: Maxim - 23 Temmuz 2018, 14:45:19
Benim bilgiğim o olay protona özel birşey değil
yani donanımsal uart kullanırsan rx-tx ikisi birden o iş için ayrılıyor.
yani muhtemelen C de aynısı olacaktır.

eğer sadece tx kullanacaksanız,
hserout yeriye serout veya rsout komutlarını kullanabilirsiniz
ama tabi bunlar yazılımsal çözüm olacak
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: ÜC - 23 Temmuz 2018, 15:18:17
 Maxim hocam seri data alımını kesme ile alıyordum rahat oluyordu.Eğer aradığım çözüm yok ise önerdiğiniz gibi aynı pinden yazılımsal komutlarla halledeceğim artık
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: Tagli - 23 Temmuz 2018, 20:12:43
Proton'u bilmiyorum ama donanımsal olarak sadece TX veya sadece RX mümkün. Belki Proton ilgili ayarı yaptıktan sonra ilgili register'daki bit 0 yapılarak Proton'u kandırmak mümkün olabilir, denemek lazım.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: RaMu - 23 Temmuz 2018, 21:14:55
@Tagli bende @Maxim gibi düşünüyorum,
başımada gelmişti, ASM ile yazmama rağmen uart aktif iken pini LOW HIGH yapamamıştım,
belki bütün picler için geçerli olmayabilir ama
sırf bu nedenle eğer RX kullanırken software TX gerekecekse başka bir pin ayırıyorum ve
eğer TX uart amacıyla kullanılmayacaksa başka iş içinde kullanmıyorum, boş bırakıyorum.

Şu yapıda kullanılabilir:
(https://lh3.googleusercontent.com/aqMGRv9k167CkQJi4h4FUqF4nbS68f_8Bcu8Wh9croGIjdmNmpP3h9HmWY1BCzU5d94jGK9BPvngFXbd3-3lDcWclcm83nLqYNOLQ60KnxcBRcvcuSYjAaoZkXcvIp9Zg3HcPBWdsQ=w1070-h536-no)
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: Tagli - 23 Temmuz 2018, 21:29:20
Şimdi PIC16F886'nın datasheet'ine baktım, gerçekten de dediğiniz gibiymiş. Aklımda yanlış kalmış anlaşılan. Veya modelden modele değişiyor olabilir.

Bazı modellerin datasheet'lerinde TX pininin çalışması için ilgili TRIS bitinin 1 yapılması gerektiği yazılmış (halbuki insana 0 olması gerek gibi geliyor). Belki TXEN ve ilgili TRIS biti 0 yapılırsa seri portun pini ele geçirmesi engellenebilir.

umitco, PIC'in modeli nedir? Belki ona göre yorum yapsak daha sağlıklı olur.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: OG - 23 Temmuz 2018, 21:38:49
USART açıldığı andan itibaren ( RCSTA.7 bit idi sanırım )  pini usarta bağlar ve GPIO olarak (genel amaçlı olarak) kullanamazsın. USARTı kapatmak yani bu biti 0 yapmak gerek.
Tabi usart kapandı ise hserout / in komutu kullanılamaz veya kullanıldığı an usart açılıyor olabilir, burasını net hatırlamıyorum.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: ÜC - 24 Temmuz 2018, 01:25:40
    "Eposta ve uyarıları al" yapmama rağmen mail gelmiyor bende cevap yok diyerek bakmadım kusura bakmayın.
  Tagli hocam işlemci 18F4431
  OG hocam sabah ilk işim önerinizi uygulamak olacak.
 Ramu hocam diğer bir pini kullanmakda mümkün ama böyle olsaydı çizim için uğraşmayacaktım epey.
  TX pinini IO olarak kullanmak istememin amacını açıklayayım. Max485 kullanarak 2 pic arasında hem haberleşmek hemde senkron olmalarını sağlamak istiyorum. Slavenin masteri devamlı takip etmesi ikisininde senkron çalışması lazım. Master TX pini low yaptığında slavedeki RX de devamlı low oluyor (hserout problemi olmazsa)  bu sayede senkroniizasyonu sağlamak niyetim.Data göndererekde olabilr ama hattı low yaparak daha pratik ve seri olacağını düşünüyorum.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: RaMu - 24 Temmuz 2018, 02:55:33
Elimde 18F4431 olsaydı denerdim ama
EUSART ı pasifleştirip pini LOW yapman işine yarıyorsa şöyle denenebilir:

Datasheet FIGURE 20-2: EUSART TRANSMIT BLOCK DIAGRAM a göre
RCSTA.SPEN = 0 yapılıp seri port disable(pasif) edilerek ve
ilgili TX pini TRISC.6 = 0 çıkış yapılarak
sonrasında RC6 pini 1-0 yapılabilir gibi gözüküyor.
Sonrasında TRISC.6 = 1 ve RCSTA.SPEN = 1 yapılarak
EUSART geri aktif edilebilir, edilemeyedebilir,
EUSART ı aktifleştirmek için bazı registerları belirli sıralı şekilde ayarlamak gerekebiliyor.
Yinede denenebilir, denersen olacakları yazarsın.

FIGURE 20-5: EUSART RECEIVE BLOCK DIAGRAM a da bakılırsa
SPEN = 0 yapıldığında RX in de disable olacağı veya o sırada
RCREG Receive buffer veya FIFO da anlamsız veri oluşabiliceği görülüyor.

MASTER TX pinini LOW yapmak için Master Eusart tan sürekli 0x00 göndersen olmuyor mu?
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: OG - 24 Temmuz 2018, 05:20:16
Beni zamanında çok uğraştırmıştı bu konu. USART ON-OFF sırasında bazı sıkıntılar olmuştu.

Sizin işinizde anladığım bir tarafta tx diğer tarafta rx pini arada bir genel amaçlı kullanılacak.

Her şeyden önce
ilgili usart pinini bir direnç ile (1K gibi) pullup veya pulldown (hangi yön işinize en yatkın ise)
imkanı var ise yapmanızı öneririm işinizi çok kolaylaştıracaktır.

- - -
Mesela slave taraf
RX pini (dataya bakmadım, mesela portc.7 olsun)
direnç ile pullup yapın
TX tarafın low göndermesini bekleyeceksiniz

önce
PORTC.7 = 1
LATC.7 = 1   (18 serisinde ve gelişmiş 16 serisinde)
USART kapat (ilgili bit ile)
şimdi pin genel amaçlı
burada low oldumu kontrollerini yapıyorsunuz
Low olunca usarta döneceksiniz ama sizin start bitiniz H olduğundan
şimdi H bekliyorsunuz
H olduğu gibi hemen (* bu nokta için tx yani master tarafın açıklaması altta)
USART aç (ilgili bit ile)
(Low iken açarsaniz ilk byte kaçabilir)

* ilgili nokta için TX yani master tarafın açıklaması
TX taraf önce LOW sonra HIGH yaptıktan sonra birkaç bitlik bekleme süresi verin, sonra TX'in usartını açın

- - -
Master (TX) taraf, TX pini PORTC.6 olsun (dataya bakmadım)
Mümkün ise TX pinini bir direnç ile pullup yapın
USART işiniz bitti ise
LATC.6 = 1   (18 serisinde ve gelişmiş 16 serisinde)
PORTC.6 = 1
USART kapat (ilgili bit ile)
LOW yapman gerektiği zaman
LATC.6 = 0   (18 serisinde ve gelişmiş 16 serisinde)
PORTC.6 = 0
arada low süresi verildi, tekrar H yapılacak
LATC.6 = 1   (18 serisinde ve gelişmiş 16 serisinde)
PORTC.6 = 1
RX tarafın sağlıklı algılaması için birkaç bit bekle
USART aç (ilgili bit ile)
işlemlere devam

- - -
gibi.

Hatırlatma;
USART (invert çalışmıyor ise) TX pini usart açılınca HIGH olur.
Yani
USART'ı kapattınız ve TX pinini LOW yaptınız
Bu durumda iken USART'ı açtınız, TX pini HIGH'a sıçrar.
Bu durum istemediğiniz bir an H olması anlamına gelebilir, istenmeyen darbeler haberleşme akışını aksatabilir.
Bu sebeple usartı açmadan önce pini siz H yapın, sizin kontrolunuzde H olsun.

Pullup dirençleri bir çok yanlış algının önüne geçer, basit görmeyin, tavsiyemdir.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: ÜC - 24 Temmuz 2018, 12:47:43
Ortak kanaatiniz olan suçlu RCSTA.7 imiş. Bir Sıfır olduğunda haberleşmeyi kapatıyor ve pin low olabiliyor sıfır bir olduğunda haberleşme açılıyor.
  Ramu hocam sıfır göndererek nasıl olabilir bilmiyorum , gelen veriyi bit bit kontrol etmek usartta nasıl mümkün ? Gerçi gerek kalmadı bu bilgiye zaman harcamayın isterseniz.
  OG hocam sizin akışınızla benzerlik taşıyan bir kod yazmayı düşünüyordum ama aradaki detaylar çok işime yarayacak zahmet edip detaylı anlatmışsınız teşekkürler.
  Cevap yazan tüm arkadaşlara teşekkür ederim ,konuyu sonuca ulaştırdık şükür.

  OG hocam LATC registeriyle ilgili araştırdım biraz datasheetin heryernde geçiyor ama anlamadım doğrusu tampon bölge gibi birşey sanırım.Ufak bir açıklama yapabilirseniz memnun olurum hocam.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: RaMu - 24 Temmuz 2018, 13:52:50
Alıntı yapılan: umitco - 24 Temmuz 2018, 12:47:43Ortak kanaatiniz olan suçlu RCSTA.7 imiş. Bir olduğunda haberleşmeyi kapatıyor ve pin low olabiliyor sıfır olduğunda haberleşme açılıyor.
Tam tersi,
1 Seri Port Enable  (Aktif)
0 Seri Port Disable (Pasif)
Alıntı YapRamu hocam sıfır göndererek nasıl olabilir bilmiyorum , gelen veriyi bit bit kontrol etmek usartta nasıl mümkün ?
TX pinini elle 0 a çekmek ile UART tan sürekli 0x00 göndermek aynı şey,
ikiside TX pinini sürekli 0 da tutmuş olur.

Alıntı YapLATC registeriyle ilgili
Forumda daha önce konuşulmuştu ama konuyu bulamadım.
Temelde Read Modify Write problemine çözüm oluyor:
https://www.microchip.com/forums/m147383.aspx
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: ÜC - 24 Temmuz 2018, 14:15:58
   
  Hatalı olmuş hocam ilk paragraf kusura bakmayın düzeltme için teşekkürler.
 
  Peki alırken nasıl olacak ? RX pini örn 10ms boyunca devamlı nasıl lowda duracak usart kullanarak ?
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: RaMu - 24 Temmuz 2018, 16:06:30
Soruyu net anlamadım.

MCU A     MCU B
TXa ----- RXb
RXa ----- TXb
şeklinde bağlı A ve B MCU ları olsun,
RXb yi LOW da tutmak için A MCU su uart tan sürekli 0x00 gönderir,
RXa yı LOW da tutmak için B MCU su uart tan sürekli 0x00 gönderir.

Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: OG - 24 Temmuz 2018, 19:01:45
Alıntı YapTX pinini elle 0 a çekmek ile UART tan sürekli 0x00 göndermek aynı şey,
ikiside TX pinini sürekli 0 da tutmuş olur.
Ancak 0x00 gönderirken her byte arasında H pulse lar da gider, bunlar stop bitleridir.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: ÜC - 24 Temmuz 2018, 19:22:33
Alıntı yapılan: OG - 24 Temmuz 2018, 19:01:45Ancak 0x00 gönderirken her Byte arasında H pulse lar da gider, bunlar Stop bitleridir.

  Bende bu yüzden dolayı aradaki High ve Low olma durumunun nasıl halledileceğini düşünüyordum.Tabi bir çözüm üreetmek mümkün ama diğer türlü çözüme ulaştığım için şu an gerekli değil kanaatindeyim.
 
  Tekrar teşekkürler hocam kolay gelsin.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: RaMu - 24 Temmuz 2018, 19:45:34
Alıntı yapılan: OG - 24 Temmuz 2018, 19:01:45Ancak 0x00 gönderirken her byte arasında H pulse lar da gider, bunlar stop bitleridir.
Hiç aklıma gelmedi nedense, güzel nokta teşekkür ederim.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: MB_77 - 25 Temmuz 2018, 05:39:40
pps modülü bulunan picleri tercih ederseniz pini istediğiniz gibi kullanabilirsiniz. usart modülünü çalıştırdığınızda tx çıkışını herhangi bir pine pps fonksiyonu ile bağlayabilirsiniz. ya da hiçbir pine bağlamazsınız ve istediğinizi yapmış olursunuz.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: ÜC - 28 Temmuz 2018, 00:13:58
Alıntı yapılan: MB_77 - 25 Temmuz 2018, 05:39:40pps modülü bulunan picleri tercih ederseniz pini istediğiniz gibi kullanabilirsiniz. usart modülünü çalıştırdığınızda tx çıkışını herhangi bir pine pps fonksiyonu ile bağlayabilirsiniz. ya da hiçbir pine bağlamazsınız ve istediğinizi yapmış olursunuz.
Cevabınızı yeni gördüm kusura bakmayın. Pini Low yapabildiğim için gerek kalmadı yinede teşekkürler.

  Arkadaşlar seri iletişim alım kesme bayrağı olan PIR1.5 ilk gelen karakter ile 1 oluyor ama bu bayrağı sıfırlayamıyorum.Değeri sıfır versem bile kabul etmiyor.Başka bir kartta denedim , kesmeyi hiç kullanmadan denedim sıfırlayamadım  epey yordu açıkcası. Acaba protonda bir ayarmı varki bu bitleri kilitliyor ?

  Similasyondada denedim az önce oradada sıfırlanmıyor.Bu bitin sıfırlanmaması mümkün değil yoksa kesme nasıl kullanılacak bu olmadan.Ben biryerde hata yapıyorum kesin.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: Andromeda - 28 Temmuz 2018, 04:55:06
.."sadece okunabilir bit" dir..
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: Tagli - 28 Temmuz 2018, 09:35:36
RCIF kesme bitinin sıfırlanması ancak RCREG'in okunması ile gerçekleşir.
Başlık: Ynt: Proton TX pinini hapsetmiş
Gönderen: ÜC - 28 Temmuz 2018, 12:00:09
 Sabah ezanında gözlerimi birden açıp "RCREG i okuyormuydum kodda" diye konuştum kendi kendime sonra üşendim kalkmaya yat len dedim , kendim cevap verdi haklısın yatalım diye.
  Sağolun arkadaşlar iyi çalışmalar.