16f873a rs232 ile seri haberleşme sorunu

Başlatan 1n4001, 19 Mayıs 2014, 22:57:57

1n4001

Merhabalar, konuyla ilgili açılmış birçok konuyu inceledim ancak kodlarımda (eğer gözden kaçırdığım bir şey yoksa) bir farklılık göremedim. 16F873A ve MAX232 kullanarak seri porttan PC ile haberleşmeye çalışıyorum. putc ile A karakterini sürekli göndermeme rağmen gerek terminalde gerekse logic analyzer'da bir defalık 0x00 (Null) karakterini gönderiyor. Sebebini bulamadım, bu konuda yardımcı olabilirseniz çok sevinirim.

#include <16f873a.h>
#priority rda
#device adc=10
#fuses xt, nowdt, noput, noprotect, nobrownout, nolvp, nocpd, nowrt, nodebug
#use delay(clock=4m)
#use rs232(baud=9600, bits=8, parity=n, stop=1, errors, uart1)
#define led pin_c2

unsigned char Rx_data=0, Tx_data=0;
int16 bekle = 0;

void main()
{
   set_tris_b(0b00000000);
   enable_interrupts(global);
   enable_interrupts(int_rda);
   while(1)
   {
      if(bekle>=30000)
      {
         putc('A');
         output_toggle(led);
         bekle=0;
      }
      bekle++;
   }
}

Salih


1n4001

Teşekkürler hocam, pinleri belirttim ancak yine olmadı daha sonra sorunu çözdüm. MAX232'nin tx pinlerinde sorun vardı.

xoom

öncelikle MCU'nun 30000'e kadar sayma işlemi için geçen süreyi hesaplamalısın.. yaklaşık olarak 30ms gibi bir sürede toggle yaptığı için ledin yanık veya sönük kaldığını göremiyorsunuz. Toogle komutunun altına bekleme koyun veya 30000'den daha fazla saydırınız.

1n4001

İlgilinize teşekkürler, problemi çözdüm. MAX232'nin pinlerinde sorun vardı. pic'in tx pinini doğrudan rs232'ye bağladım ve problem ortadan kalktı. Ancak başka bir problemim var. PC'den pic'in rx pinine kadar doğru veri geliyor ancak rda kesmesine girmiyor bir türlü. test için kesmenin içine ledi toggle et dedim ses seda yok...

#int_rda
void rda_isr()
{
   clear_interrupt(int_rda);
   output_toggle(led);
}


Bu arada main de global ve int_rda kesmeleri aktif

superconductor

#5
UART rx buffer'inin okunmasi gerekiyor.

Salih

Rx pinini giriş olarak ayarlamakta fayda var.
Garanti olsun diye. ;)
Fast_IO kullanmadıysanız
input(Pin_C7)


Veya tris den ayarlayın.

1n4001

Teşekkürler, tüm kodlar ve bağlantılar normaldi. Ama hala bir sorun vardı. Bugün MAX232'den gelen yanık kokusuyla herşey aydınlandı. Değiştirdim ve düzeldi  :)