Şimdi Ara

NRF24L01 modül ? (2. sayfa)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
28
Cevap
1
Favori
1.814
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: önceki 12
Sayfaya Git
Git
Giriş
Mesaj
  • haberleştiremedim henüz ama uygun bir kütüphane buldum bazı düzeltmeler yaptım ve arduino ile düzgün haberleştirdim. şimdi de pic ile alıcı ve verici mantığını oluşturdum. aslında anladım da artık galiba ama bazı sorunlar var . mesela harici kesme ile bilgi alacağım. ama alıcı da yazdığım kod u derleyince bir uyarı veriyor. uyarıda kesmeyi engelleyen bir durum olduğu için kapatıldığı yazıyor. ve bu yüzden sanırım gelen veriyi alamıyorum.
    biraz araştırdım . bu uyarının sebebi kesme fonksiyonu içerisinde delay(); kullanmaktan kaynaklı oluyormuş genelde ama ben delay kullanmıyorum sebebini de bulamadım açıkcası.
    bazıları ana fonksiyonda kullanılan bekleme varsa onlar da kesmeyi engeller demişler ama bu benim mantığıma yatmadı . bu harici kesme sonuçta değişim olduğu anda ana fonksiyonda ne yapıldığı önemli değil diye düşünüyorum. sizce problem nedir hocam ?
    buraya uyarı verilen fonksiyonu atiyim NRF24L01 modül ?
    @elektro_gadget




  • haberleştiremedim henüz ama uygun bir kütüphane buldum bazı düzeltmeler yaptım ve arduino ile düzgün haberleştirdim. şimdi de pic ile alıcı ve verici mantığını oluşturdum. aslında anladım da artık galiba ama bazı sorunlar var . mesela harici kesme ile bilgi alacağım. ama alıcı da yazdığım kod u derleyince bir uyarı veriyor. uyarıda kesmeyi engelleyen bir durum olduğu için kapatıldığı yazıyor. ve bu yüzden sanırım gelen veriyi alamıyorum.
    biraz araştırdım . bu uyarının sebebi kesme fonksiyonu içerisinde delay(); kullanmaktan kaynaklı oluyormuş genelde ama ben delay kullanmıyorum sebebini de bulamadım açıkcası.
    bazıları ana fonksiyonda kullanılan bekleme varsa onlar da kesmeyi engeller demişler ama bu benim mantığıma yatmadı . bu harici kesme sonuçta değişim olduğu anda ana fonksiyonda ne yapıldığı önemli değil diye düşünüyorum. sizce problem nedir hocam ?
    buraya uyarı verilen fonksiyonu atiyim NRF24L01 modül ?
    @elektro_gadget




  • Kesme içindeyken tekrar kesmeye girmesin diye kapatıyor gibi geldi bana. Bunda bir sorun olmaz. İstersen kesme fonksiyonun içinde led yakıp söndürmeyi dene. Böylece kesmeye girip girmediğini anlarsın.
  • aynen içine bir led koyup toggle yaptım ama hiçbişey olmadı hocam .
    kesmeye girmiyor.
    manuel olarak denedim sonra b0 pinine bir verdim kesmeye girdi ve led i yaktı.
    yani sorun dediğiniz gibi kesme oluşacak ama verici kesme oluşturcak sinyali göndermiyor galiba yada aklıma gelen bir ihtimla daha var oda voltaj mı yeterli gelmiyor bu nrf ler 3.3 ile çalışıyor pic 5v ile acaba harici kesme için 3.3 yeterli gelmiyor olabilirmi ? yorumunuz nedir hocam
  • Bir sürü sebep olabilir. Öncelikle vericinin veriyi gönderdiğine emin olmalısın. Bunun için verici tarafındaki kesmeden faydalanabilirsin.

    Eğer gönderiyorsa alıcı tarafında irq pinini manuel olarak okuyabilirsin, 0 olduğu an gelmiş demektir.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • verici tarafında ki kesme derken hocam veri gönderme fonksiyonunun içine bir led koydum led yanıyor. amaveri gönderme kesmesinden kastınızı anlamadım tx kesmesi gibi mi? bu kütüphanede veri gönderme kesmesi kullanılmıyor okuduğum kadarıyla hocam ?
  • Evet verici tarafında da var. Özellikle kapatmadıysa açıktır. Kullandığın kütüphane hangisi? Link atarmısın.
  • /*
    #include <18F4620.h>
    #FUSES H4,NOFCMEN,NOIESO,NOPUT,NOBROWNOUT,NOWDT,CCP2B3,NOPBADEN,LPT1OSC,NOMCLR,NOSTVREN,NOLVP,NOXINST,NODEBUG,NOPROTECT,NOWRTC,NOWRTB,NOWRTC,NOWRTD
    #use delay(clock=40MHz,crystal=10MHz)
    #define LCD_DB4 PIN_b4
    #define LCD_DB5 PIN_b5
    #define LCD_DB6 PIN_b6
    #define LCD_DB7 PIN_b7
    #define LCD_RS PIN_a1
    #define LCD_RW PIN_a0
    #define LCD_E PIN_a2
    #include <LCD420_Flex.c>
    */
    //nRF24L01+ için yazılımsal SPI kütüphanesi
    /*
    #define IRQ_pin pin_b0
    #define CE_pin pin_c0
    #define SS_pin pin_a5 // CSN-SS pin
    #define MOSI_pin pin_c5
    #define MISO_pin pin_c4
    #define SCK_pin pin_c3
    */

    #define R_REGISTER_cmd 0x00
    #define W_REGISTER_cmd 0x20
    #define R_RX_PL_WID_cmd 0x60
    #define R_RX_PAYLOAD_cmd 0x61
    #define W_TX_PAYLOAD_cmd 0xA0
    #define W_ACK_PAYLOAD_cmd 0xA8
    #define W_TX_PAYLOAD_NO_ACK_cmd 0xB0
    #define FLUSH_TX_cmd 0xE1
    #define FLUSH_RX_cmd 0xE2
    #define REUSE_TX_PL_cmd 0xE3

    #define NOP_cmd 0xFF


    #define CONFIG_reg 0x00
    #define EN_AA_reg 0x01
    #define EN_RXADDR_reg 0x02
    #define SETUP_AW_reg 0x03
    #define SETUP_RETR_reg 0x04
    #define RF_CH_reg 0x05
    #define RF_SETUP_reg 0x06
    #define STATUS_reg 0x07
    #define OBSERVE_TX_reg 0x08
    #define RPD_reg 0x09
    #define RX_ADDR_P0_reg 0x0A
    #define RX_ADDR_P1_reg 0x0B
    #define RX_ADDR_P2_reg 0x0C
    #define RX_ADDR_P3_reg 0x0D
    #define RX_ADDR_P4_reg 0x0E
    #define RX_ADDR_P5_reg 0x0F
    #define TX_ADDR_reg 0x10
    #define RX_PW_P0_reg 0x11
    #define RX_PW_P1_reg 0x12
    #define RX_PW_P2_reg 0x13
    #define RX_PW_P3_reg 0x14
    #define RX_PW_P4_reg 0x15
    #define RX_PW_P5_reg 0x16
    #define FIFO_STATUS_reg 0x17
    #define DYNPD_reg 0x1C
    #define FEATURE_reg 0x1D

    #define nrf_HIGH 1
    #define nrf_LOW 0
    //unsigned char x = 0;
    int1 burst=0;


    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    unsigned char nRF24L01_read()
    {
    unsigned char s = 0;

    unsigned char msg = 0;
    for(s = 0; s < 8; s++)
    {
    msg <<= 1;
    output_bit(SCK_pin, nrf_HIGH);
    if(input(MISO_pin) != 0)
    {
    msg |= 1;
    }
    output_bit(SCK_pin, nrf_LOW);
    }
    return msg;
    }


    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    void nRF24L01_write(unsigned char d)
    {
    unsigned char s = 0;
    for(s = 0; s < 8; s++)
    {

    if((d & 0x80) != 0)
    {output_bit(MOSI_pin, nrf_HIGH);}

    else
    {output_bit(MOSI_pin, nrf_LOW);}

    d <<= 1;
    output_bit(SCK_pin, nrf_HIGH);
    output_bit(SCK_pin, nrf_LOW);
    }
    }


    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    void register_write(unsigned char reg, unsigned char value)
    {
    output_bit(SS_pin, nrf_LOW);
    nRF24L01_write((reg | W_REGISTER_cmd));
    nRF24L01_write(value);
    output_bit(SS_pin, nrf_HIGH);
    }


    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    void write_command(unsigned char cmd)
    {
    output_bit(SS_pin, nrf_LOW);
    nRF24L01_write(cmd);
    output_bit(SS_pin, nrf_HIGH);
    }


    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    unsigned char register_read(unsigned char reg)
    {
    unsigned char value = 0;

    output_bit(SS_pin, nrf_LOW);
    nRF24L01_write((reg | R_REGISTER_cmd));
    value = nRF24L01_read();
    output_bit(SS_pin, nrf_HIGH);
    return value;
    }


    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    void set_TX_RX_address(unsigned char *addr, unsigned char bytes, unsigned char reg)
    {
    unsigned char n = 0;
    output_bit(SS_pin, nrf_LOW);
    nRF24L01_write((reg | W_REGISTER_cmd));
    for(n = 0; n < bytes; n++)
    {
    nRF24L01_write(addr[n]);
    }
    output_bit(SS_pin, nrf_HIGH);
    }


    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    void flush_TX_RX()
    {
    register_write(STATUS_reg, 0x70);
    write_command(FLUSH_TX_cmd);
    write_command(FLUSH_RX_cmd);
    }


    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    void send_data(unsigned char bytes, unsigned char *value)
    {
    unsigned char s = 0;
    output_bit(SS_pin, nrf_LOW);
    nRF24L01_write(W_TX_PAYLOAD_cmd);

    for(s = 0; s < bytes; s++)
    {nRF24L01_write(value[s]);}
    output_bit(SS_pin, nrf_HIGH);

    output_bit(CE_pin, nrf_HIGH);
    delay_us(20);
    output_bit(CE_pin, nrf_LOW);
    }

    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    void receive_data(unsigned char bytes, unsigned char *value)
    {
    unsigned char s = 0;

    output_bit(SS_pin, nrf_LOW);
    nRF24L01_write(R_RX_PAYLOAD_cmd);
    delay_us(2);

    for (s = 0; s < bytes; s++)
    {
    value[s] = nRF24L01_read();
    }
    delay_us(2);
    output_bit(SS_pin, nrf_HIGH);
    }

    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    void nRF24L01_TX_init()
    {
    unsigned char address[5] = {0x64, 0xFE, 0x42, 0xAC, 0xB3};
    output_bit(CE_pin, nrf_LOW);

    register_write(CONFIG_reg, 0x0E); //TX_DS is reflected to IRQ pin, enable 2 byte CRC, Power-Up, Transmitter
    delay_ms(2); //Wait for power up
    register_write(EN_AA_reg, 0x3F); //Enable auto-ack on all pipes
    register_write(EN_RXADDR_reg, 0x3F); //Enabled RX addresses (All active)
    register_write(SETUP_AW_reg, 0x03); //5 byte address width
    register_write(SETUP_RETR_reg, 0xFF); //4000us auto retransmit delay, retry 15 times before give up
    register_write(RF_CH_reg, 0x17); //2.423Ghz RF Channel. 0x17 equals 23 on decimal
    register_write(RF_SETUP_reg, 0x26); //0 Dbm, 2Mbps, no CONT_WAWE, no PLL_LOCK
    set_TX_RX_address(address, 5, TX_ADDR_reg);
    flush_TX_RX();
    output_bit(CE_pin, nrf_HIGH);
    delay_ms(2);
    //PIC içinde kalan bilgilerin temizlenmesi için sfırlanıyor. Sadece MISO ve IRQ giriş olacak ve IRQ pull-up şeklinde.
    output_bit(CE_pin, nrf_LOW);
    output_bit(SS_pin, nrf_LOW);
    output_bit(SCK_pin, nrf_LOW);
    output_bit(MOSI_pin, nrf_LOW);
    }

    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    void nRF24L01_RX_init()
    {
    unsigned char address[5] = {0x64, 0xFE, 0x42, 0xAC, 0xB3};
    output_bit(CE_pin, nrf_LOW);

    register_write(CONFIG_reg, 0x0F); //RX_DR is reflected to IRQ pin, enable 2 byte CRC, Power-Up, Receiver
    delay_ms(2); //Wait for power up
    register_write(EN_AA_reg, 0x3F); //Enable auto-ack on all pipes
    register_write(EN_RXADDR_reg, 0x3F); //Enabled RX addresses (All active)
    register_write(SETUP_AW_reg, 0x03); //5 byte address width
    register_write(SETUP_RETR_reg, 0xFF); //4000us auto retransmit delay, retry 15 times before give up
    register_write(RF_CH_reg, 0x17); //2.423Ghz RF Channel. 0x17 equals 23 on decimal
    register_write(RF_SETUP_reg, 0x26); //0 Dbm, 2Mbps, no CONT_WAWE, no PLL_LOCK
    set_TX_RX_address(address, 5, RX_ADDR_P0_reg);
    register_write(RX_PW_P0_reg, 16); //32 bytes payload width
    register_write(RX_PW_P1_reg, 16); //32 bytes payload width
    register_write(RX_PW_P2_reg, 16); //32 bytes payload width
    register_write(RX_PW_P3_reg, 16); //32 bytes payload width
    register_write(RX_PW_P4_reg, 16); //32 bytes payload width
    register_write(RX_PW_P5_reg, 16); //32 bytes payload width
    flush_TX_RX();
    output_bit(CE_pin, nrf_HIGH);
    delay_ms(2);
    //PIC içinde kalan bilgilerin temizlenmesi için sfırlanıyor. Sadece MISO ve IRQ giriş olacak ve IRQ pull-up şeklinde.
    output_bit(CE_pin, nrf_LOW);
    output_bit(SS_pin, nrf_LOW);
    output_bit(SCK_pin, nrf_LOW);
    output_bit(MOSI_pin, nrf_LOW);
    }

    void start_listening()
    {
    nRF24L01_RX_init(); //Re-init module
    output_high(CE_pin);
    delay_us(250); //Keep CE high, after 130us module starts listening
    }

    void stop_listening()
    {
    //nRF24L01_RX_init(); //Re-init module
    output_low(CE_pin);
    flush_TX_RX();
    }




  • 
Sayfa: önceki 12
Sayfaya Git
Git
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.