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.