Была у меня мысля приобрести простенький светодиодный индикатор с последовательным интерфейсом для отлаживания чего нибудь микропроцессорного. Раз последовательный интерфейс — значит мало проводков, раз из семисегментных индикаторов — значит прост в управлении, никаких шрифтов. Рассудив таким образом приобрел следующее:
Free Shipping 4 Bits Digital Tube LED Display Module Four Serial for Arduino 595 Driver
https://aliexpress.ru/item/item/4000587265179.html
Ещё у меня были приобретённые ранее ESP8266:
ESP8266 ESP-01S serial WIFI wireless module wireless transceiver 2.4G
https://aliexpress.ru/item/item/1005001620459347.html
А так-же понижайка:
2020!Mini DC-DC 12-24V To 5V 3A Step Down Power Supply Module Voltage Buck Converter Adjustable 97.5% 1.8V 2.5V 3.3V 5V 9V 12V
https://aliexpress.ru/item/item/32826540392.html
Когда всё приехало, стал думать, что бы из этого смастерить. И надумал сделать часы. А то, поди, ещё никто часов из ESP8266 не делал, дык я первым буду. Часы получились полезные и решают свою задачу. Задача была показывать время ночью в совсем тёмной комнате, когда настенные часы не видны. И чтобы они не требовали к себе никакого внимания, поэтому никаких кнопок и настроек, время берётся из интернета.
Принялся соединять всё воедино, и тут меня ждали сюрпризы.
Первый. На индикаторе установлены пара 74HC595D, а это восьмибитные сдвиговые регистры. Два 8-ми битных регистра на 4 индикатора. Т. е. индикация динамическая.
Второй. На плате ни одного резистора. Не думаю, что они стоят внутри индикатора. Т. е. ток через светодиоды определяется сопротивлением ключей регистра. Ужас. Это ко всему прочему приводит к тому, что «1», состоящая из всего двух сегментов светится ярче прочих цифр. «7» тоже выделяется.
Ах да, чуть не забыл самое главное разочарование. Проводки, что на картинке с индикатором, в посылку не входят.
Но деваться некуда, часы надо делать. Повторить конструкцию никому не предлагаю, поэтому схему не привожу. Да тут всё очень просто.
Питается всё от 5 В через отличную понижайку. На ней надо перепилить перемычку от подстроечного резистора и замкнуть припоем перемычку возле надписи «3.3V».
Ногами ESP8266 распорядился следующим образом:
GPIO0 — RCLK, загрузка из сдвигового регистра в защёлку
GPIO1 — DIO, вход данных сдвигового регистра
GPIO2 — здесь у ESP-01S висит светодиод
GPIO2 — SCLK, строб сдвигового регистра
Подключал индикатор через резисторы. В моём случае это 5.6 кОм, но можно поставить что попало в диапазоне примерно 1 — 10 кОм.
Так как мне надо было чтобы индикатор светился очень слабо и учитывая, чем задаётся ток в этом поделии сумрачного китайского гения, 3.3 В на индикатор подал через пару последовательно включённых кремниевых диода. Двух вольт регистрам хватает. Ещё на индикатор наклеил красную самоклеящуюся плёнку. Попытка притушить индикатор динамически успехом не увенчалась, о чём расскажу дальше.
Ещё запаял монитор питания для сброса ESP-01S при снижении 5 В ниже 4.2 В, а то он иногда зависал при включении. Ну и пару небольших электролитов по питанию добавил. Но это не обязательно.
В программе использованы библиотеки:
Ticker для динамической индикации 1000 раз в секунду и всего остального 1 раз в секунду.
ESP8266WiFi и WiFiUdp для интернету.
NTPClient для часов с установкой времени от NTP сервера.
При включении из интернета берётся время и дальше часы тикают сами по себе. С периодичностью в несколько часов время синхронизируется.
Установка соединения по WIFI и связь с NTP сервером блокирует выполнение моего кода, что приводит к некрасивому замиранию динамической индикации. Поэтому на это время динамическую индикацию отключаю, а чтобы не вводить себя в заблуждение пустым экраном, на это время зажигаю родной синенький светодиод ESP-01S. Чтобы такое светопреставление не мешало ночью, ночная синхронизация откладывается до утра.
Даже когда никакой связи с интернетом нет и микроконтроллеру, казалось бы, совсем нечего делать, чем то там операционная система занимается. Это приводит небольшому помаргиванию динамической индикации. Если притушать индикатор путём холостых циклов динамической индикации, помаргивания усиливаются. Если не присматриваться, то не заметно.
Выводы. Хоть индикатор и был успешно применён, но не понравился совершенно. Динамическая индикация, ток через светодиоды — как бог на душу положит, неравномерное свечение цифр. Ну и проводки я им простить не могу.
Архив с исходником поклал тут:
yadi.sk/d/1xUauM4rRQnOwg
Дополнение.
По совету тов.
enjoyneering вставил в основной цикл delay(1), что должно было позволить модулю периодически отключать радиомодуль и снизить потребление электричества. Общее потребление таки снизилось на 10%. А ещё пропали подмаргивания индикатора, о которых писал выше. Теперь понятно, что подмаргивания случались из-за биений между динамической индикацией и какими-то действиями внутри ОС. Добавление delay(1) засинхронизировало эти процессы и биения исчезли. А если так, то свой таймер для динамической индикации не очень то нужен.
Перенёс динамическую индикацию тупо в loop(), где она и будет происходить раз в 1 мс после задержки delay(1). Туда же перенёс все действия с часами и wifi один раз за 1000 проходов, т. е. раз за 1 секунду. Ticker выкинул за ненадобностью.
Дополнение 2.
Тема уже уехала в историю, наверно мало кто её ещё прочитает, но всё же допишу. Прикрутил таки программное выравнивание яркости. Для минимизации мерцания сделал так. Обновление разбил условно на 8 фаз. В каждой фазе по очереди отрисовываются или не отрисовываются 4 разряда индикатора. Цифры состоящие из 7 сегментов отрисовываются 7 раз из 8, из 6 сегментов 6 раз из 8 и так далее. Фазы с выводом цифры и без оного чередуются, чтобы уменьшить мерцание. Самая моргучая «1» из двух сегментов выводится 2 раза из 8, и того 1000Гц/4/8*2=62.5Гц. Все остальные цифры мигают чаще, в принципе на их фоне мигание «1» не видно.
Количество фаз задаётся числом от 1 до 8. Можно и больше, только надо увеличить размер всех причастных переменных с 8 бит до скольких вам надо. После изменения этого числа надо в массиве digits[][] начиная с младших бит перераспределить нули и единички для желаемой яркости той или иной цифры.
Обновлённый архив с исходником тут:
yadi.sk/d/NIsavWX_XU9hxQ
Да и библиотека NTPClient уже не модно. В Arduino esp8266 давно завезли встроенный клиент с автоматическим переходом за зимнее-летнее время. Все заводится 3-я строчками кода.
Пы.сы. MAX7219 умеет и 7-сегментами работать. Режим выбирается через регистры.
https://aliexpress.ru/item/item/4000587257525.html
Вот только я опять не вижу резисторов на сегментах. И в даташите указана регулировка яркости за счёт ширины импульсов. Ток через сегмент в документации 20-50мА. Сдаётся мне, оба эти индикатора рассчитаны на то, что светодиоды палят с передозом, на нелинейном участке. Там уже какой ток не вдуй, отдача не сильно различается.
Там только написано, что SEG drive sink current минимум 20, типично 30, максимум 50 mA, и ничего про стабилизаторы.
Пы.сы. вы не до конца прочли datasheet на tm1637. Яркость меняется путём шима от 1/16 до 14/16 ширины импульса на максимальном токе.
Смешно, в одном заказе было 4 модуля, один абсолютно нормальный, а остальные три — см. выше.
Кстати мои все 5 штук MAX7219 (включая fake) тоже работают с уровнем лог. единицы 3.3в (esp8266 же) и такого глюках как у вас не замечал. Общее потребление вместе с ESP8266 на минимальной яркости 60мА. Правда тот другой у меня стоит последним в каскаде и лог. единица ему прилетает уже уровнем 5в. У вас драйвер самописный или с github? На гите много кривых и не очень корректных реализаций.
IMHO, всегда ставьте диод (4148).
А резистор — это да, всегда приходится перепаивать. Иначе приключения — у меня даже индикаторы стали цвет менять (признак дикого перегрева).
А это переводится как: пиковый ток драйверов сегментов равен 100-кратному знчению тока, входящего в вывод Iset. Ни о какой 100-кратной перегрузке тут речи нет.
Вообще, 7219 — отличный драйвер до 64-х светодиодов.
Но только все эти подсчеты практического смысла не имеют — далее в даташите есть таблица, как выбирать резистор в зависимости от напряжения на диодах и желаемого тока. Все.
У вас там похоже опечатка — «напряжение на ISET равно нулю, тогда ток через такой резистор...»
Здесь уже нет речи ни о каком пиковом токе.
Какая?
Нельзя превышать средний ток, чтобы светодиод не перегрелся. Нельзя превышать импульсный ток, чтобы светодиод то ли локально не перегрелся, то ли какая электрохимия его не разрушила.
Ещё есть зависимость светового потока от тока, она более-менее линейна при малых токах и загибается при больших. Т.е. большой ток при динамической индикации может ухудшить КПД.
То есть, пиковый ток — это никакой не переходной процесс переключения разрядов.
Немного теории. Средний выходной ток у микросхем-драйверов регулируется шириной импульса сканирования разряда, чтоб получить ток 20 мА на светодиоде при 6 разрядах, надо вкачивать в светодиод в 6 раз больше, т.е. 120 ма, именно этот ток и стабилизируем на выходном полевике, а если начать уменьшать ширину импульса, скажем в 2 раза, то средний ток упадет до 10 мА (это если грубо рассказать как оно устроено). То что там переведено как 20-30 мА максимум 50 ма — просто сложности перевода. Надо расшифровывать как — в зависимости от установки яркости ток через сегмент изменяется от 20-30 мА до 50 мА или средний ток через сегмент получается от 3 мА до 8,3 мА приблизительно. Точный даташит на эту микросхему есть только на китайском языке, и он почти непереводим (я пробовал прибегнуть к помощи людей-переводчиков), имеем только тот огрызок что вы привели.
Лично я ее использовал в нестандартном проекте с самодельным индикатором, очень похоже на правду, что средний ток на максимальной яркости 8 мА, уж больно заметно падение яркости при больших размерах сегмента, по сравнению со статическим режимом (при проверке монтажа) 15 мА. Отсюда вывод, использовать эту микросхему можно только с небольшими индикаторами, уже на дюймовых сказывается недостаток тока сегментов.
www.adafruit.com/product/1002
Впрочем, это можно исправить программно, (особой) разницы в яркости цифр 1/7 и остальных не будет.
Трудности начнутся тогда, когда захотите сделать «ночной» режим, с сильным снижением яркости в ночное время. Здесь уже никакой «частоты» не хватит и мерцание неизбежно. Но… легко обходится. ))
Я в своем проекте на AVR делал 3200 Гц на 4 цифры, чтобы получить 100 Гц и 8 градаций яркости. Смотрится нормально, но 200 Гц смотрелось бы лучше.
www.allcomponents.ru/kec/kia7042.htm
Про сон — спасибо, попробую.
Только у вас в статье неточность, delay в loop даёт спать радиомодему, а не процессору иначе модем тупо не успевает поспать.
Вопрос к знающим спецам если можно, по просторам инета поискал и гуглил информаций мало.
Есть в кухонном хозяйстве мультиварка-скороварка scarlett sl-1529 у нее как у автора дисплей или похожий как исправить некоторые сегменты не светятся или может заменить дисплей или есть такие для мультиварок?
— ходил в сервис сказали нет запчастей таких ищите на авито ((
ps А вы в скороварке консервы делаете?
Вот мой любимый:
mySKU.me/blog/diy/67267.html
Жалко только сайра за год подорожала на 20% :(
Из инструкций к скороварке
Вот для примера:
https://aliexpress.ru/item/item/32945496377.html
Но — во первых — выбрать размер. А во вторых — выбрать тип — с общим анодом или с общим катодом! И, будет одноцветный, но это уж наименьшая потеря.
Я бы разрисовал какой вывод куда идет (потому что есть вероятность что дело не в индикаторе, а в его обвязке) И по тому как он запитан — выбрал бы общий анод или катод… можно конечно и оба типа купить и методом тыка угадывать. Но лень же.
— как у меня на плате определить анод или катод какой вариант?
— у этих дисплеев распиновка выводов у всех одинаковая должна быть к примеру что вы дали ссылку и у меня?
Распиновка — не знаю, но думаю на 90% должна быть одинаковая (хотя в вашем случае это может быть как раз оставшиеся 10%). Но как раз — расписав распиновку что существует у вас и сравнив с тем что на картинках у китайцев — можно определиться и с этим вопросом.
Кстати — этот же тест даст понятие какой индикатор (с общим анодом или катодом)
обратная сторона платы и пропаял контакты дисплея все равно так же
Впрочем, скорее всего, дело не в индикаторе, а в не пропае.
— может в зависимости от смены + на минус в работе загораются разные сегменты или это ошибка?
Не, конечно, есть верочтность что тут проприетарный индикатор с собственной разводкой и логикой. Но это же экономически не выгодно. Ну ладно если производитель собирается наживаться на ремонтах этих индикаторов. Но ведь индикатор — это наверное самое редкое что там может сгореть.
После проверки индикатора станет понятно, кто помер, индикатор или порты контроллера. Если мертвые сегменты от батарейки будут светиться, то у меня плохая новость, порты погорели… А если не будут светиться, то можно ставить любой подходящий и все должно ожить.
— как определить нужен с анодом или катодом есть методика определения?
Неравномерность свечения именно этого индикатора я лично победил заменой в скетче примера значения таймера с 1500 на 1000 мсек.
Связка arduino nano, такой же дисплей и bme280 (3.3v). Нужен был тупо барометр, который видно в темноте плюс наличие 3х-вольтовой версии вме280 который некуда было пристроить.