اطلاعیه

Collapse
No announcement yet.

علت عقب و جلو رفتن دقیقه و ساعت در ساعت

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    علت عقب و جلو رفتن دقیقه و ساعت در ساعت

    با سلام بر مهندسین
    یک مدار ساعت دارم که گاهی اوقات 10 دقیقه یا بیشتر دقیقه اش جلو میره و ساعت اش گاهی اوقات 1 ساعت کم و زیاد میشه !!! قبلا اینطوری نبود جدیدا اینطوری شده است!!
    لطفا بگید این 3 خط چه کار می کند؟ این 0XFF یعنی چی؟ ایا منظور اش 1 هگزا دسیمال هست؟ 0 چی میشه؟ این کد ها را دستکاری کرده بودم قبلا ! شاید برای اینها باشه!
    کد:
    DDRB.7=0XFF; 
    DDRC.0=0XFF;
    PORTD=0XFF;
    سپاس

    #2
    پاسخ : علت عقب و جلو رفتن دقیقه و ساعت در ساعت

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

    دیدگاه


      #3
      پاسخ : علت عقب و جلو رفتن دقیقه و ساعت در ساعت

      DDRB.7=0XFF;
      DDRC.0=0XFF;
      تمام پین های پورت b و c رو خروجی میکنه.

      PORTD=0XFF;
      تمام پین های پورت d رو پول پ میکنه. (یعنی 1 میکنه)

      برای ساخت زمان از چی استفاده میکنید؟
      دیلی
      وقفه
      rtc تایمر2
      ای سی ساعت
      از کریستال خارجی استفاده میکنید یا کلاک داخلی؟
      www.gam-co.blogsky.com

      دیدگاه


        #4
        پاسخ : علت عقب و جلو رفتن دقیقه و ساعت در ساعت

        ممنون دوستان: مدار من ساعت و تایمر هست ! و با ای سی ساعت ds1307 و کریستال خارجی 32.768 هست!!! و از کلاک داخلی 8 مگاهرتز هم استفاده میشه !!!
        به نظر م هر چی هست از ان کد ها هست!! این مدار و برنامه را من قبلا خریده بودم !! چند تا مشکل دیگه هم داره!! چند خط نمونه کد اش را میزارم! ببیند از نظر کد نویسی مشکل ایا نداره؟

        کد:
        #include <mega8.h>
        #include <delay.h>
        #include <stdio.h> 
        #include <i2c.h>
        #include <ds1307.h>
        #include <alcd.h> 
        #define b_down   PIND.1
        #define b_up    PIND.2   
        #define b_set   PIND.0
        #define b_set_down PIND.3
        #define relay   PORTB.7 
        #define buzzer   PORTC.0 
        //____________________________________________________________
        void main(){ 
        char lcd_buffer1[16];
        unsigned char hr,min,sec,status=0,value=0,roz=0;
        unsigned char week,year,month,day;
        unsigned char en_hr=0,en_min=0,en_sec=0;
        unsigned char st_hr=0,st_min=0,st_sec=0;
        unsigned char en_year=0,en_month=0,en_day=0;
        unsigned char st_year=0,st_month=0,st_day=0;
        unsigned int main_year;
        DDRB.7=0XFF; 
        DDRC.0=0XFF;
        PORTD=0XFF;
        i2c_init();
        lcd_init(16);
        rtc_init(0,0,0);
        
        //if(b_set == 0)
        //{
        //  rtc_set_time(0,0,0);
        //  rtc_set_date(0,8,7,15);
        //  lcd_putsf("Successfully!");
        //  while(1)
        //  {
        //  }
        //}
        // 
        
        
        delay_ms(20);
        rtc_get_time(&en_hr,&en_min,&en_sec); 
        rtc_get_time(&st_hr,&st_min,&st_sec);
        rtc_get_date(&week,&en_day,&en_month,&en_year);
        rtc_get_date(&week,&st_day,&st_month,&st_year);
        delay_ms(20);
            
          while (1){  
            while(status == 0)
            {
              rtc_get_time(&hr,&min,&sec);
              rtc_get_date(&week,&day,&month,&year); 
              main_year = year + 2000;
              
              if(b_up == 0)
              {
                roz++;
                if(roz == 2) roz = 0;
                while(b_up == 0); 
              }  
              
              if(roz == 0)
              {
                if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day)
                {
                  value = 1;
                  relay = 1;
                  buzzer = 1;
                  delay_ms(2000);
                  buzzer = 0;
                } 
        
                if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day)
                {
                  value = 0;
                  relay = 0;
                } 
              }
              else
              {
                if(hr == en_hr & min == en_min & sec == en_sec)
                {
                  value = 1;
                  relay = 1;
                  buzzer = 1;
                  delay_ms(2000);
                  buzzer = 0;
                } 
        
                if(hr == st_hr & min == st_min & sec == st_sec)
                {
                  value = 0;
                  relay = 0;
                } 
              }      
        
              lcd_clear();
        
              sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec);
              lcd_gotoxy(0,0);    
              lcd_puts(lcd_buffer1);
              sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day);
              lcd_gotoxy(0,1);    
              lcd_puts(lcd_buffer1); 
                 
              if(value == 0)  
                lcd_putsf("Off");
              else
                lcd_putsf("On"); 
                
              if(roz != 0)  
                lcd_putsf(" R");        
        
              if(b_set == 0)
              {
                status++;
                if(status == 19) status = 0;
                while(b_set == 0); 
              }
              delay_ms(200);
            }  
            
            rtc_get_time(&hr,&min,&sec);
            b:
            while(status == 1)
            {
              if(b_up == 0)
              {  
                hr++;
                if(hr == 25) hr = 0;
                delay_ms(70);
              }  
        
              if(b_down == 0)
              {  
                hr--;
                if(hr == -1) hr = 0;
                delay_ms(70);
              }  
             
              lcd_clear();  
              lcd_gotoxy(0,0);
              sprintf(lcd_buffer1,"Time~%02u:%02u:%02u",hr,min,sec);
              lcd_puts(lcd_buffer1);
              delay_ms(80); 
              lcd_clear();
              sprintf(lcd_buffer1,"Time~ :%02u:%02u",min,sec);
              lcd_puts(lcd_buffer1);       
              delay_ms(80);
              if(b_set == 0)
              {
                rtc_set_time(hr,min,sec);
                status++;
                if(status == 19) status = 0;
                while(b_set == 0);  
              }
              if(b_set_down == 0)
              {
                status--;
                if(status == -1) status = 0;
                while(b_set_down == 0); 
                goto b; 
              }  
            }      
        
            while(status == 2)
            {
              if(b_up == 0)
              {  
                min++;
                if(min == 61) min = 0;
                delay_ms(70);
              }  
        
              if(b_down == 0)
              {  
                min--;
                if(min == -1) min = 0;
                delay_ms(70);
              }  
             
              lcd_clear();  
              lcd_gotoxy(0,0);
              sprintf(lcd_buffer1,"Time~%02u:%02u:%02u",hr,min,sec);
              lcd_puts(lcd_buffer1);
              delay_ms(80); 
              lcd_clear();
              sprintf(lcd_buffer1,"Time~%02u: :%02u",hr,sec);
              lcd_puts(lcd_buffer1);       
              delay_ms(80);
              if(b_set == 0)
              {
                rtc_set_time(hr,min,sec);
                status++;
                if(status == 19) status = 0;
                while(b_set == 0);  
              }
              if(b_set_down == 0)
              {
                status--;
                if(status == -1) status = 0;
                while(b_set_down == 0);
                goto b; 
              }
            }
        سپاس

        اضافه شده در تاریخ :
        نوشته اصلی توسط vahidabedi
        DDRB.7=0XFF;
        DDRC.0=0XFF;
        تمام پین های پورت b و c رو خروجی میکنه.

        PORTD=0XFF;
        تمام پین های پورت d رو پول پ میکنه. (یعنی 1 میکنه)
        دوست عزیز: زمانیکه مدار به برق وصل میشه صدای بازر در می اید به مدت 2 ثانیه و هم چنین رله و led هم چند ثانیه روشن می شوند !! بعد خاموش می شوند !! گاهی اوقات رله گیر می کنه و قطع نمیشه! و باید ریست بشه!! ایا برای همین کد ها هست مشکل ؟
        البته من صفر شان کردم ولی رله و led از کار می افتند موقع اجرای تایمر!!



        سپاس

        دیدگاه


          #5
          پاسخ : علت عقب و جلو رفتن دقیقه و ساعت در ساعت

          تا جای که میدونم .. این جلو و عقب رفتن ها بخاطر کلاک سیستم
          و حتی کریستال ساعت
          و تغذیه .. ... یعنی نذار مدار روی تغذیه ایسی ساعت تاثیر بذاره
          از لاینی جدا از اول تغذیه استفاده کن
          و همچنین کریستال مطمئن استفاده کن
          کریستال هم کمی از ایسی دور کن به اندازه نیم سانت

          همین

          دیدگاه


            #6
            پاسخ : علت عقب و جلو رفتن دقیقه و ساعت در ساعت

            از ds3231 استفاده کن
            designer2013.blogsky.com

            دیدگاه


              #7
              پاسخ : علت عقب و جلو رفتن دقیقه و ساعت در ساعت

              با توجه به این که این موضوع بارها در انجمن مطرح شده و یا جهت ساماندهی انجمن AVR موضوع قفل میشود

              دیدگاه

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