RTC DS1307. Как настроить дату и время раз и навсегда?
- Войдите на сайт для отправки комментариев
Вс, 12/03/2017 - 18:50
Доброго времени суток
Появился небольшой вопрос. Как настроить дату/время по включению, будь то программно заданное значение или же вручную (из монитора порта), я понимаю. Но как единожды настроить часики и заставить их шагать даже при выключенном МК? Хочу лишь раз прошить ардуинку, настроить время и забыть о дальнейшем её подключении к ПК и каких-либо настройках, +при этом возможны отключения платы от сети
Пользуюсь библиотекой "DS1307RTC" (http://www.pjrc.com/teensy/td_libs_DS1307RTC.html)
Помогите юному горе-изобретателю
Заранее, спасибо
батарейку вставить надо прежде :)))
имеется. и для подключения немного подпаял плату (выпаял D1, R4 и R6, а R6 замкнул)
Ну так часы они вроде сами без ардуинки и компа время считают. В чем вопрос то?
Установите из монитора. Провод выдерните и разрежьте, от соблазна.))))
Запусть один раз скетч, а потом закоментировать строки
// get the date and time the compiler was run if (getDate(__DATE__) && getTime(__TIME__)) { parse = true; // and configure the RTC with this info if (RTC.write(tm)) { config = true; }спасибо. что-то заглупил..
запустил из библиотеки DS1307RTC пример SetTime, настроил время, всё прекрасно. Вгрузил свой скетч, всё работает. Сбрасывал через кнопку на самой ардуинки - время всё равно не сбивалось, отлично. Отключил питание и подключил снова - время сбилось.
#include <Wire.h> #include <Time.h> #include <TimeLib.h> #include <DS1307RTC.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 20, 4); void setup() { lcd.begin(); lcd.backlight(); lcd.clear(); } void loop() { tmElements_t tm; // if (RTC.read(tm)) { lcd.setCursor(0, 0); print2digits(tm.Hour); lcd.print(":"); print2digits(tm.Minute); lcd.print(":"); print2digits(tm.Second); // lcd.setCursor(0, 1); lcd.print(tm.Day); lcd.print("."); lcd.print(tm.Month); lcd.print("."); lcd.print(tmYearToCalendar(tm.Year)); } else { if (RTC.chipPresent()) { Serial.println("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } } void print2digits(int number) { if (number >= 0 && number < 10) { lcd.print("0"); } lcd.print(number); }Проверте напряжение, а лучше посмотрите осцилографом напряжение на батарейке.Скорее всего черепаха там. У меня было аналогичное поведение, пока не пропаял ножки держателя батарейки и дорожки к ним. Определил что надо паять, когда замерянное напряжение на ножках микросхемы было в 2 раза меньше чем на батарее при отключении питания.
Посмотрите даташит DS1307. Например, в DS3231 есть специальный бит конфигурации, отвечающий за работу осциллятора от батареи. Если он установлен неправильно, то при выключенном питании (и подключённой батарее) часы не идут, а только помнится время выключения питания.
да, действительно ножки батарейки были плохо припаяны. Спасибо!
да, действительно ножки батарейки были плохо припаяны. Спасибо!
с ножками всегда так