Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Minuteurs internes d'Arduino

Composants et fournitures

Arduino UNO
× 1
LED (générique)
× 1
Résistance 220 ohm
× 1

À propos de ce projet

Présentation

Si vous avez besoin de compter le temps avec précision, vous devez utiliser une minuterie, mais il n'est généralement pas si facile d'utiliser les minuteries internes d'Arduino, donc dans ce tutoriel, j'essaie d'expliquer comment les utiliser de manière simple.

Il est tellement important d'utiliser des timers car pendant la fonction delay() vous ne pouvez rien faire, mais avec un timer vous pouvez tout faire car lorsque le moment arrive, il active l'interruption.

J'utilise le TIMER0 car c'est le temporisateur le plus simple, peut-être qu'à l'avenir je pourrais expliquer les autres temporisateurs.

Comment ça marche

La première chose que vous devez voir est la fiche technique de l'ATmega328P.

C'est le diagramme du compteur, et en regardant cela, vous pouvez comprendre comment cela fonctionne.

Le pré-échelonneur reçoit une impulsion d'un cycle d'horloge puis la transmet à la logique de contrôle, donc la logique de contrôle incrémente le registre TCNTn de 1.

Nous pouvons maintenant comparer la valeur de TCNTn avec une valeur spécifique. Lorsque le registre TCNTn arrive à cette valeur, vous savez qu'il s'est écoulé un temps précis.

Cette méthode est appelée mode CTC pour "Clear Timer on Compare". La valeur du registre TCNTn est comparée au registre OCRn, lorsqu'une correspondance de comparaison se produit, le TOVn génère une interruption.

Une autre chose importante est le prescaler, avec cela vous pouvez créer différentes divisions de l'horloge, en fait 16MHz c'est trop mais, grâce au prescaler, vous pouvez en créer des sous-multiples. Cela dépend de la configuration du registre TCCR0B.

Une autre chose importante est de déterminer la valeur du registre OCRn pour compter un temps spécifique, vous avez besoin d'un peu de maths.

Je sais que tout cela peut sembler trop compliqué mais je suis sûr que le code ci-dessous éclaircira chaque question.

Dans ce cas, nous activons une demande d'interruption toutes les 0,001 secondes.

TCCR0A|=(1<

Il est important de régler le prescaler à la fin car après cette instruction le timer commence à compter, si vous devez l'arrêter, vous devez réinitialiser tous les bits de TCCR0B.

Ci-dessous, il y a un exemple.

Code

  • Minuteur interne
Minuteur interneArduino
/*Ce programme allume et éteint une LED sur la broche 13 toutes les 1 seconde à l'aide d'un timer interne*/int timer=0;bool state=0;void setup() { pinMode(13,OUTPUT); TCCR0A=(1<=1000){ state=!state; temporisateur=0 ; } digitalWrite(13,état); }ISR(TIMER0_COMPA_vect){ //Ceci est le minuteur de demande d'interruption++;}

Schémas


Processus de fabrication

  1. Arduino Spybot
  2. FlickMote
  3. Téléviseur maison B-Gone
  4. horloge maîtresse
  5. Trouvez-moi
  6. Puissance Arduino
  7. Tech-TicTacToe
  8. Arduino quadrupède
  9. Joystick Arduino