Tutorial Arduino Timer

Arduino Timer Tutorial

Pengatur waktu adalah fitur penting dari mikrokontroler, memungkinkan Anda untuk melakukan tugas pada interval yang tepat tanpa mengandalkan penundaan. Arduino UNO memiliki tiga timer perangkat keras bawaan (Timer0, Timer1, dan Timer2) yang dapat dikonfigurasi untuk berbagai fungsi seperti menghasilkan sinyal PWM, acara waktu, atau tugas penjadwalan. Tutorial ini akan memandu Anda melalui pemahaman dan menggunakan pengatur waktu Arduino.


Apa yang Anda Butuhkan

  1. Arduino uno (atau papan yang kompatibel)
  2. LED dan resistor 220-OHM (untuk contoh berbasis waktu)
  3. Papan tempat memotong papan dan kabel jumper
  4. IDE Arduino diinstal di komputer Anda

Langkah 1: Memahami Pengatur Waktu Arduino

Mikrokontroler ATMEGA328P Arduino UNO memiliki tiga timer perangkat keras:

Timer Resolusi bit Penggunaan utama
Timer0 8-bit Millis (), micros (), pwm pada pin 5, 6
Timer1 16-bit Perpustakaan Servo, PWM di Pin 9, 10
Timer2 8-bit Fungsi nada (), pwm pada pin 3, 11

Fitur utama timer

  • Pengatur waktu dapat menghasilkan sinyal PWM.
  • Pengatur waktu dapat memicu interupsi.
  • Pengatur waktu digunakan secara internal oleh fungsi Arduino seperti delay() Dan millis().

Langkah 2: Menghasilkan sinyal PWM sederhana

Sinyal PWM (modulasi lebar pulsa) biasanya digunakan untuk mengontrol kecerahan LED atau kecepatan motor. Mari kita gunakan Timer0 untuk membuat sinyal PWM.

Contoh Kode: Kontrol kecerahan LED dengan PWM

#define ledPin 6 // Pin 6 uses Timer0 for PWM

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  for (int brightness = 0; brightness <= 255; brightness++) {
    analogWrite(ledPin, brightness); // Increase brightness
    delay(10);
  }

  for (int brightness = 255; brightness >= 0; brightness--) {
    analogWrite(ledPin, brightness); // Decrease brightness
    delay(10);
  }
}

Langkah 3: Menggunakan pengatur waktu dengan interupsi

Anda dapat mengonfigurasi timer untuk memicu interupsi secara berkala. Misalnya, Timer1 dapat diatur untuk beralih LED setiap detik.

Contoh Kode: Timer1 Interrupt

#define ledPin 13 // Built-in LED

void setup() {
  pinMode(ledPin, OUTPUT);

  // Configure Timer1
  noInterrupts(); // Disable interrupts during setup
  TCCR1A = 0;     // Clear Timer1 control registers
  TCCR1B = 0;
  TCNT1 = 0;      // Initialize counter value to 0

  OCR1A = 15624;  // Compare match register (1Hz at 16MHz with 1024 prescaler)
  TCCR1B |= (1 << WGM12); // CTC mode
  TCCR1B |= (1 << CS12) | (1 << CS10); // 1024 prescaler
  TIMSK1 |= (1 << OCIE1A); // Enable Timer1 compare interrupt

  interrupts(); // Enable interrupts
}

ISR(TIMER1_COMPA_vect) {
  digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle LED
}

void loop() {
  // Main loop does nothing; timer handles the LED
}

Langkah 4: Mengukur waktu dengan pengatur waktu

Anda dapat menggunakan timer untuk mengukur durasi yang tepat. Timer2 cocok untuk interval kecil karena merupakan timer 8-bit.

Contoh Kode: Timer2 untuk Pengukuran Waktu

volatile unsigned long overflowCount = 0;

void setup() {
  Serial.begin(9600);

  // Configure Timer2
  noInterrupts();
  TCCR2A = 0;
  TCCR2B = 0;
  TCNT2 = 0;

  TCCR2B |= (1 << CS22); // Prescaler 64
  TIMSK2 |= (1 << TOIE2); // Enable Timer2 overflow interrupt

  interrupts();
}

ISR(TIMER2_OVF_vect) {
  overflowCount++;
}

void loop() {
  unsigned long timeElapsed = overflowCount * 16.384; // Each overflow = 16.384ms
  Serial.print("Time elapsed: ");
  Serial.print(timeElapsed);
  Serial.println(" ms");
  delay(1000);
}

Langkah 5: Menggunakan pustaka timer

Untuk menyederhanakan bekerja dengan timer, Anda dapat menggunakan perpustakaan seperti Timerone atau TimerThree.

Menggunakan perpustakaan Timerone

  1. Instal perpustakaan Timerone di IDE Arduino.
  2. Gunakan untuk menjadwalkan tugas dengan mudah:
#include <TimerOne.h>
#define ledPin 13

void toggleLED() {
  digitalWrite(ledPin, !digitalRead(ledPin));
}

void setup() {
  pinMode(ledPin, OUTPUT);
  Timer1.initialize(1000000); // Set timer to 1 second (1,000,000 microseconds)
  Timer1.attachInterrupt(toggleLED); // Attach the interrupt function
}

void loop() {
  // Main loop does nothing; Timer1 handles the LED
}

Aplikasi timer

  1. Menghasilkan sinyal PWM yang tepat untuk kontrol motorik
  2. Tugas Penjadwalan Tanpa Pemblokiran Kode (mis., Multitasking)
  3. Mengukur interval waktu untuk acara
  4. Membuat penundaan yang tepat tanpa menggunakan delay()
  5. Mengelola tindakan berkala seperti LED berkedip atau mengirim data

Pemecahan masalah

  • Konflik Timer: Pastikan Anda tidak menggunakan timer yang sama untuk beberapa fungsi (mis., Perpustakaan Servo dan PWM).
  • Interupsi tidak berfungsi: Periksa apakah interupsi diaktifkan interrupts().
  • Perilaku tak terduga: Periksa ulang prescaler dan bandingkan nilai kecocokan untuk waktu yang benar.

Kesimpulan

Anda telah belajar cara menggunakan timer Arduino untuk menghasilkan sinyal PWM, menangani interupsi, dan mengukur waktu. Menguasai timer membuka fitur yang kuat untuk membuat proyek Arduino yang efisien dan tepat. Eksperimen dengan konfigurasi yang berbeda dan terapkan pengatur waktu untuk mengoptimalkan proyek Anda berikutnya!

Tinggalkan komentar

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.