آموزش 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 برای ساخت ساعت دیجیتال مناسبتر است.
۱۰. تمرینها
- برنامهای بنویسید که هر ۱ ثانیه LED روشن و خاموش شود.
- تعداد فشارهای کلید را با Counter0 بشمارید و روی LCD نمایش دهید.
- یک کرنومتر بسازید که زمان را با دقت میلیثانیه نمایش دهد.
نتیجه جلسه ششم
در این جلسه یاد گرفتیم:
- تایمرها و شمارندهها چیستند و چه کاربردی دارند.
- نحوه استفاده از Timer0 و Timer1 در BASCOM.
- استفاده از تایمر به عنوان شمارنده پالسهای خارجی.
- پروژه عملی کرنومتر دیجیتال.
🔹 جلسه هفتم: کار با وقفهها (Interrupts) و مدیریت رویدادها به صورت خودکار.