Hallo,
ich möchte eine 2.4 Ghz Fernbedienung mit 8 Taster bauen. Hierzu wollte
ich einen Atmega 328P und einen NRF24L01+ verwenden. Das Ganze habe ich
in der Arduino IDE programmiert.
Um das ganze möglichst energiesparsam zu realisieren, läuft der Atmega
auf 8Mhz, deswegen auch kein externer Taktgeber.
Es läuft zukünftig mit zwei 1,5V Batterien. Aktuelle betreibe ich es mit
einem Labornetzteil auf 3,3V.
Der Prototyp auf dem Breadboard läuft ohne Auffälligkeiten. Also habe
ich ein PCB erstellt.
Aber auf dem PCB habe ich sehr viele Übertragungsfehler, fast
ausschließlich Übertragungsfehler.
Ich habe beide Varianten mit den gleichen Programmen und den gleichen
Abständen zum Kommunikationspartner getestet.
Zur Fehleranalyse habe ich ein einfaches Programm erstellt:
Dieses Lief auf dem Breadboard 17 Minuten ohne Fehler. Dann habe ich den
Test beendet. Auf dem PCB kam bei so gut wie jedem Sendeversuch ein
Fehler, sodass ich den Test nach einer Minute beendet habe.
Um fehlerhafte Komponenten ausschließen zu können, habe ich das
NRF24L01+ Modul und den Atmega vor dem Verlöten ausgiebig auf dem
Breadboard getestet.
Ich vermute den Fehler im SPI. Ich habe beim Routen nicht so sehr auf
möglichst gleiche Längen geachtet und auch nicht so sehr auf die
Führung, weil ich dachte, dass dies bei den paar Megahertz schon nicht
stören wird. Wie seht Ihr das?
Das Brennen des Bootloaders und aufspielen von Programmen, mit einem ISP
Programmer läuft auf dem PCB übrigens problemlos.
PCB Layout und Schaltplan sind im Anhang. Auf meinem einfachen
Oszilloskop konnte ich keine Auffälligkeiten am SPI sehen.
Auch das spielen mit dem SPI Takt (SPI_CLOCK_DIV64) brachte keine
Abhilfe.
Auf dem PCB ist ein kleiner Fehler, R1 ist mir 3,3V verbunden. R1 müsste
mit GND verbunden sein. Dies habe ich auf dem PCB mit einer Brücke
gelöst.
Als Stützkondensatoren verwende ich vor dem NRF24L01+ einen Elko 22µF
und einen Keramik 100nF. Ich habe es auf dem PCB auch ohne Kondensatoren
ausprobiert. Auf dem Breadboard habe ich keine Kondensatoren.
Was meint Ihr, sind es die ungünstig verlegten Leiterbahnen?
Es ist übrigend mein erstes Projekt mit Eagle, also seid bitte
nachsichtig ;)
Schonmal Danke und viele Grüße
Jonny H. schrieb:> Was meint Ihr, sind es die ungünstig verlegten Leiterbahnen?
Wer Mikrokontroller-Schaltungen ohne Abblock-Kondensatoren aufbaut,
nachmacht oder verfälscht, insbesondere bei existierenden
Schaltungen die Abblock-Kondensatoren weglässt oder falsch
verschaltet oder selbst solche Schaltungen entwirft, in Verkehr
bringt und/oder aufbaut ohne Abblock-Kondensatoren nach Hersteller-
Empfehlungen zu verwenden, wird mit Zugangs-Ausschluss vom
Mikrokontroller-Forum nicht unter zwei Jahren bestraft.
Wozu ist der 10M Widerstand an PC5?
Ist das eine gute Idee, Aref mit Vcc zu verbinden?
/CS des nRF darf ruhig einen Pullup bekommen, damit der dir beim ICSP
Vorgang nicht dazwischen quatscht
Guest schrieb:> Sehe ich das richtig, dass du eine GND Plane unter deinem Funkmodul> hast?>> Dann hast du vermutlich deinen Fehler gefunden.
Ja, das wars. Habe ich überhaupt nicht drüber nachgedacht...
Vielen Dank!
Arduino Fanboy D. schrieb:> Wozu ist der 10M Widerstand an PC5?
Den Wiederstand nutze ich zur Spannungsmessung
Arduino Fanboy D. schrieb:> Ist das eine gute Idee, Aref mit Vcc zu verbinden?
Ich dachte so bekomme ich die Referenzspannung für meine
Spannungsmessung. Sollte ich dies anders machen?
Jonny H. schrieb:> Den Wiederstand nutze ich zur Spannungsmessung
Widerstand!
Erstens:
10M ist viel zu groß.
Laut Datenblatt sollte die Eingangsimpedanz kleiner 10k sein.
Da liegst du 3 Zehnerpotenzen drüber.
Zweitens:
Dein ATMega benötigt eine externe Beschaltung um die Versorgungsspannung
zu messen. Aber dabei spuckt die überflüssige Aref Verbindung ins Essen.
Jonny H. schrieb:> Sollte ich dies anders machen?
Ja, so wie im Datenblatt aufgemalt.
Jonny H. schrieb:>> Wozu ist der 10M Widerstand an PC5?>> Den Wiederstand nutze ich zur Spannungsmessung
1. Lerne, Widerstand richtig zu schreiben.
2. Schaue ins Datenblatt oder andere Threads, 10 MegOhm ergeben einen
Lottozahlengenerator, aber keine Spannungsmessung.
>> Ist das eine gute Idee, Aref mit Vcc zu verbinden?> Ich dachte so bekomme ich die Referenzspannung für meine> Spannungsmessung. Sollte ich dies anders machen?
Schaue ins Datenblatt oder z.B. den Schaltplan vom Arduino_irgendwas,
Aref gehört nicht an Vcc, sondern mit einen Kondensator nach GND
beschaltet.
Avcc gibt die Refernzspannung vor, solange man nicht per Register die
interne Referenz des AT328 einschaltet.
Arduino Fanboy D. schrieb:> Dein ATMega benötigt eine externe Beschaltung um die Versorgungsspannung> zu messen.
Das soll natürlich heißen:
Dein ATMega benötigt keine externe Beschaltung um die
Versorgungsspannung
> zu messen.
Arduino Fanboy D. schrieb:> Erstens:> 10M ist viel zu groß.> Laut Datenblatt sollte die Eingangsimpedanz kleiner 10k sein.> Da liegst du 3 Zehnerpotenzen drüber.
Ich verstehe was du meinst. Jedoch funktioniert es mit den 10M gut und
drei Potenzen wirken sich ja doch leicht auf die haltbarkeit der
Batterien aus. Und würde ich große Stückzahlen erstellen, würde ich mich
auch an die Vorgaben halten.
Das mit AREF habe ich irgendwann wohl mal falsch abgekupfert.
Manfred schrieb:> Lerne, Widerstand richtig zu schreiben.
Oh nein, einmal ein "e" zu viel. Und es muss gleich wieder so eine
überflüssiger Kommentar kommen.
Vielen Dank für die Hilfe und die Tipps!
Jonny H. schrieb:> Jedoch funktioniert es mit den 10M gut
Uneinsichtig?
OK, von mir aus.
Aber wie schon gesagt, der ist völlig überflüssig.
Jonny H. schrieb:> und drei Potenzen wirken sich ja doch leicht auf die> haltbarkeit der Batterien aus.
Ja?
Das wirst du mir nicht begründen können.
Arduino Fanboy D. schrieb:> Ja?> Das wirst du mir nicht begründen können.
Die Schaltung zieht momemtan im Sleep 100uA. Bei einem 10k Widerstand
würde sie 430uA ziehen. Ich habe es allerdings nie mit einem 10k
aufgebaut, also ich weiß nicht ob da andere Effekte zum tragen kommen.
Wird die Verbindung vom uC "gekappt", oder worauf möchtest du hinaus?
Arduino Fanboy D. schrieb:> Aber wie schon gesagt, der ist völlig überflüssig.
Ich gucke mir an, wie man es ohne externe Beschaltung macht
Jonny H. schrieb:> Bei einem 10k Widerstand würde sie 430uA ziehen.
Das glaube ich dir nicht.
Der Widerstand wird ja nur bestromt, wenn der S&H Kondensator geladen
wird.
Und das tust du im Tiefschlaf nicht.
Ganz wichtig:
Deine Messung kann, wenn du Vcc misst, und Vcc als Referenz verwendest,
immer nur 1023 liefern.
Die Idee ist also schon im Ansatz broken.
Ein Irrtum im Design.
Arduino Fanboy D. schrieb:> Das glaube ich dir nicht.
Das meinte ich mit anderen Effekten. Aber dann weiß ich ja nun Bescheid.
Arduino Fanboy D. schrieb:> Deine Messung kann, wenn du Vcc misst, und Vcc als Referenz verwendest,> immer nur 1023 liefern.
Ja, stimmt. Auch da habe ich wohl nicht zu Ende gedacht.
Bei einem Versuch auf dem Breadboard hatte ich es noch ohne AREF
ausprobiert.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang