Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

rs232 ver gönderme sorunu

Başlatan sifirzero, 10 Ocak 2023, 09:02:37

sifirzero

Selamunaleykum arkadaşlar ccsc de yazilimsal olarak rs232 den sicaklik degerini bilgisayarda okumaya calisiyorum. farkli harf ve sekiller çıkiyor. Gonderdigim veri floatti int türunden gonderdim yine ayni sonucu aldim. sonra tek a harfini gonderdim o harfi cikti ekranda. sizce bu sorun nerede olabilir. nette arastirdim pek birsey bulamadim. Tesekkurler hayirli günler
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

fahri-

Kodlarını görmeden nerede hata yaptığını nasıl anlayalım?

sifirzero

printf("a"); örnek kodu gonderdigimde o harfini aliyorum.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

fide

#3
Kullanılan çipin adı yok
Kullanılan çeviricinin adı yok. (Max232, ft232, Pl2303, CH340)
Uart portu baudrate tanımı yok.
PC tarafında dinleme yapan programın dinlediği baudrate ile ilgili bilgi yok.
Printf satırı konfigurasyonu doğru değil.
 :o  :o  :o

Tüm bunların şans eseri doğru olduğunu varsayarak (evrim teorisi gibi oldu)  :du:  :du:  :du:
aşağıdaki tanımlamayı yapıp printf içine kullanacağınız portu da yazarsanız çaışacaktır. Tabi pc tarafında dinlediğiniz yazılımda da doğru baudrate ayarı yapmanız lazım.

pin Map içeren çipler için
#pin_select U3TX=PIN_G7
#pin_select U3RX=PIN_G6

#use rs232(UART3, baud=57600, stream=Comm)

f877 türü 8 bit picler için

rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=Comm)

fprintf(Comm,"Merhaba Dunya");

Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

sifirzero

#4
#include <12f683.h>    

#device ADC=10 

#fuses NOWDT,INTRC_IO,NOMCLR,BROWNOUT

#use delay (clock=4000000) 

#use rs232(baud=9600,xmit=pin_a1,parity=N,stop=1)

#use fast_io(a)



unsigned long int okunan;

float voltaj;



void main ( )

{

   set_tris_a(0x01);

   output_a(0x01); 

   

   setup_adc(adc_clock_div_32);

   setup_adc_ports(sAN0);

   

   while(true)   

   {

   set_adc_channel(0);

   delay_us(20);

   okunan = read_adc();

   voltaj = okunan * 0.00488 * 100;

   printf("\fSicaklik:%2.2f",voltaj);

   

   if(voltaj >= 40)

   {

   output_high(pin_a2);

   printf("\n\rSicaklik 40 derece ustunde !");

   }

   else

   {

   output_low(pin_a2);

   }

   delay_ms(1000);

   }

}

Haklısın abi. simulasyinda calisiyor. gercek devrede calismiyor.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

fide

printf satırı yerine fprintf(Comm, "ABCD");
satırını dene  bir de
#use rs232(baud=9600,xmit=pin_a1,parity=N,stop=1)

satırını

#use rs232(baud=9600,xmit=pin_a1,parity=N,stop=1, stream = Comm)

şeklinde düzenle. Muhtemelen pic ile pc arayüz (putty, terminal, rsterm) arasında baudrate uyumsuzluğu var.

Diğer taraftan asıl önemli olan konu da bu 12F683'te Uart portu yok. Yani bu çip ile seri port iletişimi kuramazsın. 12F1822 yada 16f628 türü Uart portu olan bir çipi dene.
   
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

sifirzero

16f628a ile de denedim yinede olmadi. farkli harfler şekiller degerler verdi. sizin verdiginiz örnekler ile deneyim olumlu olumsuz durunu yazayim.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

fide


pin tanımları, bağlantı şekli (yukardaki gibi)
ve pc tarafında ve pic tarafındaki baudratelere dikkat et.

Bir de çevirici ne kullanıyorsun? Pc de seri port kalmadı artık ama onda da problem olabilir. Çeviricinin rx-tx kısadevre yap. Pc tarafından gönderdiğin karakteri okuman lazım.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

sifirzero

internetten aldigim usb db9 connector ile yapmaya calisiyorum.ccsc nin serial port uygulamasini kullaniyorum. ve c# ile yazilmis olan uygulamada var. ayni degerleri gordum. aksam denedigimde yazayim.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

sadogan

Usb seri çeviricin TTL çıkışlı deyil .
https://www.robotizmo.net/cp2102-usb-uart-donusturucu TTL çıkışlı USB UART çevirici olması lazım.

kudretuzuner

#10
Merhaba,
1---16F628 den TX ten çıkan hex formatındaki dataları verebilir misiniz?
2---isis çizimi verebilir misiniz?
3---PC tarafındaki yazılımın kodlarını yazar mısınız?
Zira PIC PC'ye dataları hex formatında yollar ama PC taraf yazılımı DEC değerleri ile işlem yapar.
Bir konu da FIDE hocanın yazdığı gibi 12F683'te Uart portu yok. Ayrıca PC'den USB'den ile çalışıyor iseniz USB to RS 232 çevirici ne kullandınız. Bu çeviricinin driverını yüklediniz mi?
Özetle yukarıdaki bilgileri yazarsanız ben size hazır şablon program vereyim uygulayın.(16F628)
NOT : ETE hoca yazınca aklıma geldi geçmiş yıllarda bunu kullanmıştım.
https://www.vatanbilgisayar.com/sl-232-v1-0-usb-to-2-0-rs232-cevirici-adaptor.html
Amatör

fahri-

Gönderilenden farklı karakterler alınıyorsa büyük ihtimal baudrate ler aynı değil.

sifirzero

sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir


fide

Bu kablo TTL seviyesinde çıkış vermez.
Size FT232, PL2303 yada CH340 türü bir çevirici lazım.
Robotistan, direnc.net, robotus, motorobit gibi robotik siteler yada n11 de bulursunuz.



Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com