اطلاعیه

Collapse
No announcement yet.

ساعت دیجیتال با تایمر 0 و کریستال خارجی 8MHZ در atmega16

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

    ساعت دیجیتال با تایمر 0 و کریستال خارجی 8MHZ در atmega16

    سلام این برنامه برای نمایش ساعت با atmega16 نوشتم
    میخوام از کریستال خارجی استفاده کنم
    الان مشکل برنامه اینه که ثانیه شمار خیلی سریع کار میکنه
    میخوام ثانیه شمار با ثانیه شمار ساعت همگام بشه
    برای اینکار من ار deley استفاده کردم ولی بازم درست نشد
    به نظرتون از کریستال خارجی درست استفاده کردم یانه ؟
    در پروتئوس هم کریستال اصلا در مدار قرار نمی گیره
    چرا؟
    اینم کد برنامه !!!!

    کد:
    [LEFT][INDENT]
    
    
    
    [FONT=Yekan]#include <mega16.h>[/FONT]
    [/INDENT][INDENT]#include <delay.h>[/INDENT][INDENT]#include <lcd.h>[/INDENT][INDENT]#include <stdlib.h>[/INDENT][INDENT]#include <stdio.h>[/INDENT][INDENT]#define xtal 8000000[/INDENT][INDENT]
    [/INDENT][INDENT]#define c1 PINB.5 [/INDENT][INDENT]#define c2 PINB.6 [/INDENT][INDENT]#define c3 PINB.7  [/INDENT][INDENT]
    [/INDENT][INDENT]#define ADC_VREF_TYPE 0x40[/INDENT][INDENT]
    [/INDENT][INDENT]#asm[/INDENT][INDENT].equ __lcd_port=0x15 ;PORTc[/INDENT][INDENT]#endasm[/INDENT][INDENT]char Time_flag=0,Time_counter=0;[/INDENT][INDENT]unsigned char H=0,M=0,S=0;[/INDENT][INDENT]
    [/INDENT][INDENT]int t=0;      [/INDENT][INDENT]interrupt [TIM0_OVF] void timer0_ovf_isr(void)[/INDENT][INDENT]{[/INDENT][INDENT]t++;[/INDENT][INDENT]if(t==1)[/INDENT][INDENT]    {  [/INDENT][INDENT]        S++;[/INDENT][INDENT]        if(S==59)[/INDENT][INDENT]        {[/INDENT][INDENT]            S=0;[/INDENT][INDENT]            if(Time_flag==1)[/INDENT][INDENT]                Time_counter++;           [/INDENT][INDENT]            M++;[/INDENT][INDENT]         if(M==59)[/INDENT][INDENT]         {[/INDENT][INDENT]           M=0;[/INDENT][INDENT]           H++;[/INDENT][INDENT]            if(H==24)[/INDENT][INDENT]            {[/INDENT][INDENT]             H=0;              [/INDENT][INDENT]            }[/INDENT][INDENT]         }[/INDENT][INDENT]       }[/INDENT][INDENT]       t=0;[/INDENT][INDENT]    }      [/INDENT][INDENT]}[/INDENT][INDENT]
    [/INDENT][INDENT]
    [/INDENT][INDENT]
    [/INDENT][INDENT]void main(void)[/INDENT][INDENT]{  [/INDENT][INDENT]char buffer[10];[/INDENT][INDENT]lcd_init(16);[/INDENT][INDENT]    PORTB=0X11111111;[/INDENT][INDENT]    DDRB |=0B00011111; [/INDENT][INDENT]    DDRA=0xFF;[/INDENT][INDENT]    //Set Timer0[/INDENT][INDENT]    TCCR0=0x00;[/INDENT][INDENT]   // TCCR0 |=(1<<CS00)|(1<<CS01)|(1<<CS02);[/INDENT][INDENT]    TCNT0=0x00;    [/INDENT][INDENT]    TIMSK=0x01;[/INDENT][INDENT]
    [/INDENT][INDENT]    #asm("sei") [/INDENT][INDENT]    while(1)[/INDENT][INDENT]   {[/INDENT][INDENT]    lcd_clear();                                                                   [/INDENT][INDENT]        //neveshtan houre : minute :secends[/INDENT][INDENT]      sprintf(buffer,"%d:%d:%d",H,M,S);[/INDENT][INDENT]        lcd_puts(buffer);[/INDENT][INDENT]        delay_ms(300);[/INDENT][INDENT]    };         [/INDENT][INDENT]};[/INDENT][INDENT]
    
    [/INDENT]
    [/LEFT]
    جدیدترین ویرایش توسط اشکان غفارزاده; ۱۶:۵۶ ۱۳۹۵/۰۶/۱۷.

    #2
    پاسخ : ساعت دیجیتال با تایمر 0 و کریستال خارجی 8MHZ در atmega16

    سلام دوست گرامی
    تو برنامتون همچین عبارتی رو دیدم که کاملا اشتباه است PORTB=0X11111111
    شما برای نوشتن برنامه ساعت احتیاج داری به کریستال خارجی 32.768 کیلو هرتز که بهش کریستال ساعت هم میگن
    با تقسیم فرکانسی در کدویزارد کدویژن باید فرکانسش رو بیاری رو 1 هرتز تا در هر ثانیه 1 واحد بشماره
    البته بدون استفاده از کریستال ساعت هم میشه یعنی کلاکت رو از کریستال خارجی بگیر

    موفق باشید
    آرزوی سرافرازی برای ایران عزیز . . .


    دیدگاه


      #3
      پاسخ : ساعت دیجیتال با تایمر 0 و کریستال خارجی 8MHZ در atmega16

      کریستال ساعت رو باید به تایمر 2 بدی .. وقتی برنامه رو برای ساعت بنویسی خودش تایمر رو برای 1 ثانیه تنظیم میکنه

      دیدگاه


        #4
        پاسخ : ساعت دیجیتال با تایمر 0 و کریستال خارجی 8MHZ در atmega16

        سلام چه جوری میشه
        کلاک رو از کریستال خارجی بگیرم ؟؟؟ میشه راهنمایی کنید ؟؟؟

        دیدگاه


          #5
          پاسخ : ساعت دیجیتال با تایمر 0 و کریستال خارجی 8MHZ در atmega16

          کلاک رو فرقی نمیکنه چون اهمیت نداره از نوسان ساز داخلی بگیر
          کریستال ساعت را به پایه های تایمر 2 وصل کن

          دیدگاه

          لطفا صبر کنید...
          X