pic ten pic e uart haberleşme sorunu

Başlatan koray692, 23 Ağustos 2017, 17:45:15

koray692

merhaba arkadaşlar iki pic i uartla haberleştirmeye çalışıyorum kafasına göre bazen çalışıyor bazen çalışmıyor . vericide gönderilen verilerin osiloskop görüntüsü aşşağıda foto olarak yapıştırdım.

// verici kısmı

void main()
{
trisb.rb3=1;


UART1_Init(1200);
delay_ms(150);
while(1)
{
if(portb.rb3==1)
{
if (UART1_Tx_Idle() == 1) {

UART1_Write_Text( "A");           
 }

}
}



}



// alıcı kısmı

char uart_rd=0;
char A;
void main ()
{
  trisa.ra0=0;
  porta.ra0=0;
  trisb.rb4=0;
  portb.rb4=0;
   cmcon=7;
  UART1_Init(1200);               // Initialize UART module at 9600 bps
  Delay_ms(100);
  while (1) {                     // Endless loop
    if (UART1_Data_Ready()) {     // If data is received,
      uart_rd = UART1_Read();     // read the received data,

     }
     
     if(uart_rd== 0x41)
     {
      portb.rb4=1;
      
      delay_ms(1000);
      portb.rb4=0;
     
      delay_ms(1000);
      
     }



}
}






Hadi

Hocam programın amacı nedir?

Ben böyle anladım:

Verici devrede PORTB'nin 3. pinine bağlanan butona basınca, A karakterini gönderecek.
Alıcı devre ise A karakterini alınca PORTB'nin 4. pinine bağlanan LED'i 1sn aralıklarla yakıp söndürecek.

Acaba doğru anlamış mıyım?


Peki sıkıntı nerde? Yanı "kafasına göre çalışıyor" 'dan kastınız nedir? Tam olarak nasıl davranıyor?

Gözüme çarpan iki şey oldu.
Birincisi verici programında veriyi String olarak gönderiyorsunuz, Char olarak dener misiniz?
İkincisi yine verici programında buton için arkları önlemek için bir şey yapmamışsınız.


Ben biraz değişiklik yaptım, sıkıntı yok gibi. Yine sizin cevabınıza göre hareket ederiz.


Verici:

void main() {

    TRISB3_bit = 1;
    PORTB = 0x00;

    UART1_Init(1200);
    Delay_ms(150);

    while (1) {
      if (PORTB.B3 == 1) {
         UART1_Write('A');
         while(PORTB.B3);
      }
    }
}



Alıcı:

char uart_rd;

void main() {

    TRISB4_bit = 0;
    PORTB = 0x00;
    
    UART1_Init(1200);
    Delay_ms(100);
     
    while (1) {
      if (UART1_Data_Ready()) {
        uart_rd = UART1_Read();
      }
      

      if (uart_rd == 'A') {
         PORTB.B4 = ~PORTB.B4;
         Delay_ms(1000);
      }
    }
}


Sonuç ise bu şekilde:


koray692

cevabınız için çok teşekkür ederim doğru anlamışsınız 16f88 de karşılaştırıcıları ve analog okuyucuları kapatınca düzeldi sorun ancak ikinci adımda ben araya rf modülü bağladım fs1000a 433 mhz likten şimdide alıcıya dokununca çalışıyor bazen , bazende çalışmıyor beslemelerden dolayı iç gürültü oluşuyor olabilir diye düşündüm ama çokta emin değilim 

ilyas KAYA

Alıcıya dokununca çalışıyor ise frekanslar tutmuyor olabilir. Ayrıca veriyi rf de gönderirken arada boşluk verip yollayın. Sürekli uart haberleşmesini parazit olarak gorup filtre yapabiliyor.