Étape 4: Mise en place de l’interruption pour le matériel déclenchée version
Cette méthode est très similaire à la version du logiciel.
Déclenchement est géré différemment.
Digital Port deux doit être connecté à 1 entrée analogique, pour ce faire.
Essentiellement, si aucun déclenchement n’est sélectionnée, l’interruption de l’adc est activée et données sont capturées immédiatement. Si le déclenchement est sélectionné une interruption sur le port numérique 2 est utilisée pour permettre l’interruption sur la voie de l’adc 1.
Port Digital 2 peut être configuré pour lire les signaux analogiques et de générer une interruption sur la hausse ou en baisse de bords de données. C’est très rapide.
Ma routine d’interruption est appelé gotinterrupt et que j’utilise le port numérique 2 l’id de l’interruption est 0.
octet const ExtInterrupt = 2 ;
pinMode(ExtInterrupt,INPUT) ;
attachInterrupt (0, gotinterrupt, RISING) ;
attachInterrupt (0, gotinterrupt, chute) ;
.
Le drapeau a déclenché des commandes si l’interruption des voies numériques 2 démarre l’interruption de la voie analogique 1. Lors du déclenchement est false, l’interruption commence l’interruption adc lorsqu’il détecte un bord à l’entrée analogique.
.
même que le logiciel interrompre le code jusqu'à ici...
SBI(ADCSRA,Aden) ; activez l’ADC
alors...
Si (déclencheur == 0) {}
SBI(ADCSRA,ADSC) ; commencer les mesures de l’ADC sur interrupt
StartTime=micros() ;
} else {}
permettre à pw2 interruption commencer l’interruption de l’adc
déclenchement = false ;
}
SEI() ; activer les interruptions
.
Le code d’interruption
1) l’interruption du port 2 est desservie par gotinterrupt
Cette interruption est activée par un bord positif ou négatif sur le port 2.
Il ne fait rien tant que déclenché a la valeur false.
void gotinterrupt() {}
Si (! déclenchée) {}
déclenchement = true ;
SBI(ADCSRA,ADSC) ; commencer les mesures de l’ADC sur interrupt
StartTime=micros() ; starttime record pour le calcul de l’intervalle
}
}
2) interrompre le service adc est desservie par ISR(ADC_vect)
Variable bufcount stocke la position dans la mémoire tampon, dont la taille est BUF_SIZE (= 1000)
Les données sont stockées dans des endroits bufa(0) à bufa(999)
Lorsque le tampon est plein drapeau writeit a la valeur true et l’adc est désactivé. (cbi(ADCSRA,ADEN);)
.
Routine d’interruption de l’ADC
C’est la clé pour le programme!!
{ISR(ADC_vect)}
Bufa [bufcount] = ADCH ;
bufcount ++ ; compteur d’incrémentation tampon
Si (bufcount == BUF_SIZE) {}
CBI(ADCSRA,Aden) ; désactiver l’ADC
EndTime=micros() ; endtime record pour le calcul de l’intervalle
writeit = true ; drapeau qu’une écriture est nécessaire
}
}