Hallo! Ich versuche mit zwei nRF24L01 von nordic und zwei ATmegas eine bidirektionale Übertragung hinzubekommen. Leider komme ich auch unter Zuhilfenahme verschiedener Bibliotheken (u.A. die von Atmel für seinen nRF-USB-Stick) nicht zum gewünschten Ergebnis. ich würde gerne 100 mal pro Sekunde 28 Byte übertragen, also insgesamt wahnsinnige (ironie) 2800 Byte/s. Meine Initialisierung sieht so aus:
1 | NRF_port_init(); |
2 | spi_init(SPI_MASTER); |
3 | NRF_write_addr( RX_ADDR_P0, addr, 5 ); // Adresse RX Pipe 0 setzen |
4 | NRF_write_addr( TX_ADDR, addr, 5 ); // Adresse TX setzen |
5 | NRF_write_reg( EN_AA, 0x00 ); // Automatic Acknowledge aus |
6 | NRF_write_reg( EN_RXADDR, (1<<ERX_P0) ); // Enable Pipe 0 |
7 | NRF_set_channel( 8 ); // Set RF channel |
8 | NRF_set_payload( 0, RF_BUFFER_SIZE ); // Set length of incoming payload |
9 | NRF_write_reg( RF_SETUP, (3<<RF_PWR)|(1<<LNA_HCURR) ); // schaltet 2 Mbps aus! |
10 | NRF_init_rx(); // Set nRf primary receiver |
11 | NRF_enable(); // Enable receiver |
Die Kommunikation klappt auch manchmal, so dass ich grundsätzlich falsch konfigurierte Teilnehmer ausschließen kann. Die Module sind aber auch nur 30 cm auseinander, so dass ich in der beobachteten Form auch nornmale Paketverluste für unwahrscheinlich halte. Folge extrem komische Beobachtungen konnte ich machen: Wenn ich Daten empfange ist beim Lesen von STATUS das Data-Received-Bit nicht gesetzt, jedoch ist die Pipe-Nummer (RX_P_NO) 0, was also Daten in RX-Pipe 0 anzeigt. Diese kann ich auch auslesen und sie sind auch korrekt (kein altes Paket oder so). Zudem wird manchmal nach dem Einleiten des Sendevorgangs der IRQ nicht auf low gezogen wenn der Vorgang beendet sein müsste. Hat jemand ein paar Tipps bzw. evtl. sogar Sourcecode (gerne für AT90USB1287 bzw. den USBKEY) den er mir zur Verfügung stellen könnte? Gerne kann ich auch meinen Code mal hochladen wenn jemand Zeit hat draufzuschauen. Gruß Robert