نمایش نتایج: از 1 به 10 از 49
Like Tree14 لایک

موضوع: ماژول ساعت فوق دقیق ds3231 با رابط i2c

Hybrid View

  1. #1
    Junior Member
    تاریخ عضویت
    Jul 2016
    نوشته ها
    7
    سلام

    من یکی از این ماژولها از آفتاب رایانه تهیه کردم و با کدهای این پست و پست دیگه*ی فروم در مورد این ماژول و چندتا سایت خارجیه دیگه تست*اش کردم اما همیشه اطلاعات رو با خطا نشون میده. مثلا اینطوری: Time:165:165:165.
    پینهای SDA و SCL رو هم درست متصل میکنم. از پینهای مختلفی هم استفاده کردم اما جواب تغییری نکرد. A4, A5 و غیره. ممکنه مشکل سخت افزاری داشته باشه یا جایی رو دارم اشتباه میکنم؟!

    ممنون.

  2. #2
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط _hadi نمایش پست ها
    سلام

    من یکی از این ماژولها از آفتاب رایانه تهیه کردم و با کدهای این پست و پست دیگه*ی فروم در مورد این ماژول و چندتا سایت خارجیه دیگه تست*اش کردم اما همیشه اطلاعات رو با خطا نشون میده. مثلا اینطوری: Time:165:165:165.
    پینهای sda و scl رو هم درست متصل میکنم. از پینهای مختلفی هم استفاده کردم اما جواب تغییری نکرد. A4, a5 و غیره. ممکنه مشکل سخت افزاری داشته باشه یا جایی رو دارم اشتباه میکنم؟!

    ممنون.

    سیم بندیتون اگر با uno کار می کنید باید این باشه :

    wiring instructions (with Arduino uno r3 as an example):
    the SCL → the A5
    the SDA → the A4
    the VCC → 5V
    the GND → the GND

    اما در مورد نمونه کد یه احتمالی که وجود داره اینه که آدرس i2c ماژول شما با آدرسی که داره توی کد استفاده میشه فرق کنه . برای اطمینان این کد رو آپلود کنید و تو کنسول سریال کد هگز سریال ارتباط i2c تون رو بردارید و با کدی که دارید آپلود می کنید مقایسه کنید:
    کد:
    #include <Wire.h>
     
     
    void setup()
    {
      Wire.begin();
     
      Serial.begin(9600);
      while (!Serial);             // Leonardo: wait for serial monitor
      Serial.println("\nI2C Scanner");
    }
     
     
    void loop()
    {
      byte error, address;
      int nDevices;
     
      Serial.println("Scanning...");
     
      nDevices = 0;
      for(address = 1; address < 127; address++ )
      {
        // The i2c_scanner uses the return value of
        // the Write.endTransmisstion to see if
        // a device did acknowledge to the address.
        Wire.beginTransmission(address);
        error = Wire.endTransmission();
     
        if (error == 0)
        {
          Serial.print("I2C device found at address 0x");
          if (address<16)
            Serial.print("0");
          Serial.print(address,HEX);
          Serial.println("  !");
     
          nDevices++;
        }
        else if (error==4)
        {
          Serial.print("Unknow error at address 0x");
          if (address<16)
            Serial.print("0");
          Serial.println(address,HEX);
        }    
      }
      if (nDevices == 0)
        Serial.println("No I2C devices found\n");
      else
        Serial.println("done\n");
     
      delay(5000);           // wait 5 seconds for next scan
    }

    رفرنس:
    http://playground.arduino.cc/Main/I2cScanner

  3. #3
    Junior Member
    تاریخ عضویت
    Jul 2016
    نوشته ها
    7
    خیلی ممنون از پاسختون. اما مشکل حل نشد. همه اینها رو قبلا امتحان کرده بودم. پینها رو که روی برد تغییر میدم داخل کد هم اصلاح میکنم. هم با برد اونو و هم مگا. احتمالا ماژول مشکل داره.

  4. #4
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط _hadi نمایش پست ها
    خیلی ممنون از پاسختون. اما مشکل حل نشد. همه اینها رو قبلا امتحان کرده بودم. پینها رو که روی برد تغییر میدم داخل کد هم اصلاح میکنم. هم با برد اونو و هم مگا. احتمالا ماژول مشکل داره.
    آدرس i2c رو هم چک کردید؟

    اگر آره زنگ بزنید فروشگاه ببیند شرایط مرجوعی رو برای برگردوندن دارید

  5. #5
    Junior Member
    تاریخ عضویت
    Jul 2016
    نوشته ها
    7
    بله همون اول چک کردم.
    خوب قیمت چندانی نداره که توجیح مرجوع کردن داشته باشه. فقط خیلی لازم*اش دارم و تهران نتونستم پیداش کنم. یک ماژول شبکه هم گرفته بودم و تلاش کردم از اون برای سینک کردن ساعت جهانی با دیتای ساعت داخل بردم استفاده کنم که باز هم موفق نبودم!

  6. #6
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط _hadi نمایش پست ها
    بله همون اول چک کردم.
    خوب قیمت چندانی نداره که توجیح مرجوع کردن داشته باشه. فقط خیلی لازم*اش دارم و تهران نتونستم پیداش کنم. یک ماژول شبکه هم گرفته بودم و تلاش کردم از اون برای سینک کردن ساعت جهانی با دیتای ساعت داخل بردم استفاده کنم که باز هم موفق نبودم!
    این کد رو هم تست کنید لطفا:
    کد:
    #include "Wire.h"
    #define DS3231_I2C_ADDRESS 0x68
    // Convert normal decimal numbers to binary coded decimal
    byte decToBcd(byte val)
    {
      return( (val/10*16) + (val%10) );
    }
    // Convert binary coded decimal to normal decimal numbers
    byte bcdToDec(byte val)
    {
      return( (val/16*10) + (val%16) );
    }
    void setup()
    {
      Wire.begin();
      Serial.begin(9600);
      // set the initial time here:
      // DS3231 seconds, minutes, hours, day, date, month, year
      setDS3231time(30,42,21,4,26,11,14);
    }
    void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
    dayOfMonth, byte month, byte year)
    {
      // sets time and date data to DS3231
      Wire.beginTransmission(DS3231_I2C_ADDRESS);
      Wire.write(0); // set next input to start at the seconds register
      Wire.write(decToBcd(second)); // set seconds
      Wire.write(decToBcd(minute)); // set minutes
      Wire.write(decToBcd(hour)); // set hours
      Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
      Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
      Wire.write(decToBcd(month)); // set month
      Wire.write(decToBcd(year)); // set year (0 to 99)
      Wire.endTransmission();
    }
    void readDS3231time(byte *second,
    byte *minute,
    byte *hour,
    byte *dayOfWeek,
    byte *dayOfMonth,
    byte *month,
    byte *year)
    {
      Wire.beginTransmission(DS3231_I2C_ADDRESS);
      Wire.write(0); // set DS3231 register pointer to 00h
      Wire.endTransmission();
      Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
      // request seven bytes of data from DS3231 starting from register 00h
      *second = bcdToDec(Wire.read() & 0x7f);
      *minute = bcdToDec(Wire.read());
      *hour = bcdToDec(Wire.read() & 0x3f);
      *dayOfWeek = bcdToDec(Wire.read());
      *dayOfMonth = bcdToDec(Wire.read());
      *month = bcdToDec(Wire.read());
      *year = bcdToDec(Wire.read());
    }
    void displayTime()
    {
      byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
      // retrieve data from DS3231
      readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
      &year);
      // send it to the serial monitor
      Serial.print(hour, DEC);
      // convert the byte variable to a decimal number when displayed
      Serial.print(":");
      if (minute<10)
      {
        Serial.print("0");
      }
      Serial.print(minute, DEC);
      Serial.print(":");
      if (second<10)
      {
        Serial.print("0");
      }
      Serial.print(second, DEC);
      Serial.print(" ");
      Serial.print(dayOfMonth, DEC);
      Serial.print("/");
      Serial.print(month, DEC);
      Serial.print("/");
      Serial.print(year, DEC);
      Serial.print(" Day of week: ");
      switch(dayOfWeek){
      case 1:
        Serial.println("Sunday");
        break;
      case 2:
        Serial.println("Monday");
        break;
      case 3:
        Serial.println("Tuesday");
        break;
      case 4:
        Serial.println("Wednesday");
        break;
      case 5:
        Serial.println("Thursday");
        break;
      case 6:
        Serial.println("Friday");
        break;
      case 7:
        Serial.println("Saturday");
        break;
      }
    }
    void loop()
    {
      displayTime(); // display the real-time clock data on the Serial Monitor,
      delay(1000); // every second
    }
    رفرنس: Tutorial - Using DS1307 and DS3231 Real-time Clock Modules with Arduino
    فقط این که یادتون نره زمان رو مطابق زمان واقعی دستی ست کنید.چ
    تابع setDS3231time
    ویرایش توسط magmagmary : 09-19-2016 در ساعت 04:14 AM
    لایک کردن

  7. #7
    Junior Member
    تاریخ عضویت
    Jul 2016
    نوشته ها
    7
    خیلی ممنون. خروجی این شد: 45:165:85 165/165/165 Day of week:
    زمان رو هم تنظیم کردم.

  8. #8
    Junior Member
    تاریخ عضویت
    Sep 2016
    نوشته ها
    11
    نقل قول نوشته اصلی توسط _hadi نمایش پست ها
    سلام

    من یکی از این ماژولها از آفتاب رایانه تهیه کردم و با کدهای این پست و پست دیگه*ی فروم در مورد این ماژول و چندتا سایت خارجیه دیگه تست*اش کردم اما همیشه اطلاعات رو با خطا نشون میده. مثلا اینطوری: Time:165:165:165.
    پینهای sda و scl رو هم درست متصل میکنم. از پینهای مختلفی هم استفاده کردم اما جواب تغییری نکرد. A4, a5 و غیره. ممکنه مشکل سخت افزاری داشته باشه یا جایی رو دارم اشتباه میکنم؟!

    ممنون.
    من هم 3 تا ماژول از افتاب رایانه خریداری کردم که فقط یکیش درست عمل میکنه ، باطری عوض کردم ، ولتاژ گرفتم درست بود و کلی کار دیگه
    ولی جالب اینجاست دو تا ماژولی که خرابه ای سی هاش مثل هم هست و اونی که سالمه فرق داره ای سیش

    این هم نوشته های روی ای سی سالم:
    Ds3231 1sn
    7517a3
    303ab
    روی ای سی هم هشتگ هست و نقطه خالی نیس

    این هم نوشته های روی ای سی خراب :
    Ds3231 1sn
    0839a3
    296aa
    روی ای سی نقطه تو خالی هست

    جالب این جا هست که داخل یوتوب همه ی فیلم ها با اون ای سی سالمه هست که خط سومش ab داره و روی ای سی # هست

    کسی میدونه اون ای سی دومیه رو چکارش باید کرد که درست کار کنه؟

کلمات کلیدی این موضوع

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

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

SEO by vBSEO