Stap 9:40 kHz Sampling Rate
Als u wilt instellen van de interrupt moet u de volgende regels kopiëren in uw Setup-functie:
cli (); //disable interrupts
set timer0 interrupt op 40kHz
TCCR0A = 0; / / hele TCCR0A register ingesteld op 0
TCCR0B = 0; / / zelfde voor TCCR0B
TCNT0 = 0; //initialize waarde van de teller op 0
set vergelijk wedstrijd registreren voor 40khz stappen
OCR0A = 49; / / = (16 * 10 ^ 6) / (40000 * 8) - 1 (moet < 256)
CTC-modus inschakelen
TCCR0A | = (1 << WGM01);
CS11-bit ingesteld voor 8 prescaler
TCCR0B | = (1 << CS11);
inschakelen van de timer vergelijk interrupt
TIMSK0 | = (1 << OCIE0A);
Sei (); //enable interrupts
de inhoud van de interrupt routine worden ingekapseld in de volgende functie:
ISR(TIMER0_COMPA_vect) {//40kHz interrupt routine
}
U wilt bewaren van de interrupt routine zo kort mogelijk te houden, alleen de noodzakelijkheden. U kunt al uw andere taken (controle op de knoppen draaien op LED's, etc) in de loop doen. Ook houd in gedachten dat het opzetten van interrupts andere Arduino functies zoals analogWrite en vertraging kan beïnvloeden.
In de onderstaande code gebruik ik de interrupt-functie te PORTD een nieuwwaarde van sinus [] verzenden met een snelheid van 40 kHz en verhogen de variabele "t". Vijgen 1 en 2 Toon de (ongefilterd) output van de code op een oscilloscoop. We kunnen de verwachte frequentie als volgt berekenen:
frequentie = (sampling-frequentie) / (stappen per cyclus)
frequentie = 40.000 / 100 = 400 hz
bij een sampling-frequentie van 40kHz verwachten we de duur van elke stap te zijn:
duur van elke steekproef stap = 1 / (samplingfrequentie)
duur van elke steekproef stap = 1/40.000 = 25us
//Sine out w/ 40kHz sampling rate //by Amanda Ghassaei