Talsyntes på Atmega128 (4 / 5 steg)
Steg 4: fortsätta...
Steg fyra:
Nu sätts det enda du behöver göra det ut en efter en av detta värde ut till högtalaren med intervall på 125uSecs. Det är 8khz för frekvens som är vad vi har komprimerat våra filer till.
Du behöver två timers för denna uppgift. En till faktiskt generera vågformen och en annan att exakt tid sätta ut dessa värden i åtta bitar.
här är funktionen initiering där jag har initierat att svämma över vid 8khz 8-bitars timer. Och ett annat 16-bitars timer att generera PWM-signalen motsvarande utgång. Och även invigda Timer overflow avbrott i timer mask.
DDRB = _BV(PB4) | _BV(PB5);
TCCR1A = _BV(COM1A1) | _BV(WGM10); TCCR1B = _BV(WGM12) | _BV(CS10);
OCR1A = 0;
TCCR0| =(1<
Jag har 8Mhz intern smält brände och beräkningarna obalansen. Så jag gjorde koden att ingå ISR vid 32khz och klev med en flagga av 4 för att göra det 8Khz.
Här är ISR för vår kod.
ISR(TIMER0_OVF_vect) {sample_count--; om (sample_count == 0) {sample_count = 4; flagga = 0; OCR1A = pgm_read_byte (& zero_samples[sample++]); IF(Sample>zero_length) prov = 0, flagga = 1; } }
vad det innebär är det läser man av ett värde från den array zero_samples [] och lägga det ute på utgång jämför pin. Generera motsvarande vågform till zero.wav fil.
Steg fem:
Vågformen genereras är en fyrkantsvåg och det kommer inte låta bra eftersom den har högre frekvenserna associerade med den. Hur lösa det? Vidarebefordra det genom ett lågpassfilter och boom signalen kommer mjukare ut, kolla själv visst utrymme.
Använda Fc=1/(2*Pi*Rf*Cf) formel. Sätta Fc som 8Khz och få Rf, och
CF-värden. Och lägga den direkt till högtalaren och du kommer att höra rösten wav arkiverat på högtalare. Använda en förstärkare för starkare röst. Använda din variationer och berätta hur bra det gick ut för att vara.
Här bifoga jag en zip med en kompilerad kod att säga siffror från 0 till 9. Använda den som ett exempel.
Tack.