Etape 09:40 kHz Echantillonnage
Pour configurer les interruptions, vous devrez copier les lignes suivantes dans votre fonction setup() :
cli (); //disable interruptions
interruption timer0 réglé à 40kHz
TCCR0A = 0; / / set ensemble TCCR0A Registre à 0
TCCR0B = 0; / / Idem pour TCCR0B
TCNT0 = 0; //initialize valeur de compteur à 0
Comparez Set match registre d’avancements d’échelon 40kHz
OCR0A = 49; / / = (16 * 10 ^ 6) / (40000 * 8) - 1 (doit être < 256)
activer le mode de la CCT
TCCR0A | = (1 << WGM01) ;
Néc CS11 bit Prédiviseur 8
TCCR0B | = (1 << CS11) ;
activer minuteur comparer interruption
TIMSK0 | = (1 << OCIE0A) ;
SEI (); //enable interruptions
le contenu de la routine d’interruption est encapsulé dans la fonction suivante :
ISR(TIMER0_COMPA_vect) {//40kHz routine d’interruption
}
Vous voulez garder la routine d’interruption aussi courte que possible, que le nécessaire. Vous pouvez faire toutes vos autres tâches (vérification sur les boutons, allumant des voyants, etc.) dans le loop(). Gardez à l’esprit que la mise en place d’interruptions peut-être affecter autres fonctions Arduino comme analogWrite et retard.
Dans le code ci-dessous, j’utilise la fonction d’interruption d’envoyer une nouvelle valeur des sinus [] à PORTD au taux de 40 kHz et incrémenter la variable « t ». Figures 1 et 2 montrent la sortie (non filtrée) du code sur un oscilloscope. Nous pouvons calculer la fréquence prévue comme suit :
fréquence = (fréquence d’échantillonnage) / (étapes par cycle)
fréquence = 40 000 / 100 = 400 hz
avec une fréquence de 40kHz, nous prévoyons la durée de chaque étape pour être :
durée de chaque étape de l’échantillon = 1 / (échantillonnage de fréquence)
durée de chaque étape de l’échantillon = 1/40 000 = 25us
//Sine out w/ 40kHz sampling rate //by Amanda Ghassaei