Forum: Mikrocontroller und Digitale Elektronik Klangerzeugung mit R2R DAC


von Benedikt K. (benek)


Lesenswert?

Da ich nach langem Googeln nichts gefunden habe, frage ich mal im Forum:
Wie funktioniert die Klangerzeugung mit einem Microcontroller über ein 
R2R Netzwerk? Soll ich einfach in einem Array die entsprechenden 
Wellenformen ablegen und diese dann über eine for Schleife abtasten?
Vielleicht hat ja jemand für euch mehr Ahnung.

MfG Benedikt

von Hannes L. (hannes)


Lesenswert?

Benedikt K. schrieb:
> Soll ich einfach in einem Array die entsprechenden
> Wellenformen ablegen

Ja...

> und diese dann über eine for Schleife abtasten?

Nein, das reicht nicht, da solltest Du schon einen Timer bemühen, dessen 
ISR im Takt der Samplerate (Wiedergaberate) das nächste Byte aus dem 
Array holt und an den Port mit dem R2R-DAC ausgibt.

...

von Rainer U. (r-u)


Lesenswert?

Hier ist ein schönes Beispiel - ohne Timer, aber mit einer schnellen 
Programmschleife fester Laufzeit in Assembler..

http://www.myplace.nu/avr/minidds/

von Thomas D. (thomasderbastler)


Lesenswert?

Könnte auch jemand aus dem ASM File eine HEX Datei erzeugen ?
Die Emailadi vom Jasper auf seine HP geht nicht.

von Karl H. (kbuchegg)


Lesenswert?

Thomas der Bastler schrieb:
> Könnte auch jemand aus dem ASM File eine HEX Datei erzeugen ?

Hä?
Du wirst dir doch ja wohl den Text des Assembler-Programms von seiner 
Web-Seite per Copy&Paste ausschneiden und in einem neuen AVR-Studio 
Projekt einfügen und auf F7 drücken können?

von Benedikt K. (benek)


Lesenswert?

Vielen Dank für eure Antworten. Mit einer im Flah abgelegten Sinus 
Tabelle funktioniert das auch schon ganz gut. Jedoch wollte ich daraus 
eher eine Drum Machine basteln. Hat jemand eine Ahnung wo ich solche 8 
Bit Tabellen herbekomme?

MfG Benedikt

von Hannes L. (hannes)


Lesenswert?

Benedikt K. schrieb:
> Hat jemand eine Ahnung wo ich solche 8
> Bit Tabellen herbekomme?

Vielleicht aus entsprechenden WAV-Dateien, aus denen Du den Header 
entfernst?

...

von Chris M. (yoblid) Benutzerseite


Lesenswert?

Benedikt K. schrieb:

> Wie funktioniert die Klangerzeugung mit einem Microcontroller über ein
> R2R Netzwerk?

Hier ist ein Beispiel (inkl. Software):
http://wiki.forskningsavd.se/SyltJamSynth

von Benedikt K. (benek)


Lesenswert?

Hannes Lux schrieb:
> Benedikt K. schrieb:
>> Soll ich einfach in einem Array die entsprechenden
>> Wellenformen ablegen
>
> Ja...
>
>> und diese dann über eine for Schleife abtasten?
>
> Nein, das reicht nicht, da solltest Du schon einen Timer bemühen, dessen
> ISR im Takt der Samplerate (Wiedergaberate) das nächste Byte aus dem
> Array holt und an den Port mit dem R2R-DAC ausgibt.
>
> ...

Okay Angenommen meine Samplerate beträgt 44100Hz. Dann muss ich meinen 
Prescaler so wählen, dass ich diese Frequenz bekomme, oder? Wie soll ich 
da vorgehen?

von Hannes L. (hannes)


Lesenswert?

Benedikt K. schrieb:
> Angenommen meine Samplerate beträgt 44100Hz.

Dann brauchst Du für eine Sekunde Sound 44,1 Kilobyte Speicher zum 
Ablegen der Soundbitmap.

Wie lange klingt ein Paukenschlag nach?
Wie lange ein Becken?
Wieviel Speicher würdest Du brauchen?
Wieviel Speicher hast Du?

Benedikt K. schrieb:
> Dann muss ich meinen
> Prescaler so wählen, dass ich diese Frequenz bekomme, oder?

Ich glaube zwar, dass sich diese Frage aufgrund der angestrebten 44100 
Hz und der Erkenntnis über den Speicherplatzmangel erübrigt hat, aber 
mit dem Prescaler (Vorteiler) alleine ist es nicht getan. Da spielt der 
Zählumfang des Timers auch noch eine Rolle.

Mit dem Vorteiler stellst Du lediglich ein, dass das gewünschte 
Intervall bei gegebenem Controllertakt mit vertretbarer Auflösung in den 
Zählumfang des Timers passt. Die genaue Einstellung der Frequenz stellt 
man dann mit dem Timer direkt ein. Hat der Timer keine anderen Aufgaben, 
dann kann er im CTC-Modus mit Compare-Interrupt betrieben werden. Werden 
auch noch andere Interrupts des Timers benötigt, dann bietet sich an, im 
Compare-Interrupt das gewünschte Intervall auf den momentanen Wert des 
Compare-Registers aufzuaddieren um den Termin für den nächsten Interrupt 
festzulegen.

...

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.