Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Interne Timer von Arduino

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
LED (generisch)
× 1
Widerstand 220 Ohm
× 1

Über dieses Projekt

Übersicht

Wenn Sie die genaue Zeit zählen müssen, müssen Sie einen Timer verwenden, aber normalerweise ist es nicht so einfach, die internen Timer von Arduino zu verwenden, daher versuche ich in diesem Tutorial zu erklären, wie man sie auf einfache Weise verwendet.

Es ist so wichtig, Timer zu verwenden, weil Sie während der Funktion delay() nichts tun können, aber mit einem Timer können Sie alles tun, da er im richtigen Moment den Interrupt aktiviert.

Ich benutze den TIMER0, weil es der einfachste Timer ist, vielleicht kann ich in Zukunft die anderen Timer erklären.

So funktioniert es

Das erste, was Sie sehen müssen, ist das Datenblatt von ATmega328P.

Dies ist das Blockschaltbild des Zählers, und wenn Sie es betrachten, können Sie verstehen, wie es funktioniert.

Der Vorteiler empfängt einen Impuls von einem Taktzyklus und gibt ihn dann an die Steuerlogik weiter, daher inkrementiert die Steuerlogik das TCNTn-Register um 1.

Jetzt können wir den Wert von TCNTn mit einem bestimmten Wert vergleichen. Wenn das TCNTn-Register diesen Wert erreicht, wissen Sie, dass eine bestimmte Zeit verstrichen ist.

Diese Methode wird CTC-Modus für "Clear Timer on Compare" genannt. Der Wert des TCNTn-Registers wird mit dem OCRn-Register verglichen, wenn eine Vergleichsübereinstimmung auftritt, erzeugt das TOVn einen Interrupt.

Eine andere wichtige Sache ist der Prescaler, mit dem Sie verschiedene Teilungen des Takts erstellen können, tatsächlich sind 16 MHz zu viel, aber dank des Prescalers können Sie einige Teiler davon erstellen. Dies hängt von der Konfiguration des TCCR0B-Registers ab.

Eine andere wichtige Sache ist, den Wert des OCRn-Registers zu bestimmen, um eine bestimmte Zeit zu zählen. Sie benötigen ein wenig Mathematik.

Ich weiß, dass dies alles zu kompliziert erscheinen kann, aber ich bin sicher, dass der folgende Code jede Frage klären wird.

In diesem Fall aktivieren wir alle 0,001 Sekunden einen Interrupt-Request.

 TCCR0A|=(1< 

Es ist wichtig, den Vorteiler am Ende zu setzen, da nach dieser Anweisung der Timer zu zählen beginnt. Wenn Sie ihn stoppen müssen, müssen Sie alle Bits von TCCR0B zurücksetzen.

Unten ist ein Beispiel.

Code

  • Interner Timer
Interner TimerArduino
/*Dieses Programm schaltet jede 1 Sekunde eine LED an Pin 13 mit einem internen Timer ein und aus*/int timer=0;bool state=0;void setup() { pinMode(13,OUTPUT); TCCR0A=(1< =1000) { state =!state; Zeitgeber=0; } digitalWrite(13,Zustand); }ISR(TIMER0_COMPA_vect){ //Dies ist der Interrupt-Request-Timer++;}

Schaltpläne


Herstellungsprozess

  1. Arduino Spybot
  2. FlickMote
  3. Selbstgemachter Fernseher B-Gone
  4. Hauptuhr
  5. Finde mich
  6. Arduino-Power
  7. Tech-TicTacToe
  8. Arduino-Vierbeiner
  9. Arduino-Joystick
  10. CNC-Maschine