Модуль часов реального времени DS1307 - стоит без внешнего питания
- Войдите на сайт для отправки комментариев
Вс, 30/04/2017 - 14:26
Добрый день!
Модуль часов реального времени с DS1307 подключен к Ардуино и работает. Но если отключить питание Ардуино (при наличии батарейки на часах), время запоминается и стопорится. А когда Ардуино вновь включается, время продолжает идти с запомненного значения.
Это нормально? Думаю, что нет, и часы реального времени при наличии батарейки должны идти, не останавливаясь.
Прошу совета.
Мне интересно, а каким образом DS1307 сообщает вам, что он начал отчет с запомненнго значения?
Это нормально?
Зависит от того, чего Вы хотите.
Этим управляет 7-ой бит (CH) регистра 0. Что туда запишете, так и будет себя вести (стр. 8 даташита)
Мне интересно, а каким образом DS1307 сообщает вам, что он начал отчет с запомненнго значения?
Я вывожу показания на экран.
Смотрю на экран, запоминаю время. Выключаю контроллер. Через минуту включаю, смотрю на экран... как-то так ))
Это нормально?
Зависит от того, чего Вы хотите.
Этим управляет 7-ой бит (CH) регистра 0. Что туда запишете, так и будет себя вести (стр. 8 даташита)
Большое спасибо!
А скетч хотелось бы взглянуть, есть сильные сомнения в умении ТС менять биты регистра 0.
Научится, если хочет. А не хочет - это к Onkel - тот на чистом С и из посеребренных проводов всё сделает.
Научится, если хочет. А не хочет - это к Onkel - тот на чистом С и из посеребренных проводов всё сделает.
Провода лучше делать из латуни и провести химическое пассивирование, скин слой не подвержен окислению будет, со всеми вытекающими
ua6em, Вы на ключе работаете?
ua6em, Вы на ключе работаете?
а как же, даже в чемпионате Литвы по скоростной телеграфии участвовал )))
ua6em, Вы на ключе работаете?
а как же, даже в чемпионате Литвы по скоростной телеграфии участвовал )))
Можете порекомендовать девайс (не обязательно здесь, можно и в другом месте), чтобы не слишком дорогой, но нормальный. Назначение - 11-летнему ребёнку на "дать попробовать, вдруг понравится".
№2 думаю подойдёт цена-качество
а есть кому руку поставить? а то сам не сможет, эргономика должна быть эргономной, а можно сразу на электронный попробовать, кстати, вы бы на ардуине его и сделали ))) а манипуляторов много, простейший я делал из оргстекла, некрасиво, но жёсткость под себя настраиваешь и очень даже хороший ключ
Спасибо. Кому руку поставить поищу, проблему-то понимаю, так что буду решать.
А еще, немаловажно, найти хорошие напевы под азбуку!. До сих пор не пойму, почему 1 - "я на горку шла", 2 - "куда ты пошла" и т.д.
я напевы не помню, это как один из языков уже
ХОРОШИЙ ТРЕНАЖЁР
Это нормально?
Зависит от того, чего Вы хотите.
Этим управляет 7-ой бит (CH) регистра 0. Что туда запишете, так и будет себя вести (стр. 8 даташита)
может подскажите команду записи 1 в 7-ой бит ?
Да, не знаю. Вы руками с часами работаете или библиотекой какой, кто ж Вас знает.
Да, не знаю. Вы руками с часами работаете или библиотекой какой, кто ж Вас знает.
Библиотека iarduino_RTC.h имеет такую возможность... ?
Понятия не имею. Я её никогда не видел.
Понятия не имею. Я её никогда не видел.
Ну ладно... а как бы вы это сделали ?
Ну, я бы никакими билиотеками вообще не пользовался - писал бы вручную
Но, когда-то я вот так же здесь на форуме кому-то добавлял в библиотеку для DS3231 такую фичу. Могу показать. Но у Вас же другая библиотека, да и часы другие.
Добрый день!
Позже подскажу, сейчас не рядом с ПЛК, на память не помню. У меня всё сразу получилось.
А еще, немаловажно, найти хорошие напевы под азбуку!. До сих пор не пойму, почему 1 - "я на горку шла", 2 - "куда ты пошла" и т.д.
1 . _ _ _ _ И тОлькО ОднО
2 . . _ _ _ Я нА гОркУ шлА
3 . . . _ _ трИ тЕбЕ мАлО
4 . . . . _ кОмАндИр пОлкА
5 . . . . . пЯтИлЕтИЕ
..... и так далее. Не важно какой напев, важно чтоб он запомнился как определённый символ.
Добрый день!
Позже подскажу, сейчас не рядом с ПЛК, на память не помню. У меня всё сразу получилось.
Да, если можете поскажите. А часы такие я думаю купить не проблема.
А еще, немаловажно, найти хорошие напевы под азбуку!. До сих пор не пойму, почему 1 - "я на горку шла", 2 - "куда ты пошла" и т.д.
1 . _ _ _ _ И тОлькО ОднО
2 . . _ _ _ Я нА гОркУ шлА
3 . . . _ _ трИ тЕбЕ мАлО
4 . . . . _ кОмАндИр пОлкА или я на горку шла )))
5 . . . . . пЯтИлЕтИЕ
..... и так далее. Не важно какой напев, важно чтоб он запомнился как определённый символ.
Это нормально?
Зависит от того, чего Вы хотите.
Этим управляет 7-ой бит (CH) регистра 0. Что туда запишете, так и будет себя вести (стр. 8 даташита)
может подскажите команду записи 1 в 7-ой бит ?
Прошу прощения за задержку.
Я делал это стандартной библиотекой Wire.h. Итак, ниже скетч, который может записать байт в DS1307 (или изменить бит 7 (CH) байта 0).
Если вы просто загрузите скетч, при условии верного адреса прибора, то на мониторе СОМ порта увидите состояние всех битов нулевого байта, как они меняются и чему равен 7-й бит (7-6-...-1-0).
Для записи нового значения нужно:
1. Стереть "//" перед "Wire.write(0);".
2. В скобках оставить "0", если хотите сбросить 7-й бит и "128", если хотите установить 7-й бит.
3. Загрузить получившийся в пункте 2 скетч.
4. Заново установить "//" перед "Wire.write(0);". (чтобы перестать записывать)
5. Загрузить получившийся в пункте 4 скетч.
Теперь вы увидите, что бит 7 байта 0 принял то значение, которое вы записали.
Вот сам скетч:
А при установке 7-го бита в 0-ом байте время обнуляется ?
А при установке 7-го бита в 0-ом байте время обнуляется ?
Я не проверял, но думаю, что скорее всего нет, разве что секунды обнуляются.
Но это и не важно. Нужно всего один раз откорректировать бит 7 и забыть об этом. А уж потом установку текущего времени можно организовать в вашей основнй программе.
Тем более, по моему опыту, часы начинают врать со временем и, по-хорошему, нужно бы в программе организовать установку/корректировку времени с помощью экрана и, например, джойстика. Но это уже смотря насколько сильно хочется заморочиться =)
с помощью экрана и, например, джойстика.
Не проще ли через NTP/GPS/и т.д.? Соответсвующие модули копейки стоят, зато время всегда точное - не надо помнить об этом.
Я не проверял, но думаю, что скорее всего нет, разве что секунды обнуляются...
Но это и не важно.
как раз мне важно. Там принцип какой... Время (для меня это будет таймер - час:мин:сек) начинается с нуля. И стоит пока не "нажмут кнопку", пока кнопка НАЖАТА время идет, как только "кнопку" отпустили врмя стало на паузу и СЕКУНДЫ сохранились. Интервалы "удержания кнопки" могут быть разными 1сек, 5,сек, 24сек, 7сек, 40сек, 1мин, 3мин и т.п. Но, пока я не захочу обнулить часы, время дожно сохраняться.
с помощью экрана и, например, джойстика.
Не проще ли через NTP/GPS/и т.д.? Соответсвующие модули копейки стоят, зато время всегда точное - не надо помнить об этом.
Конечно, так намного лучше. И это хороший совет тому, кто собирается использовать часы. В моём случае я просто разбирался с тем, что есть.
Я не проверял, но думаю, что скорее всего нет, разве что секунды обнуляются...
Но это и не важно.
как раз мне важно. Там принцип какой... Время (для меня это будет таймер - час:мин:сек) начинается с нуля. И стоит пока не "нажмут кнопку", пока кнопка НАЖАТА время идет, как только "кнопку" отпустили врмя стало на паузу и СЕКУНДЫ сохранились. Интервалы "удержания кнопки" могут быть разными 1сек, 5,сек, 24сек, 7сек, 40сек, 1мин, 3мин и т.п. Но, пока я не захочу обнулить часы, время дожно сохраняться.
Насколько я понимаю, бит 7 байта 0 определяет, стоят или идут часы при отсутствии внешнего питания. А в Вашем случае при наличии внешнего питания часы всегда стоят, пока не нажмёшь кнопку.
Если решать эту задачу "в лоб", то без нажатия кнопки нужно просто постоянно записывать одно и то же значение времени (для установки времени есть готовые библиотеки). По нажатию на кнопку перестать записывать (чтобы часы пошли) и постоянно запоминать текущее время. После отжатия кнопки продолжать записывать одно и то же запомненное перед отжатием время.
Если не "в лоб", то, может, есть бит остановки времени, но я такого в этих часах не видел.
Когда устанавливаешь курсор весь байт перезаписывается ? Или когда записываешь "1" в 7 бит в остальные биты записываются нули ?
Или когда записываешь "1" в 7 бит в остальные биты записываются нули ?
Вы физически не можете ничего записать в один бит. Записываете Вы всегда регистр целиком. Что запишете в остальные биты, то там и будет. Как вариант: сначала прочитать регистр, наложить 1 на нужный бит и записать обратно - в итоге, ничего кроме нужного бита не изменится.
ариант: сначала прочитать регистр, наложить 1 на нужный бит и записать обратно - в итоге, ничего кроме нужного бита не изменится..
Вот, вот , вот я про это и думал. Только как это рализовать при отпускании кнопки незнаю. Пока незнаю.
Но логика тут такая.
1. Старт программы . Запись "1" в 7 бит 0-го регистра и обнуляем время ... типа "10000000". Время стоит, часы на нулях. Ждем нажатия кнопки.
2. Нажатие кнопки (первое). Записываем "0" в 7 бит 0-го регистра "00000000" запускаем часы.
.... Wire.write(0);
Wire.write(0); ....
3. Отпускаем кнопку. Считываем значение из 0-го регистра .. "00100110" (какое то значение)
4. Делаем логическое сложение "00100110" + "10000000" = "10100110"
5. Устанавливаем курсор Wire.write(0); и потом записывает результат предыдущего сложения "10100110"
6. Кнопка отпущена, часы остановлены, секунды сохранены. Ждем следуюющего нажатия кнопки.
7. Второе (следуюющие) нажатие кнопки. Считываем значение из 0-го регистра .. "10100110" (то чт записали на кануне)
8. Делаем из "10100110" значение "00100110" (логическое вычитание наверное). Устанавливаем курсор Wire.write(0); и записываем назад (Wire.write(какое то значение);
Поидее время должно пойти с момента остановки, если ничего не напутал.
Пробуйте и смотрите.
1. Старт программы . Запись "1" в 7 бит 0-го регистра и обнуляем время ... типа "10000000". Время стоит, часы на нулях. Ждем нажатия кнопки.
С чего вы взяли, что "1" в 7-м бите 0-го регистра останавливает часы? Она останавливает счёт только при отсутствии внешнего питания (при отключенном контроллере, когда часы работают только от батарейки).
Чтобы остановить часы, нужно туда постоянно записывать одно и то же значение времени, пока не нажата кнопка.
На модуле нужно выпаять резистор на R7 680 кОм. И будет всем счастье :)
На модуле нужно выпаять резистор на R7 680 кОм. И будет всем счастье :)
Некрофил аднака, на дату последнего поста взгляните, чуть больше двух лет прошло.
Нынче уж и модули эти никто не юзает, ну почти.))))
А вдруг у кого то такая проблема... А решения не нашел. А я так просто мимо проходил и написал. На всякий случай.