Тут на форуме есть уже как минимум три различные конструкции часов на светодиодных матрицах. Я предлагаю ещё одну, на MAX7219
Часы (бегущая строка) получаются достаточно простыми. На каждую матрицу нужна лишь одна микросхема драйвера + 1 резистор для задания тока через светодиоды. Управляется такая матрица по трёхпроводному интерфейсу, несколько драйверов можно последовательно каскадировать, при этом количество необходимых от МК линий не изменяется - всего три.
В схеме использованы МК ATmega8, часы DS1307, датчики DS18B20, в общем, за исключением MAX7219, всё знакомое и привычное.
Вот несколько фотографий того, что у меня получилось:
Спойлер
Возможности: 1. Собственно отображение и настройка времени. 2. Один будильник с возможностью задания дней недели для срабатывания. 3. Настройка яркости свечения часов для каждого часа времени суток (ночью можно послабее сделать, днём поярче). 4. Отображение температуры (в комнате и на улице) раз в минуту бегущей строкой. 5. Отображение текущей даты раз минуту бегущей строкой.
Кнопки: 1. Отключение звонка будильника, остановка бегущей строки, выбор настраиваемого параметра в меню настроек. 2. Показать дату бегущей строкой, увеличить значение настраиваемого параметра. 3. Показать температуру бегущей строкой, уменьшить значение настраиваемого параметра. При длинном нажатии кнопки соответственно входят в режимы настройки времени/будильника/яркости.
Длинное одновременное нажатие всех кнопок разворачивает картинку на экране на 180 градусов (если часы вешать на стену, это может быть удобно для подвода провода уличного датчика температуры и кабеля питания с нужной стороны.
В качестве динамика для будильника используется активный buzzer, тоже купленный в Китае.
Собственно, часы делались уже довольно давно, просто сейчас решил выложить то что есть. Возможно, кого-то часы заинтересуют, тогда могу и в виде статьи оформить.
Во вложении прошивка, eeprom, проект для Proteus и библиотека с матрицей для Proteus (пришлось немножко переделать имеющийся символ, чтобы строка бежала слева направо, а не снизу вверх). Можно потыкать кнопки и посмотреть, как это всё работает. Возможные дёрганья при прокрутке строк - это "заслуга" Proteus, в жизни всё аккуратно и плавно.
Если кого-то заинтересует - могу попозже оформить статью и продолжить развитие устройства. Только придётся, наверное, перейти на более "жирный" МК, т.к. в ATmega8 проект уже еле влезает (из-за шрифтов, в основном). Да и написан он был давно, и многие вещи можно оптимизировать.
Новые (на 16 июля 2015 года) возможности по сравнению со статьёй:
Собрать прошивку под свой набор железа можно командой
Код:
make LED_DRIVER=[драйвер] MCU=[микроконтроллер]
Возможные варианты драйверов и микроконтроллеров описаны ниже
- Поддержка сборки для Atmega8/168/328.
В качестве [микроконтроллер] указываем, соответственно, atmega8, atmega168 или atmega328.
- Поддержка варианта для четырёх матриц.
Этот вариант теперь основной. В качестве [драйвер] указываем MAX7219. Для варианта из трёх матриц - MAX7219_X3
- Поддержка повёрнутых на 90 градусов матриц.
Так уж вышло, что у готовых китайских плат в размер матрицы разводка такая, для удобства разводки их надо развернуть на 90 градусов относительно "правильного" положения, для которого делался проект. Поэтому, для [драйвер] появились аналогичные основным варианты MAX7219MOD и MAX7219MOD_X3
- Поддержка драйвера HT1632.
Соответственно, в качестве [драйвер] указываем HT1632. Разводка для этого варианта отличается от вариантов на MAX7219 и соответствует разводки продаваемой китайцами плате J-MCU 3208CLOCK PRO.
- Поддержка датчика температуры и атмосферного давления BMP180.
Датчик работает по шине I²C и подключается к ней параллельно часам реального времени DS1307.
- Поддержка датчика температуры и влажности DHT22.
Датчик подключается к порту PD3, плюс на этом же порту необходим подтягивающий к питанию резистор 4,7кОм.
- Поддержка фоторезистора в качестве датчика освещённости
Я использовал MJ3516, но должен подходить любой с сопротивлением в освещённом состоянии 5..10 кОм. Фоторезистор (и, желательно, 500кОм..1МОм резистор параллельно) подключается между ножкой ADC0 (вариант на MAX7219) (или ADC7 (вариант на HT1632)) и питанием, также между этой ножкой и землёй подключается резистор 10кОм. Таким образом, образуется резистивный делитель, с которого АЦП получает уровень освещённости. На вывод AREF, если он не подключен к питанию, нужно подключить конденсатор 0.1мкф на землю.
Резистор 10кОм на землю обязателен и в случае отсутствия фоторезистора. Он вытягивает вход АЦП в ноль, благодаря чему система определяет, что датчик отсутствует.
При отсутствии фоторезистора дневное распределение яркости при установленном в настройках значении 15 будет выглядеть так:
Для меньшего настроенного значения график соответственно опускается ниже. При наличии фоторезистора уровень яркости, заданный в настройках, будет ограничением яркости сверху.
- Все текстовые строки перенесены в файл EEPROM
Это позволяет сделать перевод интерфейса на разные языки. В данный момент имеются белорусский, английский, украинский и русский варианты. Также это позволяет легко подправить текстовые метки под свои потребности.
- Конфигурация ножек МК вынесена в отдельный файл pins.h
Так что каждый может легко поменять её под свою удобную, разводку.
- Ежечасный сигнал При этом период действия "кукушка" завязан на настройку будильника (неважно, включен ли он сам по себе). Скажем, если он выставлен в 8:20, то первая "кукушка" прозвучит в 9:00 и будет срабатывать вплоть до 23:00, отключаясь на ночь.
- Три различного размера шрифта для отображения времени
При этом два "широких" шрифта можно настроить в EEPROM. Шрифт шириной 5 точек находится в eeprom по смещению 0x180, шириной 6 точек - по смещению 0x1C0. Принципы формирования шрифтов: Спойлер
В eeprom hex-редактором по смещению 0x1C0 вписываем 3E 41 41 41 3E.
Аналогично продолжаем для цифр 1-9
Сменить шрифт можно одновременным длительным нажатием кнопок 2 и 3.
- Возможность отключения лидирующего нуля при отображении времени
Делается это одновременным длительным нажатием кнопок 1 и 2. Можно переключить режим (вроде 08:15 <=> 8:15).
Различная полезная информация:
Расположение матриц при разводке платы под MAX7219:
Шпаргалка по кнопкам: СпойлерКороткие нажатия кнопок:
В режиме часов:
1 - остановка бегущей строки 2 - показать дату бегущей строкой 3 - показать данные с датчиков бегущей строкой.
В режимах настройки:
1 - следующий редактируемый параметр; 2 - увеличить текущий параметр; 3 - уменьшить текущий параметр.
Длинные нажатия кнопок:
1 - вход в режим настройки времени; 2 - вход в режим настройки будильника; 3 - вход в режим настройки максимальной яркости (используется при отсутствии фоторезистора).
Повторное длительное нажатие кнопки возвращает из соответствующего режима настройки в режим часов.
1 и 2 одновременно - переключение режима отображения лидирующего нуля в часах (07:43 или 7:43); 2 и 3 одновременно - выбор шрифта для режима часов; 1, 2 и 3 одновременно - разворот картинки на 180 градусов. Для запрета вывода некоторых данных от датчиков BMP180 и DHT22 в eeprom по адресу 0x0F находится соответствующий байт конфигурации, куда hex-редактором записываем соответствующую маску. Спойлер0x10 - вывод температуры от BMP180 0x20 - вывод температуры от DHT22 0x40 - вывод давления от BMP180 0x80 - вывод влажности от DHT22
Любая комбинация вывода производится сложением масок. Например, 0x40 + 0x80 = 0xC0 - будет выводиться только давление и влажность, без температур. Или, 0x20 + 0x40 + 0x80 = 0xE0 - выводим всё, кроме температуры от BMP180.
По умолчанию значение в EEPROM равно 0xF0, что при наличии всех датчиков будет выводить все возможные данные от них. Интервал между выводом бегущих строк можно настроить в EEPROM. Для этого есть ячейка в EEPROM по адресу 0x0D, в которую записывается необходимое значение в диапазоне от 0 до 255 секунд.
Прошивку от 16.07.2015 можно скачать из вложения в этом сообщении.
Re: Часы на светодиодных матрицах с драйверами MAX7219
Чт фев 05, 2015 19:09:45
SergSV писал(а):не всегда удобно смотреть в Proteus
Схемы нет, да и та что в Proteus, не совсем полная (не нарисовано питание и нет подтягивающих резисторов на I²C шине).
Печатки как таковой тоже нет, да и использовал я двухцветные матрицы (зелёный не используется, не распаян), так что разводка под них и мало кому подойдёт.
SergSV писал(а):похожие делаю в данный момент, но на RGB матрицах
Что за матрицы, где покупали?
Вообще у меня лежат 2 десятка матриц (красные 32x32 мм²) и драйверов MAX7219. Планирую из них сделать большую "бегущую строку" 16x64 точек. Т.е. на плате с матрицами только 2 входа питания и 3..4 линии управления. А уже управляющая всем этим схема будет отдельной и реализовываться на чём угодно. Правда, этот будущий проект уже не совсем в эту тему.
oleg110592 писал(а):DS1307 можно выкинуть
Что вместо неё? Или у STM32F0x есть свой блок RTC?
Re: Часы на светодиодных матрицах с драйверами MAX7219
Чт фев 05, 2015 19:40:59
WiseLord писал(а):Что за матрицы, где покупали?
тут заказывал http://www.aliexpress.com/item/5pcs-Lot ... 64099.html. маркировка на них 2388RGB-5. Единственное там ошибка в даташите, расстояние между рядами выводов 46,4мм, а не 45,72 как указано. Фото как выглядят 4 шт
Re: Часы на светодиодных матрицах с драйверами MAX7219
Вс фев 15, 2015 15:59:39
Здравствуйте! Хотелось бы так же увидеть статью. У меня есть мартрицы с драйверами max7219 собранные на отдельных платах хотелось бы их использовать. Работа с поиском не принесла успеха. Спасибо
Re: Часы на светодиодных матрицах с драйверами MAX7219
Вс фев 15, 2015 20:36:29
Возможно, статью бы я и написал. Только вот сложность в том, что у меня нет разводки печатных плат.
Точнее, есть разводка. Одна плата - под три max7219 + три матрицы, вторая - под микроконтроллер с часами. Ну и третья - собственно, кнопки.
Но эти платы настолько завязаны под конкретный корпус и под не совсем стандартные матрицы (двуцхветные, использован только красный цвет), что я не уверен, что кому-то они пригодятся.
А без печатных плат статья как-то не сильно имеет смысл. Потому что очень легко перепутать выводы матриц и получить мешанину. Хотя я могу и ошибаться.
В любом случае, выкладываю свои печатки. По схеме - ориентироваться на проект Proteus, добавив только подтягивающие резисторы 10кОм на SCL/SDA и, по желанию, на кнопки. Кварц ставить не нужно (на плате место под него есть), фьюзы от 8МГц внутреннего генератора.
Re: Часы на светодиодных матрицах с драйверами MAX7219
Пн фев 16, 2015 09:26:32
[quote="WiseLord"]Возможно, статью бы я и написал. Только вот сложность в том, что у меня нет разводки печатных плат.
Точнее, есть разводка. Одна плата - под три max7219 + три матрицы, вторая - под микроконтроллер с часами. Ну и третья - собственно, кнопки. Wiselord спасибо за печатки. Это то что нужно мне. У меня готовые наборы в наличии. Единственная просьба - дать схему картинкой а то у меня с протеусом никак не получается
Re: Часы на светодиодных матрицах с драйверами MAX7219
Пн фев 16, 2015 12:43:46
Если говорить объективно, то те же простые часы, или, тем более, Super Clock, гораздо более функциональны.
Мой вариант - это просто своего рода более-менее удачная попытка потестировать самописную библиотеку для MAX7219.
Ну и по сложности схема получилась с меньшим, чем в других схемах, количеством деталей и занятых линий МК. Плюс на основе этой схемы легко сделать длинную бегущую строку, практически не усложняя конструкцию, а просто добавляя в цепочку новые драйверы+матрицы, без увеличения числа требуемых от МК линий управления.
Re: Часы на светодиодных матрицах с драйверами MAX7219
Вт фев 17, 2015 08:41:23
Видимо, имелось в виду, что эта линейка в DIP-корпусе имеет ту же цоколёвку, что и использованная в проекте ATmega8. Поэтому в случае DIP-корпуса можно легко сделать апгрейд платы, просто поставив в колодку МК пожирнее, и залив соответствующую прошивку.
Хотя и для QFP-корпуса особой проблемы нет - сдуть феном ATmega8 и поставить вместо неё ту же ATmega328. Цоколёвка тоже совпадает.