DS3231 большое потребление тока, не могу получить время
- Войдите на сайт для отправки комментариев
Всем привет. Я новичок в Arduino, но честно потратил полдня на попытку самостоятельно решить проблему. Вынужден просить помощи знатоков)
Есть Arduino Pro Mini на 3,3В (питается на макетке от 5В). Получил модуль DS3231 с Ali.
Подключил так: SDA->A4, SCL->A5, VCC->VCC 5В, GND->GND
CR2032 вставлена, рабочая (3В).
Пробовал библиотеку для работы с DS3231, вообще ничего не выводит. Последние несколько часов использую этот скетч:
#include "Wire.h" #define DS1307_I2C_ADDRESS 0x57 byte decToBcd(byte val) { return ( (val/10*16) + (val%10) ); } byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); } void setDateDs1307(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99 { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd(month)); Wire.write(decToBcd(year)); Wire.endTransmission(); } void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); *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 setup() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; Wire.begin(); Serial.begin(9600); second = 45; minute = 3; hour = 7; dayOfWeek = 5; dayOfMonth = 17; month = 4; year = 16; setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); } void loop() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); Serial.print(hour, DEC); Serial.print(":"); Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC); Serial.print(" "); Serial.print(month, DEC); Serial.print("/"); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" Day_of_week:"); Serial.println(dayOfWeek, DEC); delay(1000); }
Единственное поменял в нем #define DS1307_I2C_ADDRESS 0x68 на #define DS1307_I2C_ADDRESS 0x57 т.к нашел скетч I2C Tester, который вывел I2C device found at address 0x57 (но сначала конечно пробовал на 0x68, безрезультатно).
В терминал выводит это: 45:165:85 165/165/165 Day_of_week:165
Иногда проскакивают другие значения, но тоже не похожи на нормальные (проскакивают только с батарейкой, без неё всегда одно и тоже). Вот скрин:
Нашел много тем с такой же проблемой, но ничего оттуда мне не помогло. Пробовал добавлять резисторы для SDA и SCL (3,9 кОм, замыкал на VCC), бестолку. Пробовал другую плату Arduino (на 5В), поведение аналогично.
Обеспокоен тем, что если DS3231 не подключать к ардуине и питанию, а просто вставить батарейку, то через неё проходит ток 50-60 мА, микросхема становится слегка теплой через пару минут. Не должно же быть такого? Я не спец в электротехнике, но визуально на плате проблем нет.
Подскажите куда копать? Может сама 3231 неисправная? Как проверить?
Подскажите куда копать?
Копайте могилу для вашего модуля(если все подключено правильно как вы написали).Вам не повезло с модулем.
микросхема становится слегка теплой через пару минут.
Это не эсть хороший признак !Вам не повезло с модулем. или вы его спалил..
Да и адрес странный показывает. У них вроде у всех 0х68 должен быть. Может перемаркировка или м/с другая запаяна? Здесь у кого то уже приходил переходник I2C с 8574, но не PCF.
Спасибо всем, значит этот оставлю на запчасти, заказал у другого продавца)
Запитай 3231 от 3.3В, и все получится...
Эт с какого перепугу?
Запитал, тоже самое. Сканер видит только устройство с адресом 0x57 (как я погуглил это микруха 24C32, а у DS3231 должен быть адрес 0x68).
Выпаял 3231, подключил к Vbat и GND батарейку, ток потребления 60 мА :( Мертвяк как понимаю.
Всем спасибо за советы!
Посмотрите внимательно на большую микросхему, что на ней написано? А то у меня такой же модуль приехал и вместо ds3231 запаяна ds32khzs :( Тоже сканеру на 0х57(это 24C32) и на 0х4F отзывается. естественно как RTC не прокатит :(
Вот китайцы дают! Но у меня ds3231m по даташиту как раз RTC
Подниму старую тему, больше для поисковой выдачи, вдруг кому пригодится. Ибо тоже подорвался на 165, причем глупо, но внешне полный шаманизм, прямо как выше. :)
Библиотек не использую, код работы с часами писал на основе гугла, кроме DS3231 на шине также есть несколько устройств. Причина была банальна - в моем коде не было Wire.begin. :) Ну, так получилось. Когда первым шла инициализация или обращение к устройства через библиотеки, которые таки делали wire.begin - часы работали корректно. А если первыми шло обращение к часам - в ответ приходили 165 по всем пунктам.
Банальная невнимательность, которая внешне (ибо часы чаще работали, чем не работали) выглядила совершенно шаманскими глюками. Ибо за две недели глюк проявился ровно два раза, и на второй был отловлен. Так что батарейки и перепутанные пины - всякое бывает, но все может быть и проще.