Forum: Mikrocontroller und Digitale Elektronik ATMEGA8 als Klangerzeuger


von Dennis G. (dennis9819)


Angehängte Dateien:

Lesenswert?

Guten Abend zusammen,
ich habe vor einen digitalen step sequenzer zu bauen und suche jetzt 
einen einfachen weg Klänge zu erzeugen. Mein Zeil ist es eine art VCO zu 
bauen mit dem ich verschiedene Arten von Schwingungen erzeugen kann ( 
Rechteck , Sägezahn , Sinus ). Meine Idee wäre ein ATMEGA8 so zu 
programmieren , dass man mittels 2 Potis die Frequenz grob und fein 
einstellen kann und mittels eines Schalters zwischen den 
Schwingungsarten wechseln kann. (siehe bild1). Das Problem ist, dass ich 
nicht weiß wie ich aus dem PWM signal ein analoges Signal mache. Ist das 
überhaupt möglich ?

LG. Dennis

: Bearbeitet durch User
von M. Н. (Gast)


Lesenswert?

Hallo.

Ich vermute mal, dass das was du suchst ein einfacher Tiefpass ist:

http://www.instructables.com/id/Analog-Output-Convert-PWM-to-Voltage/?lang=de

von Dennis G. (dennis9819)


Lesenswert?

Wie programmiere ich das den am besten? Kann ich das dann ganz einfach 
mit pwm machen also 255 -> 5V 0 -> 0V ?
Ich hab auch noch zwei TDA1534A. Kann ich die verwenden und wenn ja wie 
steuer ich die am besten mit der Arduino IDE an ? Ich habe es schon mal 
versucht aber nicht hinbekommen. Gibt es dazu eine Library? Lohnt sich 
der Aufwand oder ist der Tiefpass einfacher ?

von Peter R. (pnu)


Lesenswert?

Der übliche Weg, aus PWM einen Zeitverlauf wie Sinus, Sägezahn oder ... 
zu machen besteht aus einem Tiefpass, also kein Problem. Der trennt 
Nutzsignal von der  Frequenz der Taktimpulse.

Wenn man aber hohe Ansprüche stellt braucht man einen möglichst hohen 
Abstand zwischen Taktfrequenz des PWM-Taktes und der Nutzfrequenz, um 
aus der PWM ein sauberes Nutzsignal herauszutrennen. PWM ist daher eher 
für langsamere Signale als Tonsignale geeignet (z.B. im Hz-Bereich 
variable Spannungen.)

Mit einem atmega8 dürfte man einige hundert Hz gut hinbekommen, aber das 
hängt von den Ansprüchen an die Kurvengenauigkeit ab.

Besserer Weg zur Erzeugung tonfrequenter Signalse dürfte das 
DDS-Verfahren sein. (Dazu gibts hier einige elend lange threads, wie man 
das mit einem atmega macht)

von Dennis G. (dennis9819)


Lesenswert?

Wie sieht es mit höheren frequenzen also im kHz aus ? also bis ca. 5kHz.

von Paul B. (paul_baumann)


Lesenswert?

So einfach wird das nicht werden, denn Du mußt Dir ein sog. R2R- 
Netzwerk
an einen ganzen Port bauen, um wenigstens ein ganzes Byte parallel
ausgeben zu können, damit es genügend Stützstellen gibt.
Damit kannst Du dann 256 verschiedene Werte ausgeben, so daß die ent-
stehende Spannung nach dem Netzwerk auch in 256 "Stufen" oder besser
gesagt "Stüfchen" erscheint. Das macht das Signal dann von Natur aus
schön rund, so daß Du nicht mehr soviel Aufwand für die Filterung
brauchst als sonst.

Wenn Du nun im Kontroller Tabellen ablegst, deren Werte nacheinander
auf den Port ausgegeben werden, dann kannst Du mit dem Inhalt der 
Tabelle
bestimmen, ob Sinüsse, Sägezähne, Dreiecke oder völlig abartige Kurven-
formen erzeugt werden sollen.

MfG Paul

: Bearbeitet durch User
von Dennis G. (dennis9819)


Lesenswert?

oder mal eine andere frage : kann ich mit einen atmega2560 8 komplett 
voneinander unabhängige frequenzen erzeugen? z.b. auf einen pwm 200hz 
sinus , auf dem 2. 400hz rechteck , ... ?

von Dennis G. (dennis9819)


Lesenswert?

okay danke für den tipp.

von Karsten W. (lsmod)


Lesenswert?

Für höhere Anforderungen an die Qualität würde ich dann doch besser 
einen zusätzlichen DA-Wandler verwenden.
Z.B. MCP3202 oder MCP4802
Oder vielleicht direkt einen ATXMega nehmen der schon DA-Wandler 
integriert hat.

von der alte Hanns (Gast)


Lesenswert?

Als Einstieg vielleicht mal Elm Chans 'Wavetable Melody Generator' 
anschauen.

von klaus (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.