دسته‌بندی نشده

آموزش BASCOM AVR – بسکام – جلسه ششم

 

📘 آموزش BASCOM AVR – بسکام – جلسه ششم

 

تایمرها و شمارنده‌ها (Timer/Counter)


۱. مقدمه

تا اینجا یاد گرفتیم چطور LED را روشن کنیم، کلید بخوانیم و متن روی LCD نمایش دهیم. اما برای بسیاری از پروژه‌ها نیاز به زمان دقیق داریم. مثلاً برای ساخت کرنومتر، ساعت دیجیتال یا تولید موج PWM باید بتوانیم زمان را اندازه‌گیری کنیم. این کار با تایمرها و شمارنده‌ها انجام می‌شود.


۲. تایمر چیست؟

  • تایمر یک بخش داخلی میکروکنترلر است که با هر پالس کلاک یک واحد افزایش می‌یابد.
  • تایمرها می‌توانند زمان را بشمارند یا پالس‌های خارجی را شمارش کنند.
  • در ATmega32 سه تایمر داریم:
    • Timer0: ۸ بیتی
    • Timer1: ۱۶ بیتی
    • Timer2: ۸ بیتی (مستقل از CPU، مناسب برای ساعت RTC)

۳. کاربرد تایمرها

  • ایجاد تأخیر دقیق (بیشتر از دستور Waitms).
  • شمارش رویدادها (مثلاً تعداد پالس ورودی).
  • تولید موج PWM برای کنترل موتور یا LED.
  • ساخت ساعت و تقویم دیجیتال.

۴. نحوه استفاده در BASCOM

کد ساده (Timer0):

' پروژه تست تایمر0
$regfile = "m32def.dat"
$crystal = 1000000

Config Timer0 = Timer , Prescale = 1024
Start Timer0

Do
   Locate 1 , 1
   Lcd Timer0
Loop
End

توضیح: مقدار تایمر0 روی LCD نمایش داده می‌شود و از ۰ تا ۲۵۵ افزایش می‌یابد.


۵. Prescaler چیست؟

  • Prescaler تقسیم‌کننده کلاک است.
  • مثلاً اگر کلاک CPU = 1MHz باشد و Prescaler = 1024، کلاک تایمر = 976Hz خواهد بود.
  • مقادیر مجاز: 1، 8، 64، 256، 1024.

۶. استفاده از تایمر۱ (۱۶ بیتی)

Config Timer1 = Timer , Prescale = 64
Start Timer1

Do
   Locate 2 , 1
   Lcd Timer1
Loop
End

توضیح: تایمر۱ می‌تواند تا مقدار 65535 بشمارد.


۷. استفاده به عنوان شمارنده (Counter)

  • تایمر می‌تواند به جای کلاک داخلی، پالس‌های خارجی را بشمارد.
  • مثال: شمارش تعداد فشار کلید یا تعداد پالس سنسور.

کد:

Config Timer0 = Counter , Edge = Rising
Do
   Lcd Counter0
Loop
End

توضیح: هر بار یک پالس روی پایه T0 بیاید، مقدار Counter0 یک واحد افزایش می‌یابد.


۸. پروژه عملی: کرنومتر دیجیتال

کد:

$regfile = "m32def.dat"
$crystal = 1000000

Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Ovf0
On Ovf0 Timer0_ISR

Dim Sec As Word

Start Timer0

Do
   Locate 1 , 1
   Lcd "Sec=" ; Sec
Loop
End

Timer0_ISR:
   Incr Sec
Return

توضیح: با هر بار سرریز تایمر۰، یک واحد به شمارنده ثانیه اضافه می‌شود و روی LCD نمایش داده می‌شود.


۹. نکات عملی

  • برای زمان دقیق باید فرکانس CPU و Prescaler درست تنظیم شوند.
  • تایمرها می‌توانند همزمان استفاده شوند، اما باید مراقب وقفه‌ها باشید.
  • تایمر۲ به دلیل مستقل بودن از CPU برای ساخت ساعت دیجیتال مناسب‌تر است.

۱۰. تمرین‌ها

  1. برنامه‌ای بنویسید که هر ۱ ثانیه LED روشن و خاموش شود.
  2. تعداد فشارهای کلید را با Counter0 بشمارید و روی LCD نمایش دهید.
  3. یک کرنومتر بسازید که زمان را با دقت میلی‌ثانیه نمایش دهد.

نتیجه جلسه ششم

در این جلسه یاد گرفتیم:

  • تایمرها و شمارنده‌ها چیستند و چه کاربردی دارند.
  • نحوه استفاده از Timer0 و Timer1 در BASCOM.
  • استفاده از تایمر به عنوان شمارنده پالس‌های خارجی.
  • پروژه عملی کرنومتر دیجیتال.

🔹 جلسه هفتم: کار با وقفه‌ها (Interrupts) و مدیریت رویدادها به صورت خودکار.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *