اطلاعیه

Collapse
No announcement yet.

rtc ds1307 ساعت ارزان ولی بدون مشتری

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

    پاسخ : پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

    نوشته اصلی توسط سامان تقی پور
    واسه من ورژنش اینه: CodeVision AVR 2.05.3
    خب باید با این ورژن کار کنه دیگه. چون قدیمی ها هم با این ورژن راش انداختن. درسته؟
    اره اما من خودم با ورژن بالاترش این مشکل نداشتم
    دوما نمیدونم مشکل ا کجاست که ای سی برا 165 بجای ثاتیه دقیقه ساعت میفرسته
    http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

    دیدگاه


      پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

      ببخشید دوستان من دو سال پیش با مگا32 و ds1307 یه ساعت درست کردم که نسبتا خوب کار میکرد فقط روزی 1 ثانیه جلو می افتاد

      اما الان دوباره اومدم یه ساعت با ds1307 و مگا32 درست کردم و درست مثل قبلی رو فیبر سوراخدار بستم و مقاومت پول پ 1.8 کیلو گذاشتم و بدنه کریستال رو هم زمین کردم و بین مگا32 و ds1307 هم دوسانت فاصله گذاشتم
      از پایه sqw/out هم برای نمایش ثانیه استفاده کردم(دقیقا مثل ساعت قبلی)
      اما بعد از گذشت 1 ساعت به اندازه 1 دقیقه جلو زد ! :angry:
      کریستال رو عوض کردم ولی بازم جلو میزنه هیچ فرقی نکرده!
      می خواستم بدونم شما هم همچین مشکلی داشتین و راه حلش چیه ؟
      با تشکر

      دیدگاه


        پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

        سلام
        منم میخام یه ساعت معکوس قابل تنظیم بسازم!!
        این ساده ترین برنامه ای بود که دیدم اما نمیدونم چطور باید ساعت و دقیقه اش رو دسکاری کنم و شمارش اونو معکوس کنم!
        Config Clock = Soft
        Enable Interrupts
        Date$ = "09/09/94"
        Time$ = "1156"
        Do
        Home
        Lcd Time$
        Locate 2 , 1
        Lcd Date$
        Loop
        End

        ممنون میشم اگه راهنمایی کنید
        تخیل مهمتر از دانش است
        علم محدود است اما تخیل دنیا را دربر میآ‌گیرد
        آلبرت انیشتین

        دیدگاه


          پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

          نوشته اصلی توسط سیـــــــــم
          سلام
          منم میخام یه ساعت معکوس قابل تنظیم بسازم!!
          این ساده ترین برنامه ای بود که دیدم اما نمیدونم چطور باید ساعت و دقیقه اش رو دسکاری کنم و شمارش اونو معکوس کنم!
          Config Clock = Soft
          Enable Interrupts
          Date$ = "09/09/94"
          Time$ = "1156"
          Do
          Home
          Lcd Time$
          Locate 2 , 1
          Lcd Date$
          Loop
          End

          ممنون میشم اگه راهنمایی کنید
          تایمر ها استفاده کن
          http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

          دیدگاه


            پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

            سلام، در اتصال DS1307 به میکرو mega8:

            پایه های 5 و 6 از 1307 که SDA و SCL هستند رو باید حتما به پایه های متناظر در میکرو وصل کرد؟ (یعنی پایه های 27 و 28 در مگا8 که در دیتا شیت به کاربرد SDA و SCL این پایه ها هم اشاره شده)

            یا اینکه نه هیچ اهمیتی نداره و به هر پینی که بخواییم میشه وصلشون کرد؟

            دیدگاه


              پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

              اون دوتا پایه سخت افزاری هستن یعنی cpu کمتر درگیر میشه
              ولی میتونی نرم افزاری هرپایه رو خواستی انتخاب کنی

              دیدگاه


                پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

                سلام
                من این مدار رو یا استفاده از برد آموزشی ای وی آر پروگرام کردم ولی به صورت 0:0: نشون میده و هیچ شماره ای نمی اندازه
                میشه راهنمایی فرمایین

                دیدگاه


                  پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

                  نوشته اصلی توسط mhddns
                  سلام
                  من این مدار رو یا استفاده از برد آموزشی ای وی آر پروگرام کردم ولی به صورت 0:0: نشون میده و هیچ شماره ای نمی اندازه
                  میشه راهنمایی فرمایین
                  مقدار بده بهش شروع میکنه شمارش
                  http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

                  دیدگاه


                    پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

                    نوشته اصلی توسط MAHDI ZAMANI
                    مقدار بده بهش شروع میکنه شمارش
                    ببخشید من مبتدی هستم. میشه کدش رو بنویسید؟

                    دیدگاه


                      پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

                      نوشته اصلی توسط <Xilinx>
                      سلام، در اتصال DS1307 به میکرو mega8:

                      پایه های 5 و 6 از 1307 که SDA و SCL هستند رو باید حتما به پایه های متناظر در میکرو وصل کرد؟ (یعنی پایه های 27 و 28 در مگا8 که در دیتا شیت به کاربرد SDA و SCL این پایه ها هم اشاره شده)

                      یا اینکه نه هیچ اهمیتی نداره و به هر پینی که بخواییم میشه وصلشون کرد؟
                      پروتکل ارتباطی میتونه نرم افزاری باشه که مهم نیست به هر پایه ای بزنی باید با نرم افزارت بنویسی و یخورده پردازش بیشتر میبره
                      اما در پروتکل سخت افزاری باید حتما به همون پایه های مشخص شده بزنی و پردازش کمتری رو میگیره

                      اضافه شده در تاریخ :
                      نوشته اصلی توسط mhddns
                      ببخشید من مبتدی هستم. میشه کدش رو بنویسید؟
                      توی توضیحات کتابخانه خود کدویژن امده که
                      کد:
                      unsigned char rtc_read(unsigned char address);
                      void rtc_write(unsigned char address,unsigned char data);
                      void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out);
                      void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec);
                      void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec);
                      void rtc_get_date(unsigned char *week_day, unsigned char *day,unsigned char *month,unsigned char *year);
                      void rtc_set_date(unsigned char week_day, unsigned char day,unsigned char month,unsigned char year);
                      که تمام توابع کار با این ایسی و کتابخانه کدویژن رو مطرح کرده حالا طبق همین توضیحات برای ست کردن یک مقدار ساعت و دقیقه و ثانیه بر روی ای سی باید از این دستور استفاده کنیم
                      کد:
                      void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec);
                      پس دستور زیر فرمت نوشتن تابع رو برامون مشخص کرده حالا توی برنامه ی چیزی مثل این رو مینویسیم
                      کد:
                      rtc_set_time(h,m,s);
                      اینو از توی یکی از برنامه های خودم کپی کردم و میاد متغیر hرو به عنوان مقدار ساعت توی ایسی مینویسه و متغیرm رو به عنوان دقیقه و متغیرs رو به عنوان ثانیه
                      شما میتونید جای این متغیر ها هم عدد بزارید
                      اینطوری:
                      کد:
                      rtc_set_time(12,00,00);
                      و طبق این دستور ساعت 12 و 0 دقیقه و0 ثانیه روی ای سی نوشته میشه
                      امید وارم اندازه کافی توضیح داده باشم
                      موفق باشید
                      http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

                      دیدگاه


                        پاسخ : پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

                        نوشته اصلی توسط MAHDI ZAMANI
                        اره اما من خودم با ورژن بالاترش این مشکل نداشتم
                        دوما نمیدونم مشکل ا کجاست که ای سی برا 165 بجای ثاتیه دقیقه ساعت میفرسته
                        پول پ sda , scl
                        مشخصات : http://www.eca.ir/forum2/index.php?topic=1721.msg638969#msg638969

                        هیچ وقت از یادگیری نترس
                        [move] :agree: :biggrin: :sad: :rolleyes:[/move]

                        دیدگاه


                          پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

                          سلام.یک تابع نوشتم برای تنظیم ساعت و تاریخ و ال سی دی کارکتری.امید وارم به دردتون بخوده.وقت گذاشتم پاش.خوشتون اومد یک صلوات بفرستین.یک تابع تبدیل تاریخ هم هست از استاد هادی اسدی.امید وارم خوشتون بیاد.
                          کد:
                            unsigned char  ym,mmm,dm,wm,h,m,s,g2,j2, buffer3[]={0,0,0,0,0,0,0,0,0,0,0};
                            
                            unsinged int ys,ms,ds;
                          
                            #include <m2s.lib>
                          
                           
                          //===========================================tarif klid ha===============================
                          #define up PIND.1
                          #define down PIND.0
                          #define esc PIND.2
                          #define mod PIND.3
                          
                          
                          //============================================namayesh tarikh================================
                          //============================================میدونم اشتباه نوشتاری داره دیر فهمیدم=========================
                          
                               void show_deta(char x,char y){
                               
                                rtc_get_date(&wm,&dm,&mmm,&ym);
                                ys=ym;
                                ds=dm;
                                ms=mmm;
                                ys=ys+2000;
                                date_convert(&ys,&ms,&ds,1);
                          
                                 sprintf(buffer3,"%d/%d/%d",ys,ms,ds);
                                 lcd_gotoxy(x,y);
                               lcd_puts(buffer3);
                               }
                          
                          //==========================================namayesh saat====================================
                           void show_time(char x,char y){
                          
                                l
                              rtc_get_time(&h,&m,&s);
                          
                               lcd_gotoxy(x,y);
                               sprintf(buffer3,"%d:%d:%d",h,m,s);
                               lcd_puts(buffer3);
                               delay_ms(10);
                          
                               }
                          
                          
                          //=============================================tanzim saat va tarikh=========================
                          
                          
                          
                              void set_t_c(){
                              PORTA.5=1;
                              lcd_clear();
                               // lcd_dis();
                               l=1;
                                rtc_set_time(h,m,s);
                                rtc_set_date(wm,dm,mmm,ym) ;
                          
                          
                                while(esc==1)
                                {
                                   // lcd_dis();
                                   //if(ym>21)sc=1400;
                          
                          
                                   lcd_gotoxy(0,0);
                                   lcd_putsf("SetTime");
                                   lcd_gotoxy(8,0);
                                  sprintf(buffer3,"%d:%d:%d",h,m,s);
                                  lcd_puts(buffer3);
                                  rtc_set_time(h,m,s);
                                   lcd_gotoxy(0,1);
                                   lcd_putsf("SetDate");
                                   lcd_gotoxy(8,1);
                                  sprintf(buffer3,"%d/%d/%d",ym,mmm,dm);
                                   lcd_puts(buffer3);
                                  rtc_set_date(wm,dm,mmm,ym) ;
                          
                          
                          
                          
                          
                          
                          
                                  if(mod==0){
                                  lcd_dis();
                                key_out();
                                g2++;
                                if(g2>11){g2=1;}
                                }
                          
                          
                          
                                 if (g2==1)
                                 {
                                  lcd_gotoxy(8,0);
                                 sprintf(buffer3,"%d:%d:%d",h,m,s);
                                  lcd_puts(buffer3);
                          
                                  delay_ms(200);
                          
                                  lcd_gotoxy(8,0);
                                  sprintf(buffer3,"%d:%d: ",h,m);
                                  lcd_puts(buffer3);
                                  delay_ms(200);
                                  j2=1;
                          
                          
                                 }
                                 if(up==0 && j2==1){
                                 g2=2;
                                 delay_ms(330);
                                  if(s<60)s++;
                                   if(s>=60){s=0;lcd_clear();}
                                 }
                                   if(down==0 && j2==1){
                                    g2=2;
                                    delay_ms(330);
                                      if(s>0)
                                       s--;
                                       else
                                      s=0;
                                      lcd_clear();
                          
                                   }
                          
                                     if(g2==3){
                          
                                  lcd_gotoxy(8,0);
                                   sprintf(buffer3,"%d:%d:%d",h,m,s);
                                   lcd_puts(buffer3);
                          
                                    delay_ms(200);
                                     if(m<10){
                                     lcd_gotoxy(8,0);
                                     sprintf(buffer3,"%d: :%d",h,s);
                                        }
                                        else if(m>=10){
                                         lcd_gotoxy(8,0);
                                         sprintf(buffer3,"%d: :",h);
                                      }
                          
                                        lcd_puts(buffer3);
                                       delay_ms(200);
                                     j2=2;
                                 }
                          
                          
                                       if(up==0 && j2==2){
                          
                                     g2=4;
                                     delay_ms(330);
                                     if(m<60)m++;
                                       if(m>=60){m=0;lcd_clear();}
                                     }
                          
                                    if(down==0 && j2==2){
                          
                                   g2=4;
                                   delay_ms(330);
                                     if(m>0)
                                     m--;
                                    else
                                   m=0;
                                    lcd_clear();
                                   }
                          
                          
                                    if(g2==5){
                                lcd_gotoxy(8,0);
                                sprintf(buffer3,"%d:%d:%d",h,m,s);
                                lcd_puts(buffer3);
                          
                                delay_ms(200);
                                if(h<10){
                                lcd_gotoxy(8,0);
                                sprintf(buffer3," ",h);
                                }
                                else if(h>=10){
                                lcd_gotoxy(8,0);
                                sprintf(buffer3," ",h);
                                }
                          
                                 lcd_puts(buffer3);
                                 delay_ms(200);
                                j2=3;
                                }
                          
                                if(up==0 && j2==3){
                          
                                g2=6;
                                delay_ms(330);
                                if(h<24)h++;
                                if(h>=24){h=0;lcd_clear();}
                                }
                          
                                if(down==0 && j2==3){
                          
                                g2=6;
                                delay_ms(330);
                                if(h>0)
                                h--;
                                else
                                h=0;
                                lcd_clear();
                                }
                          
                          
                                  if (g2==7)
                                 {
                                  lcd_gotoxy(8,1);
                                 sprintf(buffer3,"%d/%d/%d",ym,mmm,dm);
                                  lcd_puts(buffer3);
                          
                          
                          
                                  delay_ms(200);
                                  if(ym<10){
                                  lcd_gotoxy(8,1);
                                   sprintf(buffer3," ",ym);
                                  }
                                   else if(h>=10){
                                   lcd_gotoxy(8,1);
                                    sprintf(buffer3," ",ym);
                                   }
                          
                                   lcd_puts(buffer3);
                                    delay_ms(200);
                          
                                     j2=4;
                          
                          
                                 }
                                 if(up==0 && j2==4){
                                 g2=8;
                                 delay_ms(330);
                                  if(ym<99)ym++;
                                   if(ym>=99){ym=0;lcd_clear();}
                                 }
                                 if(down==0 && j2==4){
                          
                                 g2=8;
                                  delay_ms(330);
                                   if(ym>0)
                                    ym--;
                                   else
                                   ym=0;
                                  lcd_clear();
                                 }
                          
                          
                                   if(g2==9){
                          
                                  lcd_gotoxy(8,1);
                                   sprintf(buffer3,"%d/%d/%d",ym,mmm,dm);
                                   lcd_puts(buffer3);
                          
                                    delay_ms(200);
                                     if(mmm<10){
                                     lcd_gotoxy(8,1);
                                     sprintf(buffer3,"%d/ /%d",ym,dm);
                                        }
                                        else if(mmm>=10){
                                         lcd_gotoxy(8,1);
                                         sprintf(buffer3,"%d/ /",ym);
                                      }
                          
                                        lcd_puts(buffer3);
                                       delay_ms(200);
                                     j2=5;
                                 }
                          
                                    if(up==0 && j2==5){
                          
                                     g2=10;
                                     delay_ms(330);
                                     if(mmm<13)mmm++;
                                       if(mmm>=13){mmm=1;lcd_clear();}
                                     }
                          
                                    if(down==0 && j2==5){
                          
                                   g2=10;
                                   delay_ms(330);
                                     if(mmm>0)
                                     mmm--;
                                    else
                                   mmm=1;
                                    lcd_clear();
                                   }
                          
                          
                          
                          
                                    if (g2==11)
                                 {
                                  lcd_gotoxy(8,1);
                                 sprintf(buffer3,"%d/%d/%d",ym,mmm,dm);
                                  lcd_puts(buffer3);
                          
                                  delay_ms(200);
                          
                                  lcd_gotoxy(8,1);
                                  sprintf(buffer3,"%d/%d/ ",ym,mmm);
                                  lcd_puts(buffer3);
                                  delay_ms(200);
                                  j2=6;
                          
                          
                                 }
                          
                          
                                 if(up==0 && j2==6){
                                 g2=12;
                                 delay_ms(330);
                          
                                  if(mmm==1 || mmm==3 || mmm==5 || mmm==7 ||mmm==8 || mmm==10|| mmm==12)
                                  {
                                  if(dm<32)dm++;
                                   if(dm>=32){dm=1;lcd_clear();}
                                   }
                          
                                   if(mmm==4 || mmm==6 || mmm==9 || mmm==11)
                                  {
                                  if(dm<31)dm++;
                                   if(dm>=31){dm=1;lcd_clear();}
                                   }
                                   if(mmm==2)
                                  {
                                  if(dm<30)dm++;
                                   if(dm>=30){dm=1;lcd_clear();}
                                   }
                          
                          
                          
                          
                          
                                   }
                          
                          
                          
                          
                          
                          
                          
                                   if(down==0 && j2==6){
                                    g2=12;
                                    delay_ms(330);
                                      if(dm>0)
                                       dm--;
                                       else
                                      dm=1;
                                      lcd_clear();
                          
                                   }
                          
                          
                          
                          
                          
                          
                          
                                }
                                g2=1;
                                lcd_clear();
                          
                          
                          
                          
                                 }

                          اینم تبدیل تاریخ
                          کد:
                          #define Miladi2Gamari  1
                          #define Miladi2Shamsi  2
                          #define Shamsi2Miladi  3
                          
                          
                          
                          
                          long Shamsi2JDN(int iYear ,int iMonth ,int iDay)
                            {
                            #define Shmsi_Epoch  1948321
                            long epbase,epyear, mdays;
                          
                            if (iYear >= 0)
                              epbase = iYear - 474;
                            else
                              epbase = iYear - 473;
                          
                            epyear = 474 + (epbase % 2820);
                            if (iMonth <= 7)
                              mdays = (long)(iMonth - 1) * 31;
                            else
                              mdays = (long)(iMonth - 1) * 30 + 6;
                            return (iDay + mdays + (((epyear * 682) - 110) / 2816) + ((epyear - 1) * 365) + ((epbase / 2820) * 1029983) + (1948321 - 1));
                            }
                          
                          
                          
                            void JDN2Shamsi(long jdn,int *iYear ,int *iMonth ,int *iDay )
                            {
                            long cycle;
                            long cyear;
                            long ycycle;
                            long aux1, aux2;
                            long yday;
                          
                            cycle = (jdn - 2121446) / 1029983;
                            cyear = (jdn - 2121446) % 1029983;
                            if (cyear == 1029982)
                              ycycle = 2820;
                            else
                              {
                              aux1 = cyear / 366;
                              aux2 = cyear % 366 ;
                              ycycle = (((2134 * aux1) + (2816 * aux2) + 2815) / 1028522) + aux1 + 1;
                              }
                            *iYear = ycycle + (2820 * cycle) + 474;
                            if(iYear <= 0)iYear = iYear - 1;
                            yday = (jdn - Shamsi2JDN(*iYear, 1, 1));
                            if (yday < 186)
                              {
                              *iMonth = (yday / 31) + 1;
                              *iDay = (yday % 31) + 1;
                              }
                            else
                              {
                              *iMonth = ((yday - 6) / 30) + 1;
                              *iDay = ((yday - 6) % 30) + 1;
                              }
                            }
                          
                          
                          
                          
                          void JDN2Miladi(long jdn ,int *iYear ,int *iMonth ,int *iDay){
                            long l,n,i,j,k;
                            if (jdn > 2299160)
                            {
                              l = jdn + 68569;
                              n = ((4 * l) / 146097);
                              l = l - ((146097 * n + 3) / 4);
                              i = ((4000 * (l + 1)) / 1461001);
                              l = l - ((1461 * i) / 4) + 31;
                              j = ((80 * l) / 2447);
                              *iDay = l - ((2447 * j) / 80);
                              l = j / 11;
                              *iMonth = j + 2 - 12 * l;
                              *iYear = 100 * (n - 49) + i + l;
                            }
                            else
                            {
                              j = jdn + 1402;
                              k = ((j - 1) / 1461);
                              l = j - (1461 * k);
                              n = ((l - 1) / 365) - (l / 1461);
                              i = l - 365 * n + 30;
                              j = ((80 * i) / 2447);
                              *iDay = i - ((2447 * j) / 80);
                              i = (j / 11);
                              *iMonth = j + 2 - 12 * i;
                              *iYear = 4 * k + n + i - 4716;
                            }
                          }
                          
                          
                          long Miladi2JDN(int iYear ,int iMonth ,int iDay)
                            {
                            long lYear=0,lMonth=0,lDay=0;
                          
                            if((iYear > 1582) || ((iYear == 1582) && (iMonth > 10)) || ((iYear == 1582) && (iMonth == 10) && (iDay > 14)))
                              {
                              lYear = iYear;
                              lMonth = iMonth;
                              lDay = iDay;
                              return ((1461 * (lYear + 4800 + ((lMonth - 14) / 12))) / 4)
                                + ((367 * (lMonth - 2 - 12 * (((lMonth - 14) / 12)))) / 12)
                                - ((3 * (((lYear + 4900 + ((lMonth - 14) / 12)) / 100))) / 4)
                                + lDay - 32075;
                              }
                            else
                              return (367 * lYear - ((7 * (lYear + 5001 + ((lMonth - 9) / 7))) / 4) + ((275 * lMonth) / 9) + lDay + 1729777);
                            }
                          
                          
                          
                            void date_convert(int *iYear ,int *iMonth ,int *iDay,int date)
                            {
                            switch (date)
                              {
                              case 1:
                                JDN2Shamsi(Miladi2JDN(*iYear ,*iMonth ,*iDay),iYear ,iMonth ,iDay);
                              break;
                              case 2:
                                JDN2Miladi(Shamsi2JDN(*iYear ,*iMonth ,*iDay),iYear ,iMonth ,iDay);
                              break;
                              };
                            }
                          مشخصات : http://www.eca.ir/forum2/index.php?topic=1721.msg638969#msg638969

                          هیچ وقت از یادگیری نترس
                          [move] :agree: :biggrin: :sad: :rolleyes:[/move]

                          دیدگاه


                            پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری

                            خیلی خیلی خوب بود
                            ممنونم
                            http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

                            دیدگاه

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