اطلاعیه

Collapse
No announcement yet.

ساخت ساعت با AVR

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

    ساخت ساعت با AVR

    سلام دوستان من یه ATmega8 دارم که میخوام .
    ساعت درست کنم . کریستال 32 هم دارم
    ولی وقتی از کد زیر در کامپایلر Code Vision استفاده می کنم
    کد:
    interrupt [TIM2_OVF] void counter(void){
    
    }
    اصلا کلمه interrupt رو نمیشناسه آیا کتاب خانه ای داره که باید اینکلود کنم ؟

    --------------------------------------------------------
    یک سوال دیگه هم داشتم .
    من با تابع delay_ms
    هر 50 میلی ثانیه مقدار TCNT2 رو می خونم اما از یک شروع نمیشه
    (مبنای Clock هم کریستال 32 گذاشتم )
    یک بار 100 یکبار 234 و ... عدد های بی ربط ظاهر میشه
    یعنی سرعت خیلی زیاده که اینطوری میشه

    میشه لطفا یک توضیحات مختصر در مورد تنظیمات AVR برای
    بدست آوردن ثانیه بدین

    بسیار ممنونم

    #2
    پاسخ : ساخت ساعت با AVR

    ببخشید دوستان مشکلم در رابطه با interrupt حل شد
    (interrupt رو داخل main گذاشته بودم!!!!! :angry: )

    دیدگاه


      #3
      پاسخ : ساخت ساعت با AVR

      دوست عزیز فکر می کنم بهتره برنامه رو رو بزاری تا مشکلو حل کنیم...
      Share OR Die

      دیدگاه


        #4
        پاسخ : ساخت ساعت با AVR

        ممنون از توجه شما
        شما فرض کنید من یک ATmega8 دارم و می خوام یک مقدار ثانیه داشته باشم
        یعنی یک متغییر مثلا به اسم i که در هر ثانیه یک i++ بشه
        می تونین منو مرحله مرحله راهنمای کنید که
        چطوری از کانتر ها استفاده کنم ؟

        دیدگاه


          #5
          پاسخ : ساخت ساعت با AVR

          نوشته اصلی توسط k2-4u
          ممنون از توجه شما
          شما فرض کنید من یک ATmega8 دارم و می خوام یک مقدار ثانیه داشته باشم
          یعنی یک متغییر مثلا به اسم i که در هر ثانیه یک i++ بشه
          می تونین منو مرحله مرحله راهنمای کنید که
          چطوری از کانتر ها استفاده کنم ؟
          از کانتر یا تایمر؟؟؟؟
          فکر کنم منظورت تایمره نه؟؟؟
          Share OR Die

          دیدگاه


            #6
            پاسخ : ساخت ساعت با AVR

            بله تایمر ! ممنون

            دیدگاه


              #7
              پاسخ : ساخت ساعت با AVR

              نوشته اصلی توسط k2-4u
              بله تایمر ! ممنون
              سلام دوست عزیز
              فرض کن که فرکانس کاری میکرو 16MHz باشه ، در صورتی که ضریب تقسیم( )N رو 64 در نظر بگیری می تونی برای تولید زمان 10ms مقدار F63C رو قرار بدی ، بدین ترتیب در هر 10 میلی ثانیه یک وقفه خواخی داشت ، حالا توی زیر برنامه وقفه یک متغیر از نوع int رو (مثلا timercntr) تعریف می کنی و به ازای هر بار وقفه یک .احد به اون اضافه میکنی . وقتی که مقدار اون 100 شد یعنی مدت زمان 1 ثانیه (100*10=1ثانیه) بدست اومده

              16MHz/64=250KHz=فرکانس پالس ساعت تایمر
              1/250KHz=4us=مدت زمان یک شمارش
              2500=10ms/4us=تعداد پالس لازم برای مدت 10 میلی ثانیه
              63036=65536-2500=عدد لازم برای TCNT1

              که مقدار هگز نتیجه رو باید توی TCCNT1 بذاری
              منبع : میکرو کنترلر AVR مولف مهدی پرتویی فر ص 176 ، انتشارات نص
              ولی در کل این روش دقیق نیست و در دراز مدت تنظیم ساعت بهم می خوره ، بهترین روش استفاده از RTC هست
              در دایره قسمت ما نقطه تسلیمیم لطف آنچه تو اندیشی حکم انچه تو بنمایی

              دیدگاه


                #8
                پاسخ : ساخت ساعت با AVR

                خیلی ممنون دوست عزیز من تصمیم داشتم از RTC استفاده کنم
                ولی به مشکلی یک مشکل نا معلوم بر خوردم

                از نظر سخت افزاری مدار کاملا درست بسته شده
                بالای 30 بار تست کردم
                و از این نظر مطمئنم اما

                ساعت و دقیقه و ثانیه رو 0 میزنه و حرکت هم نمی کنه
                از DS1307 و ATmega8 استفاده می کنمم

                با ATmega16 هم تست کردم
                کریستال رو 2 بار عوض کردم
                آی سی DS1307 هم دوبار عوض کردم

                ورژن Studo رو هم آبدیت کردم ولی !!!
                بازم کار نمیکنه
                کد:
                /*****************************************************
                This program was produced by the
                CodeWizardAVR V2.04.4a Advanced
                Automatic Program Generator
                © Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.
                http://www.hpinfotech.com
                
                Project : 
                Version : 
                Date  : 5/4/2010
                Author : NeVaDa
                Company : korosh
                Comments: 
                
                
                Chip type        : ATmega8L
                Program type      : Application
                AVR Core Clock frequency: 4.000000 MHz
                Memory model      : Small
                External RAM size    : 0
                Data Stack size     : 256
                *****************************************************/
                
                #include <mega8.h>
                #include <delay.h>
                #include <stdlib.h>
                
                // I2C Bus functions
                #asm
                  .equ __i2c_port=0x12 ;PORTD
                  .equ __sda_bit=0
                  .equ __scl_bit=1
                #endasm
                #include <i2c.h>
                
                // DS1307 Real Time Clock functions
                #include <ds1307.h>
                
                // Alphanumeric LCD Module functions
                #asm
                  .equ __lcd_port=0x18 ;PORTB
                #endasm
                #include <lcd.h>
                
                // Declare your global variables here
                
                void main(void)
                {
                // Declare your local variables here
                    unsigned char h,m,s;
                    unsigned char hc[10],mc[10],sc[10];
                
                // Input/Output Ports initialization
                // Port B initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                PORTB=0x00;
                DDRB=0x00;
                
                // Port C initialization
                // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                PORTC=0x00;
                DDRC=0x00;
                
                // Port D initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                PORTD=0x00;
                DDRD=0x00;
                
                // Timer/Counter 0 initialization
                // Clock source: System Clock
                // Clock value: Timer 0 Stopped
                TCCR0=0x00;
                TCNT0=0x00;
                
                // Timer/Counter 1 initialization
                // Clock source: System Clock
                // Clock value: Timer1 Stopped
                // Mode: Normal top=FFFFh
                // OC1A output: Discon.
                // OC1B output: Discon.
                // Noise Canceler: Off
                // Input Capture on Falling Edge
                // Timer1 Overflow Interrupt: Off
                // Input Capture Interrupt: Off
                // Compare A Match Interrupt: Off
                // Compare B Match Interrupt: Off
                TCCR1A=0x00;
                TCCR1B=0x00;
                TCNT1H=0x00;
                TCNT1L=0x00;
                ICR1H=0x00;
                ICR1L=0x00;
                OCR1AH=0x00;
                OCR1AL=0x00;
                OCR1BH=0x00;
                OCR1BL=0x00;
                
                // Timer/Counter 2 initialization
                // Clock source: System Clock
                // Clock value: Timer2 Stopped
                // Mode: Normal top=FFh
                // OC2 output: Disconnected
                ASSR=0x00;
                TCCR2=0x00;
                TCNT2=0x00;
                OCR2=0x00;
                
                // External Interrupt(s) initialization
                // INT0: Off
                // INT1: Off
                MCUCR=0x00;
                
                // Timer(s)/Counter(s) Interrupt(s) initialization
                TIMSK=0x00;
                
                // Analog Comparator initialization
                // Analog Comparator: Off
                // Analog Comparator Input Capture by Timer/Counter 1: Off
                ACSR=0x80;
                SFIOR=0x00;
                
                // I2C Bus initialization
                i2c_init();
                
                // DS1307 Real Time Clock initialization
                // Square wave output on pin SQW/OUT: Off
                // SQW/OUT pin state: 0
                rtc_init(0,0,0);
                rtc_set_time(12,1,23);
                delay_ms(2000);
                
                // LCD module initialization
                lcd_init(16);
                
                while (1)
                   { 
                    rtc_get_time(&h,&m,&s);
                   // Place your code here
                    lcd_gotoxy(0,0); 
                    itoa(s,sc); 
                    lcd_puts(sc);
                    
                    lcd_gotoxy(3,0); 
                    itoa(m,mc); 
                    lcd_puts(mc);
                     
                    lcd_gotoxy(5,0); 
                    itoa(h,hc); 
                    lcd_puts(hc);
                    
                    
                     lcd_gotoxy(0,1); 
                     lcd_putsf("chera kar nemi**** ahmagh"); 
                    
                    delay_ms(50);
                
                   };
                }

                دیدگاه


                  #9
                  پاسخ : ساخت ساعت با AVR

                  در همه انجمن های لاتین و فارسی گشتم
                  چند نفر دیگه هم مشکل من رو داشتن که سوالشون بی جواب مونده بود :cry:

                  دیدگاه

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