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
Hi
>Das alles mit einem 16-Bit-µC. (Atmega16)
Dann ist wohl ein ATMega128 ein 128-Bit-µC?
MfG Spess
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.
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
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 ;-))
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.
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
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 ??
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
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 :-)
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.