Модуль ds1302 в автономном режиме работает, при подключении к ардуино "замирает". В чём причина?
- Войдите на сайт для отправки комментариев
https://yadi.sk/d/1Jec3yEorej8S
По ссылке видео с субтитрами. Это заснята суть проблемы. Прямо на яндексе можно посмотреть, но без сабов. Лучше скачать оба файлика в одну папочку и тогда можно будет посмотреть с моими комментариями.
А вот описание проблемы:
В автономном режиме работает как положено, а при подключении к ардуино "замирает" (как будто на паузу нажали). Иногда всё же удаётся сделать так, что будут идти, но это надо несколько раз снять/подключить модуль. А при перезагрузке или отключении внешнего питания от платы (свет к примеру пропал) снова замирает.
У меня были мысли что это проблема в том, что батарейка 3V, а с ардуино модуль кормится 5V. Типа на 3V он работает стабильнее, но Arduino Pro Mini еще не доехела, чтобы проверить этот вариант.
Подскажите, кто уже имел дело со связкой Arduino Uno + модуль ds1302, что за беда. Может выкинуть модуль просто и новый взять, но не факт что проблема не повторится.
На всякий случай померил выход на ардуине - даже пяти вольт нет (4,95).
код в студию!
Делалось на основе этого видео: https://www.youtube.com/watch?v=dCevx2I3S38 и этого https://www.youtube.com/watch?v=jG0sbB4tD04. Из первого взял пример подключения к плате и распиновку, а из второго библиотеку + пример.
После первой прошивки закомментирую строки 27, 28, 37-39 (как показано во втором видосе) и снова шью.
Хм.. врде все прозрачно. В качестве начального предположения: а давайте попробуем всегда оставлять 27 строку. Потому как по datasheet:
LOCK HALT FLAG
Bit 7 of the seconds register is defined as the clock halt (CH) flag. When this bit is set to logic 1, the clock oscillator
is stopped and the DS1302 is placed into a low-power standby mode with a current drain of less than 100nA. When
this bit is written to logic 0, the clock will start. The initial power-on state is not defined
Вдруг у вас по питанию что-то прилетает когда Вы плату/порт дергаете.
UPD. Подумалось, что если проблема в этом, и дергаете сам DS модуль по питанию, то в качестве профилактики остановки надо [ rtc.halt(false); // false - тикать, true - остановиться ] постоянно в loop дергать.
Вот где то содрал.
1. В регистре секунд есть не использованный старший бит. В него вставили флаг перехода в спящий режим. Он вскакивает, если напряжение питания падает ниже 2 вольт. При этом схема переходит в спячку, но на внешние сигналы отвечает, хотя генератор останавливается! Чтобы сбросить флаг, при каждом включении записывайте в регистр секунд нолик. Или, если Вы аккуратист, то прочтите время, сбросьте старший бит и запишите секунды обратно.
2. У нас генератор при даже небольшом разряде батареи останавливался. То есть уже при 3,5 вольта стоял. В чем дело? Ведь по DS напряжение отруба - 2 вольта! А дело в том, что батарея – химическое устройство, т.е. медленное! При разряде сильно возрастает сопротивление на частоте работы генератора. После шунтирования батареи парой электролит + керамика все стало ОК. Керамика обязательна, так как генератор запускается не от ступенек, а от фронтов. После принятых мер генератор стал устойчиво работать до полного разряда батареи
1. В регистре секунд есть не использованный старший бит. В него вставили флаг перехода в спящий режим. Он вскакивает, если напряжение питания падает ниже 2 вольт. При этом схема переходит в спячку, но на внешние сигналы отвечает, хотя генератор останавливается! Чтобы сбросить флаг, при каждом включении записывайте в регистр секунд нолик. Или, если Вы аккуратист, то прочтите время, сбросьте старший бит и запишите секунды обратно.
rtc.halt(false); именно это и делает. Чтож, ждем ответа от ТС после проверки :))
Ну и совет №2 тоже очень в тему!
Всяко пробовал. И 27-ю строку оставлял на всякий случай - не помогло.
Вечером попробую эту строку в loop записать и потестить.
Борода. Если добавить rtc.halt(false) в loop{} ничего отличного от того, что было раньше не происходит.
Борода. Если добавить rtc.halt(false) в loop{} ничего отличного от того, что было раньше не происходит.
Тогда, прежде всего, совет 2 из #4 от Okmor
Боюсь я с советом №2 не справлюсь. Нужно разжевать.
Вот сейчас сижу колдую с ардуино про мини (приехала). Вот только приехала 5-ти вольтовая версия. А тут бы 3,3 в самый раз.
Короче работает, но как-то странно. Случайно коснулся чипа - кипяток. Отрубил питание, а в Serial'е время идёт (видимо на батарейке работает). Тыкаю ресет (примерно секунды 2 проходит), а он мне прибавляет по 6 секунд! Да еще и переваливает периодически за 59 секунд! Видимо в совете №2 всётаки есть решение. Как питание подрубаю - чип нагревается (меньше чем за минуту палец уже не держит).
Короче надо заказывать про мини 3,3 видимо и все норм будет. Либо часы 5-ти вольтовые.
А можно как-н на ардуине управлять напряжением логичесикх уровней (или как там это называется). Типа я на пины 5, 6, 7 логическую единицу не в виде 5-ти вольт буду подавать, а в виде 3,3-х вольт?
Кстати "замирания" не выявлено.
Если что-то в определениях напутал, то поправьте.
А на уне так чип не греется (pin 3-7). Вот проверил только.
Ну 3х вольтовый или 5-ти вольтовый у Вас модуль, это только Вы знаете. Мы ведь его не видели. Как и схему подключения. Сама DS1302 будет и на 3 и на 5-ти вольтах работать. Нагрев - нехороший симптом - корень в питании скорее всего, как и "замирания". Так что вешайте конденсаторы параллельно батарее и проверяйте.
77 секунд это реально круто! :) Может вы модуль уже пережарили?
Замкну-ка я две темы в одну :) http://arduino.ru/forum/apparatnye-voprosy/vy1307-ostanavlivayutsya-pri-otklyuchenii-pitaniya
А я продолжу тут, а то там про ds1307. Чутка, но другое. Даже если простого решения не найдётся, то может у кого-то найдутся похожие проблемы.
Совет Okmor возможно и имеет место, но там немного другая проблема описана. У меня же генератор останавливается фактически после рестарта ардуины, в автономном режиме он работает. Хотя может быть это потому что батарейка еще новая. Или туда вообще аккумуляторную надо (https://www.youtube.com/watch?v=b8-4o6A7dZs - правда это опять же про ds1307).
Сегодня подключил модуль на пины 3-7 (как в скетче), но без батарейки. Всё работает идеально. При ребуте конечно дата сваливается, но зато потом опять начинает тикать с нуля. Работает именно так как и должен. А вот с батарейкой так не хочет.
При попытке взять питание не с третьего пина (как в примере), а с самой платы Ардуино - греется чип. С батарейкой, без батарейки - всё равно.
Вот непонятно. Почему если взять 5 вольт с 5-ти вольт ардуины, то чип греется, а если с 3-го пина, то нет. Померил напряжения там и там. Всё одинаково 5,16В. Хотя в прошлый раз было 4,95В. Как-то так. Чудеса.
Сегодня подключил модуль на пины 3-7 (как в скетче), но без батарейки. Всё работает идеально. При ребуте конечно дата сваливается, но зато потом опять начинает тикать с нуля. Работает именно так как и должен. А вот с батарейкой так не хочет.
Именно! Без батарейки просто нет питания и ничего не работает. А Ваши симптомы похожи на нехватку питания от батарейки при отсутствии внешнего питания. Ну и как полагается, при нехватке своего питания (<2.2в) DS-ка тормозится. Не смотрели, напряжение питания при работе от батареии на ножках DS какое?
Вы видимо плохо прочли. В автономном режиме все нормально. Проблемы возникают при подключению к плате ардуины.
Если модуль подключен к плате без батарейки, то все нормально. Если с батарейкой, то 'замирает'. При отключении от платы или отключении питания платы время идет.
А Какое напряжение на батарее и соответствующем пине DS-ки при подлюченной ардуинке и выключенном внешнем питании?
Так при каких условиях замирание?
DS подключена к ардуине , есть внешнее питание и происходит сброс ардуинки при передергивании COM порта? или ресетом?
Напишите подробнее. Только давайте использовать "DS" и "ардуина", а то когда Вы пишете "плата" то не совсем понятно какая плата.
Так при каких условиях замирание?
DS подключена к ардуине , есть внешнее питание и происходит сброс ардуинки при передергивании COM порта? или ресетом?
Напишите подробнее. Только давайте использовать "DS" и "ардуина", а то когда Вы пишете "плата" то не совсем понятно какая плата.
Да именно при этих условиях он останавливается. Если батарейка вставлена.
DS + батарейка + автономный режим (от батарейки) без подключения к ардуине = работает. Отмечаю потому что при отключении было одно время, а при подключении стало другое время, значит при отсутствии внешнего питания DS исправно работал от батарейки. Так сказать "тикал".
DS + батарейка + подключение к ардуине = не работает, пауза, замерание (как по адекватнее назвать... останавливается короче). Причем если несколько раз переткнуть DS туда/сюда (выдернуть из ардуины, воткнуть), то можно поймать момент когда DS заработает от питания ардуины, но при передергивании COM порта или ресете ардуины он опять останавливается. Всё это есть на видео. Старался блин делал, чтобы понятно было, но видимо плохо получилось.
DS без батарейки + подключение к ардуине = работает. При ресете, передёргивании COM потра - работает. Всё круто. Про сохранение времени речь не идет. И так понятно что при отключении питания DS начнет отчет с нуля, но начнёт ведь!
В описанных выше вариантах на пины ардуины 3 и 4 были прикручены +5V и GND (см. код примера). Чисто для удобства подключения DS (он уже размещен на отдельном модуле). Вот тут https://www.youtube.com/watch?v=dCevx2I3S38 дядька именно таким образом и подключал DS.
Теперь берем питание и землю как обычно с пина +5V и GND ардуины. DS начинает люто разогреваться.
А Какое напряжение на батарее и соответствующем пине DS-ки при подлюченной ардуинке и выключенном внешнем питании?
Вечером обязательно посмотрю. Забыл просто.
Интересует напряжение непосредственно на ножках DS1302 - внешнего питания и батареи в момент "замирания". По идее, способ увести DS в режим остановки генератора, это проседание питание. Эх, хорошо бы осцилографом посмотреть шо там происходит.
Подключен к ардуино, батарейка вставлена, тикает: внеш - 5,15В, бат - 3,04В.
Подключен к ардуино, батарейка вставлена, остановился: внеш - 2,44В, бат - 2,65В.
Подключен к ардуино, батарейки нет, тикает: внеш - 5,15В.
Подключен к ардуино, батарейки нет, остановился: не останавливается, всегда тикает.
Выдернут из ардуино, батарейка вставлена, скорее всего тикает: бат - 2,99В.
Интересует напряжение непосредственно на ножках DS1302 - внешнего питания и батареи в момент "замирания". По идее, способ увести DS в режим остановки генератора, это проседание питание. Эх, хорошо бы осцилографом посмотреть шо там происходит.
Собственно вот. Померил (см. выше).
Подключен к ардуино, батарейка вставлена, остановился: внеш - 2,44В, бат - 2,65В.
Почему так просело внешнее питание? Не должно быть так!
Если в этом варианте внешнее было отключено - то надо смотреть разводку питания от батареи на DS. Батарея должна уходить только на DS и на землю.
Подключен к ардуино, батарейка вставлена, остановился: внеш - 2,44В, бат - 2,65В.
Почему так просело внешнее питание? Не должно быть так!
Если в этом варианте внешнее было отключено - то надо смотреть разводку питания от батареи на DS. Батарея должна уходить только на DS и на землю.
Подключен к ардуино - это он подключен к ардуино и от него же кормится. В этом варианте как раз внешнее питание подключено.
При отключении внешнего питания он работает от батарейки нормально, и претензий в этот момент к нему нет никаких. А вот на самой ардуине, даже если заведётся, то при ресете останавливается, если батарея в нём есть, а если батарейки нет, то будет тикать, но, ясное дело, с нуля.
Только что проделал те же манипуляции с DS, но теперь подключил его к про мини. Всё точно так же как и с уной. Никакой разницы. Даже напряжения не сильно отличаются.
Дополнительно замерил напрячение на ногах DS при сильном нагреве чипа. Это когда я подключаю ноги VCC, GND DS-ки к VCC, GND ардуины, а не к 3, 4-му пинам как в примере. Было 3,66В на ноге внешнего питания, 2,99В на ноге батарейки, DS грелся.
Дальше интереснее. Вынимаю батарею из DS, подключаю еще раз в схему "перегрева". Напряжение с ноги внешнего питания 5,19В. Все нормально, ничего не греется, а в прошлый раз на уне грелось. Пару раз жму ресет - нормально. Подключаю батарею, жму ресет - 5,19В ничего не греется. Прям мистика. Выдернул проводки VCC, GND из про мини, воткнул назад, нажал ресет - 3,66В начал греться DS. Странно всё это. Закажу еще 1 DS для опытов.
До кучи вопрос: про мини у меня шьется через usbasp программатор (опух пока ему прошивку обновлял). Сериал порт ничего показывать не хочет. "Плата СОМ3 недоступна" пишет. Я правильно понимаю, что при подключении через usbasp так и должно быть, Serial будет не доступен? А если будет usbttl конвертер, то через Serial я все увижу как обычно?
usbasp программатор, usbttl конвертер - вроде в этом и ключевая разница.
Хочу поделиться, может кому поможет. Я тоже поимел проблем с подключением ds1302, нагревание, зависание, неточный ход. Прогуглил массу постов. Сейчас ни чего не греется, не зависает и идет с приличной точностью, практически как заводные часы моей бабушки :-) Для того что бы чип не грелся я сделал две вещи, в скетче в setup() добавил строку rtc.setTCR(TCR_OFF); // выключить зарядку. Вывод земли устройства я подключил к земле ардуино через сопротивление 7 кОм. Сопротивление было определено так, подключил переменный резистор на 10 кОм на землю и в монитор порта каждую секунду выдал показания часов и крутил резистор. От 10 до 8 кОм периодически часы выдавали бред. От 8 до 6 кОм стабильная работа, меньше 6 кОм опять бред. Питание устройства от +5 ардуино, остальные выводы подключил напрямую к портам ардуино. Для повышения точности я просверлил по краям от кварца по середине длины в плате пару отверстий 1 мм, обогнул дугой кварц провочкой от какой то радиодетали и с обратной стороны на плате припаял к земле. Полет нормальный.
П.С. кто то писал, что ставить сопротивление на землю не правильно, так вот можете попробовать другой способ, я его не пробовал, т.к. порядком устал от борьбы с этими часами. Выводы управления подтягиваются к +5в резисторами на 10 кОм, а питание +5в подается через сопротивление 1 кОм. Земля напрямую. Если кто будет пробовать и получится, напишите тут ради интереса.
Еще одна фича которая может кому то пригодиться при работе с часами ds1302. Не смотря на все доработки схемы подключения и настройки часов в них иногда, очень редко но проскакивают левые данные. И что бы они не попадали в основную программу я сделал в своем скетче фильтр на такие глюки. Допустим есть переменная в которой хранится текущее время Time CurTime. Заполняем ее значение так что бы левые данные отсекались:
void GetCurTime() {
CurTime = rtc.getTime();
while (CurTime.date == 0 || CurTime.date > 31 || CurTime.hour > 23 || CurTime.mon == 0 || CurTime.mon > 12) {
CurTime = rtc.getTime();
delay(500);
}
}
Вчера тоже получил часы на 1302 и начались те же "пляски с бубном".
Перепробовал все советы с этой темы, перепробовал кучу скетчей - останавливаются, собаки, и всё!
Сегодня просто по-старинке попробовал пропаять все контакты и подрезать их по длине - уж очень сильно торчали. Решил: если и это не поможет - пущу под переделку на 1307.
И случилось ЧУДО - они заработали!