اطلاعیه

Collapse
No announcement yet.

برنامه باds1307

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

    برنامه باds1307

    سلام
    کمک فوری می خوام
    پروژم با avr می خوام 4 تا وسیله برقی رو باatmega32وآی سیds1307برنامه ساعت بدم
    تا وقتی ساعتی که توسط کاربر داده میشه با ساعتی که ds1307می فرسته برابر شد دستگاه مورد نظر روشن یا خاموش بشه
    تو نوشتن برنامش با avrتوbascom مشکل دارم
    کمکم کنید

    #2
    پاسخ : برنامه باds1307

    با زبان بیسیک آماده ندارم که برات بزارم

    اما اگه با C میخواستی داشتم

    کار باهاش خیلی ساده است و مثال هاش تو کتاب های مختلف مثل آقای کاهه هست

    یه نگاه به کتابها بندازی مشکلت حل میشه

    اگه نشد برنامتونو بزارید تا ببینیم

    دیدگاه


      #3
      پاسخ : برنامه باds1307

      سلام .
      آقا احسان اگه ممکن هست برنامه کد ویژن رو بزارید .
      ممنون .

      من میخاهم یه ساعت و تاریخ رو باهاش درست کنم .
      مرسی .
      بگو که گل نفرستد کسی به خانه من
      که عطر یاد تو پر کرده آشیانه من

      دیدگاه


        #4
        پاسخ : برنامه باds1307

        این هم فایل برنامه برای نمایش ساعت و تاریخ روی LCD

        به تنظیمات ابتدایی پورت I2C و مقادیر اولیه ای که به ساعت و تاریخ قبل از while داده شده دقت کنید

        http://rapidshare.com/files/279313985/Clock.rar.html

        دیدگاه


          #5
          پاسخ : برنامه باds1307

          اگه برنامه ای که آقای اکبری گذاشتند بهت کمک کرده که چه خوب. اگه نه بگو تا منم اگه بتونم کمکت کنم.
          کنکوری 90 ديروز،آ‌دانشجو مهندسي نرم افزار پلي تكنيك امروز!

          دیدگاه


            #6
            پاسخ : برنامه باds1307

            سلام ؛
            همانطور که می دونید ds1307 دارای 56 بایت رم داخلی هست . سوال من اینه که تو کدویژن چطور می شه به این حافظه دسترسی داشت (خواندن و نوشتن).
            از اساتید بزرگوار ممنون می شم جواب رو لطف کنند.
            خبرآمد خبري در راه است
            سرخوش آن دل كه از آن گاه است

            دیدگاه


              #7
              پاسخ : برنامه باds1307

              سلام،
              سوال قبلی مون رو که کسی جواب نداد :mrgreen:
              یه سوال دیگه هم دارم روز هفته رو تو کدویژن avr چجوری می شه از ds1307 گرفت.
              خبرآمد خبري در راه است
              سرخوش آن دل كه از آن گاه است

              دیدگاه


                #8
                پاسخ : برنامه باds1307

                نوشته اصلی توسط رضا هوشنگی
                سلام،
                سوال قبلی مون رو که کسی جواب نداد :mrgreen:
                یه سوال دیگه هم دارم روز هفته رو تو کدویژن avr چجوری می شه از ds1307 گرفت.

                برای این کار دستورات زیر را به فایل کتابخانه اصلی ds1307 اضافه کنید :

                void rtc_get_weekday(unsigned char *weekday)
                {
                i2c_start();
                i2c_write(0xd0);
                i2c_write(3);
                i2c_start();
                i2c_write(0xd1);
                *weekday=i2c_read(0);
                i2c_stop();
                }

                void rtc_set_weekday(unsigned char weekday)
                {
                i2c_start();
                i2c_write(0xd0);
                i2c_write(3);
                i2c_write(weekday);
                i2c_stop();
                }

                و دستورات زیر را به هدر فایلتون :

                void rtc_get_weekday(unsigned char *weekday);
                void rtc_set_weekday(unsigned char weekday);

                دیدگاه


                  #9
                  پاسخ : برنامه باds1307

                  یه سوال :
                  شما معمولا با چه مقاومتی پایه های SCL و SDA را pullup می کنید آ‌؟ یعنی بهترین مقاومتی که میشه واسش انتخاب کرد چیه ؟
                  یه توضیحی در مورد پایه 7 این IC به من میدید ؟
                  سوال آخر اینکه توی سطر :
                  rtc_init(3,1,0);
                  همیشه به صورت معمول باید اعداد به همین ترتیب باشند ؟؟؟

                  دیدگاه


                    #10
                    پاسخ : برنامه باds1307

                    سلام
                    این برنامه امتحان کردم کار میده.
                    کد:
                    #include <mega32.h>
                    #asm
                      .equ __i2c_port=0x18 ;PORTB
                      .equ __sda_bit=0
                      .equ __scl_bit=1
                    #endasm
                    #include <i2c.h>
                    #include <stdio.h>
                    #include <delay.h>
                    #include <ds1307.h>
                    
                    #asm
                      .equ __lcd_port=0x1B ;PORTA
                    #endasm
                    #include <lcd.h>
                    
                    char h,char m,char s;
                    unsigned char buff[];
                    void main(void)
                    {
                    
                    ACSR=0x80;
                    SFIOR=0x00;
                    
                    i2c_init();
                    
                    rtc_init(1,1,1);
                    //rtc_set_time(0,0,0);
                    
                    
                    lcd_clear();
                    
                    lcd_init(20);
                    lcd_gotoxy(0,0);
                    lcd_putsf("RTC ***** Electronic");
                    delay_ms(5000);
                    
                    
                       
                    while (1)
                       {
                       lcd_clear();
                       rtc_get_time(&h,&m,&s);
                       sprintf(buff,"s=%u,m=%u,h=%u",s,m,h);
                       lcd_puts(buff);
                       delay_ms(500);
                       };
                    }

                    دیدگاه


                      #11
                      پاسخ : برنامه باds1307

                      سلام
                      اگه مسخره نمیکنی این برنامه رو میذارم (برنامه رو ضایع نوشتم!!!!!!!)
                      البته برای خاموش روشن کردن یک دستگاه در چند زمان متفاوت!!!!!!

                      $regfile = "m16def.dat"
                      $crystal = 1000000

                      Config Porta = Input
                      Porta = 255
                      Enable Interrupts
                      Config Lcdpin = Pin , Db4 = Pinc.3 , Db5 = Pinc.2 , Db6 = Pinc.1 , Db7_
                      = Pinc.0 , Rs = Pinc.4 , E = Pinc.5
                      Config Lcd = 16 * 2
                      Cursor Off
                      Cls
                      Deflcdchar 1 , 32 , 4 , 2 , 31 , 2 , 4 , 32 , 32
                      Config Sda = Portd.7
                      Config Scl = Portd.6
                      Const Ds1307w = &HD0
                      Const Ds1307r = &HD1
                      Config Clock = User
                      Config Portb.0 = Output
                      Dim State As Byte
                      Dim Weekday As Byte


                      Dim _sec1 As Byte
                      Dim _min1 As Byte
                      Dim _hour1 As Byte
                      Dim _sec2 As Byte
                      Dim _min2 As Byte
                      Dim _hour2 As Byte
                      Dim _sec3 As Byte
                      Dim _min3 As Byte
                      Dim _hour3 As Byte

                      Dim Sec1 As Byte
                      Dim Min1 As Byte
                      Dim Hour1 As Byte
                      Dim Sec2 As Byte
                      Dim Min2 As Byte
                      Dim Hour2 As Byte
                      Dim Sec3 As Byte
                      Dim Min3 As Byte
                      Dim Hour3 As Byte


                      Readeeprom _sec1 , 0
                      Readeeprom _min1 , 1
                      Readeeprom _hour1 , 2
                      Readeeprom _sec2 , 3
                      Readeeprom _min2 , 4
                      Readeeprom _hour2 , 5
                      Readeeprom _sec3 , 6
                      Readeeprom _min3 , 7
                      Readeeprom _hour3 , 8

                      Readeeprom Sec1 , 9
                      Readeeprom Min1 , 10
                      Readeeprom Hour1 , 11
                      Readeeprom Sec2 , 12
                      Readeeprom Min2 , 13
                      Readeeprom Hour2 , 14
                      Readeeprom Sec3 , 15
                      Readeeprom Min3 , 16
                      Readeeprom Hour3 , 17


                      State = 0
                      Do
                      If Pina.0 = 0 Then
                      Gosub Setting
                      End If
                      Locate 1 , 1
                      Lcd "* " ; Time$ ; " *"



                      If _hour1 = _hour And _min1 = _min And _sec1 = _sec Then
                      Set Portb.0
                      End If
                      If _hour2 = _hour And _min2 = _min And _sec2 = _sec Then
                      Set Portb.0
                      End If
                      If _hour3 = _hour And _min3 = _min And _sec3 = _sec Then
                      Set Portb.0
                      End If



                      If Hour1 = _hour And Min1 = _min And Sec1 = _sec Then
                      Reset Portb.0
                      End If

                      If Hour2 = _hour And Min2 = _min And Sec2 = _sec Then
                      Reset Portb.0
                      End If

                      If Hour3 = _hour And Min3 = _min And Sec3 = _sec Then
                      Reset Portb.0
                      End If
                      Waitms 300
                      Loop
                      End




                      Getdatetime:
                      I2cstart
                      I2cwbyte Ds1307w
                      I2cwbyte 0
                      I2cstart
                      I2cwbyte Ds1307r
                      I2crbyte _sec , Ack
                      I2crbyte _min , Ack
                      I2crbyte _hour , Ack
                      I2crbyte Weekday , Ack
                      I2crbyte _day , Ack
                      I2crbyte _month , Ack
                      I2crbyte _year , Nack
                      I2cstop
                      _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
                      _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
                      Weekday = Makebcd(weekday)

                      Return

                      Setdate:
                      _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
                      I2cstart
                      I2cwbyte Ds1307w
                      I2cwbyte 4
                      I2cwbyte _day
                      I2cwbyte _month
                      I2cwbyte _year
                      I2cwbyte Weekday
                      I2cstop
                      Return

                      Settime:
                      _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) : Weekday = Makebcd(weekday)
                      I2cstart
                      I2cwbyte Ds1307w
                      I2cwbyte 0
                      I2cwbyte _sec
                      I2cwbyte _min
                      I2cwbyte _hour
                      I2cwbyte Weekday
                      I2cstop
                      Return

                      'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                      Setting:
                      If State = 0 Then
                      State = 1
                      Gosub Lcd_time
                      Elseif State = 1 Then
                      State = 2
                      Gosub Time1

                      Elseif State = 2 Then
                      State = 3
                      Gosub Time2
                      Elseif State = 3 Then
                      State = 0
                      Gosub Time3
                      End If
                      Return
                      'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                      Lcd_time:
                      Cls
                      Home
                      Locate 1 , 4
                      Lcd " set time "
                      Wait 1
                      Do

                      Locate 2 , 5
                      Lcd _hour ; ":" ; _min ; ":" ; _sec ; " "

                      If Pina.1 = 0 Then
                      Incr _hour
                      If _hour > 23 Then
                      _hour = 0
                      End If
                      Elseif Pina.2 = 0 Then
                      Incr _min
                      If _min > 59 Then
                      _min = 0
                      End If
                      Elseif Pina.3 = 0 Then
                      Incr _sec
                      If _sec > 59 Then
                      _sec = 0
                      End If
                      Elseif Pina.0 = 0 Then
                      Gosub Settime
                      Cls
                      Lcd " SAVE ok"
                      Wait 1
                      Exit Do
                      End If
                      Waitms 350
                      Loop


                      Return
                      'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                      Time2:
                      Cls
                      Home
                      Lcd " Setting time 2"
                      Wait 1
                      Cls
                      Do
                      Locate 1 , 1
                      Lcd Chr(1)
                      Locate 1 , 3
                      Lcd "ON " ; _hour2 ; ":" ; _min2 ; ":" ; _sec2 ; " "
                      Locate 2 , 3
                      Lcd "OFF " ; Hour2 ; ":" ; Min2 ; ":" ; Sec2 ; " "

                      If Pina.1 = 0 Then
                      Incr _hour2
                      If _hour2 > 23 Then
                      _hour2 = 0
                      End If
                      Elseif Pina.2 = 0 Then
                      Incr _min2
                      If _min2 > 59 Then
                      _min2 = 0
                      End If
                      Elseif Pina.3 = 0 Then
                      Incr _sec2
                      If _sec2 > 59 Then
                      _sec2 = 0
                      End If
                      Elseif Pina.0 = 0 Then
                      Writeeeprom _sec1 , 3
                      Waitms 10
                      Writeeeprom _min1 , 4
                      Waitms 10
                      Writeeeprom _hour1 , 5
                      Waitms 10
                      Exit Do
                      End If
                      Waitms 300

                      Loop
                      Locate 1 , 1
                      Lcd " "
                      Locate 2 , 1
                      Lcd Chr(1)
                      Wait 1
                      Do
                      Locate 1 , 3
                      Lcd "ON " ; _hour2 ; ":" ; _min2 ; ":" ; _sec2 ; " "
                      Locate 2 , 3
                      Lcd "OFF " ; Hour2 ; ":" ; Min2 ; ":" ; Sec2 ; " "
                      If Pina.1 = 0 Then
                      Incr Hour2
                      If Hour2 > 23 Then
                      Hour2 = 0
                      End If
                      Elseif Pina.2 = 0 Then
                      Incr Min2
                      If Min2 > 59 Then
                      Min2 = 0
                      End If
                      Elseif Pina.3 = 0 Then
                      Incr Sec2
                      If Sec2 > 59 Then
                      Sec2 = 0
                      End If
                      Elseif Pina.0 = 0 Then
                      Writeeeprom Sec2 , 12
                      Waitms 10
                      Writeeeprom Min2 , 13
                      Waitms 10
                      Writeeeprom Hour2 , 14
                      Waitms 10
                      Exit Do
                      End If
                      Waitms 300
                      Loop


                      Cls
                      Lcd " SAVE ok"
                      Wait 1
                      Return


                      Time3:
                      Cls
                      Home
                      Lcd " Setting time 3"
                      Wait 1
                      Cls
                      Do
                      Locate 1 , 1
                      Lcd Chr(1)
                      Locate 1 , 3
                      Lcd "ON " ; _hour3 ; ":" ; _min3 ; ":" ; _sec3 ; " "
                      Locate 2 , 3
                      Lcd "OFF " ; Hour3 ; ":" ; Min3 ; ":" ; Sec3 ; " "
                      If Pina.1 = 0 Then
                      Incr _hour3
                      If _hour3 > 23 Then
                      _hour3 = 0
                      End If
                      Elseif Pina.2 = 0 Then
                      Incr _min3
                      If _min3 > 59 Then
                      _min3 = 0
                      End If
                      Elseif Pina.3 = 0 Then
                      Incr _sec3
                      If _sec3 > 59 Then
                      _sec3 = 0
                      End If
                      Elseif Pina.0 = 0 Then
                      Writeeeprom _sec3 , 6
                      Waitms 10
                      Writeeeprom _min3 , 7
                      Waitms 10
                      Writeeeprom _hour3 , 8
                      Waitms 10
                      Exit Do
                      End If
                      Waitms 300
                      Loop
                      Locate 1 , 1
                      Lcd " "
                      Locate 2 , 1
                      Lcd Chr(1)
                      Wait 1

                      Do
                      Locate 1 , 3
                      Lcd "ON " ; _hour3 ; ":" ; _min3 ; ":" ; _sec3 ; " "
                      Locate 2 , 3
                      Lcd "OFF " ; Hour3 ; ":" ; Min3 ; ":" ; Sec3 ; " "
                      If Pina.1 = 0 Then
                      Incr Hour3
                      If Hour3 > 23 Then
                      Hour3 = 0
                      End If
                      Elseif Pina.2 = 0 Then
                      Incr Min3
                      If Min3 > 59 Then
                      Min3 = 0
                      End If
                      Elseif Pina.3 = 0 Then
                      Incr Sec3
                      If Sec3 > 59 Then
                      Sec3 = 0
                      End If
                      Elseif Pina.0 = 0 Then
                      Writeeeprom Sec3 , 15
                      Waitms 10
                      Writeeeprom Min3 , 16
                      Waitms 10
                      Writeeeprom Hour3 , 17
                      Waitms 10
                      Exit Do
                      End If
                      Waitms 300
                      Loop


                      Cls
                      Lcd " SAVE ok"
                      Waitms 300
                      Return

                      Time1:

                      Cls
                      Home
                      Lcd " Setting time 1"
                      Wait 1
                      Cls
                      Do
                      Locate 1 , 1
                      Lcd Chr(1)
                      Locate 1 , 3
                      Lcd "ON " ; _hour1 ; ":" ; _min1 ; ":" ; _sec1 ; " "
                      Locate 2 , 3
                      Lcd "OFF " ; Hour1 ; ":" ; Min1 ; ":" ; Sec1 ; " "
                      If Pina.1 = 0 Then
                      Incr _hour1
                      If _hour1 > 23 Then
                      _hour1 = 0
                      End If
                      Elseif Pina.2 = 0 Then
                      Incr _min1
                      If _min1 > 59 Then
                      _min1 = 0
                      End If
                      Elseif Pina.3 = 0 Then
                      Incr _sec1
                      If _sec1 > 59 Then
                      _sec1 = 0
                      End If
                      Elseif Pina.0 = 0 Then

                      Writeeeprom _sec1 , 0
                      Waitms 10
                      Writeeeprom _min1 , 1
                      Waitms 10
                      Writeeeprom _hour1 , 2
                      Waitms 10
                      Exit Do
                      End If
                      Waitms 300
                      Loop
                      Locate 1 , 1
                      Lcd " "
                      Locate 2 , 1
                      Lcd Chr(1)
                      Wait 1

                      Do
                      Locate 1 , 3
                      Lcd "ON " ; _hour1 ; ":" ; _min1 ; ":" ; _sec1 ; " "
                      Locate 2 , 3
                      Lcd "OFF " ; Hour1 ; ":" ; Min1 ; ":" ; Sec1 ; " "
                      If Pina.1 = 0 Then
                      Incr Hour1
                      If Hour1 > 23 Then
                      Hour1 = 0
                      End If
                      Elseif Pina.2 = 0 Then
                      Incr Min1
                      If Min1 > 59 Then
                      Min1 = 0
                      End If
                      Elseif Pina.3 = 0 Then
                      Incr Sec1
                      If Sec1 > 59 Then
                      Sec1 = 0
                      End If
                      Elseif Pina.0 = 0 Then
                      Writeeeprom Sec1 , 9
                      Waitms 10
                      Writeeeprom Min1 , 10
                      Waitms 10
                      Writeeeprom Hour1 , 11
                      Waitms 10
                      Exit Do
                      End If
                      Waitms 300
                      Loop

                      Cls
                      Lcd " SAVE ok"
                      Waitms 300
                      Return
                      پروردگارا: به من زيستني عطا کن که در لحظه مرگ بر بي ثمري لحظه اي که براي زيستن گذشته است حسرت نخورم، و مردني عطا کن که بر بيهودگيش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست ميداري

                      دیدگاه


                        #12
                        پاسخ : برنامه باds1307

                        یه سوال :
                        شما معمولا با چه مقاومتی پایه های SCL و SDA را pullup می کنید آ‌؟ یعنی بهترین مقاومتی که میشه واسش انتخاب کرد چیه ؟
                        یه توضیحی در مورد پایه 7 این IC به من میدید ؟
                        سوال آخر اینکه توی سطر :
                        rtc_init(3,1,0);
                        همیشه به صورت معمول باید اعداد به همین ترتیب باشند ؟؟؟

                        دیدگاه


                          #13
                          پاسخ : برنامه باds1307

                          شما معمولا با چه مقاومتی پایه های SCL و SDA را pullup می کنید آ‌؟ یعنی بهترین مقاومتی که میشه واسش انتخاب کرد چیه ؟
                          کلا برای پول پ همه ی قطعات الکترونیکی 10 کیلو

                          یه توضیحی در مورد پایه 7 این IC به من میدید ؟
                          در حالتی که بیت SQWE یک شود این پایه یک موج مربعی با فرکانس 1هرتز، 4 کیلو،8 کیلو یا 32 کیلو تحویل میدهد.

                          سوال آخر اینکه توی سطر :
                          rtc_init(3,1,0);
                          همیشه به صورت معمول باید اعداد به همین ترتیب باشند ؟؟؟
                          ساختار کلی این تابع اینطوریه:
                          void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)
                          مقدار rs مقدار همون فرکانس خروجی پایه ی 7 رو مشخص میکنه.(به ترتیب 0 برای یک هرتز و... 3 برای 32 کیلو)
                          پارامتر sqwe هم که برای فعال کردن خروجی موج مربعی هست.
                          پارامتر out مشخص میکند که در زمانی که خروجی موج مربعی نداریم خروجی صفر باشد یا یک.
                          ---------------------------------------------------------------------------
                          موفق باشید

                          دیدگاه


                            #14
                            پاسخ : برنامه باds1307

                            سلام
                            آقا چرا موقعی که من ولتاژ VCC برای RTC وصل کردم هر چند ثانیه یا بار دقیقه و ثانیه بیخودی زیاد میشه و از اونجا ادامه پیدا می کنه ؟ حتی بعضی مواقع مثلا ثانیه میشه 80 یا بیشتر و دقیقه هم همینطور ؟ چون روی برد بورد بستم نویز داره ؟ فقط زمانی که فقط باتری بهش وصله خوب کار می کنه و وقتی برای نمونه بردای یه لحظه VCC رو وصل می کنم میبینم داره خوب کار می کنه . اما اگه VCC+BAT یا فقط VCC وصل باشه مشکل پیدا می کنه . چرا ؟ مثلا الان که داره کار میکنه با گذشت کمتر از 2 دقیقه داره 35 دقیقه و 10 ثانیه نشونم میده !!!
                            ضمنا من اگه نخوام توی برنامه میکرو مقدار اولیه به RTC بدم (مثل نمونه برنامه این تاپیک) و مثلا اینکارو با یه کلید بخوام انجام بدم که مثلا وقتی فلان کلید زده شد زمان و تاریخ به فلان تاریخو ساعت ست بشه چرا کار نمی کنه ؟؟؟ میش یه نمونه مثال برای من بگذارید ؟
                            ضمنا من وقتی RS را صفر می کم (rtc_init(0,1,0) اونوقت بازم RTC کار نمی کنه . چرا ؟؟؟

                            دیدگاه


                              #15
                              پاسخ : برنامه باds1307

                              سلام
                              هر بار که تغذیه رو به آی سی متصل میکنی حتما باید init بشه و حتما هم ساعت رو بهش بگی (اگه نگی وقتی ازش میخونی بهت 80 رو نشون میده)(جواب سوال اول و یکی به آخر مونده :mrgreen.
                              که برای رفع این مشکل حتما باتری پشتیبان رو باید بزاری.
                              برای رفع مشکل با vcc حتما یه خازن بزرگ با کل تغذیت موازی من و یه خازن104 هم با دو سر تغذیه هر دو آی سیت موازی کن.
                              جواب آخر هم نمیدونم اما اگه با صفر کار نمیکنه خوب 1 بزار!(این تنظیمات ماله پایه ی 7 هست که ازش استفاده نمیکنید.)
                              در ضمن کریستالتون درست و حسابیه؟!
                              موفق باشید :smile:

                              دیدگاه

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