Arduino Timer البرنامج التعليمي

Arduino Timer Tutorial

تعد أجهزة ضبط الوقت ميزة أساسية في متحكمها ، مما يتيح لك أداء المهام على فترات زمنية دقيقة دون الاعتماد على التأخير. يحتوي Arduino UNO على ثلاثة أجهزة مضمنة للأجهزة (Timer0 و Timer1 و Timer2) التي يمكن تكوينها لمختلف وظائف مثل إنشاء إشارات PWM أو أحداث التوقيت أو مهام الجدولة. سوف يرشدك هذا البرنامج التعليمي من خلال فهم واستخدام أجهزة توقيت Arduino.


ماذا ستحتاج

  1. Arduino Uno (أو لوحة متوافقة)
  2. مقاوم LED و 220 أوم (للأمثلة المستندة إلى التوقيت)
  3. الأسلاك الأسلاك والبلوز
  4. Arduino IDE مثبتة على جهاز الكمبيوتر الخاص بك

الخطوة 1: فهم أجهزة توقيت Arduino

يحتوي متحكم Arduino Uno's Atmega328p على ثلاثة أجهزة أجهزة:

مؤقت قرار بت الاستخدام الأساسي
Timer0 8 بت millis () ، micros () ، pwm على المسامير 5 ، 6
Timer1 16 بت مكتبة المؤازرة ، PWM على دبابيس 9 ، 10
Timer2 8 بت وظيفة () وظيفة ، PWM على دبابيس 3 ، 11

الميزات الرئيسية للوقت

  • يمكن لتوقيتات توليد إشارات PWM.
  • يمكن أن تؤدي أجهزة ضبط الوقت إلى الزراعة.
  • يتم استخدام أجهزة ضبط الوقت داخليًا بواسطة وظائف Arduino مثل delay() و millis().

الخطوة 2: إنشاء إشارة PWM بسيطة

تُستخدم إشارات PWM (تعديل عرض النبض) بشكل شائع للتحكم في سطوع LED أو سرعة المحرك. دعنا نستخدم Timer0 لإنشاء إشارة PWM.

رمز المثال: التحكم في سطوع LED مع 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);
  }
}

الخطوة 3: استخدام أجهزة ضبط الوقت مع المقاطعات

يمكنك تكوين أجهزة ضبط الوقت لتشغيل المقاطعات على فترات منتظمة. على سبيل المثال ، يمكن إعداد Timer1 لتبديل LED كل ثانية.

Example Code: 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
}

Step 4: Measuring Time with Timers

يمكنك استخدام أجهزة ضبط الوقت لقياس فترات دقيقة. Timer2 مناسب لفترات صغيرة لأنه مؤقت 8 بت.

رمز مثال: Timer2 لقياس الوقت

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);
}

الخطوة 5: استخدام مكتبات المؤقت

لتبسيط العمل مع أجهزة ضبط الوقت ، يمكنك استخدام مكتبات مثل توقيت أو توقيت.

باستخدام مكتبة Timerone

  1. تثبيت مكتبة Timerone في Arduino IDE.
  2. استخدمه لجدولة المهام بسهولة:
#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
}

تطبيقات أجهزة ضبط الوقت

  1. توليد إشارات PWM دقيقة للتحكم في المحرك
  2. مهام الجدولة دون حظر الرمز (على سبيل المثال ، تعدد المهام)
  3. قياس الفواصل الزمنية للأحداث
  4. إنشاء تأخير دقيق دون استخدام delay()
  5. إدارة الإجراءات الدورية مثل وميض المصابيح أو إرسال البيانات

استكشاف الأخطاء وإصلاحها

  • صراعات الموقت: تأكد من عدم استخدام الموقت نفسه لوظائف متعددة (مثل مكتبة المؤازرة و PWM).
  • المقاطعات لا تعمل: تحقق من تمكين المقاطعات مع interrupts().
  • سلوك غير متوقع: تحقق من prescaler ومقارنة قيم المطابقة للتوقيت الصحيح.

خاتمة

لقد تعلمت كيفية استخدام أجهزة توقيت Arduino لتوليد إشارات PWM ، والتعامل مع المقاطعات ، وقياس الوقت. يتقن أجهزة ضبط الوقت ميزات قوية لإنشاء مشاريع Arduino فعالة ودقيقة. قم بتجربة تكوينات مختلفة وتطبيق أجهزة ضبط الوقت لتحسين مشروعك التالي!

اترك تعليقًا

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.