Frust mit dem nRF24L01 und ATmega

Gast #1248451
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
Gast #1249008
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.
#1281433
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren