Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Interne timers van Arduino

Componenten en benodigdheden

Arduino UNO
× 1
LED (generiek)
× 1
Weerstand 220 ohm
× 1

Over dit project

Overzicht

Als je de tijd nauwkeurig wilt tellen, moet je een timer gebruiken, maar meestal is het niet zo eenvoudig om de interne timers van Arduino te gebruiken, dus in deze tutorial probeer ik uit te leggen hoe je ze op een eenvoudige manier kunt gebruiken.

Het is zo belangrijk om timers te gebruiken omdat je tijdens de delay()-functie niets kunt doen, maar met een timer kun je alles doen, want als het moment daar is, wordt de interrupt geactiveerd.

Ik gebruik de TIMER0 omdat dit de gemakkelijkste timer is, misschien kan ik in de toekomst de andere timers uitleggen.

Hoe het werkt

Het eerste dat u moet zien, is de datasheet van ATmega328P.

Dit is het blokschema van de teller, en als je dit bekijkt, kun je begrijpen hoe het werkt.

De prescaler ontvangt een puls van een klokcyclus en geeft deze vervolgens door aan de Control Logic, daarom verhoogt de Control Logic het TCNTn-register met 1.

Nu kunnen we de waarde van TCNTn vergelijken met een specifieke waarde. Wanneer het TCNTn-register deze waarde bereikt, weet je dat het een bepaalde tijd is gepasseerd.

Deze methode wordt CTC-modus genoemd voor "Timer wissen bij vergelijken". De waarde TCNTn-register wordt vergeleken met het OCRn-register, wanneer een vergelijkingsovereenkomst optreedt, genereert de TOVn een onderbreking.

Een ander belangrijk ding is de prescaler, hiermee kun je verschillende indelingen van de klok maken, eigenlijk is 16MHz te veel, maar dankzij de prescaler kun je er enkele subveelvouden van maken. Dit hangt af van de configuratie van het TCCR0B-register.

Een ander belangrijk ding is om de waarde van het OCRn-register te bepalen om een ​​specifieke tijd te tellen, je hebt wat wiskunde nodig.

Ik weet dat dit allemaal te ingewikkeld kan lijken, maar ik weet zeker dat de onderstaande code elke vraag zal ophelderen.

In dit geval activeren we elke 0,001 seconden een onderbrekingsverzoek.

 TCCR0A|=(1< 

Het is belangrijk om de prescaler aan het einde in te stellen, want na deze instructie begint de timer te tellen. Als u deze moet stoppen, moet u alle bits van TCCR0B resetten.

Hieronder staat een voorbeeld.

Code

  • Interne timer
Interne timerArduino
/*Dit programma schakelt elke 1 seconde een LED op pin 13 in en uit met behulp van een interne timer*/int timer=0;bool state=0;void setup() { pinMode(13,OUTPUT); TCCR0A=(1<=1000){ state=!state; timer=0; } digitalWrite(13,staat); }ISR(TIMER0_COMPA_vect){ //Dit is de timer voor onderbrekingsverzoeken++;}

Schema's


Productieproces

  1. Arduino Spybot
  2. FlickMote
  3. Zelfgemaakte tv B-Gone
  4. Hoofdklok
  5. Vind mij
  6. Arduino Power
  7. Tech-TicTacToe
  8. Arduino Quadruped
  9. Arduino-joystick
  10. CNC-machine
  11. Earth_Analyzer