Probleme mit Treiber, Upload und anschließend Knattern

Hi,

ich habe meine erste Platine zusammengelötet und wollte nun die Firmware aufspielen und testen, ob alles läuft. Die ersten Fehler traten beim Installieren des Treibers und beim Upload der Datei Tonuino.ino auf. Anschließend habe ich getestet, ob es vielleicht trotzdem funktioniert und aus meiner Box kam lediglich ein Maschinengewehrknattern.

Zunächst einmal ein Foto meiner Platine von oben und unten:


Aktuell verhält es sich so, dass aus dem Lautsprecher ein schnelles Knattern kommt, sobald ich das zweite Weise Kabel in die zugehörige Buchse des Lautsprechers stecke. Sonst passiert nichts.

Was habe ich getan und welche Fehlermeldungen kamen auf dem Weg dorthin:

Ich nutze Ubuntu und habe als Erstes versucht den Treiber zu installieren. Dabei trat folgende Fehlermeldung auf:

jojo@jojo-HP-EliteBook:~/Tonuino/CH341SER_LINUX$ sudo make
[sudo] Passwort für jojo: 
make -C /lib/modules/5.4.0-48-generic/build  M=/home/jojo/Tonuino/CH341SER_LINUX  
make[1]: Verzeichnis „/usr/src/linux-headers-5.4.0-48-generic“ wird betreten
  CC [M]  /home/jojo/Tonuino/CH341SER_LINUX/ch34x.o
/home/jojo/Tonuino/CH341SER_LINUX/ch34x.c: In function ‘ch34x_close’:
/home/jojo/Tonuino/CH341SER_LINUX/ch34x.c:591:2: error: unknown type name ‘wait_queue_t’; did you mean ‘wait_event’?
  wait_queue_t wait;
  ^~~~~~~~~~~~
  wait_event
/home/jojo/Tonuino/CH341SER_LINUX/ch34x.c:591:15: warning: unused variable ‘wait’ [-Wunused-variable]
  wait_queue_t wait;
               ^~~~
/home/jojo/Tonuino/CH341SER_LINUX/ch34x.c:590:7: warning: unused variable ‘timeout’ [-Wunused-variable]
  long timeout;
       ^~~~~~~
/home/jojo/Tonuino/CH341SER_LINUX/ch34x.c:589:6: warning: unused variable ‘bps’ [-Wunused-variable]
  int bps;
      ^~~
/home/jojo/Tonuino/CH341SER_LINUX/ch34x.c: In function ‘wait_modem_info’:
/home/jojo/Tonuino/CH341SER_LINUX/ch34x.c:797:7: error: implicit declaration of function ‘signal_pending’; did you mean ‘timer_pending’? [-Werror=implicit-function-declaration]
   if( signal_pending(current) )
       ^~~~~~~~~~~~~~
       timer_pending
cc1: some warnings being treated as errors
scripts/Makefile.build:273: recipe for target '/home/jojo/Tonuino/CH341SER_LINUX/ch34x.o' failed
make[2]: *** [/home/jojo/Tonuino/CH341SER_LINUX/ch34x.o] Error 1
Makefile:1734: recipe for target '/home/jojo/Tonuino/CH341SER_LINUX' failed
make[1]: *** [/home/jojo/Tonuino/CH341SER_LINUX] Error 2
make[1]: Verzeichnis „/usr/src/linux-headers-5.4.0-48-generic“ wird verlassen
Makefile:5: recipe for target 'default' failed
make: *** [default] Error 2

jojo@jojo-HP-EliteBook:~/Tonuino/CH341SER_LINUX$ sudo make load
modprobe usbserial
insmod ch34x.ko
insmod: ERROR: could not load module ch34x.ko: No such file or directory
Makefile:9: recipe for target 'load' failed
make: *** [load] Error 1

Hat also nicht funktioniert. Ich habe anschließend auch versucht den Treiber unter Windows 10 zu installieren, aber das hat auch nicht geklappt. Dort habe ich die Setup.exe gestartet, auf installieren geklickt, und dann kam eine wenig sagende Fehlermeldung ala „Hat nicht funktioniert“.

Anschließend habe ich trotzdem unter Ubuntu die Arduino IDE heruntergeladen und versucht die Datei Tonuino.ino auf den Arduino Nano zu bekommen. Beim Hochladen kamen zuerst viele Warnung und abschließend kam die Fehlermeldung „avrdude: ser_open(): can’t open device „/dev/ttyUSB0“: Permission denied“. Ich bin ziemlich sicher, dass dev/ttyUSB0 der Arduino ist, weil der Eintrag beim Abstecken verschwindet und beim Einstecken des USB-Kabels wieder auftaucht. Ich vermute daher, dass das Öffnen fehlschlägt weil der Treiber fehlt oder weil irgendwelche Rechte fehlen.

Die komplette Konsolenausgabe während des Uploads sah so aus:

Arduino: 1.8.13 (Linux), Board: "Arduino Nano, ATmega328P (Old Bootloader)"

/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino: In function 'void setup()':
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:758:27: warning: invalid conversion from 'int' to 'DfMp3_Eq' [-fpermissive]
   mp3.setEq(mySettings.eq - 1);
             ~~~~~~~~~~~~~~^~~
In file included from /home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:1:0:
/home/jojo/Arduino/libraries/DFPlayer_Mini_Mp3_by_Makuna/src/DFMiniMp3.h:251:10: note:   initializing argument 1 of 'void DFMiniMp3<T_SERIAL_METHOD, T_NOTIFICATION_METHOD>::setEq(DfMp3_Eq) [with T_SERIAL_METHOD = SoftwareSerial; T_NOTIFICATION_METHOD = Mp3Notify]'
     void setEq(DfMp3_Eq eq)
          ^~~~~
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino: In function 'void adminMenu(bool)':
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:1117:37: warning: default argument given for parameter 1 of 'void adminMenu(bool)' [-fpermissive]
 void adminMenu(bool fromCard = false) {
                                     ^
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:80:6: note: previous specification in 'void adminMenu(bool)' here
 void adminMenu(bool fromCard = false);
      ^~~~~~~~~
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino: In function 'void adminMenu(bool)':
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:1192:29: warning: invalid conversion from 'int' to 'DfMp3_Eq' [-fpermissive]
     mp3.setEq(mySettings.eq - 1);
               ~~~~~~~~~~~~~~^~~
In file included from /home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:1:0:
/home/jojo/Arduino/libraries/DFPlayer_Mini_Mp3_by_Makuna/src/DFMiniMp3.h:251:10: note:   initializing argument 1 of 'void DFMiniMp3<T_SERIAL_METHOD, T_NOTIFICATION_METHOD>::setEq(DfMp3_Eq) [with T_SERIAL_METHOD = SoftwareSerial; T_NOTIFICATION_METHOD = Mp3Notify]'
     void setEq(DfMp3_Eq eq)
          ^~~~~
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:1318:22: warning: invalid conversion from 'int8_t* {aka signed char*}' to 'uint8_t* {aka unsigned char*}' [-fpermissive]
       if (askCode(pin)) {
                      ^
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:1332:6: note:   initializing argument 1 of 'bool askCode(uint8_t*)'
 bool askCode(uint8_t *code) {
      ^~~~~~~
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino: In function 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)':
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:1349:120: warning: default argument given for parameter 4 of 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' [-fpermissive]
                   bool preview = false, int previewFromFolder = 0, int defaultValue = 0, bool exitWithLongPress = false) {
                                                                                                                        ^
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:74:9: note: previous specification in 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' here
 uint8_t voiceMenu(int numberOfOptions, int startMessage, int messageOffset,
         ^~~~~~~~~
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:1349:120: warning: default argument given for parameter 5 of 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' [-fpermissive]
                   bool preview = false, int previewFromFolder = 0, int defaultValue = 0, bool exitWithLongPress = false) {
                                                                                                                        ^
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:74:9: note: previous specification in 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' here
 uint8_t voiceMenu(int numberOfOptions, int startMessage, int messageOffset,
         ^~~~~~~~~
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:1349:120: warning: default argument given for parameter 6 of 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' [-fpermissive]
                   bool preview = false, int previewFromFolder = 0, int defaultValue = 0, bool exitWithLongPress = false) {
                                                                                                                        ^
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:74:9: note: previous specification in 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' here
 uint8_t voiceMenu(int numberOfOptions, int startMessage, int messageOffset,
         ^~~~~~~~~
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:1349:120: warning: default argument given for parameter 7 of 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' [-fpermissive]
                   bool preview = false, int previewFromFolder = 0, int defaultValue = 0, bool exitWithLongPress = false) {
                                                                                                                        ^
/home/jojo/Tonuino/TonUINO-DEV/Tonuino/Tonuino.ino:74:9: note: previous specification in 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' here
 uint8_t voiceMenu(int numberOfOptions, int startMessage, int messageOffset,
         ^~~~~~~~~
Der Sketch verwendet 24668 Bytes (80%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 1005 Bytes (49%) des dynamischen Speichers, 1043 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
Beim Hochladen des Sketches ist ein Fehler aufgetreten
avrdude: ser_open(): can't open device "/dev/ttyUSB0": Permission denied


Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Obwohl so ziemlich alles fehlgeschlagen ist, habe ich ausprobiert, was passiert, wenn ich die Platine an die Box anschließe. Schließe ich die Box an, kommt aus ihr ein schnelles Knattern wie aus einem kleinen Maschinengewehr: Tock, tock, tock, tock, … Ich vermute, dass das ein Standartgeräusch ist, wenn der DFPlayer nicht weis, was er tun soll.

Ach ja, die SD-Karte habe ich über Thorsten Affilate-Link gekauft und jungfräulich mit den Ordnern mp3 und arcade bestückt, sowie mit einem Ordner 01 im dem eine Datei names 001.mp3 liegt. Das Format habe ich kontrolliert und das sollte mit FAT32 ja passen.

Ich habe in anderen Forensträngen gelesen, dass ein Kattern auftreten kann, wenn der Arduino zu viel Strom zieht. Laut meinem USB-Stromgerät zieht der Arduino aber konstant 5V mit ca. 0,3A bis 0,5A. Sollte also eigentlich passen.

Könnt ihr mir einen Tip geben, wie ich am effektivsten das Problem angehen und hoffentlich auch lösen kann?

Liebe Grüße
Jojo

Hört sich schwer nach Spannungsversorgung an. Das Geräusch kommt immer, wenn die Spannungsversorgung schnell an und aus geht (Wackelkontakt zum Beispiel).

Ich würde dir mal Empfehlen, deine Lötstellen nachzuarbeiten. Da sehen einige nicht so gut aus


Die rot markierten sind die Spannungsversorgungspins. Bitte nochmals genau prüfen, am Besten mal messen.
Aber bitte alle Lötstellen nochmals nacharbeiten. Einige haben zu wenig Zinn, andere zu viel.

Nein.

siehe mal hier:

Kann auch sein, dass der USB-Anschluss des Arduinos ein Problem hat…

Wenn das dann passt, sodass keine Geräusche mehr kommen, dann kümmern wir uns um die anderen Probleme (ich vermute aber, dass dann alles soweit läuft).

So, ich habe jetzt mal alle Lötstellen mit einem Freund an der Uni an einer hochwertigen Lötstation nachbearbeitet. Ich denke das sollte jetzt passen. Das Ganze sieht so aus:

Allerdings knattert der DFPlayer immer noch - und ja es klingt so wie in dem Beitrag den du verlinkt hast, @Manuel

Ich habe mir den DFPlayer selber nochmal angeschaut und dabei festgestellt, dass da zwei Pins mit Lötzinn kurzgeschlossen sind. Ist das richtig so? Ich vermute ja fast nicht:

Es handelt sich um die beiden rot eingekreisten Pins auf dem Foto. Kann das der Fehler sein?
Der untere Pin (bzw. der rechte auf dem zweiten Foto) berührt auch das Gehäuse der SD-Karte … weis nicht ob das ebenfalls ein Problem ist.

Liebe Grüße
Jojo

Sieht sehr gut aus. :+1:

Gut möglich. Es handelt sich bei den Pins um GND und SPK1. Somit wäre der Lautsprecher direkt mit Masse verbunden und das ist nicht im Sinne des Erfinders.

Nein, das ist der Masse (GND) Pin. Ist gewollt.

Vielen Dank für das Feadback beim zusammenbauen. Der Kurzschluss auf dem DFPlayer war tatsächlich das Problem. Jetzt funktioniert es :slight_smile:!

Manchmal tritt für so 5 Sekunden ein unschönes Knattern auf, wie es ja auch schon andere beschrieben haben, das verschwindet dann aber von selber wieder. Solange es nicht schlimmer wird, lasse ich es aber erstmal so.

Zur Firmware: Ich konnte sie tatsächlich nicht direkt aufspielen, weil das unter Ubuntu standartmäßig verboten ist. Ich habe es so gemacht, wie es auf dieser Webseite beschrieben wird. Danach lief es. Es wäre wahrscheinlich sinnvoll, diese Info zur Software-FAQ hinzuzufügen, oder?

Lg Jojo