7 сегментный индикатор на MAX7219 - подключение и модернизация


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

В одном из моих проектов, а именно в контролере управления электродуховкой, для визуализации интерфейса требовалось использование какого-то экрана. Так как устройством будет «рулить» моя бабушка, которой уже под девятый десяток, то интерфейс должен быть максимально простым, интуитивно понятным и наглядным. Потому экраны с изменяемым углом обзора и всемозможными меню и мелким текстом были исключены сразу. Главные параметры в управлении устройством — это температура и время работы. Соответвенно температура 3 знака и время столько же, плюс несколько дополнительных знаков. Прогуглив я быстро нашет то что нужно было — 7 сегментный индикатор на контролере фирмы MAXIM — MAX7219.
Индикатор состоит из двух матриц с 4мя 7ми сегментными светодиодными индикаторами.

Цвет свечения — красный. Индикаторы припаяны к плате на обратной стороне которой установлен сам контролер MAX7219. Характеристики контролера можно посмотреть здесь.
Потребление самого дисплея:

PeakCurrent=(8 x LedCurrent) + MAX72XX-Supply

PeakCurrent=(8 x 20mA) + 10mA = 170mA

Плата имеет отверстия для установки штыревого разъема — с одной стороны для подключения к контролеру, с другой — для подключения еще такого же индикатора. Получается паравозиком друг к дружке можно подключить до 15 таких устройств (вроде так если я чего не напутал). Подключение — 5 проводов: 3 провода управление, 2 провода питание.
Мне разъем не нужен, потому я индикатор подключил припаяв куском IDE шлейфа — очень дешевый и гуманный способ продления «жизни» старым компьютерным комплектующим.
Платформа работает на базе Arduino и для работы экрана была использована библиотека «LedControl.h»
Библиотека достаточно простая, имеет некоторые ограничения на отображение символом, но на то она и библиотека ;) Описание и возможности библиотеки можно прочесть здесь.
Библиотека леко устанавливается через Arduino IDE, там же в примере LCDemo7Segment можно подсмотреть подключение и вывод информации на индикатор.
Все просто и красиво если бы небольшой казус. У меня индикатор работал как то не стабильно. При изменении информации на экране могли хаотично зажигаться какие то сторонние сегменты или же индикатор мог просто отключиться. Я долго не мог понять в чем дело. Пересмотрел и переписал код, перемерил напряжение питания и сигналов — все было в норме. В коде я уменьшил частоту вывода информации на экран — это помогло, экран работал стабильнее. Но все-равно в какой то момент экран мог отключиться. У меня уже было желание выбросить этот экран и поставить старый проверенный ЖК 16х2.
Сегодня утром на свежую голову я еще раз почитал описание библиотеки и обратил внимание на схему подключения. Вернее на часть текста:
Both capacitors must be placed as near as possible to the V+ and the Gnd pins of the MAX72XX.
На моей плате был лишь один керамический конденсатор.

Прозвонив и выяснив полярность цепи питания к которой подключен этот конденсатор, я паралельно ему подпаял первый попавшийся электролитический конденсатор (47mF x 50v).

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

Товар не предоставлен магазином, потому пришлось покупать за свои без применения П. 18.

Всем отличного здоровья и минимального delay.

PS
КЫШ ОТ МОНИТОРА — НА УЛИЦЕ ЛЕТО!!! ;)
Планирую купить +17 Добавить в избранное +38 +62
+
avatar
  • Shmoky
  • 25 июня 2016, 22:25
-30
+
avatar
+44
Скорее в сборник ваших недалеких комментариев.
+
avatar
+5
Обзор не плох, но на мой взгляд не хватает технических характеристик, потребляемый ток, например. Ну и фото итоговой конструкции :-)
+
avatar
+2
Обзор индикатора, а не конструкции.
И в данном случае не так важен обзор, а то как этот товар полечить в случае его применения.
ТТХ присутствуют в открытом доступе и кому нужно будет тот их увидит.
+
avatar
  • vlo
  • 25 июня 2016, 23:05
0
доверять ттх от китайцев, которые конденсаторы забывают напаивать, врядли стоит.
все же что с потреблением у предмета обзора?
+
avatar
+2
Они не забывают, они их тупо не ставят.
В описании библиотеки в пункте Power supply issues ттх описаны не китайцами.
А зачем они Вам можно поинтересоваться?

ЗЫ: у меня потребление всего устройства с индикатором 12В 40мА.
+
avatar
  • vlo
  • 25 июня 2016, 23:23
0
мне не интересно все ваше у-во, тут я с вами вполне солидарен, мне интересно потребление предмета обзора.
+
avatar
+3
PeakCurrent=(8 x LedCurrent) + MAX72XX-Supply
PeakCurrent=(8 x 20mA) + 10mA = 170mA
+
avatar
  • vlo
  • 25 июня 2016, 23:28
0
спасибо.
это измерено на данном конкретном индикаторе при питании от +5?
+
avatar
0
Это указано автором библиотеки и у меня нет ни грамма сомнения ему не доверять.
+
avatar
  • vlo
  • 26 июня 2016, 00:07
0
и какое отношение потребление совершенно другого индикатора имеют к предмету обзора?
общего у них только контроллер, вклад которого невелик.
+
avatar
+2
Вы уверены что смотрите верно?
Standard Led's and 7-Segment displays are often rated with a DC forward current of 25-30mA. Limiting to 20mA would make a good choice.
wayoda.github.io/LedControl/pages/hardware.html
+
avatar
  • vlo
  • 26 июня 2016, 01:05
+1
уверен. снимка данного индикатора там нет.

какой еще «стандартный»… что, за чушь? ток определяется сопротивлением, напряжением питания и падением на диоде (может еще и скважностью). что тут «стандартного»?

не хотите измерять — так и напишите, но не надо всякие левые цифры давать.
+
avatar
+2
Что я должен замерять?
На какой яркости?
В каком режиме отображения индикатора?
Потому я привел Вам данные которые указаны разработчиками библитеки, а также даташит на контролер. Если этого мало — посмотрите еще даташит на индикаторы. Там все точно указано ;)
И тогда поймете где чушь.
+
avatar
+1
Я бы такому троллю ответил, что у меня нет поверенных приборов для проведения точного измерения. :)

Как в старом советском анекдоте:
— можете порезать сто грамм колбасы?
— приносите — порежем…
+
avatar
  • Rzzz
  • 25 июня 2016, 23:17
+1
Конструкция нужна, потому как без нее этот индюк не имеет смысла. Ну, и может у кого какие свои идеи появятся, для того тут «сделайсамы» и выкладываются, тут же не только сборище шопоголиков и любителей стоять в очередях на почте.
+
avatar
+2
Кому конструкция нужна, тот ее сделает, а что бы он не нарвался на мои грабли я и потратил время на этот пазл из букв.
Опять же тут многие бухтят мол это сайт о покупках, а не поделок ардуино потому я привел именно описание этого индикатора и его укрощение, чего в сети я не нашел. Возможно это еденичный случай но я на его потратил два вечера.
+
avatar
  • Rzzz
  • 26 июня 2016, 00:18
+5
Да пусть бухтят, нам то какая разница. Сайтов про шоппинг дохрена, пусть идут туда. Мне нравится тут тем, что интересные мысли можно сгенерировать на базе чужих поделок. Пусть даже эти мысли и до реализации не дойдут.

На чисто ардуинных сайтах — тяжело. Туда надо только когда задачу какую-то решить назо.
+
avatar
+8
Так ведь нужно прислушиваться к требованиям общества ;)

Относительно обзора устройства, то возможно он и появится если я успею его сваять.
Дело в том что духовка находится за полторы сотни километров от меня и как только я закончу magic box так он сразу уедет на свадьбу с духовкой.
В общем там ничего сверхестественного: обозреваемый экран отображает температуру и время работы, изменение показателей 20ти шаговым энкодером. пищит в некоторых режимах и держит температуру. Измерение температурой при помощи термопары с MAX6675.
+ кнопка с тремя предустановленными параметрами температура/время.
+
avatar
  • Rzzz
  • 26 июня 2016, 00:40
+2
Во, замечатеельно!

Повторюсь, это нужно не для того, чтобы повторить ваш девайс, а чтобы подчерпнуть идеи и концепции. В этом сила «сделайсама»!
От меня плюс!
+
avatar
  • vlo
  • 25 июня 2016, 23:27
+1
конструкция врядли нужна кому-то кроме автора. а вот применить индикатор для экономии выводов контроллера вполне интересно. например на такое количество разрядов при подключении напрямую у 328 меги возникает сильный их дефицит.
+
avatar
  • Lidgik
  • 26 июня 2016, 10:11
+1
конструкция нужна подчерпнуть идеи и концепции
+
avatar
+4
Обзор индикатора, а не конструкции.
а зря…
было бы интересно глянуть на эту конструкцию и повторить.
+
avatar
+3
Так все еще в процессе, код почти весь написан. Осталось еще откалибровать термопару и заполнить массив.
Ну и аккуратно уложить платы в коробочку.
Тогда уже можно будет и сделать обзор всего устройства если это кому то будет интересно.
+
avatar
0
конечно интересно!
+
avatar
  • manatu
  • 26 июня 2016, 13:33
0
очень даже интересно! За обзор плюс!
+
avatar
  • Serg32
  • 26 июня 2016, 15:33
0
А нет такого же контроллера, но на напряжение не 5 В, а хотябы 9 В? Для индикаторов большего размера.
+
avatar
0
Повторитель на ULN2003 спасет отца русской демократии? :)
www.ti.com/lit/ds/symlink/uln2003a.pdf
High-Voltage Outputs: 50 V
+
avatar
  • miklkr
  • 25 июня 2016, 22:38
0
А куда планируется монтировать девайс? В корпусе духовки, как бы она не была теплоизолирована, температура довольно высокая и (как минимум) электролитам это не понравится, да и атмега по даташиту работает при температурах до 85 градусов, а у многих духовок даже наружные стенки до такой температуры нагреваются, не говоря уже о температуре внутри кожуха (не путать с рабочей частью).
+
avatar
+1
Монтировать буду в свой самый любимый корпус — распределительная коробка :)
Коробка будет находиться рядом с духовкой в температуре окружающей среды.
+
avatar
  • Aloha_
  • 25 июня 2016, 23:02
0
А алгоритм работы max7219 есть? Просто лежит такой же индикатор. К х51 прикрутить не получается.
+
avatar
0
Так вот жеж вроде все описано wayoda.github.io/LedControl/pages/hardware
+
avatar
  • Aloha_
  • 26 июня 2016, 08:19
0
Интересовал сам протокол записи данных, оказывается все просто — Serial Peripheral Interface Bus
+
avatar
0
К х51 прикрутить не получается.
Странно как то. К MCS51, насколько помню по работе с ним тридцатилетней давности, можно подключить практически все. И ЖК дисплеи подключал, в 8 и 4-ч битных режимах, и семисегментные, и с компом связывал по последовательному порту, и в тот же комп ставил на ISA еще шину — ни малейших проблем.
,
+
avatar
  • Aloha_
  • 26 июня 2016, 13:02
0
протокол и подпрограмму на асме надо, про остальное проблем нет.
+
avatar
0
В свое время для него писал только на ассемблере.
Может, сейчас что то более приличное и появилось (хотя и вряд ли), но тогда тот же С кушал память, как свинья помои.
Ребята из соседнего отдела пробовали на С — в результате я им напаял эмулятор ПЗУ на 64 кБ — и им все равно не хватило.
Это были те времена, когда флешь-памяти программ не было — или ОТП или с УФ стиранием.
Так что только хардкор :)
+
avatar
  • ploop
  • 07 июля 2016, 19:55
0
Си в эмбеддеде хорош, кода асм знаешь (соответственно и целевую архитектуру). Тогда и писать проще, и накладных расходов почти нет. А если применять подход «как на компе» — тогда конечно никаких ресурсов не хватит.

Сейчас проще: 32х разрадные контроллеры с кучей памяти по пять рублей ведро. Ардуины, чтоб светодиодом мигать, и т.д.
+
avatar
0
Оно может и проще, только программисты встроенных систем как бы не вымерли.
У меня на первой РС памяти было… не помню сейчас, сколько, то ли метр, то ли два, но ДОС летала.
А сейчас не хватает памяти — значит, повысим системные требования.
То же самое и с контролерами: мне всегда хватало на 51-м 2к программ и 2к данных — один раз пришлось расширять память данных, просто не влезали данные по 16-ти обрабатываемым входным каналам.
Писать проги для любого контроллера не зная его архитектуры — не есть правильно, а иногда просто невозможно.
Писал как то код для младшего SHARC, там ассемблер весьма специфический — зная архитектуру, можно сократить время выполнения программы в разы.
При правильном построении обработки за один такт может выполняться до четырех команд — но надо знать и понимать.
А когда мне умные люди (я тов программировании самоучка) подсказали пару финтов — вроде длина кода увеличилась, а скорость выполнения выросла еще раза в два.
Так что надо знать и понимать архитектуру.
Если, конечно, планируется делать что то более серьезное, чем моргание светодиодами…
+
avatar
  • X7Desu
  • 25 июня 2016, 23:40
0
О, спасибо.
Как раз думал, чем ИВ-11 управлять. А эти микросхемы у меня даже есть.
+
avatar
  • ploop
  • 26 июня 2016, 00:00
+1
Индикация динамическая, как понимаю? Какая частота?
И какой размер индикаторов?
+
avatar
  • sergk
  • 26 июня 2016, 00:18
0
Все делает микруха, в даташите наверняка описан алгоритм ее работы, а конструктору девайсов на ее основе имхо это без особой разницы. Во всяком случае мерцания вообще не заметно.
+
avatar
  • ploop
  • 26 июня 2016, 00:58
0
Я понимаю, и даташит найти дело 10 секунд. Но хотелось бы это видеть в обзоре, в двух словах.
+
avatar
+1
В двух не получится, там чуть больше:

Display Scan Rate 8 digits scanned
MIN TYP MAX
500 800 1300
Hz
+
avatar
  • ploop
  • 26 июня 2016, 01:06
0
Да видел уже, нашел после написания вопроса.
+
avatar
  • ploop
  • 26 июня 2016, 01:06
-1
а конструктору девайсов на ее основе имхо это без особой разницы. Во всяком случае мерцания вообще не заметно.
Очень даже заметно, так как судя по даташиту на 8 разрядах 800Гц. А в темноте боковым взглядом и 2кГц видно.
А так микросхема удобная конечно.
+
avatar
+1
Я уже 4 дня в него смотрю — хоть убей не вижу мерцания.
У Вас просто особенное зрение(2кГц увидеть), я бы на Вашем месте за докторскую сел ;)
+
avatar
  • ploop
  • 26 июня 2016, 01:11
0
Передо мной сейчас часы с авторекулировкой яркости, на семисегментниках. Регулируются ШИМом на 2 с копейками килогерца (сама индикация — статика). При наличии хоть какого-то внешнего света (например монитора) — ничего не заметно, в полной темноте при резком движении глаз видно.
+
avatar
+1
Тогда Вам в кинотеатре должны быть видны чередующиеся картинки и странно, что на мониторе Вы видете изображение а не набор полосок.
Или в Вашем шиме нет 2к или так 2к размазано на весь индикатор.
+
avatar
  • ploop
  • 26 июня 2016, 01:22
-1
Или в Вашем шиме нет 2к или так 2к размазано на весь индикатор.
Есть, так как делал сам.
И как понять «размазано»? Индикация статическая, т.е. загорается и гаснет полностью весь индикатор (аноды все соединены и управляются P-канальным полевиком)

Тогда Вам в кинотеатре должны быть видны чередующиеся картинки и странно, что на мониторе Вы видете изображение а не набор полосок
Не путайте, во-первых там есть инерция, во-вторых соседние кадры никогда не меняются резко по яркости. Если вам показать последовательно серию из чёрного кадра и белого кадра вы тоже увидите.
+
avatar
0
Тогда я могу только позавидовать Вашему зрению.
Увы у меня все гораздо хуже. может потому и не мерцает.
Во всем есть свои плюсы :)
+
avatar
  • ploop
  • 26 июня 2016, 01:26
0
Не, от килогерца и выше вполне комфортно, я просто про то, что заметить можно, если специально это делать.
А вот когда как на всяких микроволновках, меньше 100Гц — тут беда :)
+
avatar
  • Rzzz
  • 26 июня 2016, 02:37
0
Я на 176-й серии делал светодиодные, а там вроде как 128 Гц. Не заметно!
+
avatar
  • wwest
  • 07 июля 2016, 18:34
0
Муха видит с частотой 300 герц, человек 30 герц и НЕКОТОРЫЕ боковым зрением мельтешение 60гц.120гц не видит никто.
2000гц ВЫ КТО и ОТКУДА из ящеров???
+
avatar
  • ploop
  • 07 июля 2016, 18:41
0
120гц не видит никто
120 — натуральный стробоском. Проедьтесь на велике с китайским фонариком. Если не видите — я вам завидую.
+
avatar
0
120гц — я с таким каденсом педали кручу на велике и я далеко не ящер ;)
+
avatar
+1
Даташит и размеры добавил в обзор.
+
avatar
  • sergk
  • 26 июня 2016, 00:17
0
Кто-нибудь видел схемы подключения к такой микросхеме индикаторов большего размера?
Я имею в виду те, в которых по нескольку последовательно включенных светодиодов на сегмент?
+
avatar
0
в даташите на мелкосхему на 12 странице
+
avatar
  • sav13
  • 26 июня 2016, 14:21
0
Да.
1.8" напрямую подключал
mySKU.me/blog/taobao/35487.html
+
avatar
0
Спасибо тебе мил человек!

В мониторе СО на ардуине этот экран тухнет через 5-10 минут и всё, думал брак и поменять пора, а сейчас просто кондёр припаяю.
+
avatar
+2
Чего же Вы молчите? ;) Я думал только у меня такие проблемы…
Вот значит еще немного миллионов нервных клеток спасено. Так невольно почувствую себя брюсомвылисом )))
+
avatar
  • yurok
  • 26 июня 2016, 01:52
+3
Моя версия обзора этого устройства
mySKU.me/blog/aliexpress/33686.html
Трудится уже год, проблем с индикатором не было
+
avatar
  • idw
  • 26 июня 2016, 12:00
0
Подтверждаю, проблемы как у автора, с этим устройством есть.
+
avatar
0
Спасибо — добавил ссылку на Ваш обзор.
+
avatar
+3
Первые грабли с питанием, на которые я наступил, были в 1985-м: я две недели не мог понять, почему сбоит маленькая схемка — две платы 220х170мм бутербродом.
Подошел более опытный товарищ, пару раз ткнул осцилом и показал бяку при разводке питания.
Вторые грабли — когда начали применять ПЛИС Altera, там в даташите было прописано: блокировать каждый вывод питания мелкосхемы (а их там чаще заметно больше двух — штук 6, 8 и т.д.) кермикой.
Но мы же грамотные — зачем так много?
Пара месяцев ушла на то, что бы понять: не дурак писал даташиты…
С тех пор ремонт цифры при неустойчивой работе (и не только) начинаю с проверки питания осцилом…

А тут вполне понятно: питание на индикатор подано довольно хлипким проводом, а потребляемый ток изменяется весьма резко.
Так что, скорее всего, можно было продублировать питание двумя проводами с приличным сечением, и можно было бы обойтись без электролита.
+
avatar
0
Вы все верно пишите но в данном случае используется готовый модуль который должен быть заведомо исправным.
Потому на цепи питания я обратил внимание в последнюю очередь.
+
avatar
0
А кто сказал, что он неисправен?
Просто, видимо, нигде не прописали минимальное сопротивление питающих проводов…
Провода ведь в комплект не входят?
+
avatar
0
Вы не поверите но без проводов при подключении через стандартную гребёнку индикатор работает так же.
+
avatar
0
Тогда даже не знаю. Наверное, от блока питания до этой гребенки долгий путь…
+
avatar
0
Подозреваю что контроллер в этом экране брачной, так как сначала экран работал нормально, потом начались глюки. Макс этот ключит при любом слабом всплеске по питанию — уже все зашунтировал кондерами и не достиг 100% результата.
Дополнительно сделал программный ресет экрана каждые 30 сек.
Пока работает.
+
avatar
0
Все бывает в этой жизни.
У меня одна программа работала на эмуляторе (аппаратном) без проблем, но не работала в реальном контроллере.
Каким макаром помогло дополнительные шесть
nop 
после инициализации всего нутра перед телом основной программы — до сих пор не знаю.
+
avatar
  • timeon
  • 08 декабря 2016, 19:47
0
У Вас это не на AVR случаем было? У меня аналогично помогли четыре nop после инициализации, перед основной программой. Камень был Atmega8.
+
avatar
  • DDimann
  • 08 декабря 2016, 20:09
0
не на AVR случаем было?
Нет, это было давно, на контроллере MCS'96, от Intela который.
16-ти разрядный брат MCS'51-го :)
+
avatar
  • sav13
  • 26 июня 2016, 14:24
0
Когда собирал на MAX7219 часы
mySKU.me/blog/taobao/35487.html
Обнаружил, что сбивается режим микросхемы из-за помех. Конденсаторы спасали но не до конца
Поставил в цикле (0.5 сек, мигание точек) такую функцию:

int dly = 50;          // delay in us


// регистры MAX7219 
byte MAXREG_DECODEMODE = 0x09;
byte MAXREG_INTENSITY  = 0x0a;
byte MAXREG_SCANLIMIT  = 0x0b;
byte MAXREG_SHUTDOWN   = 0x0c;
byte MAXREG_DISPTEST   = 0x0f;


/**
 * Восстановление регистров MAX7219
 */
void MAX7219_recovery(){
  // initialization of the MAX7219
  MAX7219_setRegistry(MAXREG_SCANLIMIT, 0x03);
    delayMicroseconds(dly);
  MAX7219_setRegistry(MAXREG_DECODEMODE, 0x00);  // full decode mode BCD 7 Seg Display
    delayMicroseconds(dly);
  MAX7219_setRegistry(MAXREG_SHUTDOWN, 0x01);    // shutdown mode OFF
    delayMicroseconds(dly);
  MAX7219_setRegistry(MAXREG_DISPTEST, 0x00);    // no test
    delayMicroseconds(dly);  
}

Теперь максимум — разок мигнет индикатор, потом восстанавливается
+
avatar
0
Да, экран оказался редким Г.
Дополнительно еще установил по питанию керамику 0.47мФ, но все-равно раз за сеанс работы (подключил коробку к духовке — уже печет хлеб) экран засыпало мусором.
Добавил в скрипт
if (millis() — previousMillis_c5 > 30000) {
previousMillis_c5 = millis();
lc.clearDisplay(0);
}
Пока проблем нет. Возможно на этом и остановлюсь.
+
avatar
  • vismyk
  • 26 июня 2016, 19:07
+1
Обзор плюсую. У меня в последнее время какая-то странная синхронность с mySKU.me замечается (пример1, пример2, пример3). Так и с этим обзором: буквально сегодня жена пожаловалась, что в нашей новой духовке (на Новый год покупали) таймер механический заедает, вот и посетила меня мысль, что вместо геморроя с гарантийным ремонтом с неясными перспективами можно попробовать заменить механический таймер самодельным электронным. Даже набросал уже набор деталей: энкодер для выставления времени и старта/стопа, релюшка, пищалка для сигнализации об окончании отсчёта, 7-сегментный LED-индикатор (есть один вместе с драйвером, от крякнувшего DVD-плеера, но можно и прикупить с более подходящими габаритами), простой блок питания на 5В (в духовке вряд ли есть 5В, она совсем уж простая) и ATTiny13A (должно вроде хватить). И тут открываю mySKU.me, а здесь этот обзор! Попробовать на форексе поиграть что ли?.. ;)
+
avatar
+2
Вставил экран в корпус.
Светофильтр — вдвое сложенная полоса из пет бутылки.


По-моему получилось хорошо.