Mehrere Töne gleichzeitig an verschiedenen PINS

Hallo zusammen,

ich habe da mal eine Frage bezüglich Tönen am Arduino. Mit dem tone() Befehl kann ich ja nur einen Ton an einem Pin abspielen, beziehungsweise nacheinander verschieden Töne an verschiedenen Pins abspielen. Ich müsste aber zwei verschiedene Töna an zwei verschiedenen Pins abspielen. Wenn ich das selbst mache mit dem micros() Befehl, wird die Auflösung zu ungenau, da ich nur mit 8MHz takte, und gerne schon wenigstens einzelne Hz unterscheiden würde. Ein halbes Hz hin oder her ist mir Wurscht, aber micros() hat ja nur eine Auflösung von 8Microsekunden, und in dem Bereich wo ich gerne Töne erzeugen würde unterscheiden sich die einzelnen Frequenzen teilweise nur um 6Microsekunden. Die Tone Library scheint mir etwas angestaubt, und bringt gleich mal eine Fehlermeldung da Abhänigkeiten zu fehlen scheinen (wiring.h fehlt). Lohnt es sich diesem Fehler nachzugehen, oder hat jemand eine Idee, wie man das möglichst einfach und resourcenschonend fertig bekommen kann zwei unterschiedliche Töne auf zwei Pins abzuspielen? Einer der Pins muss grundsätzlich 440Hz bringen, und der andere bekommt einen Offset zwischen einem und 30Hz mehr. Any ideas?

Danke,

Sven

sven222:
Die Tone Library scheint mir etwas angestaubt, und bringt gleich mal eine Fehlermeldung da Abhänigkeiten zu fehlen scheinen (wiring.h fehlt). Lohnt es sich diesem Fehler nachzugehen, oder hat jemand eine Idee, wie man das möglichst einfach und resourcenschonend fertig bekommen kann zwei unterschiedliche Töne auf zwei Pins abzuspielen?

Datei Tone.cpp

// #include <wiring.h>
// #include <pins_arduino.h>
#include <arduino.h>

Stimmt, die arduino core Tone library ist recht einfach.

Schau statt dessen mal hier:
http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation
Auf dem Uno mit 3 Timern solltest du leicht 2 Töne parallel hinkriegen.

Hai,

meine Herangehensweise wäre: Den 440 Hz-Ton über den 8-Bit-Timer, das passt ziemlich genau und die abweichenden Frequenzen über den 16-Bit-Timer erzeugen, das passt auch gut.

Zu dieser ToneLibraryDocumentation, in der oben steht man könne einen Piezo-Wandler oder Lautsprecher anschließen, muss ich sagen, wenn da jemand nicht bis unten liest, kann aber auch ganz schnell mal ein neuer Arduino fällig sein.

Gruß,
Ralf

[Edit:] Also nur, damit es ganz klar wird: Bitte keinen Lautsprecher direkt an einen Arduino-Pin anschließen! Das überlebt der Arduino warscheinlich nicht! Wenn schon Lautsprecher, dann in Serie mit einem (z.B. 1kOhm) Widerstand - aber lieber einen kleinen Piezo-Schallwandler nehmen.

Danke für die Tipps! Werde mal versuchen mit der ToneLibrary und den Anpassungen im include Bereich. Dann muss ich nur noch herausfinden welchen Timer sie wie verwendet, dass ich dann 8bit und 16bit richtig zuweise. Auch der Tipp mit dem Widerstand ist gut, wenn ich das auch schon selbst heraus gefunden habe. Leicht ist da ein Arduino hinüber. Bei mir muss ein Stereo Kopfhörer dran, und ich dachte pro Kanal an einen 10kOhm Poti, dann kann ich die Lautstärke regeln. Da ich keinen Audiopoti mit zwei Kanälen da habe frage ich mich (oder besser Euch) ob man da auch einen Richtung Ground einbauen könnte? Das wäre komfortabler.

Danke an alle!

Sven

sven222:
Bei mir muss ein Stereo Kopfhörer dran, und ich dachte pro Kanal an einen 10kOhm Poti, dann kann ich die Lautstärke regeln. Da ich keinen Audiopoti mit zwei Kanälen da habe frage ich mich (oder besser Euch) ob man da auch einen Richtung Ground einbauen könnte? Das wäre komfortabler.

Nein, wenn ich das was Du möchtest richtig verstehe, brauchst Du ein Stereopoti - also zwei Kanäle. Aber auch die nur jeder Kanal in Serienschaltung mit je einem Widerstand.

Gruß,
Ralf

Danke Ralf,

Stereopoti wird bestellt. Ist das sauberste, und wenn ich einen mit Schalter nehme, habe ich gleich einen Ein/Aus Schalter für das Projekt. Die Frage ist, warum geht das nicht in der Groundleitung. Einfache Tipps in welche Richtung ich da eine Suchmaschine füttern soll reichen, aber ich verstehe nicht im Ansatz, warum das nicht geht. Was würdest Du empfehlen als Vorwiderstände, und was als Poti, also wieviel Ohm jeweils.

Danke schonmal,

Sven

Ich habe mit vor “Urzeiten” für solche Zwecke mal einen kleinen Verstärker gebaut (Bild hängt unten). Ich würde empfehlen, bastel Dir auch sowas oder nimm einen Piezo-Schallwandler.

Bei meinem Verstärker bin ich grob nach dieser Anleitung http://www.troeszter.net/Download/Audio/LM386-KHV.pdf vorgegangen. Wenn Du Dir das mal durchliest erfährst Du schon so einiges - auch ein wenig über Potentiometer. Die Anleitung ist für einen Mono-Verstärker. Wenn Du wirklich Stereo willst, musst Du das im Prizip zweimal (als zwei Kanäle) aufbauen.

Ansonsten kannst du ja mal nach “Lautsprecher Potentiometer” googlen.

Gruß,
Ralf

sven222:
Die Frage ist, warum geht das nicht in der Groundleitung. Einfache Tipps in welche Richtung ich da eine Suchmaschine füttern soll reichen, aber ich verstehe nicht im Ansatz, warum das nicht geht.

Tatsache ist, das es mit einem einfachen Kopfhörer geht, wenn Du den regelbaren Widerstand (Du benutzt das Poti in diesem Fall nicht als Potentiometer, sondern als regelbaren Widerstand) in die GND-Leitung einschleifst. Wenn Du dann aber auf die Idee kommst einen Verstärker zu benutzen, kann die Endstufe Schaden nehmen. Dann muss das Potentiometer nämlich wirklich als Potentiometer geschaltet werden, der Widerstand aus Sicht des Verstärkers muss gleich bleiben und nur der Anteil des Tonsignals am Gesamtstrom variiert. Wenn Du das Poti da als Widerstand schaltest, versucht die Endstufe des Verstärkers dem größeren Widerstand entgegen zu arbeiten und überlastet irgendwann. Wenn Du das Poti wirklich als Poti schaltest, funktioniert das nicht in der GND-Leitung, die brauchst Du sowieso.

Aber ich bin nur Hobby-Elektroniker und habe mir hier und da etwas Wissen angeeignet, eigentlich immer auf den Gebieten besonders, die mich gerade interessiert haben. Und mit Verstärkertechnik habe ich mich bisher kaum befasst. Vielleicht kann deshalb ein Kollege hier aus dem Forum, der von dieser Art Materie mehr Ahnung hat als ich, beispringen und das besser erklären. Oder mich auch bestätigen, falls das oben geschriebene grundsätzlich richtig ist.

sven222:
Was würdest Du empfehlen als Vorwiderstände, und was als Poti, also wieviel Ohm jeweils.

Dem Arduino würde ich durchaus einen Widerstand von minimal 250 Ohm zutrauen, ohne das er kaputt geht - Rechnung 5V, 20mA Strom, Ohmsches Gesetz = 250 Ohm. Das würden aber meine Ohren nicht mitmachen! Probiert habe ich mal mit einem einfachen Kopfhörer, Frequenz 500Hz (weil die so schön leicht zu programmieren ist :D) und einem Widerstand von 470 Ohm. Das reicht mir noch nicht, um den Kopfhörer aufzusetzen, da würde ich Kopfschmerzen bekommen. Also ich denke 1kOhm wären als Widerstand ok. Mit einem 10k-Poti konnte ich dann den Ton komplett wegregeln. Das gibt einen Strom von rund 0,45mA und damit hat mein Kopfhörer keinen Mucks mehr gemacht. Ich kenne Deinen Kopfhörer nicht, aber ich denke, mit diesen beiden Werten könntest du mal experimentieren. Also 1k-Widerstand und 10k-Poti. Und denk daran, wir hören nicht linear, sondern logarithmisch. Deshalb kann es sinnvoll sein, ein logarithmisches Poti zu nehmen. Ich hatte aber keines mit 10k hier, konnte das also nicht testen.

Gruß,
Ralf

Danke Ralf für die beiden Beiträge. Für das jetztige Projekt werde ich erstmal versuchen ob es mit dem Poti (als Widerstand, war auch von mir so angedacht) geht. Da ich mich bauend auf ein Ziel zu bewege, gerade baue ich Brainmachine V0.3, V0.4 wird folgen, werde ich den Verstärker auch mal betrachten, da muss ich aber noch viel recherchieren, da ich gerade noch vermute, dass das Eingangssignal vom Arduino an Verstärker ja auch noch irgendwie reduziert werden muss, also mit Widerständen auf ein erträgliches Maß gebracht werden muss. Ich werde jetzt einfach mal verschiedene Tests mit Breadboard und dem Widerstandsortiment aus der Bastelkiste unternehmen und dann entscheiden was in die Version 0.3 eingebaut wird.

Grüße,

Sven

sven222:
Für das jetztige Projekt werde ich erstmal versuchen ob es mit dem Poti (als Widerstand, war auch von mir so angedacht) geht.

Hallo,

ja, aber nicht vergessen, dass unbedingt noch ein Widerstand in Reihe zum Poti dazu muss. Sonst ist entweder der Arduino, DeinTrommelfell oder beides hin, wenn Du zu weit aufdrehst. Ich denke die Werte aus meinem vorigen Post sind zum experimentieren schon mal ein guter Ausgangspunkt.

Gruß,
Ralf

Da man ja durch Schaden klug wird, hätte ich jetzt tatsächlich mit Deinen Werten angefangen, und zwar mit dem 1kOhm beginnend. Ich habe schon das eine oder ander Teil leider zerstört, neulich erst wieder 5 LEDs, weil ich und der Arbeistplatz nicht geerdet war. Durch solche Vorfälle werde ich immer vorsichtiger, und fange grundsätzlich mit vorsichtigen Werten an. Und meine Ohren werden grundsätzlich nur auf Konzerten belasted, ansosnten bin ich da sehr empfindlich.

Noch eine kurze Anmerkung, ich habe jetzt Zeitg gefunden, und angefangen mit der Tonelibrary zu spielen. Da ist mir aufgefallen, dass der oben gepostete Code einen kleinen Fehler enthält. Dort ist arduino.h klein geschrieben, es muss heißen:

// #include <wiring.h>
// #include <pins_arduino.h>
#include <Arduino.h>

Nur, falls jemand das liest, und sich wundert warum es nicht geht.
Grüße,

Sven