Signalerzeugung-Synthesizer

OP #3393510
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.
Angehängte Dateien:
Gast #3393670
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.
Gast #3393718
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 ;-))
Gast #3394286
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.
#3396906
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
Persönliche Seite #3405258
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 :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren