rs232 yazılımı

Başlatan makine_terbiyecisi, 30 Kasım 2017, 12:13:57

makine_terbiyecisi

Merhaba arkadaşlar,

Pic ile başarılı bir şekilde bilgisayara data gönderebiliyorum. Seri haberleşme ekranında pic ile gönderdiğim datayı görebiliyorum.
Pc seri monitörden gönderdiğim datayı alamıyorum. Saçma karakterler çıkıyor.

Elinde daha basit rs232 gönderme ve alma kodu olan varsa paylaşabilir mi?

iyi çalışmalar.
# ÖĞRENELİM, ÖĞRETELİM #

kudretuzuner

#1
Merhaba,
PC'deki Seri haberleşme ekranının yazılımını kontrol edebilme şansınız var mı?PIC'ten yollanan byte'ları nasıl algıladığını görmek lazım.
Veya anlamsız dediğiniz karakterleri,yolladığınız karakterler ile nasıl bir bağlantısı var
Amatör

Faruk53

Veri alma işlemini nasıl yapıyorsunuz hocam. Kodunuzun o kısmını paylaşırsanız yardımcı olmaya çalışalım.

makine_terbiyecisi

Alıntı yapılan: Faruk53 - 30 Kasım 2017, 15:59:07
Veri alma işlemini nasıl yapıyorsunuz hocam. Kodunuzun o kısmını paylaşırsanız yardımcı olmaya çalışalım.

#int_rda
void serihaberlesme_kesmesi ()
{
 disable_interrupts(int_rda);
 gets(wifi_buff);
}


void main()
{
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
   setup_adc(adc_off);
   
//!   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_bit); //13,1 ms overflow
//!   set_timer0(0);
//!   
//!   disable_interrupts(INT_timer0);
      //enable_interrupts(INT_RDA);
      
   enable_interrupts(GLOBAL);
   
   set_tris_b(0x00);
   set_tris_c(0x80); //C6 -> TX (output) C7 -> RX (input) (0b10000000)
   set_tris_d(0x00);
   
   output_b(0x00);
   output_c(0x00);
   
   lcd_init();
   delay_ms(10);
   printf(lcd_putc,"\fSTARTING...");
   delay_ms(500);
   
   clear_wifi_buf();
   
   delay_ms(10);
   printf(lcd_putc,"\fPIC > ESP ..");
   delay_ms(500);
   
   fprintf(WIFI_ESP,"Hi!\r\n");
   delay_ms(500);
   
   while(TRUE){
      printf(lcd_putc,"\f> %s",wifi_buff);
      enable_interrupts(int_rda);
      delay_ms(100);
   }
}
# ÖĞRENELİM, ÖĞRETELİM #

Faruk53

#4
Hocam öncelikle seri iletişimde veri alırken gets kullanmayın. Bir zamanlar bu konuyla ilgili çok başım ağrımıştı. Haberleşme hızlarının birbirine eşit olduğundan eminseniz kodda gönderdiğiniz kadarı ile gözüme çarpan yerlere değineyim;
1) int_rda kesmesini aktif edin
enable_interrupts(int_rda); // int_rda kesmesi aktif

2)RX ve TX uçlarını giriş-çıkış olarak tekrar programa belirtmeye gerek yok.
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1,stream=USART1)
Bu kısım orayı hallediyor.
3) RX kesmesini alırkende tek bir karakter alıp onu bir değişkene atıp sonlandırma karakteri gelene kadarki bütün değişkenleri bi yerde toplayarak yapmaya çalışın hocam.

https://www.picproje.org/index.php/topic,58924.msg519058.html#msg519058
burada @ferdem hocam ile bu konuyu detaylı olarak tartışmıştık.
Kolay gelsin.

makine_terbiyecisi

Alıntı yapılan: Faruk53 - 30 Kasım 2017, 16:11:19
Hocam öncelikle seri iletişimde veri alırken gets kullanmayın. Bir zamanlar bu konuyla ilgili çok başım ağrımıştı. Haberleşme hızlarının birbirine eşit olduğundan eminseniz kodda gönderdiğiniz kadarı ile gözüme çarpan yerlere değineyim;
1) int_rda kesmesini aktif edin
enable_interrupts(int_rda); // int_rda kesmesi aktif

2)RX ve TX uçlarını giriş-çıkış olarak tekrar programa belirtmeye gerek yok.
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1,stream=USART1)
Bu kısım orayı hallediyor.
3) RX kesmesini alırkende tek bir karakter alıp onu bir değişkene atıp sonlandırma karakteri gelene kadarki bütün değişkenleri bi yerde toplayarak yapmaya çalışın hocam.

https://www.picproje.org/index.php/topic,58924.msg519058.html#msg519058
burada @ferdem hocam ile bu konuyu detaylı olarak tartışmıştık.
Kolay gelsin.

Faruk hocam çok teşekkür ederim. Hemen bağlantıyı inceliyorum.
iyi çalışmalar.
# ÖĞRENELİM, ÖĞRETELİM #