Zum Abspielen von RAW-Audio-Dateien (8-bit, unsigned, Mono, 22050Hz) von einer MicroSD-Karte über Pin43 (OC0A) auf einem ATMega644 (16MHz) verwende ich: - einen Doppelpuffer / ISR(TIMER1_COMPA_vect) - Fast PWM mode 3 / Timer0 - Non-inverting PWM auf OC0A - Kein Prescaling - CTC Mode - Clkio/8 / Timer1 - Compare Register OCR1A = ((F_CPU / 8) / 22050) - 1 Klappt soweit alles einwandfrei. Nun möchte ich auf 16-Bit RAW-Audio-Dateien (16-bit, unsigned, Mono, 22050Hz) wechseln. Dazu habe ich ein paar Fragen: Kann man einfach 16 Bit einlesen und an den entsprechenden Wert an Pin14 (OC1A) ausgeben? Oder müssen zweimal 8 Bit einlesen werden? Falls ja, wie wird dies bewerkstelligt? Leider gibt es im Netz und auch hier im Forum nicht viel zu diesem Thema, nur jede Menge zu MP3.
Hi >Nun möchte ich auf 16-Bit RAW-Audio-Dateien (16-bit, unsigned, Mono, >22050Hz) wechseln. Schon mal daran gedacht, das bei 16MHz deine PWM-Frequenz des 16Bit-Timers nur noch ca.244Hz beträgt? MfG Spess
Nun, ChaN schafft es ja auch mit 16MHz: http://elm-chan.org/works/sd8p/report.html (ATtinyX5) http://elm-chan.org/works/sd20p/report.html (ATtiny861) Dies sollte dann erst recht mit einem ATMega644 möglich sein, oder nicht?
Hi >Dies sollte dann erst recht mit einem ATMega644 möglich sein, oder >nicht? Nein. Die ATTiny25/45/85 haben eine PLL, die den Timer mit 64 MHz laufen lässt. Und die hat dein ATMega 644 nicht. MfG Spess
Hi Nachtrag: Die o.g. ATTinys besitzen keinen 16 Bit-Timer. Ich gehe davon aus, das er bei 16 Bit nur die oberen 8 Bit benutzt. Das mit der PLL gilt auch für den ATTiny861. MfG Spess
Der ATtiny861 hat einen 10-bit-Timer, damit sind dann 64 MHz/1024 = 62.5 kHz PWM-Frequenz bzw. 31.25 kHz phasenkorrekt möglich.
Mal zum vertändnis von RAW/WAV: Bisher lese ich immer 512 Byte in den Puffer und schiebe sie zu 8-Bit-Einheiten (-128/+128) zum OC0A. Kann man nicht den Datenstrom auf 1024 Byte erhöhen und paarweise zu 16-Bit (-32768/+32768) auf den entsprechenden OC1A schieben?
Hi >Kann man nicht den Datenstrom auf 1024 Byte erhöhen und paarweise zu >16-Bit (-32768/+32768) auf den entsprechenden OC1A schieben? Und was nutzt dir das? Dein Controller ist für eine 16-Bit-PWM einfach um Größenordnungen zu langsam. MfG Spess
Du verwendest einfach einen ungeeigneten Controller. Das hier wäre ideal für Dich und preislich auch nicht teurer als Dein Mega644p: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en532299 Hat einen eingebauten Stereo-DAC, und wenn Dir der nicht reicht, dann kannst Du per I2S auch einen externen Codec anschließen. Obendrein hast Du damit die dreifache Rechenleistung eines AVR, und noch mehr, wenn Du die 40 Bit DSP-Einheit ausnutzt. fchk
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.