Hallo
Ich möchte in Zukunft gerne einige Projekte mit Funkübertragung machen
und habe deshalb ein paar NRF24L01 Funkchips im EbAY bestellt. Nun sind
diese angekommen und ich habe begonnen zu versuchen eine Verbindug
herzustellen. Und das ist auch das Problem! Es kommt keine Verbindung
zustande!
Hier der Code des Senders:
Roman B. schrieb:> was meinst du mit eigentlichem code?> Das ist alles! Es soll ja nur ein Test sein. Was fehlt dir denn?
Der Code zu den RF24.h und nRF24L01.h z.B.
Was mir generell auffällt
Roman B. schrieb:> radio.openWritingPipe(0xF0F0F0F0D2LL);
Das LL am Ende irritiert mich etwas. Ist das hier nötig?
Roman B. schrieb:> char text[]="Hallo";> radio.write( &text,5);
text ist bereits ein Zeiger. Es kommt mir komisch vor dass du die
Adresse von text übergibst. Kann natürlich richtig sein aber dazu müsste
man den Code von radio.wirte() kennen.
Marcel schrieb:> Roman B. schrieb:>> radio.openWritingPipe(0xF0F0F0F0D2LL);>> Das LL am Ende irritiert mich etwas. Ist das hier nötig?
Das sind fünf Byte, das passt nur in einen long Long a 64 Bit.
die include Dateien sind aus der rf24 library. das mit dem text stimmt,
allerdings müsste dann ja wenigstens die Adresse gesendet werden, aber
es wird gar nichts gesendet!(zumindest empfange ich nichts)
Hallo Roman,
dein Code funtioniert (teilweise). Wenn ich auf der Senderseite RESET
drücke, dann kommt beim Empfänger "Hallo}ç" an.
Also Funkverbindung steht.
Der Test läuft mit 2 Arduino UNO, einer ist R2, der andere R3. Ich habe
allerdings in meiner Schaltung eine kleine Änderung. Der RF24 ist am
SPI, geht ja nicht anders ;-). CE an 8 und CSN an 9. Soweit ist es ja
noch so wie bei dir. Allerdings habe ich festgestellt, dass der Arduino
mit dem RF24 nicht ganz kompatibel ist. Somit habe ich den Arduino auf
3,3 V umgebaut. Ich habe einfach VCC (PIN7) auf 3,3 V gelegt. Von 5 V
habe ich ihn natürlich getrennt.
Jetzt höre ich schon alle brüllen, dass er jetzt mit 16 MHz ausserhalb
der Spezifikationen läuft. Ja, es ist mir bewusst.
Desweiteren habe ich per ISP die Brownoutschwelle heruntergesetzt, sonst
läuft der ATmega 328P nicht bei 3,3 V.
Was hast du ansonsten mit der Funkübertragung vor?
Gruß
Guido
Hallo Roman,
1. Wie ist der Atmega328P angeschlossen? Die Arduino Pin-Nummern
entsprechen ja NICHT den Pin-Nummern des IC's.
2. Der Sender sendet die String-Ende-Kennung nicht mit. Der Empfänger
muss sie also noch anfügen bevor Serial.println mit dem empfangenen Text
aufgerufen wird.
LG, Sebastian
Also liegt es bei mir an der schaltung? Die PinNummern habe ich
berücksichtigt. Wieso hast du die pins auf 8 und 9 gelegt? geht es mit 9
und 10 nicht? Momentan habe ich noch keine konkreten Vorstellungen, was
ich mit der Funkübertragung machen möchte. Vielleicht eine
Funklichtschranke oder als steuerung für einen roboter.
Das String ende habe ich noch nicht angefügt,weil es ja nur ein Testist
und es mirdabei nicht auf eine korrekte darstellung des strings ankommt.
Was hastdu noch per isp geändert? die chip habe ich am arduino auf 3.3v
gelegt und beim atmega mit 2 dioden versehen, so dass auch ungefähr 3.3v
zustande kommen. Geht das so nicht?
Es sollte mit 9 und 10 auch gehen.
Ich habe es nur geändert weil ich auch einen Ethernet Arduino habe. Bei
dem ist 10 belegt.
Ich stecke mal auf 9, 10 um. Moment!
Wie erwartet, funtioniert es auch mit 9,10. Allerdings tut sich nur
etwas, wenn ich auf Senderseite RESET drücke.
Ich denke, dass noch irgendetwas fehlt, um zu sagen, dass die
Zeichenkette zu Ende ist.
Danke für die schnelle Hilfe. Ich pribier es morgen oder später mal mit
der \0 am String-Ende und hoffe,dass es nicht an der Schaltung liegt!
RESET kann ich am sender leider nicht drücken, weil ich auf die
Platine(Sender) keine Reset schaltung gelötet habe (nur 10k-Widerstand
auf Vcc). Mal schauen ob es dann geht!!
Ich vermute, dass der Arduino die Signale vom RF24 nicht sicher erkennt.
Die Ausgänge sind OK, da der nRF24L01 (ich habe noch ein + dahinter) an
den Eingängen 5V kompatibel ist. Wenn aber das Signal vom RF24 zum
Arduino nicht ganz 3,3 V ist, kann es sein, dass es nicht immer als "H"
erkannt wird.
Mit der \0 am Ende der Zeichenkette habe ich probiert.
Es geht auch nur nach einem RESET des Senders. Es kommt dann 2 x Hello
mit den zwei Zeichen dahinter. Dann tut sich nichts mehr.
haabe mal nachgerechnete: mit den dioden komme ich auf 3.4v am vcc des
chips. Ist das zu viel? falls ja, wie bekomme ich die 0.1v weg? mit
einem Widerstand? dann müsste ich aber die benötigte Stromstärke kennen,
was momentan nicht der Fall ist.
Ich denke, dass die Dioden OK sind.
Versuch mal die Versorgungsspannung des Prozessors etwas zu reduzieren.
Ich habe festgestellt, dass bei ca. 4 V die Kommunikation mit dem
nRF24L01+ besser ist. Allerdings solltest du nicht zu tief gehen, da
sonst die im Prozessor "eingebaute Sicherung" Brown out detection
ansprechen könnte. Das kannst du mit dem Testprogramm "Blink" testen.
Wenn es blinkt, ist alles OK. Du kannst natürlich die Brown out
detection auch aussschalten, dann kannst du auf 3,3 V runter gehen.
Das Programm habe ich mal etwas verändert, so funktioniert es:
Das sieht vielversprechend aus!Danke ich probiere es heute nachmittag
gleich aus!! Wieso läuft der Atemhauch normalerweise nicht auf 3.3 v?
laut Datenblatt sollte er sogar bis 1.9v laufen.
Habs jetzt ausprobiert! Leider noch immer keine Verbindung :(
Im Anhang sind Fotos der Platine(Sender). Vielleicht entdeckt da ja
jemand einen Fehler, den ich übersehen habe! Auf Empfängerseite habe ich
nur zwei 4-Pin Header auf ein Stuck Platine gelötet, und auf die andere
Seite zwei 4-Pin Stiftleisten. Das ganze stecke ich in ein Breadboard
und verkabel es dann mit dem Arduino.(Foto auch im Anhang)
Hallo!
Ich habe mir mal den UNO angesehen. Soweit ich erkennen kann, ist die
Verdrahtung OK.
Mit diesem UNO kannst du meinem Vorschlag nicht folgen, da er aufgelötet
ist. Ich habe DIL-Gehäuse auf Sockel.
Nun habe ich auch keine Idee mehr.
Man könnte den Sender mal auf den UNO spielen, dann ist etwas auf COMxx
zu sehen. Das sagt aber nicht viel aus. Ich habe gerade mal den RF24
getrennt und das Programm laufen lassen. Leider sieht die Ausgabe dann
genauso aus, wie wenn er angeschlossen ist. Schade!
Trotzdem danke für die Hilfe. Vielleicht bastle ich noch eine zweite
Platine, wenn es mit dem uno nicht geht. Falls ich das Problem löse,
poste ich die Lösung.
Was mir nicht so ganz gefällt, sind die zwei Dioden auf deiner
Lochrasterplatte, die den RF24 versorgen. Über 2 Dioden ensteht ein
Spannungsabfall von 1,4 V. Wenn du 5 V Versorgung hast, dann kommst du
auf 3,6 V. Ich weiß nicht, ob der Schaltkreis das verträgt. Das liegt
ca. 10 % über der angegeben Versorgungsspannung von 3,3 V. Ein
Spannungsregler wäre besser.
Wie ich sehe, hast du den ATmega aufgelötet. Somit kann er nur per ISP
programmiert werden. Versorgst du die Schaltung über den ISP? Welchen
ISP hast du? Sind die FUSE-Bits richtig? Kann der ISP-Programmer auch
3,3 V?
Da fällt mir ein, du hast doch 3,3 V. Aus deinem UNO kommen 3,3 V. Ich
weiß jetzt nicht, wie belastbar die sind, aber für einen ATmega wird es
wohl reichen. Die LED würde ich dann aus lassen.
Als isp nutze ich den Arduino. Die Schaltung wird mit 9V versorgt. 6
dioden vor dem atmega macht 4.2 v spannnungsabfall. 2 zusätzlich vor dem
funkchip führen zu 3.4v. Ich hoffe das stimmt so. Der atmega läuft
zumindest :)
In Wien. doch nicht um die ecke :)
Aber danke für den tipp. das füge ich in meinen code ein und mal sehen
ob es funktioniert! Die led werde ich auf einen anderen pin hängen und
dann als debug ausgabe nutzen.