PC-Speaker an Arduino Mega geht nicht

OP #2645217
Lesenswert?
• ▲
▼
Hallo,

ich bin neu hier, daher erstmal Hallo in die Runde!

Also mein Problem ist folgendes: ich habe einen PC Speaker an einem 
Arduino Mega 2560 angeschlossen und er macht keinen Pieps.

Konkret sieht es so aus: Ich habe mir einen Controller für mein 
Terrarium gebaut, gesteuert von dem erwähnten Arduino Mega mit 
Relaisboard, Sensoren, Schaltern etc. Und dem PC-Speaker für Warntöne. 
Ich habe für jede einzelne Funktion einen Unittest geschrieben (ein 
kleiner Sketch, der NUR die Einzelfunktion testet). Der Unittest für den 
PC-Speaker funktioniert wunderprächtig, er spielt eine kurze Melodie ab.

Aber mit dem kompletten Produktions-Sketch macht der Speaker keinen 
Mucks. Ich habe schon versucht, den auf eine andere PIN zu stecken 
(vorher 23, jetzt 17), aber das bringt nix. Ich bin echt ratlos und 
könnte gut Hilfe brauchen.

Der komplette Code ist bei Github einsehbar: 
https://github.com/TLINDEN/TerraDuino.

Der Produktionssketch ist hier: 
https://github.com/TLINDEN/TerraDuino/blob/master/Terraduino/Terraduino.ino

Dazugehörige Libraries: 
https://github.com/TLINDEN/TerraDuino/tree/master/libraries

und der funktionierende Unittest ist hier: 
https://github.com/TLINDEN/TerraDuino/blob/master/unittests/UnitTestSpeaker/UnitTestSpeaker.ino

Schaltplan meiner Platine (der Widerstand am PC-Speaker fehlt in dem 
Plan, der ist aber eingebaut!): 
https://github.com/TLINDEN/TerraDuino/blob/master/Images/terraduino-img.png

und Erklärung dazu: 
https://github.com/TLINDEN/TerraDuino/blob/master/Schaltplan.txt.

Ich weiss, das ist vielleicht alles ein wenig umfangreich, sorry. Aber 
eventuell hat ja jemand schonmal ein ähnliches Problem gehabt und kann 
mir weiterhelfen.

Ansonsten noch zum Produktionssketch: der funktioniert vollständig, NUR 
der Speaker geht nicht.



besten Gruss,
Tom

PS: ich möchte auch noch erwähnen, dass das mein erstes 
Elektronikprojekt ist, ich bis dato noch nie mit sowas zu tun hatte und 
auch eigentlich kein C/C++ Programmierer, sondern eher der Perl/Python 
Mensch bin. Falls sich da jemand über sicherlich kritisierbare 
Konstrukte in meinem Code wundern sollte :)
Gast #2645827
Lesenswert?
• ▲
▼
Tom L. schrieb:
> Hallo,
>
> ich bin neu hier, daher erstmal Hallo in die Runde!
>
> Also mein Problem ist folgendes: ich habe einen PC Speaker an einem
> Arduino Mega 2560 angeschlossen und er macht keinen Pieps.
>
> Konkret sieht es so aus: Ich habe mir einen Controller für mein
> Terrarium gebaut, gesteuert von dem erwähnten Arduino Mega mit
> Relaisboard, Sensoren, Schaltern etc. Und dem PC-Speaker für Warntöne.
> Ich habe für jede einzelne Funktion einen Unittest geschrieben (ein
> kleiner Sketch, der NUR die Einzelfunktion testet). Der Unittest für den
> PC-Speaker funktioniert wunderprächtig, er spielt eine kurze Melodie ab.

Schonmal gut.

> Aber mit dem kompletten Produktions-Sketch macht der Speaker keinen
> Mucks.

Logischerweise macht das fertige Programm dann etwas anders als der 
Test.

Entweder hast Du (oder eine der benutzten Libs) den Timer 
umkonfiguriert.

Oder der Ton ist zu kurz um ihn hoeren zu koennen. Im fertigen Programm 
scheint mir der nur 4 ms lang zu sein (entgegen min. 125 ms im Test) - 
also das halte ich ja für etwas überoptimistisch, sind das überhaupt 
zwei volle Schwingungen?... ;-)
OP #2646142
Lesenswert?
• ▲
▼
In der Tat sind 4ms arg kurz :)

Also ich habs mal erhöht aber das bringt auch nix. Ich hab mal diese 
Funktion hier aufgerufen:
1
void beep() {
2
  Serial << "beep start: " << millis() << endl;
3
  tone(speaker, NOTE_C4, 10000);
4
  noTone(speaker);
5
  Serial << "beep stop: " << millis() << endl;
6
}

Der sollte eigentlich für 10 Sekunden piepen. Aber die Ausgabe sieht so 
aus:
1
beep start: 1863
2
beep stop: 1864

Der hält sich in tone() also nur 1ms auf. Da muss also was anderes faul 
sein.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.