ARDUINO часики с динамической индикацией

Как то так сложилось, что для ардуинки практически не используют большие 7-ми сегментные индикаторы, все больше уже готовые модули, которые не отличаются крупными размерами.

Сей пробел по мере сил я немного осветил ;)

ARDUINO часики с динамической индикацией Arduino, Программирование, Arduino Nano V3, Длиннопост

Схема часов предельно простая - 4-х разрядный 7-ми сегментный дисплей, собранный на суперярких 1,5" дюймовых индикаторах с общим анодом FYS-15011BD-11. В каждом сегменте индикатора стоят по 2 последовательных светодиода.

Аноды идут соответственно на выводы А2-А5 (в скетче они зовутся 16-19), катоды через резисторы 220 Ом. Ток получается мизерный, а яркость в вечернее время даже чрезмерной.

Я сначала на точку поставил тоже 220 Ом, но она светится значительно ярче, потому надо поэкспериментировать с большим номиналом, в схеме уже стоит 470 Ом.

Катоды идут с D2 до D9 - шесть выводом относятся к PORTD и два к PORTB. Скорее всего можно задействовать весть PORTD на вывод, включая 0 и 1 выводы, на плате обозначаются как выводы последовательного порта, индикатор по идее мешать прошивке не будет. Но я тестировал программу с выводом в последовательный порт, поэтому не задействовал их.


В качестве часов реального времени выбрана DS1302 (впрочем я собираюсь все возможные протестировать). На схеме видно что куда подключать.

Для начальной установки точного времени нужно найти и раскомментировать в коде строчку :


// rtc.setTime(12, 00, 0); // Set the time to 12:00:00 (24hr format)


Естественно поставив нужные значения времени в формате часы : минуты : секунды, после первого запуска опять нужно убрать строку под комментарий и еще раз загрузить скетч. В противном случае время будет  при каждом включении часов начинать отсчет с выбранного времени.


Код с использованной библиотекой реального времени https://yadi.sk/d/PirwXVqzB-1nRw

ARDUINO часики с динамической индикацией Arduino, Программирование, Arduino Nano V3, Длиннопост

Вот так оно выглядит вживую.

ARDUINO часики с динамической индикацией Arduino, Программирование, Arduino Nano V3, Длиннопост

Нули выводятся потому что нашел серьезный баг - беспаечные платы могут из-за плохого контакта дать трудноуловимую ошибку, в данном случае периодически то часы шли, то вот так показывали нули. Оказалось все дело в контактах ног ардуинки в части подключения часовой микросхемы.

ARDUINO часики с динамической индикацией Arduino, Программирование, Arduino Nano V3, Длиннопост

А вот такой корпус будет у этих часиком, корпус от советских электромеханических часов Слава, ну точнее не сам корпус, а декоративные элементы.


PS: Только сейчас вспомнил что бывают переходы на летнее/зимнее время и таки придется в следующей версии ставить кнопки для выставления часов. 😉

Arduino & Pi

1.4K поста20.6K подписчиков

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
3
Автор поста оценил этот комментарий
Тут два пути:
- либо добавить кнопки
- либо отменить переход на летнее время в своей стране.
раскрыть ветку (14)
2
Автор поста оценил этот комментарий

Так она и так не умеет этого делать.

Зачем кнопки? можно повесить перемычку на ардуино, которая будет отключать включать переход, остальное сделать программно.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

А можно пойти ещё дальше, ардуинкой проверять дату и автоматом делать переход зима/лето.

Автор поста оценил этот комментарий

Про кнопки я думаю, классический метод которым пользуются во многих случаях - после каждого нажатия производить запись в память часов реального времени. Чем то мне это не очень нравится, но если не придумаю ничего лучшего, буду реализовывать это.


Плюс в будущей версии думаю поменять местами динамическую индикацию и собственно опрос часов. Как ни боролся и не менял библиотеки, все равно чуть заметное мерцание индикаторов есть, это связано со слишком большим временем работы функции getTime(); Но это ще ничего, версия либы от iarduino универсальная и еще более тяжелая!


В начале, когда я применял обычный вывод ардуино были засветки соседних разрядов, пришлось перейти на работу с портами...

раскрыть ветку (11)
3
Автор поста оценил этот комментарий

"... после каждого нажатия производить запись в память часов реального времени... " -- можно записывать через 10 секунд после последнего нажатия.

Я ставил 2 кнопки -- на часы и на минуты. Для коррекции времени изредка вполне работоспособный вариант. Для автоматической регулировки яркости можно использовать коппечный фоторезистор на любой из свободных аналоговых ног. Ещё я делал похожие часы на ESP8266 и MAX7219 -- 4 индикатора занимают 3 ноги ESP8266, фоторезистор для регулировки яркости на аналогой ноге. ESP8266 подключается к домашней WiFI и берёт точное время из интернета.

3
Автор поста оценил этот комментарий

Применение библиотек ардуино в частности, и HAL в общности - сильно просаживает быстродействие...много было уже "исследований" на хабре...


Темболее, стоит учитывать, что ардуиновские библиотеки сами по себе тормозные и глючные...


Опрос часов в основном цикле?

Поробуйте в прерывании 16 битного таймера, настроенного на интервал в 250 - 999 мс...


Так же можно  и вывод на циферблат в прерывание 8 битного таймера загнать.

1
Автор поста оценил этот комментарий

Я не понял, у тебя индикатор перерисоваеться каждый цикл даже когда время не изменилось. Там решается парой строк

раскрыть ветку (8)
Автор поста оценил этот комментарий

Расскажи как. На регистрах и спец мелкосхемах как сделать знаю, даже вытягивал матрицу из MAX7219 и втыкал свой из этой схемы. Работает! Осталось поиграться чтобы правильно циферки выводило.

раскрыть ветку (7)
Автор поста оценил этот комментарий
как вариант сравнивать значения получаемой из часов, как только оно изменилось, перерисовать индикатор. А мигающую точку привязать например к нечетным секундам.
Автор поста оценил этот комментарий

Перерисовывать достаточно раз в секунду. Для этого в Timer1_action() выставлять флаг, например flag_timer = true. А в loop проверять этот флаг

if(flag_timer)

{

flag_timer = false

// далее код перерисовки индикатора

...

}

раскрыть ветку (5)
Автор поста оценил этот комментарий

Это динамическая индикация, так сказать вручную. Перерисовка, чтобы не было заметно глазу, должна быть как минимум 25 раз в секунду! Чтобы не было мерцания каждую миллисекунду загорается один из индикаторов и так все время.

раскрыть ветку (4)
Автор поста оценил этот комментарий

Этот индикатор сам собой тухнет? Не знаком с ним. Пользуюсь семисегментным индикатором TM1637. Пока на него подаётся напряжение, он горит. Время меняю раз в секунду. Всё хорошо. Мерцаний нет.

раскрыть ветку (3)
Автор поста оценил этот комментарий

ТМ1637 это управляющая микросхема, вещь хорошая, скорее всего я рано или поздно перейду на что-то подобное, удобно управлять. Но это проставка между собственно индикатором и контроллером. Как те-же регистры. Это только в среде ардуино популярны такие устройства, всякие конструкции коммерческих часов как правило делают как можно более бюджетными, а значит все эти проставки исключаются. Да и в тех же часах на микроконтроллере он просто простаивает практически все время, так что загрузить его хоть чем-то было бы логично.

Вот схема часиков на atmega8 (сначала даже резисторы не ставили!) http://best-chart.ru/samodelnye-elektronnye-chasy-budilniki/...

раскрыть ветку (2)
Автор поста оценил этот комментарий

Спасибо за информацию, интересно. У нас не коммерческий проект, копейки можно не экономить.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Если нужны большие индикаторы, то можно просто выпаять из модуля с ТМ-кой штатный индикатор и заменить его сборкой больших. Вот только надо внимательно смотреть на даташиты, в некоторых сегментах бывает и три и даже больше последовательных светодиодов, может просто не хватить напряжения питания для раскачки. Причем схем включения через транзисторы и т.д. я не встречал, может кто подскажет...

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку