Arduino (Mega) ljudinspelning (9 / 9 steg)
Steg 9: Uppdatering
Jag har framgångsrikt ökat data förvärv frekvensen till 19 KHz.
Detta har medfört med två 512 byte buffertar (dubbel buffring) och en rewrite på avbrott och ogiltig loop avsnitt.
Ljudet är mycket renare.
Jag testade också på 38 Khz, med mycket lovande resultat. Men på denna frekvens tillfällig buffert vänta perioder är närvarande. Det är troligt att framtida förbättringar i SDCard design och SD bibliotek funktion hastighet, kommer att övervinna detta problem. Ändra variabeln prescalar strax före ogiltiga inställningar för dem som vill experimentera.
Jag har satt upp bufa och bufb.
I avbrottet rutin jag ange en flagga kallas aready - det är sant när du skriver till bufa, false för bufb.
Flaggan writeit är sant när en skrivning är krävs och ställa in falska när SdCard är klar.
När en buffert är full (buffcount == BUF_SIZE):
- Jag kolla om Sdcard är klar skriver, i vilka fall writeit == false och jag återställa buffert pekaren till noll, byta buffert flagga aready och ange writeit-flaggan true.
- Sdcard som fortfarande skriver jag går en läsa tillbaka (bufcount--; och counter--;) och avsluta avbrottet.
När jag har rätt antal avläsningar jag stänga av avbrottet, skriva den sista datablock och tidy upp.
Majoriteten av data skrivs i ogiltig loop:
IF(writeit) {/ / Data är redo att skrivas
om (aready) {
tempfile.write (bufb, BUF_SIZE); Skriv datablocket från bufb
} annat {
initiera block skriva från bufa
tempfile.write (bufa, BUF_SIZE); Skriv datablocket
}
writeit = false; flagga som skriva görs
}