Klangerzeugung mit R2R DAC

OP #3116548
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
OP #3117710
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?
#3117792
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.

...

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