NRF24L01 Transceiver mit RF24-Lib

Heute bin ich das erste mal auf diese Baustelle gekommen. Mit einen UNO und einem Mega soll das (m)eine Testfunkstrecke werden. Beide Transceiver sind die "einfachen" ohne PA - 11mA max., also geht das so an den 3.3V der Dinos. Alles fein und artig zusammengesteckt, auf die richtigen und verwendeten Pins gesteckt und los gehts ...

Ich hab mir erst mal das GettingStarted-Sketch aus der RF24-Lib genommen. Auf den UNO .... zeigt alles so an wie er soll (s. hier: http://maniacbug.wordpress.com/2011/11/02/getting-started-rf24/) Dann noch mal auf den Mega - auch das klappt. Damit das hier nicht alles auf einem Tisch und an einer Maschine läuft, liegt der UNO bei meiner Frau auf dem Tisch und dudelt mit Putty an Mamas Kiste.

Nun kann man ja bei dem einen oder anderen mit "T" das senden starten und mit "R" wieder auf zuhören. Starte ich den Mega zum senden, scheint der UNO auch was mit zubekommen - er schreibt fleissig zurück ! Aber der Mega empfängt wenn überhäupt nur seltenst was. Meist nur "Failed, response time out"

Umgekehrt - UNO sendet und Mega hört zu - passiert ebenfalls nix. Transceiver in Dutt ? .... umgetauscht, sprich gewechselt: Nein, das gleiche in grün.

Ich hab nun schon mal die Sendeleistung veringert - weil die so dicht nebeneinanderliegen (2m) vielleicht übersteuert ? NEIN ! Div. andere Sendefrequenzen ausprobiert .... keine Änderung.

Hat jemand so mal eben schnell aus dem Stand eine Idee ?

Nachtrag: Was auffällt, wenn der Mega sendet, ist dass er angeblich ja gar nix "wegbekommt". Im Monitor liest man:

Now sending 4753...ok...Failed, response timed out. ..... Now sending 5989...failed. Failed, response timed out.

..... [/quote] Beim senden geht im Sjetch folgendes vor sich:

....
    radio.stopListening();
    // Take the time, and send it.  This will block until complete
    unsigned long time = millis();
    printf("Now sending %lu...",time);
    bool ok = radio.write( &time, sizeof(unsigned long) );
    if (ok)
      printf("ok...");
    else
      printf("failed.\n\r");
    // Now, continue listening
    radio.startListening();
.....

Bei der Meldung würde das bedeuten, die radio.write Funktion schlägt fehlt !? In der Lib steht dazu folgendes:

uint8_t RF24::write_register(uint8_t reg, const uint8_t* buf, uint8_t len)
{
  uint8_t status;
  csn(LOW);
  status = SPI.transfer( W_REGISTER | ( REGISTER_MASK & reg ) );
  while ( len-- )
    SPI.transfer(*buf++);
  csn(HIGH);
  return status;
}

D.h. SPI.transfer schlägt fehl .... und auf der Gegenseite sollte / dürfte nicht oder nur Mist ankommen ?!

Tut es aber nicht ! Wenn ich auf den Monitor meiner Frau schaue, sehe ich dort exakt die gesendeten TimeStamps mit richtigen Werten. Wie kann das ?

... ist mir schon fast peinlich, aber auf die Lösung wäre ich ehrlich gesagt als fast letztes gekommen.

Noch ein paar Worte vor der Auflösung: Ich hab erst daran gedacht "vielleicht strahlt der Sender in den Dino ?" und hab's mal mit verschiedenen Positionen zum Board probiert. Nicht wirklich - aber es fiel auf, dass jedes mal, wenn ich den Transceiver anfasse, plötzlich (Rück-) Übertragung kommt ! Na so was ? Sind's die kleinen Breakboard-Käbelchen ? Ne ... Schwingt was ? Spannung nicht stabil ? Lt. Datenblatt nur 11mA bei volle Pulle - das sollte der Mega schaffen. Spannung steht bei 2,98 mit und ohne Sender. Also auch nicht.

Heute vormittag stundenlang rumgekugelt und auf div. Fred's gestoßen, die ähnliche Symptome haben/hatten und ein kleiner Block-C mit 100nF soll's richten ... Also mal in die Grabbelkiste geguckt und so'n Teil mal direkt über Vcc und GND des Transceivers gelötet. Siehe da: Ruhe im Karton ! Problem auch hier gelöst ? Jedenfalls fast .... aber scheinbar nicht ganz. Die "Fehler" gehen zwar schlagartig zurück - aber nicht auf Null.

Also weitergegrabbelt und noch nen 10µF Tantal (ein blauer Mini-Schlumpf) dazu parallel gelötet. Nun sieht das schon sehr gut aus - so gut wie keine Fehler mehr ! Jedenfalls in der ersten Minuten. Der Rest ist prinzipiell vernachlässigbar, aber für eine zuverlässige Übertragung eben nicht zu tolerieren.

Erstaulich ist dabei: Wenn ich den Sender wieder anfasse, bzw. einen Finger mal so "grob" auf die Masse-Pins halte, gehts gleich wieder los "mit ohne" Fehler. Statische Aufladung ? Ich werde das mal ganz zeitnah mit einem Flachbandkabel (jeweils Signal + Masse) und einer richtigen Stiftleiste probieren.

Erstaunlich dabei finde ich die Symptomatik ! Lt. dem mitlaufendem Protokoll sieht ea so aus, als wenn er (der Mega) gar nichts sendet - tut er aber. Der Uno gibt ja fleissig Antwort. Und: Den UNO (R3 - Nachbau, 11 €) scheint das am Gesäß vorbei zu interessieren. Der läuft auch "ohne alles", mit und ohne anfassen.

Fällt jemandem dazu noch was hilfreiches ein ?