8n2 UART iletişimi

Başlatan bymrz, 12 Ocak 2008, 18:56:46

bymrz

arkadaşlar picin uart modülünü kullanarak 8n2( start bit + 8bitlik data + 2 stop biti) şeklinde gelen seri asenkron bilgiyi nasıl alabiliriz? RX9D yimi set etmek erekiyor. pek anlayamadım doğrusu...

bu konuda deneyimleri olan arkadaşlar var mı acaba..

Yardımlarınız için şimdiden teşekkürler...

bymrz

yaa cevap yazacak birisi yok mu acaba bu donanımsal seri iletişi hakkında?

Gurkan-Demirbas

Merhabalar;
Bu soruya kimse cevap yazmadı mı? Hayret etmemek mümkün değil.
Hocam sorunu çözdün mü?
Ben USART konusunda pek iyi değilim ama yarımyamalak bilgimle (eğer çözemediysen) yarana merhem olmak isterim.

USART konfigürasyonunu yaparken RCSTA.6 bitini (RX9 - 9 bit receive enable bitini) set et ( 1 yap)

Reception tamamlandıktan sonra (RCREG okunduktan sonra) RCSTA.0 biti (RX9D - 9th bit of received data biti) sana 9uncu biti verir.

iyi çalışmalar

GürkaN DemirbaŞ

bymrz

fakat hocam benim asıl bahsettiğim şey dmx prokolü.. dmx protokolü ile 250k hızında bilgi alırken 8n2 şeklinde bilgi geliyor, işte burda o bilgiyi alırken ne yapmak gerekiyor?
gerekli registerları nasıl configure etmek gerekiyor...

CLR

Merhaba,

1) İlla uart modulunu kullanmak istiyorum diyorsan , pic24F, dspic30F veya 33f serisinde 2 stop bitli haberleşme var.
2) Veya PIC16 veya PIC18 serisi kullanıyorsan , 2 yol var
  a) uart modulu ile :
   PIC'i 9 bit haberleşmeye ayarla (stop bitin birini 9.bit olarak alırsın
   ve  9.biti hesaba katmazsın ) Baudrate'i de 250Khz'e göre ayarlarsın
   Bu baudrate'e ayarlamak için düşük xtal kullanmalısın, (4 Mhz gibi)
  b) Veya direk pic'in portunu denetleyerek datayı okuyabilirsin. (Mesela
  port değişiminde interrupt'a giden pinle yapabilirsin, start bit geldiğinde
  interrupta gider )  
   Port okuma zaman aralıkların 250Khz için  T=1/250Khz = 4msn aralıklarla
  Timerlardan birini kurup bu aralıklarla bit ortalarında okuyabilirsin. Veya
 4ms uzun bir zaman olduğu için, her 4ms'de bir interrupt'a gidebilirsin  gibi seçenekler var.

 Kolay gelsin.
Knowledge and Experience are Power

bymrz

tamam hocam anladım fakat benim 250k dan maksadım 250 khz değil 250 kbit baudrate idi

CLR

Merhaba,

Alıntı yapılan: "alone_lover"tamam hocam anladım fakat benim 250k dan maksadım 250 khz değil 250 kbit baudrate idi

250Kbps = 1 saniyede 250 000 bit
Bir bit için periyot,
t= 1sn/250000bit=4ms/bit


4ms işlemciler için çok uzun bir süre, Okuma için portun birini giriş yap, timer'lardan birini 4ms'de bir interrupt'a girecek şekilde kur, start bitinden sonra, bit ortalarında 4ms'de bir interrupt'a gitsin, interrupt içinde portu oku ve registerine yaz en iyi yol bu,
(yoksa 4ms*10bit=40ms gözle görülür bir zaman kaybın olur)

Kolay gelsin
Knowledge and Experience are Power

bymrz

anlatamadım herhalde süre 4 ms değil 4 us(mikrosaniye) oluyor.
milisaniye olsa hiç sorun değil zaten...

CLR

Merhaba,

Evet haklısın , biraz dalgınlığımın birazda sıfırların azizliğine uğradım. Ama sana yardımcı olmak isteyen birine bu şekilde davranman hiç hoş değil. İnsanın senin gibiler yüzünden yardımcı olmak hevesi uçup gidiyor.

Sorunun cevabına gelince , bu hızda en düşük hatalı iletişim için yüksek hızlı osc'ye sahip microcontroller gerekiyor.  250Kbps uart hab. için PIC16F ve PIC18F serisi kullanamazsın(Sadece Uart modülunü kullanamazsın, 18 serisini kullanabilirsin ama hata oranı belirsiz , bazen düzgün alırken bazen hatalı alabilirsin, 40mhz osc'de port okuma yöntemiyle ile eğer asm dili biliyorsan yine okuyabilirsin, ben okuturum ama seni bilmem). dsPIC30F/33F serisi ile 80MHZ,64MHZ,48MHZ,32MHZ osc frekansların herhangi birinde %0 hata ile 250kbps'de ve 2 stop biti ile haberleşebilirsin. dsPIC'lerde haberleşme hızları Instruction cycle hızına çıkabiliyor. Mesela 30MIPS MC için 30Mhz'de çevresel IC veya donanımlarla haberleşebiliyorsun. Gördüğün gibi 4us'de hiç sorun değilmiş.

Umarım yardımcı olmuşumdur. Kolay gelsin.
Knowledge and Experience are Power

bymrz

Alıntı yapılan: "eemkutay"Merhaba,

Evet haklısın , biraz dalgınlığımın birazda sıfırların azizliğine uğradım. Ama sana yardımcı olmak isteyen birine bu şekilde davranman hiç hoş değil. İnsanın senin gibiler yüzünden yardımcı olmak hevesi uçup gidiyor.

quote]

ya hocam asıl sen böyle deyince ben üzüldüm walla, ben öyle art niyetli bişey demedim ki, dediğin gibi dalgınlık olabilir...
yani beni adam yerine koyup cevap yazan birine böyle bi küstahlık etmek istemem, bilmeden yanlış yaptıysam özür dilerim..

Ayrıca yardımların(ız) için gerçekten çok teşekkür ederim...

CLR

@alone_lover

Rica ederim, umarım, sorununu çözebilirsin.
Kolay gelsin
Knowledge and Experience are Power

bymrz

teşekkür ederim eemkutay hocam, yapmaya başlayacağım,
takıldığım yerler olursa yine sizden  yardım isteyeceğim inşallah...