16-Bit Mono RAW Audio

OP #2691743
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.
Gast
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
Gast
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
Gast
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
OP
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?
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.