نمایش نتایج: از 1 به 9 از 9

موضوع: ماژول ساعت ds2405

  1. #1
    Member
    تاریخ عضویت
    Feb 2016
    نوشته ها
    41

    ماژول ساعت ds2405

    سلام دوستان
    من یک ماژول ساعت به دستم رسیده که DS2405 هستش. میخواستم بدونم کتابخانه براش موجوده؟ یک کد نمونه براش پیدا کردم تو سایت DFrobot که عملا مشکل داره.

  2. #2
    Member
    تاریخ عضویت
    Feb 2016
    نوشته ها
    41
    کد هم اینه
    #include <Wire.h>

    #define RTC_Address 0x32 //RTC_Address

    unsigned char date[7];

    void setup()
    {
    Wire.begin();
    Serial.begin(9600);
    }

    void loop()
    {
    I2CWriteDate();//Write the Real-time Clock
    delay(100);

    while(1)
    {
    I2CReadDate(); //Read the Real-time Clock
    Data_process();//Process the data

    delay(1000);//延时1S
    }
    }

    //Read the Real-time data register of SD2403
    void I2CReadDate(void)
    {
    unsigned char n=0;

    Wire.requestFrom(RTC_Address,7);
    while(Wire.available())
    {
    date[n++]=Wire.read();
    }
    delayMicroseconds(1);
    Wire.endTransmission();
    }

    //Write the Real-time data register of SD2403
    void I2CWriteDate(void)
    {
    WriteTimeOn();

    Wire.beginTransmission(RTC_Address);
    Wire.write(byte(0));//Set the address for writing
    Wire.write(0x59);//second:59
    Wire.write(0x01);//minute:1
    Wire.write(0x95);//hour:15:00(24-hour format)
    Wire.write(0x03);//weekday:Wednesday
    Wire.write(0x26);//day:26th
    Wire.write(0x12);//monthecember
    Wire.write(0x12);//year:2012
    Wire.endTransmission();

    Wire.beginTransmission(RTC_Address);
    Wire.write(0x12); //Set the address for writing
    Wire.write(byte(0));
    Wire.endTransmission();

    WriteTimeOff();
    }

    //The program for allowing to write to SD2400
    void WriteTimeOn(void)
    {
    Wire.beginTransmission(RTC_Address);
    Wire.write(0x10);//Set the address for writing as 10H
    Wire.write(0x80);//Set WRTC1=1
    Wire.endTransmission();

    Wire.beginTransmission(RTC_Address);
    Wire.write(0x0F);//Set the address for writing as OFH
    Wire.write(0x84);//Set WRTC2=1,WRTC3=1
    Wire.endTransmission();
    }

    //The program for forbidding writing to SD2400
    void WriteTimeOff(void)
    {
    Wire.beginTransmission(RTC_Address);
    Wire.write(0x0F); //Set the address for writing as OFH
    Wire.write(byte(0));//Set WRTC2=0,WRTC3=0
    Wire.write(byte(0));//Set WRTC1=0
    Wire.endTransmission();
    }

    //Process the time_data
    void Data_process(void)
    {
    unsigned char i;

    for(i=0;i<7;i++)
    {
    if(i!=2)
    date[i]=(((date[i]&0xf0)>>4)*10)+(date[i]&0x0f);
    else
    {
    date[2]=(date[2]&0x7f);
    date[2]=(((date[2]&0xf0)>>4)*10)+(date[2]&0x0f);
    }
    }
    // Use the serial monitor to see information being transmitted
    Serial.print("Sec = ");//second
    Serial.print(date[0]);
    Serial.print(" Min = ");//minute
    Serial.print(date[1]);
    Serial.print(" H = ");//hour
    Serial.print(date[2]);
    Serial.print(" W = ");//week
    Serial.print(date[3]);
    Serial.print(" D = ");//day
    Serial.print(date[4]);
    Serial.print(" M = ");//month
    Serial.print(date[5]);
    Serial.print(" Y = ");//year
    Serial.print(date[6]);

    Serial.println();
    }

  3. #3
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    اگر ممکنه یک لینک از ماژ.ل ساعتتون بزارید ببینیم چیه
    پروتکل ارتباطیش همون I2c هست یا چیز دیگه

  4. #4
    Member
    تاریخ عضویت
    Feb 2016
    نوشته ها
    41
    بله I2C هست ولینکش هم SD2405 Real time clock Module (SKU:TOY0021) - Robot Wiki

  5. #5
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    اوکی

    مشکلتون با کد چیه ؟
    داده غلط بهتون میده یا اصلا داده نمیده ؟

  6. #6
    Member
    تاریخ عضویت
    Feb 2016
    نوشته ها
    41
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    اوکی

    مشکلتون با کد چیه ؟
    داده غلط بهتون میده یا اصلا داده نمیده ؟
    مشکل اینه که داده میده ولی ساعت امکان 25 شدن هم داره. و موضوع بعدی که اینکه مقدار دهی اولیه رو ببینید. درکش نکردم که چرا ساعت 15 شده 0x95 یا ثانیه 59 شده 0x59

  7. #7
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط hamed82 نمایش پست ها
    مشکل اینه که داده میده ولی ساعت امکان 25 شدن هم داره. و موضوع بعدی که اینکه مقدار دهی اولیه رو ببینید. درکش نکردم که چرا ساعت 15 شده 0x95 یا ثانیه 59 شده 0x59

    این دیتاشیت رو مطالعه کنید:
    http://www.robotshop.com/media/files...et-toy0021.pdf

    خیلی کامل توضیح داده

  8. #8
    Member
    تاریخ عضویت
    Feb 2016
    نوشته ها
    41
    سلام مگ مگ عزیزم. ممنون از لطفتون که همیشه سر فرصت و حوصله راهنمایی میکنید. با عرض معذرت از این ماژول سوییچ کردم رو ماژول 1307 و کتابخانهRTClib حالا مشکلی که دارم اینه که از تابع dayOfWeek() میخوام استفاده کنم ولی ارور میده به این شکل: 'class DateTime' has no member named 'dayOfWeek' و کد هم به شکل زیر هستش:
    #include <Wire.h> // I2C-Bibliothek einbinden
    #include "RTClib.h" // RTC-Bibliothek einbinden

    RTC_DS1307 RTC; // RTC Modul

    void setup(void) {

    // Initialisiere I2C
    Wire.begin();

    // Initialisiere RTC
    RTC.begin();

    // Serielle Ausgabe starten
    Serial.begin(9600);

    // Begrüßungstext auf seriellem Monitor ausgeben
    Serial.println("Starte Datum und Zeit - blog.simtronyx.de");

    // Prüfen ob RTC läuft
    if (! RTC.isrunning()) {

    // Aktuelles Datum und Zeit setzen, falls die Uhr noch nicht läuft
    RTC.adjust(DateTime(__DATE__, __TIME__));

    Serial.println("Echtzeituhr wurde gestartet und auf Systemzeit gesetzt.");
    }
    else Serial.println("Echtzeituhr laeuft bereits.");

    }

    void loop(){

    DateTime now=RTC.now(); // aktuelle Zeit abrufen

    show_time_and_date(now); // Datum und Uhrzeit ausgeben

    delay(30000); // 30 Sekunden warten bis zur nächsten Ausgabe
    }

    // Wochentag ermitteln
    String get_day_of_week(uint8_t dow){

    String dows=" ";
    switch(dow){
    case 0: dows="So"; break;
    case 1: dows="Mo"; break;
    case 2: dows="Di"; break;
    case 3: dows="Mi"; break;
    case 4: dows="Do"; break;
    case 5: dows="Fr"; break;
    case 6: dows="Sa"; break;
    }

    return dows;
    }

    // Datum und Uhrzeit ausgeben
    void show_time_and_date(DateTime datetime){

    // Wochentag, Tag.Monat.Jahr
    Serial.print(get_day_of_week(datetime.dayOfWeek()) );
    Serial.print(", ");
    if(datetime.day()<10)Serial.print(0);
    Serial.print(datetime.day(),DEC);
    Serial.print(".");
    if(datetime.month()<10)Serial.print(0);
    Serial.print(datetime.month(),DEC);
    Serial.print(".");
    Serial.println(datetime.year(),DEC);

    // Stunde:Minute:Sekunde
    if(datetime.hour()<10)Serial.print(0);
    Serial.print(datetime.hour(),DEC);
    Serial.print(":");
    if(datetime.minute()<10)Serial.print(0);
    Serial.print(datetime.minute(),DEC);
    Serial.print(":");
    if(datetime.second()<10)Serial.print(0);
    Serial.println(datetime.second(),DEC);
    }

  9. #9
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط hamed82 نمایش پست ها
    سلام مگ مگ عزیزم. ممنون از لطفتون که همیشه سر فرصت و حوصله راهنمایی میکنید. با عرض معذرت از این ماژول سوییچ کردم رو ماژول 1307 و کتابخانهRTClib حالا مشکلی که دارم اینه که از تابع dayOfWeek() میخوام استفاده کنم ولی ارور میده به این شکل: 'class DateTime' has no member named 'dayOfWeek' و کد هم به شکل زیر هستش:

    if(datetime.second()<10)Serial.print(0);
    Serial.println(datetime.second(),DEC);
    }

    سلام
    خواهش می کنم
    ببین کدی که تو داری استفاده می کنی کد یه ساعت دیگس با کتابخونه rtclib
    بنابراین کلاس هایی که برای اون نوشتن تو این جواب نمیده
    چرا از مثال های خود کتابخونه استفاده نمی کنی اگه داری از 1307 استفاده می کنی

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO