اطلاعیه

Collapse
No announcement yet.

مشکل در شبیه سازی در پرتئوس در تغییر فرکانس برای ساعت با میکروکنترلر

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در شبیه سازی در پرتئوس در تغییر فرکانس برای ساعت با میکروکنترلر

    با سلام و خسته نباشید.
    من یک پروژه شبیه سازی دارم که توی پرتئوس انجام میدم.پروزه برنامه نویسی و شبیه سازی یک ساعت با استفاده از تایمرصفر و نمایش ان در نمایشگر کارکتری است.
    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 مگا هرتز اشتباه نشون میده
    جدیدترین ویرایش توسط aashkanpasha; ۱۶:۱۹ ۱۳۹۸/۰۷/۱۰.
لطفا صبر کنید...
X