Arduino.ru
DS1302 — не отсчитывают время в автономном режиме.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Добрый день !
Есть часы DS1302 и Arduino Uno R3. Подключил библиотеку DS1302.h, загрузил скетч для работы с часами.
Появилась проблема — часы не отсчитывают время в автономном режиме !
Пока есть внешнее питание, часы идут ! Нет внешнего питания — стоят !
После очередного включения, часы отображают время которое было на момент отключения внешнего питания. Судя по всему чип часов работает. Старое время помнят — значит и батарейка работает. Так почему же они не ведут отсчет времени автономно? Кто знает, подскажите !
Может быть есть какая то хитрость в программировании ?
Перед установкой времени используются команды:
rtc.write_protect(false);
rtc.halt(false);
Может быть после установки времени нужно использовать еще какие нибудь команды ?
Или эти же, но с другими параметрами .
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
такой миркушки у меня нет
я не очень понял в чем суть проблемы
микросхемы при обесточивании ведут себя как кнопки замыкающие на землю выводы
что-бы этого не происходило придумали Z- состяние но это питать или Реле
насколько я понял часам на внешную плату ерунда команды уходят
не очень понятно а если микропроцессор включится не сбрасывает ли он периферию
может тут имеет место не синтаксическая проблема а логическая
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Суть проблемы в том что, RTC — DS1302 должны работать как и часы на материнской плате компьютера. То есть независимо от питания которое приходит на материнскую плату от блока питания. Для этого часы снабжены батарейкой.
А в моем случае часы работают нормально лишь до тех пор, пока есть питание на Arduino UNO.
Когда питание Arduino отключается, часы останавливаются. (И запоминают время).
Когда питание вновь подается, часы продолжают показывать время с того момента в который была отключена Arduino.
Ну в общем, если питание отсутствует 2 часа, то потом часы отстают на 2 часа.
Как мне добиться полноценной работы RTC — DS1302 .
Мне нужно чтоб они работали и без питания Arduino.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
думаете что все таки логическая
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
думаете что все таки логическая
заправляю бензин и машина едет. но как только бензин заканчивается, она перестает ехать.. в чем проблема?
наверно нужно как минимум проверить сколько питания выдает батарейка и достаточного ли этого для работы часов..
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Батарейку я проверил в первую очередь.
3.23 Вольта. Да и сохранется время в памяти долго. К батарейке претензий нет.
Arduino у меня недавно. А с часами RTC столкнулся впервые.
Ощущение такое что я просто что то делаю не так. Не могу понять что.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
1. взять нормальную библиотеку с нормальными примерами!
2. ваш код при включении дуины в сеть первым делом выставляет в часах время прописаное в коде.
3. изучайте матчасть!
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Строчку — //rtc.time(t);
В первый раз запускаю в активном виде, без — символов //
А уже во второй раз в виде комментария, с символами — //
Так что во второй раз время стартует не с времени указанного в скетче. А показывает время когда питание было отключено.
И как мне знать какая библиотека нормальная и какой пример нормальный ?
До этого я испробовал две другие библиотеки, но они даже установить правильно время не смогли. Я указывал точное время и дату. Но отображались совсем другие значения. Возможно дело было в кодировке. не знаю. Эта библиотека сразу установила всё правильно. Вот только автономно время не считают а просто замирают до следующего включения.
Может ещё есть идеи ? Или посоветуйте пожалуйста нормальную библиотеку с примерами !
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
возможно не стартует кварц.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Очень странно, т.е. пока внешнее питание есть часы идут и идут правильно, и при отключениии питания время не сбрасывается (при следующем включении время как бы «стартует» с прошлого раза) ?
А что будет, если просто подать питание, засечь скажем 30 сек, и только потом попробовать прочитать время, будет показывать значение предыдущего отключения плюс 30 сек ?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Очень странно, т.е. пока внешнее питание есть часы идут и идут правильно, и при отключениии питания время не сбрасывается (при следующем включении время как бы «стартует» с прошлого раза) ?
Да именно так и происходит.
Задержка 30 сек, интересная идея, попробую.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пробовать не пришлось, потому что ситуация начала проясняться.
Случайно прижал плату часов и начались чудеса. :-)))
Сбились часы на дату 2000 00 00.
Время 0 часов 0 минут, только секунды и день недели продолжили отображаться корректно !
После следующей прошивки отображение пошло через секунду.
То есть четные секунды всё корректно, а нечетные секунды что-то по нулям: или дата, или минуты, или часы.
Или всё по нулям а секунды корректно.
Диагноз — китайская сборка !
Лечение:
1) Пришлось пропаять все контакты платы.
2) Кварц пришлось даже выпаять, залудить нормально и назад впаять.
3) Выводы микросхемы пришлось очистить от оксидов и вставить назад в панельку.
4) Под батарейкой было обнаружено небольшое пятно оксидов. Зачистил.
Если бы чудеса начались сразу, я бы сразу и пропаял !
Возможно из-за плохой сборки и не получилось работать с двумя предыдущими библиотеками .
Теперь всё работает адекватно.
Остался вопрос точности. Ребята в форумах пишут что часы убегают ежесуточно на 5 сек. Посмортим.
Источник
Подключаем и разбираемся с ошибками часов DS1302 для arduino
Приветствую вас пользователи nookery.ru! Я уже не один год время от времени создаю проекты на arduino, для себя и друзей. У меня как и у многих из вас, возникают различные вопросы и проблемы, и это нормально ведь главное учиться и не останавливаться на достигнутом. Не давно я достал свой старый проект и вспомнил сколько проблем у меня с ним возникло. Сейчас я опишу одну из них. В моем проекте использовались часы DS1302, с подключением которых у меня особо не возникло проблем. Пробежавшись по не скольким сайтам нашел схему, в основном она была одна и та же на всех сайта.
В моем проекте я подключил на цифровые выводы arduino 8 9 10, вы же можете их подключить как угодно, у меня они просто единственные остались свободные. Установил множество различных библиотек для работы с часами, но рабочими в моем случаи было только две, остальные были либо принципиально с другим вариантом подключения, либо модифицированные, что меня абсолютно не устраивало. Все хорошо, что хорошо кончается, кода я загрузил скетч:
К моему разочарованию я увидел не то что хотел, а именно каждую секунду выводилось время как и положено дата и время, но в моем случаи выводилось реальное время и еще какое то левое, 2000-00-00 00:00:00 покапавший в библиотеке оказалось что это время вшито внутри нее. Но это никак не помогло мне, так как реальное и фейковое время поочередно выводились у меня на дисплей каждую секунду. Причем в lcd дисплее выводились не время с часов DS1302, а какие то иероглифы, по поочередно. На многих сайтах упоминалось о том что час сломаны, плохая пропайка итд. Но я не опускал руки и все же нашел причину. Оказалось что все дело в не полной схеме, а точнее не хватала резистора 10 кОм на землю -5v. Которые снижали шум внутри цепи, и предотвращали вывод не верной информации с часов. Я накидал полную схему:
С этой схемой все стабилизировалось и часы DS1302 стали работать как надо. Ниже я выложил две библиотеки которые работали у меня, но написаны одна на C# другая на C++ так как же в них разные команды вывода информации, но в обоих есть скетч примеры в архиве с комментариями.
17 комментариев
Мужик, спасибо большое. хотел было выбрасывать их уже)
Рад что помогло, однако было замечены сбои при продолжительной работе в течении нескольких дней, хотя скорее всего в моем случаи это вызывали реле и элементы питания.
В библиотеке перечислены пины:
DS1302(uint8_t ce_pin, uint8_t data_pin, uint8_t sclk_pin);
У Вас — перепутаны CLK и RST:
DS1302 rtc(8, 9, 10); //инициализация платы DS1302
И в течение!! — учите русский язык — отымённый предлог
В течении только у реки..
Золотой Вы человек! Спасибо за помощь в устранении проблемы с перепутанными пинами.
Александр, перепутанные порты не при чем. Учить русский — хорошо. А намерение помочь людям — важнее!
Надеюсь не допустил ошибок…)))
Большое спасибо — помогли!
Умный Александр — порты не при чем.
Собрал все по инструкции не работает выводил скажем нули, перевернул провода CLK и RST на плате и часы пошли.
Большое спасибо за статью! Два дня не мог разобраться что за чушь получаю на выходе с этих часов! :))) РЕЗИСТОР на 10 кОм. Теперь понимаю почему почти все модули реального времени используют аналоговые пины а не цифровые. Теперь буду смотреть как вывести время на 4 матрицы 8х8.
Реально резюк помог.
СПАСИБО.
А не подскажите как использовать в операторе if и часы и минуты одновременно
Конкретно по методам не подскажу, студии нет ардуина под рукой, но суть сводиться к следующему. Если минуты равны 20 и часы равны 5 то выполняем какое то действие в скобках.
if(минуты==20 && часы==5)
<
>
Огромное спасибо! Тоже уже выкидывать собирался.
Так же чуть не поступил 😀
До этого у людей работало, у вас нет?)
Подскажите пожалуйста ошибку. При компиляции выдает (‘hour’ was not declared in this scope)
#include
#include // подключение библиотеки
iarduino_RTC time(RTC_DS1302,8,6,7); // Задаем правильно название нашего модуля, а также указываем к каким цифровым пинам его подключаем(в нашем случае – 8,6,7)
#include // библиотека для устройств I2C
#include // подключаем библиотеку для дисплея
#define feed_period
LiquidCrystal_I2C LCD(0x27,16,2);
Servo servo1;
Источник
Подключение RTC часы реального времени DS1302, DS1307, DS3231 к Arduino
Для подключения RTC часов реального времени DS1302, DS1307, DS3231, была разработана универсальная библиотека.
Подключение:
Подключение DS1307 к Arduino :
| RTC DS1307 | Arduino UNO |
|---|---|
| GND | GND |
| VCC | +5V |
| SDA | A4 |
| SCL | A5 |
Подключение DS1302 к Arduino :
| RTC DS1302 | Arduino UNO |
|---|---|
| GND | GND |
| VCC | +5V |
| RST | 10 (Можно изменить на другие в скетче) |
| CLK | 13 (Можно изменить на другие в скетче) |
| DAT | 12 (Можно изменить на другие в скетче) |
Подключение DS3231 к Arduino :
| RTC DS3231 | Arduino UNO |
|---|---|
| GND | GND |
| VCC | +5V |
| SDA | A4 |
| SCL | A5 Программа:В зависимости от того какой модуль Вы подключаете, необходимо в программе указать Для DS1307: Для DS1302 : Для DS3231 : Пример установки текущего времени в RTC модуль (DS1307): Пример считывания текущего времени с RTC модуля (DS1307) и вывод в «Последовательный порт» : Преимущества библиотеки: — библиотека имеет внутренние функции аппаратной обработки протоколов передачи данных I2C и SPI, а следовательно не требует подключения дополнительных библиотек, но и не конфликтует с ними, если таковые всё же подключены. — библиотека имеет внутренние функции программой обработки протокола передачи данных 3-Wire — для инициализации модуля необходимо вызвать функцию begin с названием модуля. — подключение модулей осуществляется к аппаратным выводам arduino используемой шины (за исключением 3-Wire) — простота установки и чтения времени функциями settime и gettime функция settime может устанавливать дату и время, как полностью, так и частично (например только минуты, или только день, и т.д.) функция gettime работает как функция date в php, возвращая строку со временем, но если её вызвать без параметра, то функция ничего не вернёт, а время можно прочитать из переменных в виде чисел. — библиотека расширяемая, то есть для того, чтоб она работала с новым модулем, нужно указать параметры этого модуля в уже существующих массивах файла RTC.h (тип шины, частота шины в кГц, режимы работы, адреса регистров и т.д.), как всё это сделать, описано в файле extension.txt Таким образом добавив новый модуль в библиотеку, мы лишь увеличим область занимаемой динамической памяти на 36 байт, при этом не затронув область памяти программ. — при вызове функции begin, библиотека читает флаги регистров модуля и при необходимости устанавливает или сбрасывает их так, чтоб модуль мог работать от аккумуляторной батареи, а на программируемом выводе меандра (если таковой у модуля есть) установилась частота 1Гц, тогда этот вывод можно использовать в качестве внешнего посекундного прерывания. — при работе с модулем DS1302 не нужны никакие резисторы на выводе GND (которые нужны для его работы с другими библиотеками этого модуля), это достигнуто тем, что для шины 3-Wire указана конкретная частота 10кГц, не зависимо от частоты CPU arduino. — в библиотеке реализована еще одна не обязательная функция period, принимающая в качестве единственного аргумента — количество минут (от 1 до 255) если в течении указанного времени была вызвана функция gettime несколько раз, то запрос к модулю по шине будет отправлено только в первый раз, а ответом на все остальные запросы будет сумма времени последнего ответа модуля и времени прошедшего с этого ответа. Функцию period достаточно вызвать один раз. Источник |