Jag kör med en 18f258 så jag kan väl inte säga att det går att ösa musik i timmar direkt =)
Några sekunders tal i bra kvalitet är inga som helst problem, min kompilator (CC8E) är såpass smart att den komprimerar lite här och där på konstanter.
Bara att räkna, ju högre samplingsfrekvens desto kortare ljud blir det ju såklart. Några sekunder räcker för min applikation. wav-filen matas ut på en pwm-pinne, filtreras, dc-avkopplas och förstärks med en lm368 på enklaste sätt.
Så här matar jag fram nytt pwm-värde. Ingen rocket science men bara för att visa principen. Ska putta in slingan i ett interrupt som utförs varje samplingsperiod, men av någon anledning funkade det i mplab men inte på riktigt :-/
Kod: Markera allt
uns16 a=0;
while (1) {
if ( TMR1IF == 1 ) {
TMR1IF = 0;
TMR1L = 0x62;
TMR1H = 0xff;
if ( a < 4358 ) // wav-filen är 4358 samples
CCPR1L = wav_vektor[a]; // PWM duty cycle
else {
CCPR1L = 0x80;
if ( a > 9000 )
a = 0;
}
a++;
}
}