NRF24L01 scheint nicht zu senden (MAX_RT)

Gast #4221181
Lesenswert?
• ▲
▼
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.
Angehängte Dateien:
Gast #4221224
Lesenswert?
• ▲
▼
Ich glaube, dass die paar Abfragen in der ISR nicht der Auslöser sind.

Wegen dem Zerschiessen vom Modul das glaueb ich nicht, da ich komplett 
alles auf 3,3V Vcc laufen habe und außerdem bekomme ich ja einen 
Interrupt vom NRF Modul zurück. Aber anscheinend passen die 
zurücjkgegebenen Werte nicht...
Gast #4221248
Lesenswert?
• ▲
▼
Thomas schrieb:
> Ich glaube, dass die paar Abfragen in der ISR nicht der Auslöser sind.

Entweder du weißt es oder du weißt es nicht. Glauben hilft nicht weiter.

Den Chip kenne ich nicht, daher die Frage: unter welchen Bedingungen 
werden die Interrupt ausgelöst.
Gast #4222332
Lesenswert?
• ▲
▼
Also,

ich habe grade einmal die Abfragen aus der ISR geschmissen und nur das 
Register ausgelesen und über UART ausgegeben. Es ist immer noch das 
gleiche Problem.

Der Interrupt wird ausgelöst, sobald eine Nachricht empfangen oder 
gesendet worden ist. Dieser kommt dann vom NRF Modul und löst eben den 
Interrupt beim Atmega32 aus.
Gast #4222466
Lesenswert?
• ▲
▼
Funktioniert das Lesen. Zum Init laut Programm wird zwar gelesen, aber 
wenn dort das falsche Ergebnis kommt, dann hat das keine Auswirkungen. 
Das Lesen der Nutzdaten ist da anspruchsvoller.
Also nochmal: kann man Daten von nRF lesen?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.