Hallo,
ich möchte gerne mit nrf24l01 Daten übertragen. Doch leider hapert es
schon am Senden.
1 | uint8_t spi_tx_address[5] = {0xD7,0xD7,0xD7,0xD7,0xD7};
|
2 | uint8_t spi_rx_address[5] = {0xE7,0xE7,0xE7,0xE7,0xE7};
|
3 |
|
4 |
|
5 | int main(void){
|
6 | timer_interrupt_init(); // Timer0 -> 1ms
|
7 | extern_interrupt_init();
|
8 | usart_init(USART_MYUBRR);
|
9 | usart_transmit_string("RX devices ready \r\n");
|
10 |
|
11 | nrf24_init(); // initialize hardware pins
|
12 | nrf24_config(2,4); // Channel #2, payload length: 4
|
13 | /* set the device addresses */
|
14 | nrf24_tx_address(spi_tx_address);
|
15 | nrf24_rx_address(spi_rx_address);
|
16 |
|
17 | sei(); // Global Interrupts activate
|
18 | //unsigned int rv = 0;
|
19 | while (1){
|
20 | //receive();
|
21 | transmit();
|
22 | usart_transmit_string("transmission over \r\n");
|
23 | _delay_ms(2000);
|
24 | }
|
25 | }
|
26 |
|
27 | ISR(INT0_vect){
|
28 | static unsigned int status;
|
29 | // Read wl_module status
|
30 | wl_module_CSN_lo; // Pull down chip select
|
31 | 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