Hallo Leute,
ich bin jetztt schon ewig dabei, einen Fehler zu suchen und komme
alleine nicht drauf. Ich möchte gernen eine Funkbrücke über zwei
NRF24L01+ Modulen realisierenh, über welche ich UART Daten übertragen
kann. Dazu habe ich unter
https://github.com/pvishal/nrf24l01-rc
einen Sourcecode gefunden, den ich für mein Atmega32 Board entsprechend
angepasst habe. Stand ist jetzt, dass ich bereits DEBUG Ausgaben über
UART an den PC sende, um zu analysierenh, wo der Fehler liegt.
Sol#bald ich etwas senden möchte, bekommt der Atmega einen Interrupt,
was ja auch so sein muss. Allerdings wird in der Interrupt Routine
nichts gesendet, da er aus dem Statusregister vom NRF 1E ausliest......
Diesen Wert kann ich aber nicht wiklich analysieren.
Folgenden Codeausschnitt zeigt mein Problem denk ich:
Sobald ich etwas sende, bekomme ich folgende Ausgabe über UART:
1 | ISR(INT0_vect)
|
2 | {
|
3 | uint8_t status;
|
4 | uint8_t pipe_number;
|
5 |
|
6 | uart_puts("Interrupt\r\n");
|
7 | CE_LOW();
|
8 |
|
9 | status = get_status(); // Hier wird der status auf UART ausgegeben
|
10 |
|
11 |
|
12 | if (status & _BV(RX_DR))
|
13 | {
|
14 | uart_puts("Empfang\r\n");
|
15 | pipe_number = (status & 0xE) >> 1;
|
16 | radio_rxhandler(pipe_number);
|
17 | }
|
18 | // We can get the TX_DS or the MAX_RT interrupt, but not both.
|
19 | if (status & _BV(TX_DS))
|
20 | {
|
21 | uart_puts("Senden\r\n");
|
22 | // if there's nothing left to transmit, switch back to receive mode.
|
23 | transmit_lock = 0;
|
24 | reset_pipe0_address();
|
25 | set_rx_mode();
|
26 |
|
27 | // indicate in the history that a packet was transmitted successfully by appending a 1.
|
28 | tx_history <<= 1;
|
29 | tx_history |= 1;
|
30 |
|
31 | tx_last_status = RADIO_TX_SUCCESS;
|
32 |
|
33 | // finally, notify the application.
|
34 | radio_txhandler();
|
35 | }
|
36 | else if (status & _BV(MAX_RT))
|
37 | {
|
38 | uart_puts("MAX_RT\r\n");
|
39 | send_instruction(FLUSH_TX, NULL, NULL, 0);
|
40 |
|
41 | transmit_lock = 0;
|
42 | reset_pipe0_address();
|
43 | set_rx_mode();
|
44 | // indicate in the history that a packet was dropped by appending a 0.
|
45 | tx_history <<= 1;
|
46 |
|
47 | tx_last_status = RADIO_TX_MAX_RT;
|
48 | }
|
49 |
|
50 | // clear the interrupt flags.
|
51 | status = _BV(RX_DR) | _BV(TX_DS) | _BV(MAX_RT);
|
52 | set_register(STATUS, &status, 1);
|
53 |
|
54 | CE_HIGH();
|
55 | }
|
Sobald ich etwas sende, bekomme ich folgende Ausgabe über UART:
<\0>Device Ready for RX/TX!<\r><\n>
Interrupt<\r><\n>
30MAX_RT<\r><\n>
Data not transmitted. Max retry.Interrupt<\r><\n>
30MAX_RT<\r><\n>
Data not transmitted. Max retry.Interrupt<\r><\n>
30MAX_RT<\r><\n>
Data not transmitted. Max retry.Interrupt<\r><\n>
30MAX_RT<\r><\n>
Data not transmitted. Max retry.Interrupt<\r><\n>
30MAX_RT<\r><\n>
Data not transmitted. Max retry.Interrupt<\r><\n>
30MAX_RT<\r><\n>
Data not transmitted. Max retry.
Könnt ihr mir noch einen Denkanstoss geben, wo der Fehler liegen könnte?
main und radio. c habe ich in den Anhang gepackt.