پروژه ساخت ساعت دیجیتالی با تایمر صفر

تو این پروژه قراره ساعت دیجیتالی که با دقت دهم ثانیه میشماره رو با هم پیاده کنیم.

برای اینکار ابتدا پروژه جدیدی باز کرده و وارد محیط کدویزارد شده و مطابق زیر عمل میکنیم.

چون تو این پروژه میخوام ساعتم دقت یک دهم ثانیه(100ms) هم داشته باشه برای اینکار از فرمول گفته شده در جلسه تایمر/کانتر استفاده میکنم تا تعداد شمارش کلاک رو به دست بیارم.برای اینکار هم 0.1رو به فرکانس کاری(1000000/1024=997Hz) ضرب و منهای یک میکنم که داریم:

(0.1*1000000)/1024-1=96.65

یعنی برای ایجاد یک دهم ثانیه باید تقریبن 96تا کلاک بیاد و بعدش سرریز کنه و چون ما میخواییم وقتی مقدار ساعت به یک دهم (یعنی 96)برسه دوباره صفر باشه(سرریز بشه) و یه واحد به رقم پر ارزش خود اضافه کنه درآنصورت باید  از مد CTC استفاده کنیم و مقدار Compare Value رو 96قرار بدیم(که در اینجا این 96رو باید به هگز تبدیل کنیم که هگز اون 60میشه) که در نهایت باید تنظیمات زیر رو در قسمت کدویزارد ظاهر کنیم.

 

 

lcd alphanumeric

port پورت پایه پین

سورس sourcr code

#include "mega32.h"
#include "alcd.h"
#"include "stdio.h
char namayesh[30];
int ten=0,second=0,minute=0,hour=0;
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
ten++;
if(ten==10)
{
second++; ten=0;
if(second==60)
{
minute++;second=0;
if(minute==60)
{
hour++;minute=0;
if(hour==24)
{
hour=0;
}
}
}
}
}
void main(void)
{
DDRA=0X00;
PORTA=0X00;
DDRB=0X00;
PORTB=0X00;
DDRC=0XFF;
PORTC=0X00;
DDRD=0X00;
PORTD=0X00;

TCCR0=0X0D;
TCNT0=0x00;
OCR0=0x60;
TIMSK=0X02;

lcd_init(16);
#asm("sei")
while (1)
{
sprintf(namayesh,"%02d:%02d:%02d:%d",hour,minute,second,ten);
lcd_gotoxy(0,0);
lcd_puts(namayesh);
}
خطوط 1 تا 3:

معرفی کتابخانه های مورد نیاز

خطوط 4 و 5:

تعریف متغیر های مورد نیاز

خطوط 6 تا 25:

تعریف وقفه ی تایمر صفر در حالت تطابق مقایسه

خطوط 28 تا 35:

تعیین ورودی و خروچی بودن پایه ها و پول آپ و تری ایستیت بودن هر کدام

خطوط 37 تا 40:

تنظیمات مربوط به فعال سازی تایمر صفر

خط 37:

تو این خط مد CTC انتخاب شده و کلاک سیستم به 1024 تقسیم شده و استفاده از پایه ی خروجی OC0 غیرفعال شده اس.

خط 38:

تو لین خط به رجیستر TCNT مقدار دهی اولیه صفر داده شده.

خط 39:

این خط هم مقدار مقایسه (مقدار رجیستر OCR) رو نشون میده که برابر 96 هستش.

خط 40:

این دستور مقدار بیت OCIE0 رو یک میکنه که اگه این بیت یک باشه و هم چنین اگه وقفه ی همگانی فعال باشه(که تو خط 43 فعال شده)،وقفه ی مربوط به مقایسه (یعنی خط 6)رو اجرا میکنه.

خط 46:

این دستور int رو به آرایه ی از کاراکتر تبدیل میکنه تا قابل چاپ روی LCD باشه.

خط 47:

از این دستور با هدف پاک کردن LCD استفاده کردم چون که lcd_clear برای جلوگیری از پاک شدن لحظه ایی محتوای LCD استفاده کردم تا LCDچشمک نزنه.

خط 48:

این دستور هم برای چاپ کردن ساعت روی LCD به کار برده شده.

 


توسط

برچسب‌ها:

دیدگاه‌ها

یک پاسخ به “پروژه ساخت ساعت دیجیتالی با تایمر صفر”

  1. […] پروژه ساخت ساعت دیجیتالی با تایمر صفر […]

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

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