keine übertragung mit nrf24l01

Gast #4618892
Lesenswert?

Hallo,
ich möchte mit den nrf24l01 daten übertragen. Dabei komme ich aber schon 
ewig nicht weiter und verstehe auch das Problem nicht ganz. Ich möchte 
die Daten von einem Atmega328p (Arduino) zu einem Attiny2313 übertragen.
Wenn ich beide als Sender erstelle (ohne gegenstelle), bekomme ich vom 
Atmega die Nachricht, dass die Nachricht verloren gegangen ist. Beim 
ATtiny (selber Code) bekomme ich die Nachricht, dass die Übertragung 
geglückt ist. Auch wenn ich das Modul entferne, bekomme ich die Positive 
Nachricht.
Der einzige Unterschied beim Code ist das SPI, da das beim ATtiny über 
USI gemacht wird.
Hardwaremäßig liegt der Unterschied daran, dass der Atmega über USB mit 
meinem Computer verbunden ist und der Attiny noch am ISP-Programmer 
angeschlossen ist. Dies dürfte allerdings nicht das Problem sein (selbst 
wenn ich den Programmer entferne, wird die Nachricht erfolgreich 
übertragen (zumindest der nachricht nach)).

Wenn ich den Atmega als empfänger geschaltet habe, kommen auch keine 
Nachrichten an.
1
uint8_t spi_temp;
2
uint8_t spi_q = 0;
3
char spi_itoabuffer[33];
4
uint8_t spi_var =0;
5
uint8_t spi_data_rx_array[4];
6
uint8_t spi_data_array[4];
7
uint8_t spi_tx_address[5] = {0xE7,0xE7,0xE7,0xE7,0xE7};
8
uint8_t spi_rx_address[5] = {0xD7,0xD7,0xD7,0xD7,0xD7};
9

10
int main(void){
11
  usart_init(USART_MYUBRR);
12
  spi_init();
13
  nrf24_init(); // initialize hardware pins
14
  nrf24_config(2,4); // channel #2, payload length: 4
15

16
  /* Set the device addresses */
17
  nrf24_tx_address(spi_tx_address);
18
  nrf24_rx_address(spi_rx_address);
19

20
  /* Fill the data buffer */
21
  spi_data_array[0] = 0x00;
22
  spi_data_array[1] = 0xAA;
23
  spi_data_array[2] = 0x55;
24
  //spi_data_array[3] = spi_q; // upgrading in while-loop
25
    while (1){
26
      spi_data_array[3] = spi_q++;
27

28
      /* Automatically goes to TX mode */
29
      nrf24_send(spi_data_array);
30
      
31
      /* Wait for transmission to end */
32
      while(nrf24_isSending());
33

34
      /* Make analysis on last transmission attempt */
35
      spi_temp = nrf24_lastMessageStatus();
36
      if(spi_temp == NRF24_TRANSMISSON_OK)
37
      {
38
        usart_transmit_string( " > Tranmission OK\n");
39
      }
40
      else if(spi_temp == NRF24_MESSAGE_LOST)
41
      {
42
        usart_transmit_string("> Message is lost ...\n");
43
      }
44

45
    _delay_ms(2000);
46
    
47
    }
48
}

Frank

Die zugehörigen header und c-files habe ich von 
Beitrag "NRF24L01 und Atmega328P" . Die SPI.c habe ich 
für den attiny abgeändert. Dieses funktioniert aber ansich.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren