avatar_elektro77

Uart İletişimde Tx Pini Çıkış Verilerini Pc de Görme Hakkında

Başlatan elektro77, 26 Haziran 2022, 14:48:40

elektro77

Merhabalar; Ete Hocam Merhabalar
Bu konuyu bir kaç forumda açtım ama yeterli sonuca ulaşamadım.
Aşağıdaki fotoda ki gibi uart iletişim verisi gönderen bir deney devresi yaptım. Amacım, Bilgisayar ekranında uart iletişim verilerini görebilmek ve sonrasında  bu veri kalıplarını alıp başka bir devrede kullanmak.
Yaptığım deney devresinde 20mhz osc frekansında 9600baudrate max485 entegresine veri akışı sağlıyorum.
Keypedde hangi rakama basarsam deney devresi ekranında da o rakamın çeşitli sayı tabanlarındaki değerlerini görüyorum. Bu şekilde bir deney devresi yaptım ki, devre ekranındaki veriler ile pc ekranından okuyacağım verilerin karşılaştırmasını yaparım diye düşündüm.
Değer okumak için çözümlerden birininn usb to ttl dönüştürücü kullanmam gerektiği söylendi. Bende öyle yaptım.
Deney devremin tx pininden bir uç alıp, pc nin usb girişine takıp tanıttığım, usb to ttl çeviricinin Rx pinine girdim. Bu aşamada usb to ttl çeviricinin rx ledinin data gönderdiğimde yanıp söndüğünü gördüm. Yani deney devremin yazılımında bir sıkıntı yok. Verileri gönderebiliyorum.
Bu aşamadan sonra usb to ttl dönüştürücüden gelen usb verilerini ekranda görebileceğim bir arayüz arayışına girdim. Onlarca program denedim ama usb(Com3 te tanımlı) deki verileri göremedim.
Karıştırdığım bir nokta var;Ben usb den veri okumaya çalışıyorum ama bana seri port verileri okumam gerektiği söyleniyor, Usb ile seri port terminal farklı şeyler değil mi?
Sonuç olarak pc nin usb girişine kadar getirdiğim uart datalarını pc ekranında nasıl görebileceğimi tane tane hiç bilmeyen birine anlatır gibi ayrıntılı anlatabilir misiniz?
Zaman ayıracağınız için şimdiden teşekkür ederim.


"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Karmaşık bir anlatım olmuş. Önce amacını anlat sonrada devreni anlat. Max485 ne alaka orada onu anlamadım. Karşısında bir şey yok onu alacak orada MAX232 entegresi olsa hadi neyse derim.

Açıklamaya önce RS232 standart voltaj seviyelerini açıklayarak başlayayım.
Pic tarafı TTL yani 5V lojik dir. Kısaca HIGH=5V, LOW=0V yani GND dir.

PC tarafı ise farklıdır. PC de HIGH= -12V (laptoplarda bu voltaj 7-8V lara kadar düşebiliyor)
LOW= +12V dur. Gördüğün gibi PC tarafında eksi-artı besleme kullanılmış olup PC ile Pic'in haberleşebilmesi için bu iki ünitenin sinyal seviyelerinin bir birine uydurulması gerekir.
Bunu uyduran entegre de MAX232 (ve.ya sonu 232 ile biten başka markalar).

Ben olsam Pic RS232 çıkışını PC ye uydururdum.
Yeninesil PC lerde artık RS232 portu bulunmuyor. Onun yerine USB portu bulunuyor ve bir tarafı USB diğer tarafı ise RS232 çıkışı olan çeviriciler yapılmış. Sana lazım olan bu vede almışsın zaten. Her şeyden önce o çeviricinin bir SÜRÜCÜ DOSYASI olması gerekir. Sürücüyü PC ye kurduğun zaman RS232 için sanal bir COM port belirlemen gerekir. SOnuçta kullandığın çeviricinin RS232 çıkışı PC de bir sanal COM numarası ile adlandırılması gerekir. Com port izleyici başka bir program ile gelen verileri inceleyecek isen o belirlenen COM Port numarasını kullanman gerekir.

Şimdi yeniden Lojik seviye meselesine geri dönelim. Büyük ihtimalle kullandığın USB==>RS232 çevirici çıkışı PC lojik seviyede dir. Bunu öğrenmen ve emin olman önemli tabiiki. Aletin açıklamalarında veya kitapçığında yazıyordur. Yada ölçüm yaparak da bulabilirsin. Çıkan voltajı ölç eksi veya artı farketmez 5V dan fazla ise PC lojikdir. Bu durumda Pic tarafından gelen TX Max232 nin TTL girişine girecek ve onun çıkışı olan RS232 output doğruca senin USB çeviricinin Rx ucuna girecektir. USB çeviricinin TX çıkışı ise Max232 nin RS232_INPUT ucuna girecek ve çıkışı da direk Pic tarafının RX ucuna girecektir.
Sistem bu bu aşamadan sonra bir COM port izleyici ile gelen dataları izleyebilirsin.

Ete

elektro77

Alıntı yapılan: ete - 26 Haziran 2022, 15:32:29Karmaşık bir anlatım olmuş. Önce amacını anlat sonrada devreni anlat. Max485 ne alaka orada onu anlamadım. Karşısında bir şey yok onu alacak orada MAX232 entegresi olsa hadi neyse derim.

Açıklamaya önce RS232 standart voltaj seviyelerini açıklayarak başlayayım.
Pic tarafı TTL yani 5V lojik dir. Kısaca HIGH=5V, LOW=0V yani GND dir.

PC tarafı ise farklıdır. PC de HIGH= -12V (laptoplarda bu voltaj 7-8V lara kadar düşebiliyor)
LOW= +12V dur. Gördüğün gibi PC tarafında eksi-artı besleme kullanılmış olup PC ile Pic'in haberleşebilmesi için bu iki ünitenin sinyal seviyelerinin bir birine uydurulması gerekir.
Bunu uyduran entegre de MAX232 (ve.ya sonu 232 ile biten başka markalar).

Ben olsam Pic RS232 çıkışını PC ye uydururdum.
Yeninesil PC lerde artık RS232 portu bulunmuyor. Onun yerine USB portu bulunuyor ve bir tarafı USB diğer tarafı ise RS232 çıkışı olan çeviriciler yapılmış. Sana lazım olan bu vede almışsın zaten. Her şeyden önce o çeviricinin bir SÜRÜCÜ DOSYASI olması gerekir. Sürücüyü PC ye kurduğun zaman RS232 için sanal bir COM port belirlemen gerekir. SOnuçta kullandığın çeviricinin RS232 çıkışı PC de bir sanal COM numarası ile adlandırılması gerekir. Com port izleyici başka bir program ile gelen verileri inceleyecek isen o belirlenen COM Port numarasını kullanman gerekir.

Şimdi yeniden Lojik seviye meselesine geri dönelim. Büyük ihtimalle kullandığın USB==>RS232 çevirici çıkışı PC lojik seviyede dir. Bunu öğrenmen ve emin olman önemli tabiiki. Aletin açıklamalarında veya kitapçığında yazıyordur. Yada ölçüm yaparak da bulabilirsin. Çıkan voltajı ölç eksi veya artı farketmez 5V dan fazla ise PC lojikdir. Bu durumda Pic tarafından gelen TX Max232 nin TTL girişine girecek ve onun çıkışı olan RS232 output doğruca senin USB çeviricinin Rx ucuna girecektir. USB çeviricinin TX çıkışı ise Max232 nin RS232_INPUT ucuna girecek ve çıkışı da direk Pic tarafının RX ucuna girecektir.
Sistem bu bu aşamadan sonra bir COM port izleyici ile gelen dataları izleyebilirsin.

Ete
Hocam öncelikle uzun zaman sonra sizinle yazisabildigim için mutluyum. Siz bana elektroniği öğreten kişisiniz.
Konuya dönecek olursam;
Yabancı bir firmanın ürettiği bir devre var. Bu devrede bir tustakimi ve tuş takımınin ekranı var. Birde bu tuş takımının komut verdiği ana bir devre var. Bu ana devre ile bu tuş takımı arasında max485 li iletişim var yani Uart iletişim protokolü olduğunu düşünüyorum.
Amacım bu tuş takımının ana devreye gönderdiği tuş datalarini okumak. Okuduğum datalari da kendi yapacağım tuş takiminda kullanip bu bahsettiğim ana devreyi  kendi yapacağım tuş takımı ve ekran ile calistiracagim. Başka bir anlatımla; 3 faz bir motor sürücü var ve bu motor sürücüye start-stop ve hız kontrolü yaptıran tuş takımlı bir ekran var. Amacım bu motor sürücüsüne başka bir ekran tasarlamak. Bunun için de orjinal ekrandan motor sürücüye giden komutları okumam gerekli.
Bu nedenle uart yani Max485 li bir deney devresi tasarladım ki önce bu deney devresi ile işi kavrayayim. Yani anlamadiginiz max485 in karşısında şu an için başka bir alıcı Max 485 alici devresine gerek olmadığını düşünüp sadece verici olan kısma odaklandım.
USB to ttl çevirici in Rx pinine picin Tx pinini bağlayıp o şekilde denemeler yaptım. Yani oradaki Max485 i henuz kullanmadim. Orada atıl duruyor. Pic Tx ini ceviricide okumaya odaklandım.
Zaman ayirdiginiz için teşekkür ederim hocam. Size saygım sonsuz. Kolay gelsin. İnşallah sagliginiz yerindedir.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

Hocam verileri pc ekranında görmeyi başardım. Usb to ttl dönüştürücüde ki bir sorunu düzeltince oldu.
"Hserout [BILGI]" komutu ile verileri porta her seferinde bir kere gönderiyorum. Bilgi ham rakam bilgisi içeriyor. Preambl veya şifre kullanmadım çünkü seri porta ham rakam bilgisi olarak ne gidiyor onu görmek istedim.
picten porta
0 rakamını gönderdiğimde "0b0"
1 rakamını gönderdiğimde "0b1111000 "
2 rakamını gönderdiğimde "0b111111 0b0"
3 rakamını gönderdiğimde "0b111111 0b0"
4 rakamını gönderdiğimde "0b0 0b0 "
5 rakamını gönderdiğimde "0b1111000 0b0"
6 rakamını gönderdiğimde "0b111111 0b0"  bu kodu "binary göster" seçeneği seçilmiş terminal programında  görüyorum.
Bunları nasıl anlamlandırmalıyım?
Kullandığım terminal programı ektedir.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

aRci

Merhaba bence verileri hatalı alıyorsunuz. doğrudan çalışan sisteme ya kendi rs485 iniz ile hat dinleme yapın yada doğrudan komut gönderen chazın pcb uzerinden tx pinini alıp usb ttl döönüştürücüyü direk bağlayın bana kalırsa max485 hattını dinlemek daha kolay olacaktır arada pic olmadan direk pcye bağlayın

ahmet_zxc

bence bunun için bir devreye ihtiyacın yok.

terminal by bray isimli uygulamayı indir. bir tane ttl usb dönüştürücü ile 485 e hiç girmeden ttl seviyesinde dataları bilgisayar ile bi rx sonra tx olarak oku.  yada bilgisayara 2 tane usb ttl converter tak aynı anda rx tx oku..




elektro77

Terminal programında doğru değerleri okuyamama hatamı buldum!
#CONFIG
 ;__config _HS_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF
 __config _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC & _BOREN_OFF & _CP_OFF & _WDT_OFF & _WRT_OFF
#ENDCONFIG 
'----------------------------------
DEFINE OSC 20
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 129  ' 9600 Baud @ 20MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
Yukarıda yaptığım ayarlara göre 20mhz de 9600 bautrate gönderiyor olmam gerekirken meğer 2400 bautrate gönderim yapıyormuşum. Terminal ayarlarını 2400bautrate e ayarlayınca anlamlı veriler almaya başladım. Her gönderdiğim sayı kendi sayı tabanında doğru olarak görünüyor.
Peki 20mhz de 9600 bautrate gönderim için doğru ayarlar ne olmalıdır?
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 129 ' 9600 Baud @ 20MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

ete

elektro77

Bir de lojik analyser kullanıp dataları okudum. Bunun için saleae isimli bir program ve  piyasada bulunabilen saleae isimli 24mhz analyser i kullandım. Gayet başarılı. @mehmet e teşekkür ederim.
Aşağıdaki fotoda 255 datasının picten analyser e, önünde bir şifre ve arkasında ascii dataları ile gönderimi mevcuttur.
Fakat programın birçok özelliği açık değil. Demo kullanım olduğu için galiba. Örneğin ayrı bir pencerede hex,binary,decimal ve ascıı olarak gösterse idi çok işime yarardı. Birde capture gibi birşey olsaydı yine iyi olurdu. Çünkü ekran o kadar hızlı akıyor ki dataları bulmak zorlaşıyor. Programın inceliklerini anlatan iyi bir video da bulamadım..


"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

alisumer

pickit3 te data analizer var gayet başarılı da çalışıyor varsa elinizde kullanışlı
Hep meraktan

elektro77

"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

pickit2 uart tool u çalıştırdım ama çokta iyi sayılmaz. Sadece baudrate oranı seçilebiliyor.Ayrıca ascıı leri verip binary i soru işareti olarak veriyor. Arayüzdeki  hex ve ascıı seçenekleri arasında sürekli tıklama yapmak gerekecek gibi.


"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

alisumer

pickit3 analizeri dedim ben uart değil ama uart için arduino kullanıyorum onda grafik okuma da var başarılı
Hep meraktan

Powered by EzPortal