Forum: Mikrocontroller und Digitale Elektronik Frust mit dem nRF24L01 und ATmega


von Robert (Gast)


Lesenswert?

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

von Harald (Gast)


Lesenswert?

Ohne das ich jetzt konkret etwas zu den Details sagen könnte, aber 
vielleicht stehen die Teilnehmer zu dicht nebeneinander? Ich kenne das 
von anderen Funkmodulen, die einfach eine gewisse Mindestdistanz 
brauchen. Ist soweit auch nachvollziehbar, aus (mindestens) zwei 
Gründen:

1. Im Gerät wird für die Bildung der ZF selbst ein Oszillator aufgebaut. 
Dieser kann quasi als Sender den benachbarten Empfangskreis bei 
schlechter Selektivität beeinflussen. Auch bei reinen Empfängern (z.B. 
GPS-Empfänger) kann man diese Beeinflussung beobachten.

2. Bei "hoher" Sendeleistung kann die AGC des Empfängers an den Poller 
gefahren werden, aus der er erst nach einer gewissen Zeit wieder 
herauskommt.

von Phil S. (zippi)


Lesenswert?

Hi Robert,

Hast du es hinbekommen?

Also das mit dem Abstand stimmt auf jedenfall nicht. Hab grade mal meine 
NRF24L01 zum laufen gebracht und die gehen auf 1cm genauso gut wie auf 
20m ;).

Würde mich mal interessieren wie weit du bist. Vll kann ich dir ja 
helfen.
Zurzeit übertrage ich 25mal/sek 32byte in jede richtung.

mfg

von H. G. (ledi)


Lesenswert?

Hallo Phil,

da du bereits Erfahrung mit dem Chip hast, bitte ich um Ansicht meines 
Beitrags: [[Beitrag "2,4GHz Funkchip RF24L01 - kein Empfang"]]

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.