اطلاعیه

Collapse
No announcement yet.

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

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

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

    با سلام من میخوام با DS1307 سال را 89 بنویسم اما نمیشه فقط 9 مینویسه اما 19 که میذارم مینویسه میشه یکی کمک کنه :angry:

    دیدگاه


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

      تاریخ ای سی میلا دی هست و عدد 00 تا 99 رو قبول میکنه
      2000 تا 2100 رو قبول میکنه از مبدل تاریخ استفاده کن تو صفحات قبل هست
      [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

      دیدگاه


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

        نوشته اصلی توسط MARAL_7133
        سلام

        ممنون میشم اگه بذارید.
        شرمنده ندیدم


        [code=c]
        #include <mega16.h>
        #include <stdio.h>
        #include <delay.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=0x15 ;PORTC
        #endasm
        #include <lcd.h>
        // External Interrupt 0 service routine
        interrupt [EXT_INT0] void ext_int0_isr(void) {
        char lcd_buf[32];
        unsigned char date, month, year;
        // get the Date
        rtc_get_date(&date, &month, &year);
        switch (PINA & 0x07) {
        case 6:
        year ++;
        if (year == 99) year = 0;
        rtc_set_date(date, month, year);
        break;
        case 5:
        month ++;
        if (month == 13) month = 1;
        rtc_set_date(date, month, year);
        break;
        case 3:
        date ++;
        if (date == 32) date = 1;
        rtc_set_date(date, month, year);
        break;
        };
        sprintf(lcd_buf, "%u:%u:%u", year, month, date);
        //Clear LCD
        lcd_clear();
        //Display lcd_buf in LCD
        lcd_puts(lcd_buf);
        delay_ms(800);
        }

        void main(void) {
        char lcd_buf[32];
        unsigned char hour, min, sec;
        PORTA = 0x00;
        DDRA = 0x00;
        PORTC = 0x00;
        DDRC = 0x00;
        PORTD = 0x00;
        DDRD = 0x00;

        // External Interrupt(s) initialization
        // INT0: On
        // INT0 Mode: Low level
        // INT1: Off
        // INT2: Off
        GICR |= 0x40;
        MCUCR = 0x00;
        MCUCSR = 0x00;
        GIFR = 0x40;

        // Global enable interrupts
        #asm("sei&quot
        // 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);
        // LCD module initialization
        lcd_init(16);
        // First Set Time
        rtc_set_time(12, 0, 0);
        // First Set Date
        rtc_set_date(1, 01, 07);

        while (1) {
        /*
        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 *date, unsigned char *month,
        unsigned char *year);
        void rtc_set_date(unsigned char date, unsigned char month,
        unsigned char year);
        */
        // get the Time
        rtc_get_time(&hour, &min, &sec);

        switch (PINA & 0x07) {
        case 6:
        hour ++;
        if (hour == 24) hour = 0;
        rtc_set_time(hour, min, sec);
        break;
        case 5:
        min ++;
        if (min == 60) min = 0;
        rtc_set_time(hour, min, sec);
        break;
        case 3:
        sec = 0;
        rtc_set_time(hour, min, sec);
        break;
        };
        sprintf(lcd_buf, "%u:%u:%u", hour, min, sec);
        //Clear LCD
        lcd_clear();
        //Display lcd_buf in LCD
        lcd_puts(lcd_buf);
        delay_ms(800);
        };
        }
        [/code]
        انجام پروژه های برنامه نویسی اندروید
        [glow=red,2,300]نرم افزار نقشه های پاور کامپیوتر اندورید[/glow]
        http://cafebazaar.ir/app/?id=com.atxdroid

        دیدگاه


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

          کد:
          Ds1307:
              I2cstart                      ' Generate start code
              I2cwbyte Ds1307w                  ' send address
              I2cwbyte 0                     ' start address in 1307
              I2cstart                      ' Generate start code
          
          
               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)
          
              Weekday = Makedec(weekday)
              _day = Makedec(_day)
              _month = Makedec(_month)
              _year = Makedec(_year)







          این کد ها واسه خوندن ای سی هست داداش گل که پیام خصوصی دادی اینجا مشکلتو بگو حل کنیم
          [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

          دیدگاه


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

            نوشته اصلی توسط حامد رحیمی
            ویرایش: یکی از بچه ها گفته بود کلا ds 1307 اصلا دقت نداره :angry: منم این جمله رو نوشتم :cry2:
            در ادامیه تایپک متوجه خواهید شد که 1307 یکی از دقیق تری این ای سی هاست به شرط استفاده از ای سی و کریستال مرغوب )

            اقا ترو خدا چرا اخه الان دارم 3 ساعته رو فیبر سوراخ دار لحیم میلنم :cry2: :cry:
            کسی نضری نداره در ضمن یه سوال ممکنه میکرو باعث عقب مندنش بشه ینی برنامت غلط باشه :cry2:
            آقا من از این 1307 با برنامه ای که دوستان از یزد کیت پیشنهاد کردن و همین طور بابرنامه خودم استفاده کردم در 24 ساعت 2 ثانیه عقب می زنه اگه ممکنه راهنمایی کنید؟
            انجام رایگان پروژه های الکترونیک شما
            http://freeelectrinicproject.epage.ir/

            دیدگاه


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

              برادر ارجمند مرجع شما چیه ؟ از کجا مرجع ساعت میگیرین که اینقدر میگین 2 ثانیه دقیقه ؟
              اگه از کامپیوتر بگیرین حق با شماست البته مین برد های قدیمی هم اشتباه دارن
              اگه حوصله پیدا کنید سعی کنید کل تایپکو بخونید
              من پیر شدم رو این کار :mrgreen:
              ببینید مهم ترین مشکل تو عقب جلو موندن ساعت مربوط به کریستال اون ساعته
              کریستال نباید گرما دیده باشه
              حتی گرما 60 درجه
              باید بدنه فلزیش به زمین وصل بشه نه با لحیم بلکه با سیم مثل اینکه میخوای یه نفرو دار بزنی فرض کن گردن طرف قسمت استوانه ای کریستال یه سیمو بنداز گردنش با دنباریک محکم بکش از سورا خای فیبر رد کن و سیم رو اون طرف خم کن به فیبر لحیم کن
              کلا تای پکو بخون کامل توضیح داده شده
              روی پایه های کریستال چسب بزن به هیچ وجه نباید دستت بهش بخوره اگه یه ثانیه دستت بهش بوخوره 1 ثانیه عقب مونده میشه :mrgreen:
              خلاصه الان نتونستم کامل توضیح بدم اگه خواستین و نتونستین درست کنین من هستم خدمتتتون :wow:

              اضافه شده در تاریخ :

              من یدونم مدار ساختم 6 ماهه کار میکنه
              یکی دیگه ساختم
              با مگا 32 و همون مدار
              همه مدار سالمه
              ال سی دی سالمه
              الان 3 ساعته دارم رو اس ام دیش کار میکنم ولی میکرو جواب نمیده :cry2: تو این سطر هنگ میکنه
              I2cstart ' Generate start code
              I2cwbyte Ds1307w ' send address
              I2cwbyte 0 ' start address in 1307
              I2cstart ' Generate start code
              کسی نظری نداره ؟

              اضافه شده در تاریخ :
              گفتم سوالمو دباره مطرح کنم شاید جواب دادن :cry2:
              من یدونم مدار ds1307 ساختم 6 ماهه کار میکنه خیلی عالی
              یکی دیگه ساختم
              با مگا 32 و همون مدار
              همه مدار سالمه
              ال سی دی سالمه
              فقط یه مشکل داره
              میکرو جواب نمیده تو این سطر هنگ میکنه
              هنگ کردنشو با ال سی دی تست کردم تا الن سطر نوشترو نشون داد I2cstart
              وقتی میفته رویه I2cwbyte Ds1307w
              اصلا انگار میکرو وایستاده :sad:
              I2cstart ' Generate start code
              I2cwbyte Ds1307w ' send address
              I2cwbyte 0 ' start address in 1307
              I2cstart ' Generate start code
              کسی نظری نداره ؟
              [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

              دیدگاه


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

                حامد خان ، محاسبه زمان و تاریخ توسط آی سی صورت میآ‌گیره و میکرو فقط اطلاعات رو دریافت میآ‌کنه و بعد یکسری محاسبات به خروجی میده
                بنابراین اگه برنامه مشکل داشته باشه ، نهایتا اطلاعات خروجی غلط و شاید ناخوانا باشه ولی عقب و جلو شدن زمان ربطی به میکرو نداره.

                دیدگاه


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

                  سلام بر اساتید!
                  می خواستم بپرسم آیا اینجا کسی تونسته Ds1307 رو با استفاده خود پروتکل TWI راه اندازی کنه؟ (با استفاده از رجیسترها)
                  من که 2روزه که دارم سعی می کنم ولی نتونستم به نتیجه برسم! :angry:
                  کل دیتا شیت Ds1307 رو هم خوندم و دیتاشیت Mega32 قسمت TWI و همچنین مقاله آقای سپاس یار در مورد این پروتکل رو هم دوباره خوندم ولی کلا گیج شدم! به عنوان مثال بعداز اینکه 0xD1برای خوندن رو برای چیپ ارسال کردم، چه موقع باید آدرسهای مربوط به ثانیه ، دقیقه... رو باید ارسال کنم؟
                  در صورت امکان اساتید یه نمونه کد کوچک (در حد خوندن ثانیه...) یا یه لینک در این مورد اینجا قرار بدن، تا یه قومی از گمراهی دربیان!

                  دیدگاه


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

                    ببخشید پروتکل twi چی هستش ؟ :cry:
                    i2c باید بلد باشی فقط با i2c راه اندازی میشه
                    [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                    دیدگاه


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

                      نوشته اصلی توسط حامد رحیمی
                      ببخشید پروتکل twi چی هستش ؟ :cry:
                      i2c باید بلد باشی فقط با i2c راه اندازی میشه
                      اینها تقریبا یکی هستند ولی فرقی که دارن اینه که میکرو چیزی به نام I2C نمی شناسه! به عبارت دیگه I2C همون کار TWI رو به صورت نرم افزاری و با استفاده از لایبرری و کلی دستورات اضافی انجام می ده! این هم یه نمونه کد برای میکروی مستر با استفاده از TWI که اطلاعات رو از یه اسلیو می خونه: (کد رو از همین سایت برداشتم ولی یادم نیست مال کی بود!)
                      [code=c]
                      #include <mega32.h>
                      #include <delay.h>
                      void twi_trans (char,char);
                      void main (void)
                      {
                      char data,add=0b00001000;
                      DDRA=0x00;PORTA=255;
                      TWBR=10;
                      TWSR=0b00000010;
                      add=0b00001110;
                      while(1)
                      {
                      data=PINA;
                      twi_trans(data,add);
                      delay_ms(500);
                      }
                      }
                      void twi_trans (char data,char add)
                      {
                      TWCR=0xA4;
                      while((TWCR&0x80)==0);
                      if((TWSR&0xf8)==0x08)
                      {
                      TWDR=add;
                      TWCR=0b10000100;
                      while((TWCR&0x80)==0);
                      if((TWSR&0xf8)==0x18)
                      {
                      TWDR=data;
                      TWCR=0b10000100;
                      while((TWCR&0x80)==0);
                      }
                      if((TWSR&0xf8)==0x28)
                      {
                      TWCR=0b10010100;
                      }
                      }
                      }

                      [/code]من در مورد TWI مشکلی ندارم فقط می خوام بدونم که آدرس ها رو به چه ترتیبی برای Ds1307 ارسال کنم و ازش دیتا بخونم؟
                      با تشکر!

                      دیدگاه


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

                        شما زحمت بکش صفحه 4 و 5 دیتا شیت ds1307 رو بخون بلوک بندی کرده
                        1 ثانیه
                        2 دقیقه
                        3 ساعت
                        اینا هر کدوم 8 بیتی هستن و بعد از بیت 08 هگز میتونی تو 1307 اطلا عات به صورت 8 بیتی بریزی 56 یایت جای حافضه داره 8 بایت اولشم در اختیار خودشه و اطلا عات ساعت رو میریزه توش :bye
                        [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                        دیدگاه


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

                          نوشته اصلی توسط حامد رحیمی
                          شما زحمت بکش صفحه 4 و 5 دیتا شیت ds1307 رو بخون بلوک بندی کرده
                          1 ثانیه
                          2 دقیقه
                          3 ساعت
                          اینا هر کدوم 8 بیتی هستن و بعد از بیت 08 هگز میتونی تو 1307 اطلا عات به صورت 8 بیتی بریزی 56 یایت جای حافضه داره 8 بایت اولشم در اختیار خودشه و اطلا عات ساعت رو میریزه توش :bye
                          شما که اینقدر وارد هستید می شه یه زحمتی در حق من بکشید و بگید در کدوم صفحه نوشته که بعداز فراخوان کردن 1307 چه موقع باید این بیت06 هگز رو باید بهش بدیم و آیا بعداز دریافت این بیت آی سی بلافاصله مقدار "سال" رو به میکرو ارسال می کنه و...
                          لطفا دوستانی که واقعا با نحوه کار این چیپ آشنا هستند بیان و یه نظری بدن... (در حد یه نمونه کد برای خوندن یک ثانیه...)

                          دیدگاه


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

                            داداش من من اصلا وارد نیستم هیچی هم بلد نیستم 3 ماه طول کشید این ds1307 رو راه اندازی کنم یدونه ساعت ساختم باهاش که تقویم میلادی شمسی داره و ساعت دقیقه ثانیه رو هم نشون میده الارم داره و چیز های دیگه تو پست های قبلی هم نوشتم و موجوده البته باید بگم با زبان بیسیک در کامپایلر بیسکام
                            از کد ویژن سر در نمیارم تا حالا نصب نکردم با کسی دعوا ندارم :cry2: هیچ عددی هم نیستم خاک تو سر من :eek:
                            بیخیال دور ورداشتم
                            به نظر من هم یکم منتظر بمون اه کسی جواب نداد یه پست بزن
                            اگر هم دلت خواست من برناممو واست اپلود میکنم :bye
                            [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                            دیدگاه


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

                              نوشته اصلی توسط حامد رحیمی
                              داداش من من اصلا وارد نیستم هیچی هم بلد نیستم 3 ماه طول کشید این vs1003 رو راه اندازی کنم یدونه ساعت ساختم باهاش که تقویم میلادی شمسی داره و ساعت دقیقه ثانیه رو هم نشون میده الارم داره و چیز های دیگه تو پست های قبلی هم نوشتم و موجوده البته باید بگم با زبان بیسیک در کامپایلر بیسکام
                              از کد ویژن سر در نمیارم تا حالا نصب نکردم با کسی دعوا ندارم :cry2: هیچ عددی هم نیستم خاک تو سر من :eek:
                              بیخیال دور ورداشتم
                              به نظر من هم یکم منتظر بمون اه کسی جواب نداد یه پست بزن
                              اگر هم دلت خواست من برناممو واست اپلود میکنم
                              سلام!
                              ببخشید که دیر جواب می دم! یکی دو روز ADSL نداشتم 2،3 روز هم سرم برای نوشتن به شدت شلوغ بود!(البته اینجا آنلاین بودم!) :nerd:
                              شما استادید! این حرفها چیه که می زنین! فقط یه نکته کوچیک اینکه من حدود یک هفته هست که دارم فکر می کنم ولی بالاخره نتونستم کشف کنم که شما چطوری با یه vs1003 تونستید ساعت به همراه تقویم و... بسازید! :eek: (البته منظوری نداشتم! می دونم که اشتباه تایپی بوده!) مرسی از اینکه اینجا فعال هستید و سعی می کنید اطلاعاتتون رو به دیگران هم انتقال بدید.
                              نمونه کدی که من لازم داشم ربطی به بیسیک ، کدویژون... نداشت من فقط می خواستم ترتیب ارسال و دریافت آدرس ها و رجیسترها رو برای DS1307 بدونم که بالاخره مشکلم حل شد و در نهایت راحل بهتر از اون پیدا کردم و کلا آی سی ساعت رو گذاشتم کنار!
                              اینهم یه نمونه که یه کمی تغییر دادم برای استفاده در کدویژون، کمی هم خلاصش کردم:
                              (کلاک 8مگ هست)
                              [code=c]#include <mega32.h>
                              #include <stdio.h>
                              #include <delay.h>
                              #asm
                              .equ __lcd_port=0x12 ;PORTD
                              #endasm
                              #include <lcd.h>
                              char hj[5];

                              #define START 0x08
                              #define RESTART 0x10
                              //Master Trasmit conditions

                              #define TARGET_ADDR 0xD0 //Hardwired address of DS1307 (see datasheet)
                              #define WRITE_FLAG 0x01 //bitmask to OR to TARGET_ADDR when attempting to write to the DS1307

                              //prototypes of diferent functions to organise the code a little
                              void read(void);
                              int debug_mode; //make it equal 1 to print all the debug msgs, make 0 to turn them off
                              int seconds_value; //variable to store the value returned from the DS1307
                              void main(void)
                              {
                              debug_mode = 0;
                              lcd_init(16);
                              TWBR = 0x20;
                              //call the read function in a loop to update second's value to the screen
                              while(1)
                              {
                              read();
                              }

                              }
                              void read(void)
                              {
                              //send STOP
                              TWCR = (1<<7)|(1<<2)|(1<<4); //Tell TWCR (control register) to send STOP CONDITION
                              delay_ms(20);
                              //send START
                              TWCR = 0xA4;
                              //loop until TWINT is set
                              while(!((TWCR&0x80)==0x80))

                              //;SLAVE
                              //Send Slave address
                              TWDR = 0xD0;
                              TWCR = (1<<7)|(1<<2);
                              //loop until TWINT is set
                              while(!((TWCR&0x80)==0x80))
                              {
                              //do nothing but loop
                              }
                              //;DATA1
                              //Send DS1307 RAM address 0x00 ($00)
                              TWDR = 0x00;
                              TWCR = 0x84;
                              //loop until TWINT is set
                              while(!((TWCR&0x80)==0x80))
                              {
                              //do nothing but loop
                              }

                              //SECOND START CONDITION to go into writing mode
                              TWCR = (1<<7)|(1<<5)|(1<<2);
                              //loop until TWINT is set
                              while(!((TWCR&0x80)==0x80))
                              {
                              //do nothing but loop
                              }
                              //Send Address and write bit
                              TWDR = TARGET_ADDR | WRITE_FLAG;
                              TWCR = (1<<7)|(1<<2);
                              //loop until TWINT is set
                              while(!((TWCR&0x80)==0x80))
                              {
                              //do nothing but loop
                              }
                              delay_ms(30);

                              //;DATA
                              TWCR = (1<<7)|(1<<2);
                              //loop until TWINT is set
                              while(!((TWCR&0x80)==0x80))
                              {
                              //do nothing but loop
                              }
                              //Store read back value
                              seconds_value = TWDR;
                              if (TWDR>9)seconds_value=seconds_value-6;
                              if (TWDR>0x19)seconds_value=seconds_value-6;
                              if (TWDR>0x29)seconds_value=seconds_value-6;
                              if (TWDR>0x39)seconds_value=seconds_value-6;
                              if (TWDR>0x49)seconds_value=seconds_value-6;
                              sprintf(hj,"%u",seconds_value);
                              lcd_clear();
                              lcd_gotoxy(0,0);
                              lcd_puts(hj);

                              //NACK
                              TWCR = (1<<6)|(1<<2);
                              //STOP
                              TWCR = (1<<6)|(1<<2)|(1<<4);
                              }
                              [/code]
                              البته این کد خیلی ابتدایی هست و فقط مقدار ثانیه رو می خونه و جنبه ی آموزشی داره! (به درد افرادی مثل خودم می خوره!!)
                              مخلصیم!

                              دیدگاه


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

                                نوشته اصلی توسط reza.31
                                شما استادید! این حرفها چیه که می زنین! فقط یه نکته کوچیک اینکه من حدود یک هفته هست که دارم فکر می کنم ولی بالاخره نتونستم کشف کنم که شما چطوری با یه vs1003 تونستید ساعت به همراه تقویم و... بسازید! :eek: (البته منظوری نداشتم! می دونم که اشتباه تایپی بوده!)
                                l خوب از همه عذر خواهی میکنم
                                من یه 3 هفته ای میشه که دنبال vs1003 هستم و متاسفانه موقع پاسخ به این تاپیک به فکر اون ای سی بودم و اشتباه من بوده شرمنده
                                در ضمن من این ستاره هارو واسه این گرفتم که همیشه سوال میکردم :cry2:
                                اگه به اول این تاپیک هم توجه کنید سوال کردم خودم بقیه جواب دادن
                                واسه این گفتم که من هنوز استاد نشدم دلمونو خوش نکن oo:
                                [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                                دیدگاه

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