Forum: Mikrocontroller und Digitale Elektronik Signalerzeugung-Synthesizer


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Florian T. (loeas)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe vor eine Art Synthesizer zu machen.

Ziel:
verschiedene Frequenzen( -max 3kHz)
verschiedene Signale (Sinus,Rechteck, Dreieck, Sägezahn)
Obertöne (Sinus + 1 Oberwelle + 2 Oberwelle)
Das alles mit einem 16-Bit-µC. (Atmega16)


Ich stell es mir ca so vor wie im Bild.(Falls der µC nicht ausreicht, 
ein Signal an den DDS (siehe Bild2))
Die Eingabe (Tasten für Frequenz) kommen jeweils an einen Port. Daraus 
wird dann eine Frequenz bestimmt und der Sinus (oder Sonstiges) mit der 
jeweiligen Frequenz erzeugt. Dieses Signal wird dann auf einen 
D/A-Wandler geschickt.

Nun die Frage wie soll man das am besten programmieren.

: Verschoben durch User
von spess53 (Gast)


Lesenswert?

Hi

>Das alles mit einem 16-Bit-µC. (Atmega16)

Dann ist wohl ein ATMega128 ein 128-Bit-µC?

MfG Spess

von ul5255 (Gast)


Lesenswert?


von Florian T. (loeas)


Lesenswert?

Sry vertippt 8Bit
Btw. Ich bin kein Profi

von Onkel Paul (Gast)


Lesenswert?

Dafür gibt es DSP.
Hab den ADAU1701, der wird "graphisch" mit SIGMA STUDIO programmiert und 
kann auch Wellenformen erzeugen und verarbeiten.

Mit einem AVR und ohne die Materie zu kennen, wird das sicher nicht so 
schnell zu lösen sein.

von Jonas B. (jibi)


Lesenswert?

>Hab den ADAU1701

Den zum Laufen zu kriegen + Programmierung ist einfacher?

Gruß Jonas

von Jonas B. (jibi)


Lesenswert?

Also ich glaube bei 3khz max kann man mit einem kleine Avr + R2R Dac aus 
ein paar Widerständen mehr lernen...

Kann falsch liegen.

Gruß Jonas

von Onkel Paul (Gast)


Lesenswert?

Jonas Biensack schrieb:
>>Hab den ADAU1701
>
> Den zum Laufen zu kriegen + Programmierung ist einfacher?
>
> Gruß Jonas

Für den TO wahrscheinlich nicht ;-(

Klar. Der Code wird doch vom STUDIO generiert. Der ADAU besitzt GPIOs, 
mit denen er fast nach Belieben gesteuert werden kann. Auch ohne 
externen µC.

Falls dem TO das alles zu kompliziert wird, genügt auch ein einfacher 
Oszilator (VCO), paar Frequenzteiler (FlipFlop), Sinus Signalformer 
(Filter, VCF), Mixer.

BTW
Da will sich wohl noch einer die 500€ für die Reparatur der E-Orgel 
verdienen ;-))

von chris_ (Gast)


Lesenswert?


von runtastic (Gast)


Lesenswert?

Er schreibt ja nur das die Signalfrequenz max 3kHz hat.
Das ist kein Problem.
Nur wenn du nur mit 6kHz neue Werte ausgibst, dann sieht dein Sinus 
gleich wie dein Dreieck aus.

Also sollte man da etwas mehr Anforderungen an die Auflösung (Amplitude 
und Aktualisierungsrate) bekannt geben.

von J. T. (chaoskind)


Lesenswert?

MoinMoin

je nach Anforderung an "Spielbarkeit" ist das durchaus mit geringem 
Aufwand möglich. Ich hab sowas mal gemacht, dazu hab ich mir die Werte 
einer kompletten Sinuswelle im Flash abgelegt, und diese dann 
aufgerufen. Ohne Werte zu überspringen bin ich mit nem 18,irgendwas 
MHz-Quarz beim Sinus nur auf Werte um die 2KHz gekommen. Für die anderen 
Wellenformen kannst du einfach nen Zähler hochzählen und überlaufen 
lassen (Sägezahn), hochzählen und wieder runterzählen ergibt dein 
Dre.ieck. Rechteck erreicht dabei natürlich deutlich höhere Frequenzen, 
da du ja nur 2Werte ausgeben musst.

Ausgeben hab ich meine "Werte" als PWM, die ich per Tiefpass gefiltert 
hab.

Allerdings war die Einsetzbarkeit als Musikinstrument sehr 
eingeschränkt, da ich einfach nur per Taster die Tonhöhe rauf und runter 
setzen konnte. Also weit entfernt von Spielereien wie Anschlagdynamik 
und co. Wenn man nen Synthi natürlich nur als etwas definiert, das Töne 
ausgeben kann, dann haste dein Ziel schon erreicht. Da aber bei schon 
bei 2Khz Schluß war, hab ich das Projekt nicht weiter verfolgt.

Was aber eine Überlegnung wert wäre, die Schwingungserzeugung analog 
auszulagern, und den AVR nur die Ansteuerung erledigen zu lassen. Dann 
könnte man sich eine Tastatur basteln, an jede Taste 2 Schalter die mit 
Verzögerung von der Taste gedrückt werden, der erste trägt die 
Information welche Taste gedrückt wurde, mit dem 2ten ermittelst du die 
Zeitdifferenz zwischen Schalter1 gedrückt und Schalter2 gedrückt, womit 
du eine Information über die Anschlagsdynamik erhältst.

MfG Chaos

von Florian T. (loeas)


Lesenswert?

Ja mal vielen Dank für all die Vorschläge

Meine Idee wäre nun  alles auf einen DDS 
(http://www.analog.com/static/imported-files/data_sheets/AD9833.pdf) zu 
schicken. Was haltet ihr davon ??

von Nilpp (Gast)


Lesenswert?

Doch. Ist gut.

von Jobst M. (jobstens-de)


Lesenswert?

10 Stimmen gleichzeitig bei einer Samplerate von 50kHz sollten drin 
sein.
Ich würde allerdings einen Chip mit mehr RAM bevorzugen, um darin die 
Kurven ablegen zu können. z.B. ATmega644


Gruß

Jobst

von J. S. (engineer) Benutzerseite


Lesenswert?

Ich würde auch mit einer DDS arbeiten und über das RAM gehen, allerdings 
darfst Du nicht zuviel erwarten. Schneller abgespielte komplexe 
Kurvenverläufe klingen schnell nach Mickey Mouse, weil das 
Oberwellenspektrum statisch ist und zudem die DDS dann Artefakte bringt.

Besser ist es, das Oberwellenspektrum dynamisch zu halten / zu nutzen 
und die Frequenzen wie bei einer iFFT zu summieren. Die Oberwellen 
kannst Du Dir aus einer idealen Sinus-Schwingung per Multiplikation 
erzeugen. Mit 4 Oberwellen ist schon viel zu machen. Die Faktoren sind 
dann die Spielwiese. Tipp: Bei höheren Frequenzen die Oberwellen mehr 
dämpfen.

Ansonsten kannst DU mal mit parabolischen Wellen arbeiten, wie ich es 
bei meiner Sinus-Ersatzfunktion Y=x * (1-x) mache. Die ist zwar nicht 
mathematisch genau, aber musikalischer, denn kaum ein Instrument bringt 
einen wirklichen Sinus! Die ist auch viel resourcenschonender zu 
berechnen :-)

von chris_ (Gast)


Lesenswert?

>10 Stimmen gleichzeitig bei einer Samplerate von 50kHz sollten drin
>sein.

Es wurde hier im MC-Netz alles schon mal gemacht:
http://www.mikrocontroller.net/articles/AVR_Softwarepool#Tonerzeugung
http://www.mikrocontroller.net/articles/AVR-Synthesizer

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.