Hallo,
ich versuche zurzeit 2 Arduino Nanos mit den nRF2407L01 Modulen ohne Kabel kommunizieren zu lassen.
Die Verkabelung der beiden sieht dabei wie folgt aus:
GND -> GND
VCC -> 3V3
CE -> D6
CSN -> D7
SCK - > D13
MOSI - > D11
MISO -> D12
Diese Bibliothek habe ich eingebunden:
Der Code für den Sender:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(6, 7); // CE, CSN
const byte addresses [][6] = {"00001", "00002"};
int b = 50;
void setup() {
radio.begin();
radio.openWritingPipe(addresses[1]);
radio.openReadingPipe(1, addresses[0]);
radio.setPALevel(RF24_PA_HIGH);
Serial.begin(9600);
}
void loop()
{
delay(5)
radio.stopListening(); //This sets the module as transmitter
Serial.println(b);
radio.write(&b, sizeof(b)); //Sending the data
delay(2000);
b=b+1;
}
Der Code für den Empfänger:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(6, 7); // CE, CSN
const byte addresses [][6] = {"00001", "00002"}; //Setting the two addresses. One for transmitting and one for receiving
int b;
void setup() {
radio.begin();
radio.openWritingPipe(addresses[0]);
radio.openReadingPipe(1, addresses[1]);
radio.setPALevel(RF24_PA_HIGH);
Serial.begin(9600);
}
void loop()
{
radio.startListening();
if (radio.available())
{
radio.read(&b, sizeof(b));
Serial.println(b);
}
else
{
Serial.println("nichts");
}
delay(1500);
}
Wenn ich mir dann aber den Seriellen Monitor anschaue werden immer nur 0 angezeigt.
Haben Sie versucht, den nRF2407L01NRF24L01 mit einem dedizierten, hochwertigem 3,3-V-Netzteil mit Strom zu versorgen (und es mit GND Ihres Arduino zu verbinden)?
Wenn Module zum Testen nahe beieinander liegen, verwenden Sie nicht HIGH. setze dies auf LOW (sonst werden Sie wahrscheinlich Interferenzprobleme haben)
Ich habe eine schwere Vermutung.
Die Module ziehen bei voller Leistung mehr Strom, als der Nano auf der 3,3V Schiene liefern kann.
Wenn Du das auf dem Steckbrett baust, dann als erstes die Leistung auf PA_MIN stellen.
Ich selbst versorge die Module über den 5V-Adapter, da gibt es die Probleme nicht.
Wenn das runtersetzen der Leistung nicht reicht, hilft ein Kondensator mit 10µF der auf die Versorgungspin gelötet wird.
Ich habe jetzt bei beiden die Zeile
radio.setPALevel(RF24_PA_MIN);
geändert und die VCC Leitung mit dem 5V Pins des Arduinos verbunden und es funktioniert trotzdem noch nicht.
Das einzige, was bei meinem Aufbau anders ist, ist dass nur der Empfänger per Kabel mit dem PC Verbunden ist und der Sender mit einer 9V Batterie auf dem Vin Pin betrieben wird, das dürfte aber auch kein Problem sein oder?
Vorwort:
Als Beginner/Anfänger/Neuling, muss man das nicht wissen.
Aber alte Hasen müssen es eigentlich auf den ersten Blick sehen.
Es ist traurig... und es geschieht immer wieder... So oft, dass ein Muster dahinter stecken muss. Eine geheime Weltverschwörung?
Viele Jahre lang habe ich dazu geschwiegen, jetzt bricht es aus mir heraus!
Was?
Es ist doch klar, dass ein offener Input Pin keinen stabilen High oder Low Zustand liefern kann, soll, oder auch tut. Darf er gar nicht.
Wenn man sich dieses Faktum mal in seinen Erkenntnisapparat einsickern lässt und die Konsequenzen daraus zieht, macht es das Leben evtl. einfacher.
Auch findet sich so die Lösung für viele SPI Probleme. Z.B. mit SD Karten usw....
Auch so ein Gedanke.......
Wenn man Probleme mit einem SPI Gerät hat, könnte man mal die Arduino SPI Doku lesen. Oder das Datenblatt zu dem µC, den man da gerade verwendet.
Beide genannten Dokus sind sich da einig.
Sie werden also beide nicht gelesen oder verstanden. Auch nicht von den alten Hasen.
Der CombieDokuVorleseService:
Der Slave Select Pin des ATMega328P hat High oder ein Output zu sein.
Ist er ein Input und Low, schaltet die SPI Einheit des µC in den Slave Mode und die SPI Verbindung bricht in dem Moment ab. Das Totalversagen. Sporadisch. Mal häufiger, mal seltener.
Mein Vorschlag:
pinMode(SS,OUTPUT) in setup(), alternativ interner/externe Pullup
den SS Pin als /CS des nRF24L01+ einsetzen
Wobei ich noch hinzufügen möchte, dass auch jeder /CS Pin durchaus einen externen Pullup habe darf. Nicht muss. Nur wenn ICSP over SPI genutzt wird, ist es ein Muss, damit die Geräte nicht dazwischen Quatschen und so die Programmierung stören.
Edit:
ich habe jetzt folgendes Tutorial versucht und bin auf ein interessantes Ergebnis gekommen:
Bei einem Arduino sieht die Ausgabe wie gewünscht aus. Beim anderen sind alle Adressen 0x00. Wenn ich jetzt die beiden Module vertausche, dann ist trotzdem beim gleichen Arduino die Ausgabe falsch. Bedeutet das, dass dieser Nano kaputt ist?