status = spi_fast_shift(NOP); // Read status register
32
wl_module_CSN_hi; // Pull up chip select
33
34
if (status & (1<<TX_DS)){ // IRQ: Package has been sent
35
usart_transmit_string("Package has been sent \r\n");
36
nrf24_configRegister(STATUS, (1<<TX_DS));
37
PTX = 0;
38
}
39
40
if (status & (1<<MAX_RT)){ // IRQ: Package has not been sent, send again
41
usart_transmit_string("Package has not been sent, send again \r\n");
42
nrf24_configRegister(STATUS, (1<<MAX_RT));
43
wl_module_CE_hi; // Start transmission
44
_delay_us(10);
45
wl_module_CE_lo;
46
}
47
48
if (status & (1<<TX_FULL)){ // TX_FIFO Full < this isnt an IRQ
49
usart_transmit_string("TX_FIFO Full\r\n");
50
wl_module_CSN_lo; // Pull down chip select
51
spi_fast_shift(FLUSH_TX); // Flush TX-FIFO
52
wl_module_CSN_hi; // Pull up chip select
53
}
54
}
Ich bekomme immer die Ausgabe
Package has not been sent, send again
Diese Meldung kommt aus der Interrupt-Routine INT0 -> if (status &
(1<<MAX_RT))
Das heisst ja eigentlich, dass kein Empfänger ermittelt worden ist,
welcher ein Acknowledge zurückliefert oder?
Beim Empfänger habe ich
1
while (1){
2
3
while (!nrf24_dataReady());
4
usart_transmit_string("\r\n new data: ");
5
nrf24_getData(spi_data_array);
6
usart_transmit_char(spi_data_array[0]);
7
usart_transmit_char(spi_data_array[1]);
8
usart_transmit_char(spi_data_array[2]);
9
usart_transmit_char(spi_data_array[3]);
10
11
}
Es werden auch kontinuierlich Ausgaben über usart rausgegeben,
allerdings sind die Werte alle 0x00 (sollten 0x11, 0x55, 0xAA, 0xFF
sein). Und wenn ich den Sender Abstecke (Strom weg, sodass dieser nicht
mehr senden kann), bekomme ich ebenfalls kontinuierlich die Ausgabe über
neue Datas.
Wie kann/sollte ich jetzt vorgehen um meinen Fehler zu finden? Es
scheinen ja beide Seiten einen Fehler zu haben (Sender sendet nicht,
empfänger empfängt falsche Daten, obwohl keine Daten da sein dürften).
Johannes
Johannes schrieb:> Doch leider hapert es schon am Senden.
Aus den bisschen Symptomen kannst du das nicht feststellen.
Hast du das HF-Signal beobachtet dass es nicht aus dem
Sendmodul kommt? Ich vermute mal schwer: nein.
Der NRF24 unterscheidet je nach Konfiguration ob er ein
Acknowledge vom Empfänger bekommen hat oder nicht. Das
bedeuted aber nicht (wen kein ACK kommt) dass er nichts
gesendet hat.
Johannes schrieb:> Wie kann/sollte ich jetzt vorgehen um meinen Fehler zu finden?
Den kompletten Aufbau (+Schaltplan) zeigen und das/die voll-
ständigen Programme.
Und:
-------------------------------------------
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
Formatierung .... C-Code .....
-------------------------------------------
Der Sender ist an einem Atmega328p angeschlossen, welcher sich auf einem
Arduino Uno befindet. Das Modul habe ich an SPI angebunden und CE und
CSN an PB0 und PB1.
Der Empfänger ist an einem Attiny2313. Da dieser einzeln ist, habe ich
noch etwas Peripherie anebaut.
100nF zwischen Vcc und GND
10kOhm zwischen Vcc und RESET,
Quarz mit 8 MHz
Widerstand und LED an PD5
RX, TX an FT232 um mit dem Computer zu kommunizieren
SPI an nrf24l01
CE an PB0
CSN an PB1
Nur die main-Funktion und der SPI ist am attiny etwas anders. Ansonsten
ist es so, das vom Atmega vorerst nur Daten gesendet werden sollen (wenn
alles funktiniert soll dieser auch Daten empfangen) und der Attiny soll
zunächst nur die Daten empfangen und ausgeben (später auch antworten
zurückschicken).
Gibt es denn eine Möglichkeit, herausfinden, wo der fehler genau liegt?
Es gibt ja mehrere Stellen.
1. Kommunikation Mikrocontroller -> Sender (SPI)
2. Kommunikation Sender -> Empfänger (Funk)
3. Kommunikation Mikrocontroller -> Empfägner (SPI)
Wie kann ich die einzelnen Kommunikationen am besten testen?
Johannes schrieb:> wo der fehler genau liegt
Da hast du noch vergessen:
- Sender / Empfänger falsch initialisiert.
- Sender / Empfänger falsch bedient bzw Fehler im Code.
Hast du leihweise Zugriff auf eine 2.4GHz Fernsteuerung?
Georg G. schrieb:> Hast du leihweise Zugriff auf eine 2.4GHz Fernsteuerung?
Das einzige was ich hätte, wäre eine Maus und eine Tastatur, die über
2,4Ghz laufen