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:
1 | #include <SPI.h>
|
2 | #include <nRF24L01.h>
|
3 | #include <RF24.h>
|
4 |
|
5 | RF24 radio(7, 8); // CE, CSN
|
6 | const byte address[6] = "abcde";
|
7 | unsigned long Uebertragungsfehler = 0;
|
8 |
|
9 | void setup()
|
10 | {
|
11 | Serial.begin(115200);
|
12 |
|
13 | //SPI.beginTransaction(SPI_CLOCK_DIV128);
|
14 | SPI.setClockDivider(SPI_CLOCK_DIV64);
|
15 | radio.begin();
|
16 | radio.openWritingPipe(address);
|
17 | radio.stopListening();
|
18 | delay(10);
|
19 | }
|
20 |
|
21 | void loop()
|
22 | {
|
23 | unsigned long zuUebertrageneVariable = 1;
|
24 |
|
25 | if (!radio.write(&zuUebertrageneVariable, sizeof(unsigned long))) Uebertragungsfehler ++;
|
26 | Serial.print(millis());
|
27 | Serial.print(": ");
|
28 | Serial.println(Uebertragungsfehler);
|
29 | delay(100);
|
30 | }
|
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