Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

Can Bus alıcı sorunu

Başlatan coderun, 31 Temmuz 2013, 18:18:31

coderun

Arkadaşlar elimde iki tane 18F4580 ve MCP2551 var. Can Bus ile haberleştirmeye çalışıyorum.
Verici kısımda bir sorun yok. Datanın gönderildiğine dair uyarı manası taşıyan led1 den bunu görebiliyorum. olması gerektiği gibi yanıp sönüyor. Fakat alıcı kısmında datayı bir türlü göremedim. Sanki hata data yokmuş gibi davranıyor can_kbhit()=0 üretiyor. doğal olarak
if(can_kbhit()) aktif olmuyor :( Can bus konusunda deneyimleri olanlar ayrıca 18F4580 ile yapılmış çalışır kod ve devre şeması paylaşabilirmi.
Devrenin resmi:
http://www.hizliresimyukle.com/images/2013/07/31/YlcbC.png

gönderici kod:

#include <18F4580.h>
#fuses HS,NOPROTECT,NOLVP,NOWDT,nomclr
#use delay(clock=20000000)

#include <can-18F4580.c>



void main() {
    struct rx_stat rxstat;
    int32 rx_id;
    int in_data[8];
    int rx_len;


    int out_data[8];// gönderilen data
    int32 tx_id=36;
    int1 tx_rtr=0; // veri mesajı 0
    int1 tx_ext=0; // standart frame yapıldı 0
    int tx_len=8;
    int tx_pri=1;

    int i;

    for (i=0;i<8;i++) {
       out_data=5;
       in_data=0;
    }
   
    can_init();

    can_set_mode(CAN_OP_LOOPBACK); // loopback mode

 
    while(TRUE)
    {

       
       
    for(i=0;i<5;++i)
    {
     output_high(pin_b0);
     delay_ms(500);
     output_low(pin_b0);
     delay_ms(500);
    }
       
       
       
       
    while(!can_tbe()); // gönderme tamponu veri göndermeye hazır olana kadar bekle
   
     // veriler gönderiliyor
   
    if (can_putd(tx_id, out_data, tx_len,tx_pri,tx_ext,tx_rtr)) // gönderme başarılı
     {
      for(i=0;i<8;++i)
      {
       output_high(pin_b1);// data gönderme başarılı olduğunu göstermek için
       delay_ms(50);       // led1
       output_low(pin_b1);
       delay_ms(50);
      }
     }
   
    else // data gönderme başarısız
    {
     output_high(pin_b4); // data gönderme başarısız olduğunu göstermek için
     delay_ms(500);      // led2 yanıp söndürüldü
     output_low(pin_b4);
     delay_ms(500);
    }
   }
}

alıcı kod:

#include <18F4580.h>
#fuses HS,NOPROTECT,NOLVP,NOWDT,nomclr
#use delay(clock=20000000)

#include <can-18F4580.c>


void main() {
    struct rx_stat rxstat;
    int32 rx_id;
    int in_data[8];
    int rx_len;

    int out_data[8];
    int32 tx_id=36;
    int1 tx_rtr=0;
    int1 tx_ext=1;
    int tx_len=8;
    int tx_pri=3;

    int i;

    for (i=0;i<8;i++)
    {
       out_data=5;
       in_data=0;
    }

    can_init();

    can_set_mode(CAN_OP_LOOPBACK); // loopback mode

   while(TRUE)
   {
   
    if(can_kbhit())   //can_kbhit()=1 olduğunda tamponda data var (geldi) demek
    {                        // data gelene kadar bekle
   
                                                 
     if(can_getd(rx_id, &in_data[0], rx_len, rxstat)) // data alma başarılı
     {
      for(i=0;i<8;++i)
      {
       output_toggle(pin_b0);
       delay_ms(250);
      }
   
     }
     else
     {
      for(i=0;i<8;++i)
      {
       output_toggle(pin_b1);
       delay_ms(250);
      }
     }
    }
    output_high(pin_b4);
   }
}

coderun

arkadaşlar cevap bekleniyor  :(

mcn

loopback mod satırını sil.normal modda çalıştır.
www.teknikyazi.com --üşenme,erteleme,vazgeçme...