اطلاعیه

Collapse
No announcement yet.

راهنمایی در مورد طراحی تایمر خاص

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

    راهنمایی در مورد طراحی تایمر خاص

    با سلام بر اساتید
    من دنبال مداری می گردم که بتونه یک موبایل در بازه زمانی خاص شارژ کنه!!!
    سناریو به این شکل هست که: اداپتور موبایل وصل باید بشه به یک پریز برق(سیم فاز و نول) : این برق باید در بازه زمانی خاص وصل بشه به اداپتور موبایل تا موبایل شارژ بشود!! مثلا مثلا هر روز ساعت 2 بعد از ظهر!!! بعد از اینکه وصل شد باید بعد از 4 ساعت جریان برق قطع بشه!!! و..
    مثلا میخوام مدار هر روز به صورت خودکار عمل کنه و رله تحریک بشه و بتونه موبایل شارژ کنه !!
    گمان کنم باید از طریق رله این کار را انجام داد: برای سوییچ شدن اش!! ولی بقیه را نمیدانم!! به نظر شما چنین مداری شماتیک اش وجود داره؟؟؟
    لطفا اگر ایده ای دارید ارائه بدهید! یا راهنمایی در مورد الگویتم اش کنید!!! ایا باید تراشه یا قطعه خاصی برای ساعت استفاده کنم؟؟

    سپاس

    #2
    پاسخ : راهنمایی در مورد طراحی تایمر خاص

    خوب... اولین سوال من! این وسیله اسمش روشه.... موبایل یعنی قابل حمل و موبایلی که دائما به شارژر وصل باشه با تلفن خونه چه فرقی داره؟ ولی حالا هر طور خودت دوست داری.

    مدار به این صورت خواهد بود:
    مواد لازم :

    {1} یک عدد ATMEGA 8
    {2} یک عدد رله 5 ولت / DC
    {3} خازن با ظرفیت بالا (الکترولیت 16 ولت / 1000 تا 2200 میکروفاراد)
    {4} یکی دو تا LED برای جنگولک بازی مدار!
    {5} یکی دو تا مقاومت برای LED ها و دو تا برای خط I2C و یکی برای بیس ترانزیستور (به ترتیب 1K, 4.7K , 550Ω)
    {6} منبع تغذیه 5 ولت
    {7} ای سی ساعت DS1307
    {8) ترانزیستور BC547 برای تحریک رله
    {9} دیود 1N4007 برای هرزگرد رله

    سر هم بندی:
    مدار رو وصل می کنی! :applause: :applause: به دو بخش COM و NO رله هم برق شهر وصل میشه و شارژر به رله.
    حالا اگر نخواسته باشی ساعت کاری مدار رو تغییر بدی میشه بدون آی سی ساعت مدار رو جمع کرد اما برای ساعت دقیق آیسی DS1307 لازمه که ساعت ازش خوانده بشه و سر ساعت رله مدار تحریک بشه. اتصال دیود و ... هم که راحته. مجموعا مدار ساده ای هستش
    موفق باشی
    STM32 واقعا یه چیز دیگه است...

    دیدگاه


      #3
      پاسخ : راهنمایی در مورد طراحی تایمر خاص

      ممنون دوست عزیز:شما شماتیک این مدار را دارید + فایل هگز !!؟؟؟ چه طوری باید نوشته بشه !! من مبتدی هستم!! نمونه برنامه ای دارید؟؟شبیه همین چیزی که گفتید!!
      چند نکته:
      من نمیخوام مدار دکمه داشته باشه!!! میخوام زمانیکه مدار به برق وصل شد!!! طبق ساعتی که خودمان تعیین کردیم عمل کنه!!

      سپاس

      دیدگاه


        #4
        پاسخ : راهنمایی در مورد طراحی تایمر خاص

        وقت بخیر

        دوستان این دستگاه آمادهش هست !! هم مکانیکی هست که ساخت چین قیمت مناسب تره !!
        هم دیجیتالی هست ساخت شیوا امواج ایرانی !! فقط باید تنظیمش کنی !! 30 تا برنامه قبول میکنه !!

        دیدگاه


          #5
          پاسخ : راهنمایی در مورد طراحی تایمر خاص

          نوشته اصلی توسط ircaspianhero
          ممنون دوست عزیز:شما شماتیک این مدار را دارید + فایل هگز !!؟؟؟ چه طوری باید نوشته بشه !! من مبتدی هستم!! نمونه برنامه ای دارید؟؟شبیه همین چیزی که گفتید!!
          چند نکته:
          من نمیخوام مدار دکمه داشته باشه!!! میخوام زمانیکه مدار به برق وصل شد!!! طبق ساعتی که خودمان تعیین کردیم عمل کنه!!

          سپاس
          شماتیک این مدار سه سوته رسم میشه ولی بخش برنامه نویسی و طراحی سخت افزار واقعی یه کم سخته.... واقعا وقتشو ندارم و الا برات میساختم. :cry2:
          STM32 واقعا یه چیز دیگه است...

          دیدگاه


            #6
            پاسخ : راهنمایی در مورد طراحی تایمر خاص

            نوشته اصلی توسط taktrashe
            وقت بخیر

            دوستان این دستگاه آمادهش هست !! هم مکانیکی هست که ساخت چین قیمت مناسب تره !!
            هم دیجیتالی هست ساخت شیوا امواج ایرانی !! فقط باید تنظیمش کنی !! 30 تا برنامه قبول میکنه !!
            وقت شما هم به خیر
            میشه لطف کنید لینک بدید ؟؟
            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
            معرفی نرم افزار Codewizard PWM
            با من بیشتر آشنا شوید

            دیدگاه


              #7
              پاسخ : راهنمایی در مورد طراحی تایمر خاص

              من دیدم هست اما لینک ندیدم تو لوازم برقی های شهرمون هست برای روشن خاموش کردن تبلاو های تبلغاتی ازش استفاده میکنن و
              http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

              دیدگاه


                #8
                پاسخ : راهنمایی در مورد طراحی تایمر خاص

                شماتیک این مدار سه سوته رسم میشه ولی بخش برنامه نویسی و طراحی سخت افزار واقعی یه کم سخته.... واقعا وقتشو ندارم و الا برات میساختم.
                ممنون دوست عزیز: این پروژه یعنی ساخت ساعت و تقویم با ds1307: توی کتاب مهدس جابر الوندی هست که به زبان سی هست!!! در اصل شبیه این پروژه را دارم!!!
                ولی نمیدانم کجا کد را باید دست کاری کرد تا روی یک زمان خاص مثلا هر روز 2 بعد از ظهر رله فعال بشه!!!
                دوستان اگر میتونید راهنمایی کنید: بگید تا از شماتیک مدار اسکن بگیرم و قرار بدهم!! و یک نظری بدهید!!!
                سپاس

                دیدگاه


                  #9
                  پاسخ : راهنمایی در مورد طراحی تایمر خاص

                  ممنون دوست عزیز: این پروژه یعنی ساخت ساعت و تقویم با ds1307: توی کتاب مهدس جابر الوندی هست که به زبان سی هست!!!
                  اگر شما سورس برنامه های RTC و ساعت یا هر چیز دیگه ای شبیه به اون رو دارید کافیه یه جا توی حلقه اصلی برنامه یه شرط بزارید تا ساعت و دقیقه رو با زمان مورد نظر شما چک بکنه اگر درست بود ربه فعال بشه به همین راحتی
                  مثال شبه کد :
                  کد:
                  if (hour==alram_hour && minute == alarm_minute){
                  کد:
                  do some stuff!! ;
                  کد:
                  }
                  حالا میخوایید این اتفاق برای 2 ساعت آینده هم فعال بمونه میتونید یه روال بزارید تا بپره به اون و توی اون 2 ساعت کارهای مرتبط با اون رو انجام بده !

                  کد رو میشه به شکل نهایی به این صورت نوشت که
                  کد:
                  while (hour> alarm_hour_start )
                  do not charge
                  while (hour <= alarm _hour_start)
                  charge ;
                  while (hour >alarm_hour_end)
                  do not charge;
                  من دوست ندارم خودم را درگير مسئله بهشت يا جهنم بکنم ، چون در هر دو قسمت دوستان خوبي دارم !

                  دیدگاه


                    #10
                    پاسخ : راهنمایی در مورد طراحی تایمر خاص

                    ممنون دوست عزیز: زیاد متوجه نشدم!
                    این کدی که میزارم را لطف کن یک نگاه بنداز!! کجاش باید دستکاری بشه!! این کد اش خیلی خفن هست!! :mrgreen:

                    کد:
                    //<<<<<> Author: Jaber Alvandi <<<<>>>> Book: Microcontrollers AVR 
                    //>>>>>>>>>>>>>>>>>>>>> www.mcs-51a.blogfa.com <<<<<<<<<<<<<<<<
                    #include <mega16.h>
                    #include <delay.h>
                    #include <stdio.h> 
                    #include <stdlib.h> 
                    #asm
                      .equ __i2c_port=0x15 ;PORTC
                      .equ __sda_bit=1
                      .equ __scl_bit=0
                    #endasm
                    #include <i2c.h>
                    #include <ds1307.h>
                    #asm
                      .equ __lcd_port=0x1B ;PORTA
                    #endasm
                    #include <lcd.h> 
                    #define b_set   PINB.0
                    #define b_dec   PINB.1   
                    #define b_inc   PINB.2  
                    #define OK   1
                    #define Error 8  
                    flash unsigned char Table[13]={0,0,3,3,6,1,4,6,2,5,0,3,5};
                    flash unsigned char sh_table[6][12]={
                    	{11,10,10,9,9,9,8,9,9,10,11,9},
                    	{20,20,21,21,22,22,22,22,21,21,20,19},
                    	{11,10,10,9,9,9,8,9,9,10,11,10},
                    	{20,20,21,21,22,22,22,22,21,21,20,19},
                    	{12,11,11,10,10,10,9,10,10,11,12,10},
                    	{19,19,20,20,21,21,21,21,20,20,19,18}};   
                    flash unsigned char mi_table[6][12]={
                        {20,19,19,19,20,20,21,21,21,21,20,20},
                        {10,11,10,12,11,11,10,10,10,9,10,10},
                        {19,18,20,20,21,21,22,22,22,22,21,21},
                        {11,12,10,11,10,10,9,9,9,8,9,9},
                        {20,19,20,20,21,21,22,22,22,22,21,21},
                        {10,11,9,11,10,10,9,9,9,8,9,9}};   
                    typedef unsigned char byte;
                    flash byte char0[8]={4,10,0,21,31,0,0,0}; 
                    flash byte char1[8]={0,2,0,5,31,0,8,0}; 
                    flash byte char2[8]={0,1,3,3,1,0,0,0}; 
                    flash byte char0_j[8]={0,0,6,1,31,0,4,0}; 
                    flash byte char1_j[8]={0,0,28,8,31,3,0,0}; 
                    flash byte char2_j[8]={0,2,6,6,3,0,0,0}; 
                    unsigned char hour=0,minute=0,second=0,year=0,month=0,day=0,set_k=0;     
                    //____________________________________________________________________
                    void define_char(byte flash *pc,byte char_code){
                    byte i,a;
                    a=(char_code<<3)|0x40;
                    for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
                    } 
                    //____________________________________________________________________
                    void MI_TO_SH(unsigned int ym,unsigned char mm,unsigned char dm){
                    unsigned int k,t1,t2; 
                    ym=(0x000f & ym); 
                    k=ym%4;
                    if(k==3) k=2;
                    k*=2;
                    t1=mi_table[k][mm-1];
                    t2=mi_table[k+1][mm-1];
                    if(mm<3 || (mm==3 && dm<=mi_table[k][mm-1])) year=ym + 78;   
                    else year=ym + 79;
                    if(dm<=t1) { 
                    day=dm+t2;
                    month=(mm+8)%12+1;
                    }
                    else { 
                    day=dm-t1;
                    month=(mm+9)%12+1;
                     }
                    } 
                    //__________________________________________________________________
                    void SH_TO_MI(unsigned int ys ,unsigned char ms,unsigned char ds){
                    unsigned int k,t1,t2; 
                    ys=(0x00ff & ys);   
                    k = ys%4;
                    if( k == 0) k = 2;
                    else k = k + k;
                    t1 =sh_table[k - 2][ms-1];
                    t2 = sh_table[k-1][ms-1];
                    if(ms<10 || (ms==10 && ds <= sh_table[k-2][ms-1])) year= (ys - 79);
                    else year= (ys - 78);   
                    if(ds <= t1) {
                    day= ds + t2;
                    month= (ms + 1)%12 + 1;
                    }
                    else {
                    day= ds - t1;
                    month= (ms + 2)%12 + 1;
                     }
                    }   
                    //____________________________________________________________
                    char IsLeapYear(int Year){
                    Year=Year&0x0003;
                    if(Year==0)
                    return 1;
                    else
                    return 0;
                    }
                    //_____________________________________________________________
                    char TEST_SAL(unsigned int Input){
                    if(Input>=1990 && Input<=2099 )
                    return OK;
                    else
                    return !OK;
                    }
                    //__________________________________________________________________________________________
                    unsigned char GetDayofWeek(unsigned char CurrentYear,unsigned char Month,unsigned char Day){
                    unsigned int TempYear;
                    unsigned char AccValue; 
                    if(TEST_SAL(CurrentYear+2000)!=OK)
                    return Error;
                    TempYear = 1990;
                    AccValue = 0;
                    while(TempYear != (CurrentYear+2000)){
                    AccValue++;
                    if(IsLeapYear(TempYear))
                    AccValue++;
                    TempYear++;
                    }
                    if(Month > 2){
                    if(IsLeapYear(TempYear)==1)
                    AccValue++;
                    }
                    AccValue += Table[Month];
                    AccValue += Day;
                    AccValue= AccValue%7;
                    return (AccValue);
                    }
                    //_____________________________________________________________ 
                    void setting_key(){
                    set_k++; 
                    if(set_k==6) {set_k=0;goto exit_set;} 
                    _lcd_ready(); 
                    _lcd_write_data(0x0F);
                    switch(set_k){
                    case 1 : lcd_gotoxy(5,0);lcd_putsf("~?"); lcd_gotoxy(6,0);break;
                    case 2 : lcd_gotoxy(8,0);lcd_putsf("~?"); lcd_gotoxy(9,0);break;
                    case 3 : lcd_gotoxy(2,1);lcd_putsf("~?"); lcd_gotoxy(3,1);break;
                    case 4 : lcd_gotoxy(5,1);lcd_putsf("~?"); lcd_gotoxy(6,1);break;
                    case 5 : lcd_gotoxy(8,1);lcd_putsf("~?"); lcd_gotoxy(9,1);break;
                     }
                    delay_ms(500);
                    _lcd_ready(); 
                    _lcd_write_data(0x0c);
                    exit_set:
                    } 
                    //____________________________________________________________
                    void down_dec(){
                    if(set_k==1){
                    if(hour!=0){ 
                    hour--;
                    rtc_set_time(hour,minute,second);
                    delay_ms(10);
                     } 
                    }
                    if(set_k==2){
                     if(minute!=0){
                     minute--;
                     rtc_set_time(hour,minute,second); 
                     delay_ms(10);
                     }
                    }
                    if(set_k==3){
                    rtc_get_date(&day,&month,&year);
                    MI_TO_SH(year,month,day); 
                    if (year!=0) year--;
                    SH_TO_MI(year,month,day);
                    rtc_set_date(day,month,year);  
                    }
                    if(set_k==4){
                    rtc_get_date(&day,&month,&year);
                    MI_TO_SH(year,month,day); 
                    if (month!=1) month--;
                    SH_TO_MI(year,month,day);
                    rtc_set_date(day,month,year); 
                    }
                    if(set_k==5){
                    rtc_get_date(&day,&month,&year);
                    MI_TO_SH(year,month,day); 
                    if (day!=1) day--;  
                    SH_TO_MI(year,month,day);     
                    rtc_set_date(day,month,year); 
                     }
                    }
                    //_________________________________________________________
                    void up_inc(){
                    if(set_k==1){
                    hour++;
                    if(hour==24) hour=0;
                    rtc_set_time(hour,minute,second);
                    delay_ms(10); 
                    }
                    if(set_k==2){
                    minute++;
                    if(minute==60) minute=0;
                    rtc_set_time(hour,minute,second); 
                    delay_ms(10);
                    }
                    if(set_k==3){
                    rtc_get_date(&day,&month,&year);
                    MI_TO_SH(year,month,day); 
                    year++;
                    if (year==100) year=0; 
                    SH_TO_MI(year,month,day);
                    rtc_set_date(day,month,year);  
                    }
                    if(set_k==4){
                    rtc_get_date(&day,&month,&year);
                    MI_TO_SH(year,month,day); 
                    month++;
                    if (month==13) month=1; 
                    SH_TO_MI(year,month,day);
                    rtc_set_date(day,month,year); 
                    }
                    if(set_k==5){
                    rtc_get_date(&day,&month,&year);
                    MI_TO_SH(year,month,day); 
                    day++;
                    if (day==32) day=1;  
                    SH_TO_MI(year,month,day);     
                    rtc_set_date(day,month,year); 
                     }
                    }
                    //________________________________________________________ 
                    void shanbeh(){
                    define_char(char0,0);
                    define_char(char1,1);
                    define_char(char2,2);
                    lcd_gotoxy(11,1);
                    lcd_putchar(2);
                    lcd_putchar(1);
                    lcd_putchar(0);
                    }
                    //________________________________________________________
                    void jomeh(){
                    define_char(char0_j,0);
                    define_char(char1_j,1);
                    define_char(char2_j,2);    
                    lcd_gotoxy(11,1);
                    lcd_putchar(2);
                    lcd_putchar(1);
                    lcd_putchar(0);
                    }
                    //________________________________________________________
                    void day_week(){ 
                    unsigned char d_week; 
                    SH_TO_MI(year,month,day); 
                    d_week=GetDayofWeek(year,month,day); 
                    shanbeh();
                    lcd_gotoxy(14,1);
                    switch(d_week){
                    case 0 :lcd_putsf("1");break; 
                    case 1 :lcd_putsf("2");break; 
                    case 2 :lcd_putsf("3");break; 
                    case 3 :lcd_putsf("4");break; 
                    case 4 :lcd_putsf("5");break; 
                    case 5 :jomeh();lcd_putsf(" ");break; 
                    case 6 :lcd_putsf(" ");break; 
                     } 
                    }
                    //____________________________________________________________
                    void main(){ 
                    char lcd_buffer1[16]; 
                    char lcd_buffer2[16]; 
                    PORTC=0X00;
                    DDRC=0X00;
                    PORTB=0X00;
                    DDRB=0X00;
                    i2c_init();
                    rtc_init(0,0,0);
                    lcd_init(16);  
                    lcd_gotoxy(0,0); 
                    lcd_putsf("RTC");
                    rtc_set_time(0,0,0); 
                    rtc_set_date(14,9,0); 
                    delay_ms(20);     
                    while (1){ 
                    if(b_set==0) setting_key();
                    if(b_dec==0) down_dec(); 
                    if(b_inc==0) up_inc();   
                    rtc_get_time(&hour,&minute,&second); 
                    rtc_get_date(&day,&month,&year); 
                    MI_TO_SH(year,month,day); 
                    sprintf(lcd_buffer1,"Time=%02u:%02u:%02u",hour,minute,second);
                    sprintf(lcd_buffer2,"13%02u/%02u/%02u",year,month,day);
                    lcd_clear();   
                    day_week();  
                    lcd_gotoxy(0,0);
                    lcd_puts(lcd_buffer1);
                    lcd_gotoxy(0,1);
                    lcd_puts(lcd_buffer2);
                    delay_ms(250); 
                     };
                    }



                    سپاس

                    دیدگاه


                      #11
                      پاسخ : راهنمایی در مورد طراحی تایمر خاص

                      ممنون دوست عزیز: زیاد متوجه نشدم!
                      خب بگید کجا رو متوجه نشدید
                      حد اقل 3 تا متغیر داریم برای ساعت دقیقه ثانیه
                      ما میخوایم آلارم درست کنیم اسم متغیراش رو میزاریم الارم_ساعت الارم_دقیقه یا هر اسم دلخواه دیگه ای بعد میایم میگیم حالا واسه فعال شدن آلارم میگیم
                      هر وقت ساعت مساوی شد با ساعت_الارم و دقیقه مساوی شد با دقیقه_آلارم بیاد شارژر رو فعال کنه حالا بعد از فعال شدن میاد چک میکنه اگه زمان پایان شارژ شده بود میاد شارژر رو غیر فعال میکنه که اون هم دقیقا با همین روش میشه پیاده سازیش کرد
                      کد ها کاملا خوانا هستند اگه حتی یکبار زحمت میدادید به خودتون تا آخر میخوندید متوجه میشدید کجا باید این کار رو کرد
                      من دوست ندارم خودم را درگير مسئله بهشت يا جهنم بکنم ، چون در هر دو قسمت دوستان خوبي دارم !

                      دیدگاه


                        #12
                        پاسخ : راهنمایی در مورد طراحی تایمر خاص

                        ممنون دوست عزیز: من زیاد زبان سی بلد نیستم!!! و مبتدی هستم!!
                        مشکل من تعریف تابع alarm_hour_start یا alram_hour هست !!
                        چند سئوال: توی این برنامه: زمانیکه مدار را روشن کردیم باید خودمان با دکمه هایی که روی مدار هست : ساعت و دقیقه را تنظیم کنیم!! یا خودش یک ساعتی را به صورت پیش فرض نشان میده!!! مثلا ما روی ساعت 8 شب اگر تنظیم کنیم ایا زمانیکه مدار برق اش قطع بشود باز روی همان ساعت تنظیم هست و ساعت خودش جلو میره!!؟ چطوری هست!؟
                        من یک سیستم میخوام مثل ساعت ویندوز که همیشه دقیق هست و نیاز به تنظیم نداره!!! یعنی زمانیکه سیستم ریسارت میشه : و دوباره ویندوز بالا میاد همان ساعت ای که خودمان تنظیم کردیم که نشان میده! و طبق ان تنظیمات پیش میره!!

                        سپاس

                        دیدگاه


                          #13
                          پاسخ : راهنمایی در مورد طراحی تایمر خاص

                          ممنون دوست عزیز: من زیاد زبان سی بلد نیستم!!! و مبتدی هستم!!
                          یکی از خوبیای c اینه که لازم نیست بلد باشیدش تا بفهمید (تقریبا البته) :redface:
                          خیلی شبیه به زبان گفتاره تفلکی مثلا این خط از همون کدهایی که خودتون گذاشتید رو ببینید:
                          کد:
                          void down_dec(){
                          if(set_k==1){
                          if(hour!=0){ 
                          hour--;
                          rtc_set_time(hour,minute,second);
                          delay_ms(10);
                           } 
                          }
                          لازم نیست برنامه نویسی هم حتی بلد باشیم تا بفهمیم معنی مفهوم اینا چیه
                          چند سئوال: توی این برنامه: زمانیکه مدار را روشن کردیم باید خودمان با دکمه هایی که روی مدار هست : ساعت و دقیقه را تنظیم کنیم!!
                          set_k احتمالا مخفف set_key هست پس کلید برای تنظیم هست حالا چی کار میکنه ؟ ساعت رو داره یه دونه کم میکنه - - در آخر سر داره ساعت و دقیقه و ثانیه رو به روز میکنه و 10 میلی ثانیه هم تاخیر میده تا ثبات داشته باشه برنامه
                          چند سئوال: توی این برنامه: زمانیکه مدار را روشن کردیم باید خودمان با دکمه هایی که روی مدار هست : ساعت و دقیقه را تنظیم کنیم!!
                          شما شماتیک رو مگه ندارید ؟
                          مشکل من تعریف تابع alarm_hour_start یا alram_hour هست !!
                          تعریف آلارم ها چیز خاصی نیست که تو برنامه 2 تا متغییر از جنس متغیر هایی که ساعت و دقیقه رو نگه میدارند میسازید (برای اینکه کار راحت باشه) بعد یه تابع مینویسید که توش شرطای روشن یا خاموش شدن آلارم که همون شارژر شماست رو چک میکنه و در نهایت بعد از اینکه تابع رو نوشتید میاید آخر حلقه اصلی برنامه فراخوانی میکنیدش

                          مدار برق اش قطع بشود باز روی همان ساعت تنظیم هست و ساعت خودش جلو میره!!؟
                          من یک سیستم میخوام مثل ساعت ویندوز...
                          تمام RTC ها و تراشه های اونها همین یه وضیفه رو دارند به علاوه ی نگه داری تاریخ و روز توی بعضی از مدل ها .
                          تراشه DS1307 که این مثال بر اساس اون هست هم کارش همینه با یه باطری 10 سال اطلاعات رو نگه میداره و به روز میکنه و چیزی پاک نمیشه
                          من دوست ندارم خودم را درگير مسئله بهشت يا جهنم بکنم ، چون در هر دو قسمت دوستان خوبي دارم !

                          دیدگاه


                            #14
                            پاسخ : راهنمایی در مورد طراحی تایمر خاص

                            ممنون دوست عزیز: ان طوری که من متوجه شدم: عملکردDS1307 مثل همین ساعت های دیواری یا دیجیتال می ماند!!! یعنی همه چیز بستگی به باتری داره !!! درسته!!! مثلا اگر باتری یا برق مدار قطع بشه ساعت عقب با جلو می ماند!!!
                            شما شماتیک رو مگه ندارید ؟
                            شماتیک مدار توی کتاب هست!!
                            ==================================================
                            راستی یک راه ساده تر به نظرم رسید به نظر شما جواب میده !! توی شبیه سازی که جواب داد!!!
                            با استفاده از delay: مثلا من میخوام مدار 5 ساعت روشن بماند و بعد 5 ساعت به مدت 12 ساعت خاموش و بعد دوباره 5 ساعت روشن بشود و همینجوری ادامه داشته باشه!!
                            خب : هر 1000 میلی ثانیه میشه 1 ثانیه و هر ساعت 3600 ثانیه است پس 5*3600 می کنم میشه 18000 و بعد 12 در 3600 ضرب و میشه 43200 ثانیه!!
                            به نظر شما این روش جواب میده!!؟؟؟ کریستال 16 مگا باشه بهتر هست یا 8 مگا !!؟؟؟

                            کد:
                               
                                   PORTC.0=1;
                                   delay_ms(18000);
                                   PORTC.0=0;
                                   delay_ms(43200);
                            سپاس

                            دیدگاه


                              #15
                              پاسخ : راهنمایی در مورد طراحی تایمر خاص

                              اون قدیم ندیما که RTC دم دست نداشتم یه بار اومدم همینجوری ساعت درست کنم
                              هر یک دقیقه 2-3 دقیقه عقب جلو میرفت ساعت :mrgreen:
                              برای تایمر هایی که زیاد حساس و بحرانی نیستن میشه این کارو کرد
                              البته نمیدونم تابع wait بتونه 43200 میلی ثانیه یا 18000 ثانیه رو نگر داره باید نگاه کنم
                              من دوست ندارم خودم را درگير مسئله بهشت يا جهنم بکنم ، چون در هر دو قسمت دوستان خوبي دارم !

                              دیدگاه

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