Stap 9: Programma-update
Ik gestegen met succes de data acquisitie frequentie tot 19 KHz.
Dit heeft tot gevolg dat met behulp van twee 512 byte buffers (dubbele buffering) en een rewrite van de interrupt en nietig lus secties.
De audio is zeer veel schoner.
Ik heb ook getest op 38 Khz, met veelbelovende resultaten. Echter bij deze frequentie occasionele buffer wacht perioden zijn aanwezig. Het is waarschijnlijk dat de toekomstige verbeteringen in SDCard ontwerp en de SD snelheid voor de functie van de bibliotheek, dit probleem zal overwinnen. Veranderen de prescalar variabele net voor void setup voor degenen die willen experimenteren.
Mij zijn troep opwaarts bufa en bufb.
In de interrupt routine set ik een vlag met de naam aready - het is waar, bij het schrijven naar bufa, false voor bufb.
De vlag writeit is waar wanneer een schrijven is vereist en false ingesteld wanneer de SdCard is voltooid.
Wanneer de buffer vol is (buffcount == BUF_SIZE):
- Ik controleren als de Sdcard is voltooid schrijven, in welk geval writeit == false en ik de buffer aanwijzer weer terug op nul gezet, schakelen de buffer vlag aready en de writeit vlag ware instellen.
- Als de Sdcard is nog steeds het schrijven van ik ga een terug lezen (bufcount--; en teller--;) en afrit van de interrupt.
Zodra ik het juiste aantal lezingen die ik afsluiten van de interrupt, schrijven de laatste gegevensblok en tidy up.
De meerderheid van de gegevens is geschreven in ongeldig lus:
if(writeit) {/ / gegevens is klaar om te worden geschreven
Als (aready) {}
tempfile.write (bufb, BUF_SIZE); Schrijf het gegevensblok vanuit bufb
} else {}
starten blok schrijven van bufa
tempfile.write (bufa, BUF_SIZE); schrijven van het gegevensblok
}
writeit = false; vlag die het schrijven gebeurt
}