Arduino - compter des impulsions sans interruption
Je voudrais savoir si il existe un moyen pour compter les impulsions numériques sur un Arduino SANS mise en œuvre d'une routine d'interruption.
Description: j'ai un capteur qui génère des impulsions numériques proportionnelle à certains de mesure je veux calculer.
- Oui, vous pouvez le faire par l'interrogation, cependant, qui permet à votre processeur occupé, et vous devez être conscient que tout état qui peut durer moins de temps que votre intervalle d'interrogation pourrait être manquée.
- La façon de compter les impulsions sans un rapport de recherche internationale est d'utiliser les compteurs de matériel, de temps en temps du traitement de leur état et la fixation de leur limite de nombre pour éviter le débordement.
InformationsquelleAutor manatttta | 2014-08-27
Vous devez vous connecter pour publier un commentaire.
Non seulement vous pouvez le faire sans un gestionnaire d'interruption, vous pouvez le faire, peu ou pas de logiciel, et de gérer plus rapide des taux de pulsation est possible par le logiciel d'interrogation ou d'interruption de comptage.
L'Atmel AVR que la plupart des Arduinos sont fondées sur l'avoir de compteur/timer matériel qui comptera pulsé dans une broche d'entrée directement. Tout ce que vous avez à faire est de configurer le matériel pour l'opération de comptage et de lire le registre de compteur. Il y a un petit complexité pour les compteurs 16 bits 8 bits de l'appareil, mais c'est simple à surmonter. Arduino configure minuteries pour défaut PWM opérations, mais qui peut être remplacée comme décrit ici(Voir le RÉGULATEUR manuel de l'utilisateur pour plus de détails) - vous devez utiliser le timer/compteur de la CCT mode.
BRAS en fonction Arduninos et à peu près tout autre microcontrôleur va avoir du matériel similaire installations; certains ont une plus grande flexibilité qui les broches peut être utilisé pour le matériel de comptage.
Sur l'AVR, vous avez 8 et 16 bits compteurs, si vous avez besoin de plus grand compte, vous pourriez avoir à gérer le trop-plein d'interruption. Si vous serez d'interrogation le compteur régulièrement, vous pourriez être en mesure de gérer même que sans les interruptions tout en étant capable de sondage à une beaucoup plus faible et, éventuellement, apériodique que le taux d'impulsions d'entrée, simplement, par l'interrogation de l'indicateur de débordement avant le prochain dépassement de.
Dans votre cas, vous avez probablement besoin de lire le nombre d'impulsions à une période régulière que plus court que le délai dans lequel le compteur de dépassement du maximum prévu la fréquence du pouls. Ainsi par exemple, si vous avez été en utilisant 8 bits compteur et le maximum de la fréquence du pouls ont 1KHz vous auriez besoin de sondage de chaque 256/1000 secondes ou plus courte, mais la plus grande précision est assurée par faire de la période aussi longue que possible. Ainsi, par exemple, vous pourriez avoir quelque chose comme ce qui suit (ce n'est pas vrai code, et qu'un fragment):
Une alternative qui vous permettra d'obtenir une meilleure réponse linéaire mais non-déterministe de lecture serait de sondage de l'indicateur de débordement, et de mesurer le temps pris pour compter un nombre fixe de légumineuses et de déterminer votre mesure du temps fixe, plutôt que de compter le nombre de pièces pour un temps fixe.
Vous pouvez utiliser l'analogique, avec un peu de numérique en face d'elle.
si votre entrée fréquence maximale est de 1 khz, utiliser ce signal pour déclencher mono-stable (edge déclenché) avec sortie d'impulsion de 1 ms (1/fmax). Puis filtre passe-bas (R en série, C à la terre, et répétez l'opération pour les multi-pôle), et enfin de lecture analogique de tension sur ce dernier condensateur. Si R*C est relativement petite, le signal analogique sera la réaction rapide, mais ont des ondulations. S'il est grand, le temps de réaction va souffrir, mais le signal sera plus stable.