Forum: Mikrocontroller und Digitale Elektronik keine übertragung mit nrf24l01


von Frank (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.