با سلام و خسته نباشید.
من یک پروژه شبیه سازی دارم که توی پرتئوس انجام میدم.پروزه برنامه نویسی و شبیه سازی یک ساعت با استفاده از تایمرصفر و نمایش ان در نمایشگر کارکتری است.
1-من ابتدا برنامه رو توی اتمل استودیو برای فرکانس کاری 2مگاهرتز نوشتم. و محاسباتم روی برای رجیسترهای تایمر صفر انجام دادم.
توی پرتئوس یک میکروکنترلر+نمایشگر کارکتری رو وارد کردم. روی میکرو دابل کلیک کردم و فرکانس رو 2مگاهرتز و فایل هگزم رو انتخاب کردم و پروزه را ران کردم. نتیجه یک ساعت دقیق بود که به درستی روی نماشگر نمایش داده میشد.
2-سپس من اومدم تو برنامه فرکانس کاریم رو 8 مگا هرتز کردم و محاسباتم رو تغییر دادم. محاسباتم هم کاملا درسته.و برنامه اوکی شد. اومدم تو پرتئوس و با دابکلکلیک روی میکرو فرکانسم رو 8مگاهرتز انتخاب کردم و برنامه رو ران کردم. ولی دیدم نمایش روی نمایشگر به درستی انجام نگرفت.
سوالم اینه که مشکل کجاست؟ برنامه تو 2 مگا هرتز درست کار کرد ولی تو 8 مگا هرتز نه- چرا؟ آیا باید تغییراتی تو مدارم بدم یا چی؟
ممنون میشم راهنمایی کنین. تو پرتئوس هم بلد نیستم دیباگ کنم.
عکس های زیر مال وقتیه که با 2 مگاهرتز به درستی کار مکنه و با 8 مگا هرتز اشتباه نشون میده
من یک پروژه شبیه سازی دارم که توی پرتئوس انجام میدم.پروزه برنامه نویسی و شبیه سازی یک ساعت با استفاده از تایمرصفر و نمایش ان در نمایشگر کارکتری است.
1-من ابتدا برنامه رو توی اتمل استودیو برای فرکانس کاری 2مگاهرتز نوشتم. و محاسباتم روی برای رجیسترهای تایمر صفر انجام دادم.
توی پرتئوس یک میکروکنترلر+نمایشگر کارکتری رو وارد کردم. روی میکرو دابل کلیک کردم و فرکانس رو 2مگاهرتز و فایل هگزم رو انتخاب کردم و پروزه را ران کردم. نتیجه یک ساعت دقیق بود که به درستی روی نماشگر نمایش داده میشد.
2-سپس من اومدم تو برنامه فرکانس کاریم رو 8 مگا هرتز کردم و محاسباتم رو تغییر دادم. محاسباتم هم کاملا درسته.و برنامه اوکی شد. اومدم تو پرتئوس و با دابکلکلیک روی میکرو فرکانسم رو 8مگاهرتز انتخاب کردم و برنامه رو ران کردم. ولی دیدم نمایش روی نمایشگر به درستی انجام نگرفت.
سوالم اینه که مشکل کجاست؟ برنامه تو 2 مگا هرتز درست کار کرد ولی تو 8 مگا هرتز نه- چرا؟ آیا باید تغییراتی تو مدارم بدم یا چی؟
ممنون میشم راهنمایی کنین. تو پرتئوس هم بلد نیستم دیباگ کنم.
//#define F_CPU 8000000
#define F_CPU 2000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
int overflow,second,minute,hour;
char str[10];
void init_timer0(){
TCNT0=18;
//TCNT0=128;
TCCR0|=(1<<CS02);
TIMSK|=(1<<TOIE0);
sei();
overflow=0;
}
void finish_timer0(){
TCCR0=0;
overflow=0;
}
ISR(TIMER0_OVF_vect){
overflow++;
//if (overflow==123){ finish_timer0();second++;init_timer0();}
if (overflow==31){ finish_timer0();second++;init_timer0();}
if(second==60){minute++;second=0;}
if(minute==60){hour++; minute=0;}
if (hour==24){hour=0; minute=0;second=0;}
}
void start_lcd(){
second=0;
minute=0;
hour=0;
alcd_init();
alcd_clear();
alcd_gotoxy(1,0);
alcd_puts("www.kantash.com");
alcd_gotoxy(0,6);
sprintf(str,"%d:%d:%d",hour,minute,second);
alcd_puts(str);
}
int main(void)
{
start_lcd();
init_timer0();
while (1)
{
alcd_gotoxy(0,6);
sprintf(str,"%d:%d:%d",hour,minute,second);
alcd_puts(str);
}
}
عکس های زیر مال وقتیه که با 2 مگاهرتز به درستی کار مکنه و با 8 مگا هرتز اشتباه نشون میده
