MAX7219 — драйвер светодиодных индикаторов | RadioLaba.ru
#include <P16F628A.INC>
LIST p=16F628A
__CONFIG H’3F10′ ;Конфигурация микроконтроллера
Sec equ 20h ;регистры хранения временных данных для
Sec1 equ 21h ;подпрограмм паузы
Sec2 equ 22h ;
scetbit equ 23h ;регистр счета битов для передачи по протоколу spi
dat_ind equ 24h ;регистр хранения данных для передачи по протоколу spi
adr_ind equ 25h ;регистр хранения адреса для передачи по протоколу spi
dat_tmp equ 26h ;вспомогательный регистр данных для передачи по протоколу spi
adr_tmp equ 27h ;вспомогательный адресный регистр для передачи по протоколу spi
#DEFINE din PORTB,5 ;линия входа данных драйвера MAX7219
#DEFINE cs PORTB,6 ;линия выбора драйвера MAX7219
#DEFINE clk PORTB,7 ;линия тактирования драйвера MAX7219
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0000h ;начать выполнение программы с адреса 0000h
goto Start ;переход на метку Start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Основная программа
Start movlw b’01000000′ ;установка выходных защелок порта B
movwf PORTB
movlw b’00000111′ ;выключение компараторов
movwf CMCON
bsf STATUS,RP0 ;выбрать 1-й банк
movlw b’00011111′ ;настройка линий ввода\вывода порта B
movwf TRISB ;RB0-RB4 на вход, остальные на выход
bcf STATUS,RP0 ;выбрать 0-й банк
call init_lcd ;вызов подпрограммы инициализации драйвера(MAX7219)
met_1 movlw 0x09 ;отключить декодирование для всех индикаторов
movwf adr_ind ;
movlw 0x00 ;
movwf dat_ind ;
call send ;
movlw 0x08 ;установка адреса 7-го индикатора (на схеме HG8)
movwf adr_ind ;
movlw b’01110111′ ;установка битов в регистре данных для вывода буквы ‘A’
movwf dat_ind ;
call send ;
movlw 0x07 ;установка адреса 6-го индикатора (на схеме HG7)
movwf adr_ind ;
movlw b’00110111′ ;установка битов в регистре данных для вывода буквы ‘H’
movwf dat_ind ;
call send ;
movlw 0x06 ;установка адреса 5-го индикатора (на схеме HG6)
movwf adr_ind ;
movlw b’01001111′ ;установка битов в регистре данных для вывода буквы ‘E’
movwf dat_ind ;
call send ;
movlw 0x05 ;установка адреса 4-го индикатора (на схеме HG5)
movwf adr_ind ;
movlw b’01100111′ ;установка битов в регистре данных для вывода буквы ‘P’
movwf dat_ind ;
call send ;
movlw 0x04 ;установка адреса 3-го индикатора (на схеме HG4)
movwf adr_ind ;
movlw b’00011111′ ;установка битов в регистре данных для вывода буквы ‘b’
movwf dat_ind ;
call send ;
movlw 0x03 ;установка адреса 2-го индикатора (на схеме HG3)
movwf adr_ind ;
movlw b’00001101′ ;установка битов в регистре данных для вывода буквы ‘c’
movwf dat_ind ;
call send ;
movlw 0x02 ;установка адреса 1-го индикатора (на схеме HG2)
movwf adr_ind ;
movlw b’00111101′ ;установка битов в регистре данных для вывода буквы ‘d’
movwf dat_ind ;
call send ;
movlw 0x01 ;установка адреса 0-го индикатора (на схеме HG1)
movwf adr_ind ;
movlw b’00011101′ ;установка битов в регистре данных для вывода буквы ‘o’
movwf dat_ind ;
call send ;
call paus_2s ;вызов подпрограммы паузы 1 сек
movlw 0x09 ;включить декодирование для всех индикаторов
movwf adr_ind ;
movlw 0xFF ;
movwf dat_ind ;
call send ;
movlw 0x08 ;установка адреса 7-го индикатора (на схеме HG8)
movwf adr_ind ;
movlw 0x00 ;запись числа 0 в регистр данных индикатора (вывод цифры 0)
movwf dat_ind ;
call send ;
movlw 0x07 ;установка адреса 6-го индикатора (на схеме HG7)
movwf adr_ind ;
movlw 0x01 ;запись числа 1 в регистр данных индикатора (вывод цифры 1)
movwf dat_ind ;
call send ;
movlw 0x06 ;установка адреса 5-го индикатора (на схеме HG6)
movwf adr_ind ;
movlw 0x02 ;запись числа 2 в регистр данных индикатора (вывод цифры 2)
movwf dat_ind ;
call send ;
movlw 0x05 ;установка адреса 4-го индикатора (на схеме HG5)
movwf adr_ind ;
movlw 0x03 ;запись числа 3 в регистр данных индикатора (вывод цифры 3)
movwf dat_ind ;
call send ;
movlw 0x04 ;установка адреса 3-го индикатора (на схеме HG4)
movwf adr_ind ;
movlw 0x04 ;запись числа 4 в регистр данных индикатора (вывод цифры 4)
movwf dat_ind ;
call send ;
movlw 0x03 ;установка адреса 2-го индикатора (на схеме HG3)
movwf adr_ind ;
movlw 0x05 ;запись числа 5 в регистр данных индикатора (вывод цифры 5)
movwf dat_ind ;
call send ;
movlw 0x02 ;установка адреса 1-го индикатора (на схеме HG2)
movwf adr_ind ;
movlw 0x06 ;запись числа 6 в регистр данных индикатора (вывод цифры 6)
movwf dat_ind ;
call send ;
movlw 0x01 ;установка адреса 0-го индикатора (на схеме HG1)
movwf adr_ind ;
movlw 0x07 ;запись числа 7 в регистр данных индикатора (вывод цифры 7)
movwf dat_ind ;
call send ;
call paus_2s ;вызов подпрограммы паузы 1 сек
goto met_1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма инициализации драйвера(MAX7219)
init_lcd call pauslcd ;вызов подпрограммы паузы 2 мс
movlw 0x0F ;выключить тестовый режим
movwf adr_ind ;
movlw 0x00 ;
movwf dat_ind ;
call send ;
movlw 0x0C ;включить драйвер в рабочий режим
movwf adr_ind ;
movlw 0x01 ;
movwf dat_ind ;
call send ;
movlw 0x0A ;установить интенсивность свечения 15/32
movwf adr_ind ;
movlw 0x07 ;
movwf dat_ind ;
call send ;
movlw 0x09 ;включить декодирование для всех индикаторов
movwf adr_ind ;
movlw 0xFF ;
movwf dat_ind ;
call send ;
movlw 0x0B ;использовать 8 индикаторов
movwf adr_ind ;
movlw 0x07 ;
movwf dat_ind ;
call send ;
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма отправки 2-х байт (пакета данных) на драйвер (MAX7219) по протоколу SPI
send bcf cs ;Сбросить линию выбора драйвера CS
movlw .8 ;Отправка содержимого адресного байта adr_ind
movwf scetbit ;
movf adr_ind,W ;копирование данных для передачи в промежуточный регистр
movwf adr_tmp ;
povtor bcf clk ;
btfsc adr_tmp,7 ;
bsf din ;
btfss adr_tmp,7 ;
bcf din ;
bsf clk ;
rlf adr_tmp,F ;
decfsz scetbit,F ;
goto povtor ;
movlw .8 ;Отправка содержимого байта данных dat_ind
movwf scetbit ;
movf dat_ind,W ;копирование адреса для передачи в промежуточный регистр
movwf dat_tmp ;
povtr1 bcf clk ;
btfsc dat_tmp,7 ;
bsf din ;
btfss dat_tmp,7 ;
bcf din ;
bsf clk ;
rlf dat_tmp,F ;
decfsz scetbit,F ;
goto povtr1 ;
bcf clk ;
bsf cs ;установить в 1 линию выбора драйвера CS
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
pauslcd movlw .4 ;подпрограмма пауза 2 мс
movwf Sec1 ;
p2 movlw .166 ;
movwf Sec ;
p1 decfsz Sec,F ;
goto p1 ;
decfsz Sec1,F ;
goto p2 ;
return ;выход из подпрограммы
paus_2s movlw .10 ;подпрограмма пауза 2 сек
movwf Sec2 ;
p_3 movlw .255 ;
movwf Sec1 ;
p_2 movlw .255 ;
movwf Sec ;
p_1 decfsz Sec,F ;
goto p_1 ;
decfsz Sec1,F ;
goto p_2 ;
decfsz Sec2,F ;
goto p_3 ;
return ;выход из подпрограммы
end ;конец всей программы
;
Максимально универсальный семисегментный дисплей. Часть первая — Hardware / Хабр
Случилось так, что по наследству мне досталась целая коробка семисегментных индикаторов с гордой надписью «Комплект часы». Давно хотелось пустить её содержимое в дело, а когда дошли руки — оказалось, что внутри целый зоопарк разномастных индикаторов, разных размеров, цветов, с общим катодом и с общим анодом. По количеству штук так двадцать. И чтобы не пилить «очередные часы» пришла идея сделать, собственно, сабж — максимально универсальный семисегментный дисплей.
Что из этого получилось — под катом.
Disclaimer
Описанные ниже устройства являются довольно нишевыми, сделаны мною just for fun, но примененный подход может быть использован для решения аналогичной задачи универсализации там, где это потребуется. Текст разбавлю пояснениями для начинающих. Основная цель — спроектировать единую плату под все имеющиеся индикаторы и различные идеи их использования.
Статья получилась объемная, так что я разделил hardware и software части. К вашему вниманию часть первая — hardware.
Постановка задачи
Что я понимаю под максимальной универсальностью? Спроектировать модуль, с помощью которого или его комбинаций можно создать любой (или практически любой, в разумных пределах) дисплей для отображение информации с использованием этих самых семисегментных индикаторов. В голову приходит сразу с десяток применений — часы, конечно же, куда без них; туда же таймеры, счетчики чего угодно; термометры; табло для разных игр; дисплеи для отображения цифровой информации — курсов валют, индексов бирж и т.п. В общих чертах задача абсолютно тривиальная, но усложняется зоопарком типов индикаторов. В наличии одноразрядные китайские индикаторы с размером цифры 2.3 дюйма (тип FJ23101, четыре светодиода на сегмент) и 3 дюйма (тип CL-30011, пять светодиодов на сегмент), разных цветов и с различным типом подключения — с общим катодом и с общим анодом. Чтобы покрыть использование всех этих типов пришлось посидеть над схемой и разводкой, которая давала бы возможность без изменения топологии печатной платы управлять разными индикаторами. Поискав вечерок в интернете мне не удалось найти универсальных решений или схем, что и стало поводом для написания данной статьи.
При выборе управляющей части долго думать не пришлось, выбор сразу пал на готовые модули ESP-07 на контроллере ESP8266 от Espressif. Дешевизна и простота использования этих модулей, возможность легкого подключения к Интернету, обширная комьюнити разработчиков и элементарность программирования этого контроллера отмели все другие варианты.
Приступим к деталям
Начнем с питания семисегментных индикаторов большого размера, где каждый сегмент представляет собой цепочку из нескольких последовательно включенных светодиодов. Такие дисплеи уже не получится зажечь «цифровыми» уровнями напряжения, так как падение на цепочке светодиодов больше этого значения. Конкретное значение указывается в даташите на дисплей, оно зависит от характеристик светодиодов, цвета и их количества и может варьироваться от 6 до 12 Вольт. Ток через каждый сегмент также превышает допустимые значения тока через отдельный пин для большинства контроллеров и составляет от 20 до 50 мА. Соответственно, нужно использовать напряжение 12 Вольт и коммутирующие ключи для управления сегментами и общими выводами. Также не стоит забывать о динамической индикации — последовательном переключении разрядов с частотой превышающей частоту восприятия глаза человека. Это позволяет значительно снизить энергопотребление практически без потери визуальной яркости дисплея.
Питание цифровой части обеспечит линейный low-dropout стабилизатор LM1117-3.3, классическое решение для нетребовательных применений.
Теперь по транзисторным ключам.
Для управления индикатором с общим катодом на сегменты нужно подавать плюс питания, общий контакт, катод, подключить к земле. Для данных целей удобно использовать микросхемы источников тока (source drivers IC), как пример UDN2981. На картинке ниже подключение индикатора к драйверу и упрощенная схема одной ячейки для лучшего понимания пути прохождения тока. Стоит заметить, что в классической схеме должны быть токоограничивающие резисторы в цепи каждого сегмента, они упущены по причинам использования другого метода ограничения тока — МАХ7219 имеет изменять скважность управляющих импульсов, что в сумме с возможность регулировки напряжения питания индикаторов даст необходимый результат.
Для индикаторов с общим анодом — наоборот, общий контакт подключается к плюсу питания, а сегменты коммутируются на землю. В плане управления индикаторы с общим анодом более простые, так как не требуют коммутации высокого напряжения, по этой причине они более распространены. Для управления сегментами удобно использовать микросхему-массив составных транзисторов Дарлингтона (Darlington Transistor Arrays), например всеми любимую ULN2803.
Можно заметить, что верхние части схем очень схожи. Пара драйверов UDN2981 и ULN2803 подобрана неспроста. Относительно ножек вход/выход они pin-to-pin совместимы. Это дает возможность сделать универсальное посадочное место на плате добавив всего несколько перемычек под запайку для ножек питания. Бинго!
Вот такой набор MAX7219-MATRIX-KIT можно купить на Ali и в локальных магазинах для ардуинщиков по цене в четыре раза ниже оригинального драйвера MAX7219. Да-да, вы меня правильно поняли, набор с матрицей, платой и рассыпухой. Дешевле. В четыре раза. Выбор очевиден же?
Пока всё звучит очень хорошо и просто, берём драйвер дисплея, который всё делает за нас, в зависимости от типа индикатора ставим нужные ключи и вуа-ля! Все почти так и есть, кроме одного «но». MAX7219 рассчитан на работу с дисплеями с общим катодом с напряжением сегмента до 5В и никак иначе. Что это дает в сухом остатке? Перебирая разряды индикаторов драйвер подключает их на землю, поддерживая высокий уровень на катодах остальных разрядов. А теперь вернемся к схемам выше и проанализируем, что будет в случае с индикатором с общим анодом.
Нетрудно понять, что мы получим инверсию — нужный разряд будет выключен, все остальные — активные. Вместо динамической индикации на дисплее будет сплошной засвет от соседних разрядов. Чтобы избежать такой ситуации между контроллером и драйвером нужно добавить микросхему инвертирующую логические уровни. Так как максимальное количество разрядов шесть, гуглим «hex inverter» и тут же находим 74hc04. Отлично, а для общего катода вместо микросхемы сделаем перемычки или можно использовать pin-to-pin совместимую микросхему-буфер 74als34/74as34 (hex noninverter, но обязательно с выходом push-pull, открытый коллектор/сток типа 74hc07/74als35 работать не будет из-за отсутствия подтяжки к питанию).
В итоге имеем финальные схемы подключения индикаторов. Для общего катода все просто — драйвер плюс ключи способные подавать на сегменты повышенное напряжение. В даташите на MAX7219 приводится схема подключения индикаторов размера 2.3 дюйма и все это запитано от 5 Вольт, но мои экземпляры наотрез отказались работать при таком низком напряжении, сегмент начинал слабо светиться при подаче 7.2В (1.8В на светодиод). Катоды подключены напрямую к MAX7219, контроллер может прокачивать через себя от 320мА на каждый канал (>45мА на сегмент), чего с головой достаточно для данных типоразмеров индикаторов.
Для общего анода все немного сложнее. Тут уже нужно использовать разнотипные ключи для верхнего и для нижнего плечей плюс инвертирующий буфер для управления разрядами. Инвертирование сигналов для сегментов получаем автоматически при использовании ULN2803.
Как видим, со стороны драйвера MAX7219 и управляющего всем этим ESP8266 нет никакой разницы какой именно тип индикатора установлен в модуле, модифицировать прошивку не требуется.
Замечу, что при использовании внешних драйверов встроенное в контроллер ограничение тока сегментов (которое задается резистором на входе Iset) корректно работать не будет, поэтому интенсивность будем регулировать напряжением питания при максимальной скважности от MAX7219. Драйвер позволяет устанавливать интенсивность скважностью встроенного ШИМ генератора от 1/32 до 31/32 с шагом 1/16.
Для управляющей части на ESP8266 ничего выдумывать не нужно, берем типовое включение модуля, заводим линии SPI на MAX7219, UART для прошивки на внешний разъем. Дополнительно решил добавить преобразователь протокола UART в virtual COM port через USB, его устанавливать необязательно, но места на плате предостаточно, пускай будет такая возможность. Как преобразователь я выбрал СН340, как максимально простое и бюджетное решение. В версии чипа СН340G преобразователь даже не требует частотозадающего кварца, он уже встроен в конвертер, а из обвеса всего пара конденсаторов, проще не бывает.
Полная схема в хорошем качестве тут.
Со схемой определились, теперь можно приступать к топологии печатной платы. Как я уже упоминал, все эти заморочки именно через плату. Хотелось заказать партию плат на нормальном производстве под все вышеперечисленные устройства и не дорабатывать их по месту напильником и скальпелем. После непродолжительных размышлений на плате вырисовались аж целых восемь посадочных мест под семисегментные индикаторы:
- По одному для 2.3″ и 3″ по центру платы — для дисплея с одной цифрой
- По два для 2.3″ и 3″ — для дисплея с двумя цифрами
- Три для 2.3″ — соответственно, для дисплея с тремя цифрами
По краям платы расположены контакты расширения — для подключения справа от ведущего еще одного аналогичного ведомого модуля, но без схемы управления и питания, только индикаторы.
Такая комбинация позволяет расширить разрядность до шести цифр, а так же комбинируя расположение и размер индикаторов изготовить табло для различных, предположим, настольных игр и, конечно же, часы! На контакты продублированы сигналы управления всеми сегментами и выведены линии подключения 3 и 4 разряда для трехдюймовок, и 4, 5 и 6 разряд для двухдюймовок.
Дополнительно, два оставшихся свободных канала MAX7219 подключены к двум цепочкам дискретных светодиодов, расположенных над и под индикаторами. Их, например, можно будет использовать для фоновой подсветки, так сказать эффект ambilight.
Размер платы выбран таким образом, чтобы она не выходила за края индикаторов. В таком случае можно скомбинировать дисплей с одинаковыми расстояниями между цифрами для бо́льших и 6ти-разрядный для меньших индикаторов.
По углам платы расположены четыре отверстия под болт М3 для крепления модуля к несущей конструкции.
Микросхемы, если это было возможно, выбраны в выводных корпусах DIP, так как вопрос миниатюризации для данного устройства не актуален, а на плате они выглядят уже почти стимпанково, на фоне привычных BGA монстров. Это придает особого шарма, как у ламповых усилителей.
Посадочное место под модуль ESP-07 также pin-to-pin совместимо с модулями ESP-12S/E/F.
Плата проектировалась за два вечера, по этой причине использовался простой принцип разводки как у автороутеров — разделение горизонтальных и вертикальных линий на разные слои. В итоге плата получилась двухсторонняя, несложная и визуально красивая.
Плата была отправлена в производство как раз в канун китайского Весеннего Фестиваля и карантинных мер в КНДР. Рассматривал три популярные площадки для изготовления мелкосерийных прототипов — PCBway, Seeed и JLCpcb. На последней стоимость получилась на 20 долларов дешевле (при партии в 20 шт) и значимым плюсом для меня было то, что фабрика не закрывалась на праздничную неделю. Суммарная стоимость составила 44 доллара, с учетом доставки 21$ и купона на скидку -5$. В пересчете на плату — чуть больше 2 долларов за штуку. Несмотря на разгар эпидемии коронавируса, от отправки gerber-ов на фабрику к моменту получения прошел 21 день. Качество плат на высоте.
За время пока в Китае изготавливались платы, в местном рекламном агентстве были заказаны основы из прозрачного акрила, куда можно закрепить платы и светорассеиватель. Теперь можно посмотреть, что получилось из задуманного.
Вот так выглядит вариант платы, запаянной под индикаторы с общим катодом. На фото указаны названия микросхем и обведены перемычки под запайку.
А вот так — под индикаторы с общим анодом.
На фото ниже различные комбинации индикаторов разных размеров. Как вы можете понять, их также можно удвоить, добавив slave-модуль.
Далее осталось только написать скрипт под конкретную реализацию, чем и займемся в следующей части.
Всем спасибо за внимание!
P.S.: Если кто-то заинтересовался проектом — пишите в личку, осталось еще с десяток плат или могу выслать gerber-файлы.
049-Драйвер линейки 7-сегментных индикаторов на ATtiny13 (бегущая строка). — GetChip.net
Уффф… Наконец-то добрался до паяльника! Сейчас сделаем что-нибуть интересненькое.
Раньше мы сказали «А», собрав устройство ввода – клавиатуру, теперь мы просто обязаны сказать «Б» и сделать устройство вывода, чем мы сегодня и займемся. В качестве устройства «Б» у нас будет выступать 7-сегментный индикатор. Но не просто один индикатор, а целая линейка семисегментных индикаторов, причем неограниченной длинны и с кучей эффектов отображения! Интересно? Ну, тогда, начнем!
Семисегментные индикаторы довольно неоднозначные устройства для отображения. По причине того, что они предназначены для отображения цифр (хотя, конечно, можно отобразить и буквы, но довольно условно и не все), круг их применения не очень широк. Но есть случаи, когда требуется яркое и четкое отображения цифр, которые, к тому же, должны быть видны издалека, и тут равных семисегментникам нет.
Часто, когда идет речь о семисегментных индикаторах, подразумевается включение их в схему с динамической индикацией, при этом, по очереди засвечивается только один символ, и при частоте выше 50Гц, создается иллюзия, что светятся все символы одновременно. Эта схема настолько распространена, что 3-4х циферные индикаторы имеют выводы только под динамическую индикацию. У такого способа включения, конечно, есть свои плюсы, но когда речь идет о количестве цифр больше чем четыре (а тем более, если не известно, сколько их вообще будет) – начинаются проблемы с этой самой динамической индикацией — падает яркость свечения становиться заметно мерцание. Очевидно, что для линейки семисегментных индикаторов неограниченной длинны, такой способ включения абсолютно не подходит. Как же быть в таком случае? Поступим нестандартно – включим наши индикаторы на статическое (постоянное) свечение. Чтобы такое подключение стало возможным, нам понадобятся одноциферные семисегментные индикаторы – вот, например, такие:
Кроме того, для засветки нужных сегментов индикатора, нам нужен драйвер светодиодов. Чтобы не увеличивать стоимость нашей линейки (микросхема-драйвер довольно дорогая) будем применять дешевые и распространенные сдвиговые регистры 74HC164. Это немного ухудшит яркость свечения, но значительно удешевит все устройство. Для управления линейкой будем использовать микроконтроллер ATtiny13 – больший не нужен. Сдвиговые регистры управляются всего двумя линиями (Data, Clock) и включаются последовательно, а значит, нет разницы для схемы управления регистрами, сколько их там стоит в линейке три или сто двадцать три. Значит, можно сделать нашу линейку безразмерной, то есть к линейке можно в любое время подключить дополнительные индикаторы или убрать ненужные. Схема устройства выглядит следующим образом:
Как видно из схемы, семисегментные индикаторы с регистром 74HC164 установливаются на отдельные платы с разъемами по обе стороны для того, чтобы можно было собрать несколько индикаторов в линейку. Плата управления (драйвер линейки) на ATtiny13 управляет всеми индикаторами вне зависимости от их количества. Более того, в прошивке предусмотрена возможность для того, чтобы в линейку можно было включать вперемешку индикаторы с общим анодом и общим катодом. Символы отображаются справа налево. Этот вариант отображения удобен для случая, когда неизвестно, сколько индикаторов включено в линейке – последние введенные символы всегда находятся в первых индикаторах. Кроме сигнала данных (Data) и сигнала тактирования данных (Clock), драйвером формируется сигнал “/OE” (Output Enable) для того чтобы избежать мерцания сегментов при сдвиге символов по регистру. В момент сдвига данных по регистру драйвер выставляет на линии /ОЕ высокий уровень, схема управления индикаторами по этому уровню сигнала должна запретить вывод данных на индикатор. В данном схемном решении этот сигнал не задействован по причине отсутствия в сдвиговых регистрах 74HC164 ножки переводящей выходы в высокоомное состояние, но можно этим сигналом отключать общий вывод индикатора (через транзистор) или использовать другую микросхему, имеющую соответствующий вход.
Алгоритм работы устройства.
Я долго размышлял над тем, как сделать управление линейкой простым и не обременительным для микроконтроллера Вашего проекта. Главная цель, которую я преследовал, максимально переложить функции управления на драйвер линейки, но в тоже время не потерять возможности гибкого управления со стороны Вашего проекта. В результате был разработан следующий алгоритм работы:
Драйвер линейки взаимодействует с Вашим проектом по UART (Скорость 9600, 8 бит данных, 1 стоп бит, бита четности нет). Драйвер работает как на прием, так и на передачу (хотя последнее не столь важно и можно данную возможность не использовать, тем самым свести управление драйвером всего к одной линии).
В драйвер могут передаваться цифры, буквы латиницы, управляющие символы. Передача осуществляется в ASCII коде (пример: цифры -“123”, буквы-“Аbc”, управляющие символы-“>”). Другие символы игнорируются.
Драйвер, по UART, отправляет символы окончания эффектов. Их всего два — “V” и “D”. Это нужно для того, чтобы знать когда окончился эффект и можно отправить следующую команду эффекта для формирования сложных составных эффектов.
Переданные, для отображения, цифры и буквы латиницы записываются в буфер (размер буфера может быть 16, 32, 64 знака и выбирается по нуждам проекта). Переполнения буфера нет, он циклический (новые символы пишутся поверх самых старых). Управляющие символы в буфер не записываются – они активируют свои функции немедленно в момент приема по UART (например: при посылке строк “abcd>” и “ab>cd” результат будет идентичен). На линейку индикаторов символы попадают из буфера, при этом способ их отображения зависит от активированных эффектов. Такой вариант наименее ресурсоемок для контроллера Вашего проекта, так как введенная в буфер строка символов отображается с различными эффектами посредством лишь ресурсов драйвера.
По умолчанию драйвер отображает полученные символы на линейке без каких либо эффектов. Если по UART передавать цифры или букв латиницы (например, “1”, “4”, “A“, ”S” ”d” …) они сразу будут отображаться на линейке справа налево, причем следующий символ будет сдвигать влево предыдущий.
Далее идет описание всех символов которые можно отправить в драйвер.
Отображаемые символы.
Драйвер умеет отображать цифры и буквы латиницы (верхний и нижний регистр отображается одинаково), а также, пробел и десятичную точку.
Управляющие символы.
Для выбора режима работы линейки или активации спецэффектов нужно передать по УАРТ специальные символы. Как я писал раньше, управляющие символы начинают работать немедленно, после приема по UART, и в буфер они не попадают. Соответственно их можно пересылать прямо в строке сообщения.
Пример: “_Аbc>”, где “Аbc”-отображаемое сообщение, а “_” и “>”-управляющие символы.
Вот перечень символов управляющих режимом работы индикаторов:
“)” – разрешение автоматического отображения буфера (по умолчанию активировано).
При включенном автоматическом обновлении буфер, с определенным периодом, перерисовывается на линейке. Каждый принятый по UART и записанный в буфер символ сразу же отобразится на линейке.
“(“ – запрет автоматического отображения буфера.
Все принятые по UART символы продолжают записываться в буфер драйвера, но на линейке не происходит ни каких изменений (“светится” последнее сообщение). Запрет автоматического обновления линейки может понадобиться в том случае, если нужно вывести сразу всю строчку целиком, а не посимвольно, или для того, чтобы подготовить следующее сообщение, не изменяя предыдущее.
Пример: переданная по UART строка “(2314” ни как не отобразится на линейке, но в буфере запишется. Если дальше включить автоматическое отображение — “)”, то на линейке мы увидим наше слово “2314”. Для того, чтобы выводить строку сообщения целиком, а не по факту передачи символов по UART, нужно послать следующую комбинацию “(2314)”. Это актуально если символы 2, 3, 1, 4 передаются по UART не сразу, а в течении определенного времени.
“!” – принудительный вывод буфера на линейку.
Нужен для того, чтобы однократно отобразить буфер на линейке, при отключенном автоматическом обновлении.
Пример: запретили автоматическое отображение “(“, передали символы “2314”, принудительно их отображаем “!”.
“_” (знак подчеркивания) – очистка буфера.
После приема этого символа буфер немедленно очистится. Если запрещено автоматическое отображение буфера, на линейке не произойдет никаких изменений, так как очищается только буфер. Для очистки линейки, в этом случае, нужно запустить автоматическое отображение буфера или послать символ принудительного вывода буфера “!”.
”[“ – включение режима инверсии символов.
В режиме инверсии, выводимые на линейку символы, инвертируются (побитно). Такой режим нужен, если Вы умудрились соединить в одну линейку вперемешку индикаторы с общим анодом и общим катодом. При подаче инверсного сигнала на индикатор противоположного подключения последний отобразит символ корректно. Даже если вся линейка индикаторов не соответствует прошивке в начале сеанса достаточно послать символ ”[“ и дальше все будет работать корректно.
“]” – выключение режима инверсии символов (по умолчанию активировано).
Пример: Если прошивка для индикаторов с общим анодом, а индикаторы включены так: ОА—ОК—ОА. Передаем строку «3[4]5» получим на линейке 345. Если передать так — «345» то получим «3-черте-что-5».
Далее символы для организации спецэффектов:
Пакет управляющих символов для исчезновения-проявления содержимого линейки.
“*“ – посимвольное «исчезновения» содержимого линейки.
Символы на линейке последовательно гасят свои сегменты, пока совсем не «исчезнут» (содержимое буфера остается нетронутым). По окончании эффекта в UART выдается символ “D” и запрещается автоматическое отображение буфера.
“^“ – посимвольное «проявление» содержимого линейки.
Символы на линейке последовательно зажигают свои сегменты до полного «проявления» (содержимое буфера остается нетронутым). По окончании эффекта в UART выдается символ “D” автоматическое отображение буфера разрешено.
Для полноты эффекта линейка индикаторов должна быть пуста, запрещено автоматическое отображение буфера и в буфере должно находиться проявляемое слово (сделать это можно следующей строчкой “)_!проявляемое слово”). Данный эффект хорош после исчезновения предыдущего слова по “*”.
Пакет управляющих символов для горизонтального скроллинга (бегущей строки).
Пакет позволяет организовать бегущую строку из содержимого буфера. От Вас требуется лишь поместить строку в буфер и управляющим символом задать направление движения, все остальное будет делать драйвер.
“>“ – Автоматический скроллинг содержимого линейки вправо (бегущая строка).
Содержимое буфера не изменяется. Эффект бесконечен (движение по кругу), ни какие символы по UART не возвращаются. Остановить можно символом “|“.
“<“ – Автоматический скроллинг содержимого линейки влево (бегущая строка).
Содержимое буфера не изменяется. Эффект бесконечен (движение по кругу), ни какие символы по UART не возвращаются. Остановить можно символом “|“.
“|“ – Остановка скроллинга.
Позиция отображения возвращается в нормальное состояние.
Пакет управляющих символов для вертикального сдвига.
Этот пакет эффектов позволяет организовать несколько интересных эффектов, например, имитация движения по пунктам меню; периодическое отображение какой-либо служебной информации (например, времени, выдвигая часы снизу и потом туда их убирая) и т.д.
“\“ – Вертикальный сдвиг-появление символов линейки вверх (появление вверх – с пустого места до полных символов). По окончании эффекта в UART выдается символ “V”, автоматическое отображение буфера разрешено.
“/“ – Вертикальный сдвиг-исчезновение символов линейки вверх (исчезновение вверх – с полных символов до пустого места). По окончании эффекта в UART выдается символ “V” и запрещается автоматическое отображение буфера.
“:“ – Вертикальный сдвиг-появление символов линейки вниз (появление вниз – с пустого места до полных символов). По окончании эффекта в UART выдается символ “V”, автоматическое отображение буфера разрешено.
“;“ – Вертикальный сдвиг-исчезновение символов линейки вниз (исчезновение вниз – с полных символов до пустого места). По окончании эффекта в UART выдается символ “V” и запрещается автоматическое отображение буфера.
Вот пример реализации движения по меню посредством эффектов пакета:
А это пример информационного сообщения:
Пакет управляющих символов для изменения скорости эффектов.
Следующие символы изменяют скорость прохождения эффектов.
“-“ – активируется нормальная скорость.
“+“ – активируется повышенная скорость.
Дополнительные пояснения по управления эффектами.
— Все эффекты работают независимо друг от друга. Это значит, что Вы можете запустить сразу несколько эффектов одновременно! Строка вида «_Start>*;» очистит буфер, запишет в него слово «START», запустит бегущую строку вправо, во время пробега она будет исчезать посегментно и в придачу опускатся вниз. При помощи различных комбинаций можно получить совершенно новые эффекты. Экспериментируйте!
— При подаче взаимно исключающих команд, например ”<” и “>” – сработает последняя — “>”.
— Во время действия спецэффектов можно заполнять буфер новыми словами. Они сразу же начнут участвовать в эффекте.
— Очевидно, что если количество индикаторов меньше чем величина буфера, то будут отображаться только последние введенные символы, влезшие в количество индикаторов. В противоположном случае, если буфер меньше количества индикаторов, то буфер на индикаторах будет повторяться циклически.
Прошивки для индикаторов с общим анодом (OA)
049-T13-B16-OA-UART-to-7Seg.zip (2623 Загрузки)
049-T13-B32-OA-UART-to-7Seg.zip (2258 Загрузок)
Прошивки для индикаторов с общим катодом (OK)
049-T13-B16-OK-UART-to-7Seg.zip (2273 Загрузки)
049-T13-B32-OK-UART-to-7Seg.zip (2188 Загрузок)
Фьюзы для всех прошивок одинаковы
049-fuse.png (2438 Загрузок)
Размер буфера следует выбирать, по возможности, наименьшим. Меньший буфер меньше шумит сегментами индикаторов при сдвигах и обновлениях линейки (это касается только схем без гашения индикаторов сигналом /ОЕ).
Прошивка для OA будет работать с OK-индикаторами, если в начале сеанса работы послать управляющий символ инвертирования “[“, и наоборот.
Файлы к статье:
049-7Seg-shem.zip (2434 Загрузки)
RL-S10-SERIES.pdf (3070 Загрузок)
74HC164.pdf (3375 Загрузок)
049-AB-UART-to-7Seg.zip (2968 Загрузок)
Смотрим также:
Демонстрацию устройства в следующей статье.
P.S. В процессе написания статьи появились идеи еще по нескольким дополнительным функциям, которые еще больше смогут упростить работу Вашего проекта с драйвером. В скором времени будет вторая версия прошивок для этого устройства. Если у Вас есть какие идеи или пожелания, пишите, будем их реализовывать.
(Visited 7 926 times, 1 visits today)
Когда не хватает ног. Часть 3. Драйвер индикаторов MAX7221 — Как подключить — AVR project.ru
Сегодня будет представлен еще один способ сэкономить кучу ножек микроконтроллера в тех случаях когда нужно подключить семисегментные светодиодные индикаторы. Речь пойдет о использовании специализированного драйвера MAX7221 — это драйвера позволяют управлять семисегментными индикаторами (с общим катодом), светодиодными линейками или же с помощью него можно рулить до 64 светодиодами одновременно. Сами драйвера управляются по SPI интерфейсу, с максимальной поддерживаемой частотой работы интерфейса до 10 МГц.Распиновка ножек микросхемы:
1 — DIN. Последовательный ввод данных. Данные загружаются в 16-ти разрядный сдвиговый регистр по переднему фронту тактового сигнала.
2,3,5-8,10,11 — DIG0-DIG7. Выводы для подключения общих катодов индикаторов.
4,9 — GND. Выводы для подключения земли
12 — LOAD (CS) в MAX7221 данные загружаются в приёмный сдвиговый регистр только когда сигнал CS находится в состоянии низкого уровня (то есть только когда микросхема «выбрана», если говорить в терминах интерфейса SPI). Запоминаются и поступают к обработке также последние 16 принятых бит, происходит это также по переднему фронту сигнала CS.
13 — CLK. Вход сигнала тактирования, по которому происходит запись данных.
14-17, 20-23 — SEG A-SEG G, DP. Выводы для подключения сегментов семисегментных индикаторов.
18 — ISET. К этому выводу подключается резистор (вторая нога резистора — к плюсу), позволяющий задавать пиковый ток сегмента и таким образом устанавливать яркость свечения сегментов. Минимальное сопротивление этого резистора должно быть 9,53 кОм, что примерно соответствует току сегмента 40мА.
19 — V+. Сюда подключается «+» питания.
24 — DOUT. Последовательный вывод данных. Эта нога понадобится если нужно будет соединить вместе два или более драйвера.
Принцип работы с микросхемой MAX7221
По сути MAX7221 (и его аналог MAX7219) по принципу работы схож с регистром 74HC595, с той лишь разницей что в микросхему загружается 16 бит данных. Первые загружаемые 8 бит необходимы для выбора регистра, в который нужно записать данные. Следующие 8 бит — те данные которые нужно записать в регистр. Говоря проще, сначала сообщаем микросхеме куда записать данные, а затем записываем нужные данные по выбранному адресу.
Чем интересен этот драйвер, так это тем, что он имеет два режима работы. Первый — работа в режиме обычного буфера с прямым управлением каждого сегмента.
Второй режим, так называемый BCD code B, который позволяет упростить вывод информации на индикатор за счет встроенного декодера символов. Символов кстати совсем немного, всего 16 — это цифры 0-9, знак «-«, пустой символ и 4 быквы — «E», «H», «L», «P» (интересно какое слово можно составить?:)). Например, для того чтобы вывести во второй разряд цифру 2, нам нужно будет отправить адрес второго разряда (8 бит) и затем просто отправить двойку (еще 8 бит). Об этом режиме работы поговорим в следующей статье, сейчас же будет рассмотрен пример как работать с драйвером в режиме без декодирования.
Для того чтобы управлять драйвером в первую очередь нужно ознакомится с картой адресов регистров.
Регистр No Op понадобится при совместном подключении нескольких драйверов. Для того, чтобы обратиться, например, к третьему драйверу в цепочке, не влияя на работу первых двух, — нужно для первых двух обратиться к регистру «No-op». Поскольку адрес этого регистра равен нулю, то сделать это очень просто: сначала за 16 тактов отправляем данные для третьего регистра, потом устанавливаем линию данных в ноль и отщёлкиваем ещё 2 раза по 16 тактов. В результате первый отправленный пакет будет загружен в третий регистр, а следующие два пакета (загруженные в первый и второй регистры) будут иметь адрес ноль, то есть будут обращаться к регистру «No-op».
Digit 0-7 регистры, отвечающие за управление разрядами индикатора. Нумерация разрядов идет слева направо. Это очень удобно, например чтобы сменить одну цифру на индикаторе обращаемся по адресу регистра отвечающего за разряд, тем самым не трогая все остальные разряды.
Регистр Decode Mode отвечает за режимы работы драйвера, о которых говорилось чуть выше: им можно выставить режим декодирования символов BCD code B и режим без декодирования No decode.
Через регистр Intensity осуществляется программная(!) настройка яркости свечения индикатора. Удобная штука на разные случаи, от возможности энергосбережения до индикации разных режимов работы девайса. Всего можно выбрать один из 16 уровней яркости.
Регистром Scan Limit устанавливается число используемых разрядов индикатора. Если планируется использовать не все 8, а меньше, то рекомендуется отключать неиспользуемые. От этого будет зависеть частота обновления индикатора, а также пиковый ток через сегменты. Когда задействованы все 8 разрядов, частота обновления составляет около 800 Гц. При уменьшении количества разрядов частота возрастает, ее можно определить по формуле 8*800/N (где N — число разрядов). Пиковый ток через сегменты также возрастает при отключении неиспользуемых разрядов.
Через регистр Shutdown можно включить режим энергосбережения, при котором все индикаторы гаснут, данные и состояние регистров при этом не теряются. Режим энергосбережения включается записью нуля в регистр shutdown. При записи туда единицы драйвер выходит из энергосбережения.
Энергопотребление в этом режиме падает до 150 мкА.
Display Test используется для проверки подключенного индикатора, в тестовом режиме включаются все сегменты индикатора. Даже если драйвер находится в режиме энергосбережения, режим тестирования включит сегменты.
После запитывания все регистры драйвера сброшены, поэтому в первую очередь нужно провести настройку. Настройки драйвера (запись нужных значений в регистры Decode Mode, Intensity, Scan Limit, Shutdown и Display Test) необходимо производить каждый раз после подачи питания, эти значения не сохраняются.
Работа с драйвером в режиме No-decode
В режиме No decode мы можем управлять каждым сегментом любого разряда напрямую. Соответствие сегментов индикатора битам в регистре Digit представлено на картинке ниже и для того чтобы зажечь определенный сегмент необходимо записать в соответствующий бит единицу.
Для примера: нам нужно вывести в первый разряд 8-и разрядного индикатора цифру 1. Сначала отправляем первые 8 бит адреса регистра соответствующего первому разряду (см. таблицу с картой адресов регистров). Нумерация разрядов индикатора идет слева направо (вот таким образом 0.1.2.3.4.5.6.7.), поэтому первый справа разряд (Digit 7), будет иметь адрес &h08, это значение и отправляем. Затем отправляем данные которые должны включить сегменты В и С, по таблице соответствия (см. выше) за эти сегменты отвечают биты D5 и D4. Таким образом следующие 8 бит которые мы должны отправить будут такие: 00110000, или если в шестнадцатеричном представлении — &h58. Подобным образом можем управлять и другими разрядами и сегментами индикатора. Ничего сложного, правда? 😉
А теперь небольшой рабочий пример. У меня оказался только четырехразрядный индикатор, для демонстрации возможностей вполне сгодится. Соединил по схеме ниже. Неиспользуемые выводы можно оставлять болтаться в воздухе. Микроконтроллер Attiny2313 тактируется от внутреннего генератора на 8 МГц, напряжение питания схемы 5 вольт.
демо код в Bascom-AVR
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
Config Portd = Output
Cs Alias Portd.1
Ser_clk Alias Portd.2
Ser_data Alias Portd.3
Dim A As Word
Dim Digit(8)as Byte
Dim Y As Byte
Dim Disp_num As Byte
Dim Disp_data As Byte
Dim Digit_str As String * 4
Dim Temp_str As String * 3
Gosub Max7219_setup
Digit_str = «Good» ‘строка которую выведем на дисплей
Gosub Prepare ‘вызываем подпрограмму подготовки и отправки данных
Wait 3
Do ‘в главном цикле просто выводим увеличивающее на 1 число
Waitms 200
Incr A ‘переменная значение которой выводим на индикатор
Digit_str = Str(a)
Digit_str = Format(digit_str , «0000»)
Gosub Prepare
Loop
End
‘Подготовка данных для передачи
Prepare:
Do
For Y = 1 To 4
Temp_str = Mid(digit_str , Y , 1)
Select Case Temp_str
Case «0» : Temp_str = «126» ‘&b01111110
Case «1» : Temp_str = «48» ‘&b00110000
Case «2» : Temp_str = «109» ‘&b01101101
Case «3» : Temp_str = «121» ‘&b01111001
Case «4» : Temp_str = «51» ‘&b00110011
Case «5» : Temp_str = «91» ‘&b01011011
Case «6» : Temp_str = «95» ‘&b01011111
Case «7» : Temp_str = «112» ‘&b01110000
Case «8» : Temp_str = «127» ‘&b01111111
Case «9» : Temp_str = «123» ‘&b01111011
Case «.» : Temp_str = «128» ‘&b10000000
‘можно и самостоятельно ввести нужные символы
Case «A» : Temp_str = «119» ‘&b01110111
Case «C» : Temp_str = «78» ‘&b01001110
Case «E» : Temp_str = «79» ‘&b01001111
Case «G» : Temp_str = «94» ‘&b01011110
Case «o» : Temp_str = «29» ‘&b00011101
Case «d» : Temp_str = «61» ‘&b00111101
Case » » : Temp_str = «0» ‘&b00000000
‘и так далее…
End Select
Digit(y) = Val(temp_str)
Disp_num = Y ‘знакоместо (разряд) на который выводим текущую цифру
Disp_data = Digit(y) ‘данные которые отправляем на выбранный разряд
Gosub Disp_write
Next Y
Loop Until Y = 5 ‘когда вывели данные на все 4 разряда возвращаемся в главный цикл
Return
‘Передаем данные в max7221
Disp_write:
Ser_data = 0
Ser_clk = 0
Cs = 0
Shiftout Ser_data , Ser_clk , Disp_num , 1 ‘отправляем номер разряда
Shiftout Ser_data , Ser_clk , Disp_data , 1 ‘отправляем данные в этот разряд
Cs = 1
Return
‘инициализации и настройка регистров max7221
Max7219_setup:
Disp_num = &H0C : Disp_data = 0 ‘режим Shutdown (0-включен, 1-выключен)
Gosub Disp_write
Disp_num = &H09 : Disp_data = 0 ‘режим прямого управления сегментами индикатора
Gosub Disp_write
Disp_num = &H0A : Disp_data = 10 ‘уровень свечения сегментов (0-минимум, 15-максимум)
Gosub Disp_write
Disp_num = &H0B : Disp_data = 3 ‘число используемых разрядов (счет от 0)
Gosub Disp_write
Disp_num = &H0F : Disp_data = 0 ‘тестовый режим выключен (0-выключен, 1-включен)
Gosub Disp_write
Disp_num = &H0C : Disp_data = 1
Gosub Disp_write
Return
Код хорошо прокомментирован, поэтому дополнительного пояснения надеюсь приводить не нужно. А ниже результат работы
Далее будет описана работа с драйвером в режиме BCD code B ( вторая часть )
И напоследок отдельное спасибо нашему камраду Максиму (известного под ником max) за то, что подкинул мне эти замечательные микрухи.
Драйвер семисегментных индикаторов MAX7219/MAX7221.
Драйвер семисегментных индикаторов MAX7219/MAX7221.
Электрические характеристики.
Напряжение питания 4.0 – 5.5В
Минимальный потребляемый ток без индикации 150мкА
Частота обновления дисплея 500-1300Гц
Ток одного сегмента индикатора 30-45мА
Управление микросхемой.
Типовая схема включения
Для загрузки данных в микросхему используется последовательный пакет длиной 16 бит. Младшие 8 бит являются информационными, следующие 4 задают номер регистра микросхемы, старшие 4 не используются. Первым передается старший бит.
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Не используется |
Регистр |
Данные |
Адреса регистров
Регистр |
Адрес |
HEX CODE |
||||
D15-D12 |
D11 |
D10 |
D9 |
D8 |
||
Нет операции |
х |
0 |
0 |
0 |
0 |
X0 |
Индикатор 0 |
х |
0 |
0 |
0 |
1 |
X1 |
Индикатор 1 |
х |
0 |
0 |
1 |
0 |
X2 |
Индикатор 2 |
х |
0 |
0 |
1 |
1 |
X3 |
Индикатор 3 |
х |
0 |
1 |
0 |
0 |
X4 |
Индикатор 4 |
х |
0 |
1 |
0 |
1 |
X5 |
Индикатор 5 |
х |
0 |
1 |
1 |
0 |
X6 |
Индикатор 6 |
х |
0 |
1 |
1 |
1 |
X7 |
Индикатор 7 |
х |
1 |
0 |
0 |
0 |
X8 |
Режим декодирования |
х |
1 |
0 |
0 |
1 |
X9 |
Интенсивность |
х |
1 |
0 |
1 |
0 |
XA |
Рабочие индикаторы |
х |
1 |
0 |
1 |
1 |
XB |
Гашение |
х |
1 |
1 |
0 |
0 |
XC |
Тест индикаторов |
х |
1 |
1 |
1 |
11 |
XF |
Режим декодирования
Микросхема MAX7219 может работать в двух режимах – декодирования BCD кода или непосредственной установки каждого сегмента. Имеется возможность установки режима для отдельных индикаторов. Делается это с помощью регистра режима декодировании. При записи в этот регистр, каждый разряд отвечает за отдельный семисегментный индикатор (одну цифру). Если в регистр записаны все 0, тогда декодирование не производится. Некоторые возможные варианты данных, для записи в регистр декодирования приведены в таблице.
Режим декодирования |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
HEX CODE |
Нет декодирования |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
00 |
Декодирование в индикаторах 0-3. |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0F |
Декодирование во всех индикаторах |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
FF |
Интенсивность свечения.
MAX7219/7221 позволяет задавать интенсивность свечения индикаторов, путем изменения скважности импульсов, реализующих режим динамической индикации. Для этого в соответствующий регистр заносится нужное значение. Для записи используются только 4 младших бита данных.
Соотношение цикла |
D4-D7 |
D3 |
D2 |
D1 |
D0 |
HEX CODE |
|
MAX7219 |
MAX7221 |
||||||
1/32 |
1/16 |
x |
0 |
0 |
0 |
0 |
X0 |
3/32 |
2/16 |
x |
0 |
0 |
0 |
1 |
X1 |
5/32 |
3/16 |
x |
0 |
0 |
1 |
0 |
|
7/32 |
4/16 |
x |
0 |
0 |
1 |
1 |
X3 |
9/32 |
5/16 |
x |
0 |
1 |
0 |
0 |
X4 |
11/32 |
6/16 |
x |
0 |
1 |
0 |
1 |
X5 |
13/32 |
7/16 |
x |
0 |
1 |
1 |
0 |
X6 |
15/32 |
8/16 |
x |
0 |
1 |
1 |
1 |
X7 |
19/32 |
9/16 |
x |
1 |
0 |
0 |
0 |
X8 |
17/32 |
10/16 |
x |
1 |
0 |
0 |
1 |
X9 |
21/32 |
11/16 |
x |
1 |
0 |
1 |
0 |
XA |
23/32 |
12/16 |
x |
1 |
0 |
1 |
1 |
XB |
25/32 |
13/16 |
x |
1 |
1 |
0 |
0 |
XC |
27/32 |
14/16 |
x |
1 |
1 |
0 |
1 |
XD |
29/32 |
15/16 |
x |
1 |
1 |
1 |
0 |
XE |
31/32 |
15/16 |
x |
1 |
1 |
1 |
1 |
XF |
Использование индикаторов
При работе микросхемы MAX7219 и MAX7221 позволяют использовать не все 8 индикаторов, а только необходимое количество. При этом отсчет начинается с 0 индикатора. Для задания используется 3 младших байта данных.
Индикатор |
D3-D7 |
D2 |
D1 |
D0 |
HEX CODE |
0 |
x |
0 |
0 |
0 |
X0 |
0,1 |
x |
0 |
0 |
1 |
X1 |
0,1,2 |
x |
0 |
1 |
0 |
X2 |
0,1,2,3 |
x |
0 |
1 |
1 |
X3 |
0,1,2,3,4 |
x |
1 |
0 |
0 |
X4 |
0,1,2,3,4,5 |
x |
1 |
0 |
1 |
X5 |
0,1,2,3,4,5,6 |
x |
1 |
1 |
0 |
X6 |
0,1,2,3,4,5,6,7 |
x |
1 |
1 |
1 |
X7 |
Тест дисплея
При записи в регистр теста единицы в младший разряд, микросхема включает все индикаторы. Это позволяет проверить работоспособность схемы и LED индикаторов.
Каскадирование индикаторов
Микросхемы MAX7219/7221 допускают каскадное включение. При этом информация передается последовательно из микросхемы в микросхему. Для целей недопущения искажения индикации, может быть использован регистр – Нет операции. При его задействовании микросхемы не производят никаких действий с индикаторами.
Выбор резистора Rset.
Для задания тока через отдельный сегмент, используется вход ISET, к которому подключается резистор Rset. Выбрать номинал резистора в кОм можно по таблице:
Ток через сегмент (мА) |
Напряжение питания индикатора (В) |
||||
1.5 |
2.0 |
2.5 |
3.0 |
3.5 |
|
40 |
12.2 |
11.8 |
11.0 |
10.6 |
9.69 |
30 |
17.8 |
17.1 |
15.8 |
15.0 |
14.0 |
20 |
29.8 |
28.0 |
25.9 |
24.5 |
22.6 |
10 |
66.7 |
63.7 |
59.3 |
55.4 |
51.2 |
Еще по теме:
Модуль семисегментных индикаторов
Работа с драйвером индикаторов MAX7219
You have no rights to post comments
Как работать с драйверами индикаторов MAX7219 и MAX7221 — radiohlam.ru
Сегодня мы поговорим об очень удобных и полезных микрухах — драйверах MAX7219 и MAX7221. Эти драйвера позволяют управлять семисегментными индикаторами (с общим катодом), светодиодными линейками или просто отдельными светодиодами. Максимум к ним можно подключить по 64 светодиода (ну или, соответственно, по восемь семисегментных индикаторов). Сами драйвера управляются по интерфейсу SPI (режим 0), поддерживая частоту работы интерфейса до 10 МГц. Надо сказать, что драйвер MAX7219 не полностью соответствует нормам SPI (в отличии от MAX7221), но тем не менее его прекрасно можно по SPI программировать, главное — чётко помнить в чём же всё таки заключается несоответствие (позднее расскажу об этом и ещё некоторых отличиях этих микросхем).
Распиновка и назначение ног.
1 — DIN. Последовательный ввод данных. Данные загружаются в 16-ти разрядный сдвиговый регистр по переднему фронту тактового сигнала.
2,3,5-8,10,11 — DIG0-DIG7. Выводы для подключения общих катодов индикаторов. В MAX7219 эти линии при отключении подтягиваются к плюсу, а в MAX7221 переходят в высокоомное состояние (в Z-состояние).
4,9 — GND. Сюда подключается «ноль» питания. Для правильной работы микрухи — к «нулю» должны быть подключены оба вывода.
12 — LOAD у MAX7219 и CS у MAX7221. У MAX7219 данные загружаются в сдвиговый регистр независимо от состояния сигнала LOAD. Запоминаются и поступают к дальнейшей обработке последние 16 принятых бит. Происходит это по переднему фронту сигнала LOAD (то есть только в момент переключения сигнала LOAD из 0 в 1). У MAX7221 данные загружаются в приёмный сдвиговый регистр только когда сигнал CS находится в состоянии низкого уровня (то есть только когда микросхема «выбрана», если говорить в терминах интерфейса SPI). Запоминаются и поступают к обработке также последние 16 принятых бит, происходит это также по переднему фронту сигнала CS.
13 — CLK. Вход тактирования. Как я уже сказал, микросхемы совместимы с SPI Mode 0, т.е. в отсутствии передачи на линии тактирования низкий уровень, по переднему фронту сигнала CLK происходит считывание данных со входа, по заднему — сдвиг (подробнее о том, как это работает — почитайте теорию SPI по ссылке в начале статьи).
14-17, 20-23 — SEG A-SEG G, DP. Выводы для подключения сегментов семисегментных индикаторов. В MAX7219 эти линии при отключении подтягиваются к GND, а в MAX7221 переходят в высокоомное состояние (в Z-состояние).
18 — ISET. К этому выводу подключается резистор (вторая нога резистора — к плюсу), позволяющий задавать пиковый ток сегмента и таким образом устанавливать яркость свечения сегментов. Минимальное сопротивление этого резистора должно быть 9,53 кОм, что примерно соответствует току сегмента 40мА. Ток, текущий через ISET номинально в 100 раз меньше пикового тока сегмента. Из даташита совершенно непонятно, одинаково ли падение напряжения на этом резисторе, но если считать, что оно одинаково, то это даст такую формулу для расчёта резистора: R=9,53*40/Ipk, где Ipk — требуемый пиковый ток сегмента. Подключив к этой ноге переменный резистор — можно регулировать яркость свечения сегментов.
19 — V+. Сюда подключается «+» питания.
24 — DOUT. Последовательный вывод данных. На этом выводе появляются принятые на входе DIN данные c задержкой в 16 с половиной тактов. Почему именно 16.5, а не 16 или 17? Потому что в SPI первая половина такта (после переднего фронта для MODE 0) — чтение, вторая половина такта (задний фронт для режима MODE 0) — сдвиг, а данные появятся на выходе только после сдвига. С помощью DOUT можно каскадно соединить несколько драйверов, при этом выход (DOUT) первого драйвера подключается ко входу (DIN) второго драйвера, выход второго — ко входу третьего и т.д.
Управляется MAX7219/MAX7221 через специальные регистры. Данные, как я уже говорил, загружаются в микросхему по SPI, в виде 16-ти битных пакетов (помните, на входе 16-ти битный сдвиговый регистр), старшим битом вперёд. В пакетах содержится адрес регистра, к которому обращаются, и данные, которые в него нужно загрузить.
Формат пакета:
Карта регистров:
Имя регистра | Адрес регистра | |||||
---|---|---|---|---|---|---|
bin | hex | |||||
D15-D12 | D11 | D10 | D9 | D8 | ||
No-op | XXXX | 0 | 0 | 0 | 0 | X0h |
Digit 0 | XXXX | 0 | 0 | 0 | 1 | X1h |
Digit 1 | XXXX | 0 | 0 | 1 | 0 | X2h |
Digit 2 | XXXX | 0 | 0 | 1 | 1 | X3h |
Digit 3 | XXXX | 0 | 1 | 0 | 0 | X4h |
Digit 4 | XXXX | 0 | 1 | 0 | 1 | X5h |
Digit 5 | XXXX | 0 | 1 | 1 | 0 | X6h |
Digit 6 | XXXX | 0 | 1 | 1 | 1 | X7h |
Digit 7 | XXXX | 1 | 0 | 0 | 0 | X8h |
Decode Mode | XXXX | 1 | 0 | 0 | 1 | X9h |
Intensity | XXXX | 1 | 0 | 1 | 0 | XAh |
Scan Limit | XXXX | 1 | 0 | 1 | 1 | XBh |
Shutdown | XXXX | 1 | 1 | 0 | 0 | XCh |
Display Test | XXXX | 1 | 1 | 1 | 1 | XFh |
После подачи питания все регистры сброшены и MAX7219 / MAX7221 находится в остановленном состоянии. Прежде чем использовать драйвер — сначала нужно его настроить (записать в нужные регистры нужные данные).
Данные, записанные в регистрах «Digit0»-«Digit7» определяют состояния сегментов соответствующих семисегментных индикаторов. В зависимости от выбранного режима («No decode», «BCD code B»), эти данные могут интерпретироваться двумя способами.
В режиме «No decode» каждый бит данных в соответствующем регистре «Digit X» определяет состояние одного из сегментов семисегментного индикатора «X» (0 — сегмент погашен, 1 — сегмент горит). Карта сегментов и соответствующие им биты указаны на рисунке справа.
В режиме «BCD code B» 7 младших бит данных, записанных в регистре «Digit X», кодируют отображаемый на семисегментном индикаторе символ, в соответствии с таблицей ниже, а старший бит данных кодирует состояние сегмента DP (0 — сегмент погашен, 1 — сегмент горит).
Таблица кодировки режима «BCD code B»:
Символ | Данные в регистре Digit X | Состояние сегментов индикатора | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
D6-D4 | D3 | D2 | D1 | D0 | A | B | C | D | E | F | G | |
0 | XXX | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
1 | XXX | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
2 | XXX | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
3 | XXX | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
4 | XXX | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
5 | XXX | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
6 | XXX | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
7 | XXX | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
8 | XXX | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
9 | XXX | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
— | XXX | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
E | XXX | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 |
H | XXX | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 |
L | XXX | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
P | XXX | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 |
пусто | XXX | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Режим выбирается индивидуально для каждого из регистров «Digit 0» — «Digit 7», установкой в 0 («No decode») или 1 («BCD code B») соответствующего бита регистра «Decode Mode».
Данные в регистре «Intensity» определяют средний ток сегмента (в долях от пикового тока, заданного резистором на ноге «ISET») в соответствии с таблицей ниже:
Доля от Ipk | D4 — D7 | D3 | D2 | D1 | D0 | HEX код | |
---|---|---|---|---|---|---|---|
MAX7219 | MAX7221 | ||||||
1/32 | 1/16 | XXXX | 0 | 0 | 0 | 0 | X0h |
3/32 | 2/16 | XXXX | 0 | 0 | 0 | 1 | X1h |
5/32 | 3/16 | XXXX | 0 | 0 | 1 | 0 | X2h |
7/32 | 4/16 | XXXX | 0 | 0 | 1 | 1 | X3h |
9/32 | 5/16 | XXXX | 0 | 1 | 0 | 0 | X4h |
11/32 | 6/16 | XXXX | 0 | 1 | 0 | 1 | X5h |
13/32 | 7/16 | XXXX | 0 | 1 | 1 | 0 | X6h |
15/32 | 8/16 | XXXX | 0 | 1 | 1 | 1 | X7h |
17/32 | 9/16 | XXXX | 1 | 0 | 0 | 0 | X8h |
19/32 | 10/16 | XXXX | 1 | 0 | 0 | 1 | X9h |
21/32 | 11/16 | XXXX | 1 | 0 | 1 | 0 | XAh |
23/32 | 12/16 | XXXX | 1 | 0 | 1 | 1 | XBh |
25/32 | 13/16 | XXXX | 1 | 1 | 0 | 0 | XCh |
27/32 | 14/16 | XXXX | 1 | 1 | 0 | 1 | XDh |
29/32 | 15/16 | XXXX | 1 | 1 | 1 | 0 | XEh |
31/32 | 15/16 | XXXX | 1 | 1 | 1 | 1 | XFh |
В регистре «Scan Limit» можно выбрать обслуживаемые драйвером семисегментные индикаторы. Они определяются четырьмя младшими битами загруженного в этот регистр байта. Количество обслуживаемых драйвером индикаторов связано с их частотой обновления. Если задействованы все 8 семисегментных индикаторов, то частота обновления составляет 800 Гц, если меньше, то 8*800/N (N — количество задействованных индикаторов). Поскольку количество обслуживаемых индикаторов влияет на яркость, то не рекомендуется показывать пустые старшие символы простым отключением их от обслуживания в регистре «Scan Limit».
Таблица (обслуживаемые индикаторы, в зависимости от значения в регистре «Scan Limit»):
Номера обслуживаемых индикаторов | Данные в регистре «Scan Limit» | ||||
---|---|---|---|---|---|
D3 — D7 | D2 | D1 | D0 | HEX | |
0 | XXXXX | 0 | 0 | 0 | X0h |
0,1 | XXXXX | 0 | 0 | 1 | X1h |
0,1,2 | XXXXX | 0 | 1 | 0 | X2h |
0,1,2,3 | XXXXX | 0 | 1 | 1 | X3h |
0,1,2,3,4 | XXXXX | 1 | 0 | 0 | X4h |
0,1,2,3,4,5 | XXXXX | 1 | 0 | 1 | X5h |
0,1,2,3,4,5,6 | XXXXX | 1 | 1 | 0 | X6h |
0,1,2,3,4,5,6,7 | XXXXX | 1 | 1 | 1 | X7h |
Регистр «Display test» позволяет провести тестирование исправности сегментов всех подключенных семисегментных индикаторов. При установки младшего бита этого регистра в 1 — драйвер включает все сегменты всех подключенных индикаторов. Чтобы прекратить тест и вернуться в нормальное состояние — нужно записать в младший бит регистра «Display test» ноль.
Регистр «No-op» используется при каскадном подключении драйверов. Для того, чтобы обратиться, например, к третьему драйверу в цепочке, не влияя на работу первых двух, — нужно для первых двух обратиться к регистру «No-op». Поскольку адрес этого регистра равен нулю, то сделать это очень просто: сначала за 16 тактов отправляем данные для третьего регистра, потом устанавливаем линию данных в ноль и отщёлкиваем ещё 2 раза по 16 тактов. В результате первый отправленный пакет будет загружен в третий регистр, а следующие два пакета (загруженные в первый и второй регистры) будут иметь адрес ноль, то есть будут обращаться к регистру «No-op».
А теперь небольшой пример того, как к этим драйверам подключать семисегментные индикаторы. Вместо семисегментных индикаторов могут быть просто диоды (собственно, семисегментный индикатор с общим катодом — это и есть всего лишь восемь светодиодов, у которых объединены катоды). Схема подключения семисегментных индикаторов к драйверу:
Пример готовой платы (лицевая панель контроллера ICPCon) с пятью семисегментными индикаторами и драйвером MAX7219:
Вот и всё. Реализацию SPI на микроконтроллере можно посмотреть по ссылке ниже.
— Программа для контроллера SPI-шлюза.
Библиотека для семисегментного индикатора — chipenable.ru
Написал новый драйвер семисегментного индикатора. Он имеет следующие особенности:
— предназначен для микроконтроллеров AVR,
— легко интегрируется в готовый проект,
— может использоваться с компиляторами IAR, GCC, CodeVision,
— поддерживает подключение индикаторов через сдвиговые регистры,
— поддерживает подключение индикаторов через различные буферы,
— поддерживает индикаторы с общим катодом и с общим анодом,
— предоставляет возможность посегментной или поразрядной развертки,
— позволяет выводить на один индикатор несколько переменных,
— при стандартном подключении позволяет работать с 8-ю разрядами,
— при подключении через сдвиговые регистры — с 16 разрядами.
indicator.h — настройки параметров, прототипы функций
indicator.c — реализация функционала
compiler.h — файл обеспечивающий совместимость с несколькими компиляторами
spi.h, spi.c — драйвер spi, требуется только в случае использования соответствующего подключения.
1. Копируем все файлы драйвера в папку проекта.
2. Подключаем файлы indicator.c, spi.c к проекту внутри среды разработки.
3. Инклюдим заголовочный файл indicator.h к сишному файлу, в котором будут использоваться функции для работы с индикатором.
4. Настраиваем заголовочный файл indicator.h
5. Прописываем в код вызов пользовательских функций
Настройка конфигурации включает в себя следующие шаги:
Установка количества разрядов семисегментного индикатора
#define IND_AMOUNT_NUM 8
Для стандартной схемы включения и схемы с двумя сдвиговыми регистрами может принимать значение от 1 до 8. Для схемы с тремя сдвиговыми регистрами от 1 до 16.
Установка типа подключения семисегментного индикатора
#define IND_SPI_CONNECTION
Если используется подключение через сдвиговые регистры с управлением по SPI, то этот макрос трогать не нужно. Если используется стандартное подключение (без SPI), макрос нужно закомментировать.
Установка типа развертки
#define IND_SCAN_SEGMENT
Традиционно для вывода информации на семисегментный индикатор используется динамический метод, при котором каждый разряд или сегмент индикатора засвечивается на определенный промежуток времени с частотой незаметной для человеческого глаза.
Можно реализовать динамическую индикацию двумя способами — поочередно засвечивая разряды индикатора или поочередно засвечивая один из сегментов всех разрядов сразу. Первый метод реализуется более простым кодом, однако при большом количестве разрядов, требует высокой частоты смены разрядов и, соответственно, высокого тока засветки. Второй метод всегда будет иметь одну и ту же частоту обновления, поскольку количество сегментов индикатора остается одинаковым вне зависимости от количества его разрядов. Второй метод предпочтительней использовать при количестве разрядов в индикаторе больше 8.
Если закомментировать данный макрос, будет реализована поразрядная индикация, если оставить, то посегментная.
Выбор активного уровня сегментов
#define IND_ACTIVE_LEVEL_SEG 0
Это логический уровень, который нужно выставить на выводе микроконтроллера (или сдвигового регистра), чтобы один сегмент индикатора засветился. В зависимости от типа семисегментного индикатора (общий катод, общий анод) и схемы его включения (прямая, через инвертирующий буфер), уровень напряжения, требуемый для засветки одного сегмента, может быть или нулем или единицей.
Выбор активного уровня разрядов
#define IND_ACTIVE_LEVEL_DIG 0
Это логический уровень, который нужно выставить на выводе микроконтроллера (или сдвигового регистра), чтобы один разряд индикатора засветился. В зависимости от типа семисегментного индикатора (общий катод, общий анод) и схемы его включения (прямая, через инвертирующий буфер), уровень напряжения, требуемый для засветки одного разряда, может быть или нулем, или единицей.
Например, для зажигания сегментов индикатора с общим катодом, нужно на выводы сегментов подать единицу, а на вывод разряда логический ноль. Сегменты обычно подключают напрямую к микроконтроллеру, поэтому активный уровень сегментов будет 1. Разряды индикатора обычно подключают через транзистор, открывающийся при подаче логической единицы на базу. Таким образом, активный уровень разрядов будет тоже 1. (Если разряд индикатора подключить к микроконтроллеру напрямую, то активный уровень разряда будет 0.)
Установка порта, к которому подключены сегменты индикатора
#define IND_PORT_SEG PORTC
#define IND_DDR_SEG DDRC
Если используется подключение через сдвиговые регистры, эти настройки игнорируются.
Установка порта, к которому подключены разряды индикатора
#define IND_PORT_DIG PORTD
#define IND_DDR_DIG DDRD
Если используется подключение через сдвиговые регистры, эти настройки игнорируются.
Установка регистров к которым подключены сегменты и разряды индикатора
#define IND_SHIFT_REG_SEG 2
#define IND_SHIFT_REG_DIG1 1
#define IND_SHIFT_REG_DIG2 0
Сдвиговый регистр, подключенный непосредственно к микроконтроллеру имеет следующие значение: при использовании двух регистров — 1, при использовании трех — 2. Сдвиговый регистр, подключенный последним каскадом всегда имеет значение — 0.
Установка выводов, к которым подключены разряды семисегментного индикатора
#define IND_NUM1 0
#define IND_NUM2 1
#define IND_NUM3 2
#define IND_NUM4 3
#define IND_NUM5 0
#define IND_NUM6 0
#define IND_NUM7 0
#define IND_NUM8 0#define IND_NUM9 0
#define IND_NUM10 1
#define IND_NUM11 2
#define IND_NUM12 3
#define IND_NUM13 0
#define IND_NUM14 0
#define IND_NUM15 0
#define IND_NUM16 0
Если используется традиционное подключение, номера соответствуют разрядам порта микроконтроллера и могут принимать значения от 0 до 7, при этом макросы IND_NUM9 — IND_NUM16 игнорируются. Если используется подключение через сдвиговые регистры, номера соответствуют выходам сдвигового регистра и могут принимать значения от 0 до 7.
Установка выводов, к которым подключены сегменты индикатора
#define IND_A 0
#define IND_B 1
#define IND_C 2
#define IND_D 3
#define IND_E 4
#define IND_F 5
#define IND_G 6
#define IND_COM 7
Если используется традиционное подключение, номера соответствуют разрядам порта микроконтроллера. Если используется подключение через сдвиговые регистры, номера соответствуют выходам сдвигового регистра. В обоих случаях диапазон возможных значений от 0 до 7.
Драйвер включает в себя четыре пользовательские функции.
void IND_Init(void) — функция инициализации. Настраивает порты ввода вывода, инициализирует внутренние переменные и SPI модуль микроконтроллера AVR, если он используется. Эта функция должна вызываться первой, например, в начале main`a.
void IND_Output(uint16_t value, uint8_t comma) — эта функция разделяет 16-и разрядное число на разряды, преобразует по таблице перекодировке и записывает в буфер. В дальнейшем его содержимое используется при обновлении данных на индикаторе. Число отображается на индикаторе, начиная с первого разряда.
Также эта функция принимает номер разряда, в котором будет гореть десятичная точка.
void IND_OutputFormat(uint16_t value, uint8_t comma, uint8_t position, uint8_t amount) — эта функция аналогична предыдущей, но может выводить числа в произвольные разряды семисегментного индикатора. Для этого функции передаются два параметра: position — начальный разряд и amount — количество отображаемых цифр. Минимальное значение обоих переменных — 1. Данная функция позволяет использовать один большой индикатор для отображения нескольких переменных.
void IND_Update(void) — функция обновляющая информацию на индикаторе. Эта функция должна периодически вызываться с частотой > 25* N. Где N — количество разрядов или сегментов индикатора, в зависимости от типа развертки. Вызов этой функции можно поместить в прерывание какого-нибудь таймера.
Тестовые проекты написаны в IAR`е и AtmelStudio6. Для проверки кода использовалась макетная плата и проект в Proteus`e. В Proteus`e индикаторы подключены напрямую к микроконтроллеру и сдвиговым регистрам с целью упрощения схемы. Использовать такую схему в реальности нельзя. В зависимости от выбранной конфигурации драйвера в Proteus`e будет работать один из индикаторов.
IND_driver_IAR.rar
IND_driver_AS6.rar
IND_driver_CV.rar
IND_driver_Proteus.rar
IND_driver.rar
Управление 7-сегментным дисплеем с использованием 7-сегментного драйвера BCD IC (CD4511)
Существует множество ИС, доступных для управления 7-сегментным дисплеем, например IC 4026, 4033 и т.д., и мы рассмотрели управление 7-сегментным дисплеем с использованием 4026 и 4033 В этом руководстве мы собираемся использовать 7-сегментный дисплей с помощью IC 4511 . Эта микросхема CD4511 IC в основном представляет собой 7-сегментный декодер / драйвер BCD в IC , с помощью которого вы можете преобразовать двоичное число в десятичное на 7-сегментном дисплее.Например, для печати числа «2» на 7-сегментном дисплее мы дадим 0010 входам (A, B, C, D) IC4511, аналогично мы можем вывести десятичное число 0-9 на одном 7-сегментном дисплее. Мы можем отображать десятичное число без использования этого набора микросхем, но тогда нам понадобится еще 3 контакта, и схема будет сложной, для сохранения вывода мы используем эту микросхему.
IC 4511 имеет несколько входных контактов, называемых BCD . Нам просто нужно сделать эти входы BCD высоким или низким в соответствии с кодом BCD этого десятичного числа, и мы получим десятичное число на дисплее.Например: если вы хотите отобразить «4», двоичный код четырех — 0100, поэтому мы дадим 0,1,0,0 входам D, C, B, A соответственно и получим десятичное число «4», отображаемое на 7-сегментный.
Необходимые компоненты
- CD4511 7-сегментный драйвер IC
- 7-сегментный дисплей (общий катод)
- Кнопки
- Резистор (1к, 550 Ом)
- напряжение питания 5В / 9В
- Соединительные провода
- Макет
Принципиальная схема
В этой схеме BCD-7-сегментного драйвера мы передаем вход через кнопки как LOW или HIGH на контакты 1, 2, 6 и 7.Контакт 3 (проверка лампы) напрямую подключен к 5В, используемому для проверки светодиодов. Используя этот вывод, мы можем включить все светодиоды дисплея, чтобы протестировать 7-сегментный дисплей.
Контакт 4 из 4511, который является пустым входным контактом, используется для выключения всех светодиодов дисплея, мы не используем этот контакт в этой схеме. Мы можем выключить все светодиоды, используя этот пин. Контакт 5 подключен к земле, поскольку мы используем контакт для стробирования выхода. Контакт 16 подключен к источнику питания, а контакт 8 подключен к земле.Остальные контакты 9, 10, 11, 12, 13, 14 и 15 подключены к 7-сегментному дисплею.
CD4511 7-сегментный драйвер IC
CD4511 — это ИС драйвера декодера с двоично-десятичной кодировкой для 7-сегментного защелки, сформированная с помощью логики КМОП и биполярных транзисторных выходных устройств NPN на неподвижной конструкции. Эта ИС используется там, где нам нужно управлять дисплеями с общим катодом, такими как 7-сегментный дисплей, флуоресцентный дисплей низкого напряжения и дисплей с лампой накаливания. Он имеет высокий выходной ток до 25 мА, имеет тест лампы и способность гашения для тестирования дисплея.Диапазон входных напряжений постоянного тока составляет от 3 до 18 В с диапазоном нормальной рабочей температуры от -40 ° C до + 85 ° C.
Схема контактов
Конфигурация контактов
Контактный № | Имя контакта | Описание |
1,2,6,7 | B, C, D, A | BCD вход IC |
3 | Тест дисплея / Тест лампы | Для проверки дисплея |
4 | Пустой ввод | Для отключения яркости дисплея |
5 | Магазин | Сохранение или стробирование BCD-кода |
8 | Земля | Земля |
9,10,11,12,13,14,15 | д, д, в, б, а, г, ж | 7-сегментные выходы |
16 | Vcc | Положительный вход питания |
7-сегментный дисплей
Семисегментный дисплей (SSD) — широко используемый электронный дисплей для отображения десятичных чисел от 0 до 9.Чаще всего они используются в электронных устройствах, таких как цифровые часы, таймеры и калькуляторы, для отображения числовой информации. Как следует из названия, он состоит из семи различных светящихся сегментов, которые расположены таким образом, что он может формировать числа от 0 до 9, отображая различные комбинации сегментов. Он также может формировать некоторые алфавиты, такие как A, B, C, H, F, E и т. Д. Подробнее о 7-сегментном дисплее можно узнать здесь.
7-сегментные дисплеи являются одними из самых простых устройств отображения для отображения чисел и символов.Как показано на приведенном выше изображении 7-сегментного дисплея, он состоит из 8 светодиодов, каждый из которых используется для освещения одного сегмента устройства, а 8 светодиодов -го используется для освещения точки на 7-сегментном дисплее. Мы можем обозначать каждый сегмент как СТРОКА, так как мы видим, что в блоке 7 строк, которые используются для отображения числа / символа. Мы можем ссылаться на каждый сегмент «a, b, c, d, e, f, g», а для символа точки мы будем использовать «h». Есть 10 контактов, в которых 8 контактов используются для обозначения a, b, c, d, e, f, g и h / dp, два средних контакта являются общим анодом / катодом всех светодиодов.Эти общие анод / катод закорочены внутри, поэтому нам нужно подключить только один вывод COM.
Есть два типа 7-сегментных дисплеев: с общим анодом и с общим катодом:
Общий катод: В этом случае все отрицательные клеммы (катод) всех 8 светодиодов соединены вместе (см. Диаграмму ниже) и обозначены как COM. И все положительные клеммы остаются в покое.
Общий анод: В нем все положительные клеммы (аноды) всех 8 светодиодов соединены вместе, называемые COM.И все отрицательные термики остаются в покое.
Как отображать числа на 7-сегментном дисплее с помощью двоичного кода?
Если мы хотим отобразить цифру «0» на 7-сегментном дисплее с общим катодом, то нам нужно зажечь все светодиоды, кроме светодиода, принадлежащего линии «g» (см. Схему 7-сегментных контактов выше, поэтому нам нужен битовая комбинация 00111111. Аналогично отображению «1» нам нужно зажечь светодиоды, связанные с b и c, поэтому битовая комбинация для этого будет 00000110.BCD-код для обоих типов дисплея с общим катодом и общим анодом приведен в таблице ниже:
Отображаемая цифра | BCD код (A B C D) | Общий анод (h g f e d c b a) | Общий катод (h g f e d c b a) |
0 | 0000 | 11000000 | 00111111 |
1 | 0001 | 11111001 | 00000110 |
2 | 0010 | 10100100 | 01011011 |
3 | 0011 | 10110000 | 01001111 |
4 | 0100 | 10011001 | 01100110 |
5 | 0101 | 10010010 | 01101101 |
6 | 0110 | 10000010 | 01111101 |
7 | 0111 | 11111000 | 00000111 |
8 | 1000 | 10000000 | 01111111 |
9 | 1001 | 10011000 | 01100111 |
Схема декодирования BCD в 7 сегментов с IC 4511:
Изначально на дисплее будет отображаться ноль, поскольку кнопки подключены к понижающим резисторам, и на выходе выдает НИЗКИЙ уровень, когда ни одна кнопка не нажата.Итак, чтобы получить какое-либо конкретное десятичное число, вы просто следите за таблицей, и вы узнаете из 4-х кнопок, которые вам нужно нажать для отображения конкретного числа. Нажатие любой кнопки даст высокий вход на соответствующий вывод 4511 и, соответственно, десятичное число будет отображаться на 7-сегментном. Вы можете отображать десятичные числа от 0 до 9 на одном 7-сегментном дисплее.
Отображение десятичного числа | BCD код для IC4511 | Кнопки | |||
Д | К | Б | А | ||
0 | 0000 | Низкая | Низкая | Низкая | Низкая |
1 | 0001 | Низкая | Низкая | Низкая | Высокая |
2 | 0010 | Низкая | Низкая | Высокая | Низкая |
3 | 0011 | Низкая | Низкая | Высокая | Высокая |
4 | 0100 | Низкая | Высокая | Низкая | Низкая |
5 | 0101 | Низкая | Высокая | Низкая | Высокая |
6 | 0110 | Низкая | Высокая | Высокая | Низкая |
7 | 0111 | Низкая | Высокая | Высокая | Высокая |
8 | 1000 | Высокая | Низкая | Низкая | Низкая |
9 | 1001 | Высокая | Низкая | Низкая | Высокая |
Полная работа схемы показана на видео , приведенном ниже.
.Интерфейс SimVimCockpit — 7-сегментные дисплеи
Текущая версия SimVImCockpit напрямую поддерживает наиболее часто используемые 7-сегментные модули дисплея на основе драйверов MAX7219, TM1637 и регистров сдвига (HC595), а также пользовательские дисплеи, собранные на 16-битных драйверах светодиодов или 8-битных регистрах сдвига. Количество 7-сегментных индикаторов (цифр) на каждом дисплее может быть любым от 1 до 8.
В целом, вы можете подключить к плате контроллера SimVimCockpit любое количество дисплеев разного типа и размера, которое может вам понадобиться в вашей кабине.Это зависит от метода подключения, который вы будете использовать (прямое, расширенное или комбинированное), все подробности указаны ниже.
Сначала ознакомьтесь с техническими деталями и вариантами подключения различных типов дисплеев на этой странице Технического руководства.
Мультиплексное соединение
Вы можете использовать выходной мультиплексор для управления 16 семисегментными дисплеями, используя всего один вывод контроллера.
Перед назначением дисплеев вам необходимо «подключить» выходное расширение в конфигураторе — просто щелкните пустой контакт, который вы хотите использовать в качестве общего выходного сигнала для всех дисплеев, и нажмите кнопку «Output Multiplexer».Будет назначен мультиплексор, после чего вы сможете добавить (подключить) дисплей к любому из 16 выходов MUX:
Подключите выходную плату мультиплексора, как описано, к 4 адресным линиям, линии SIG (S) и назначенной на выводе управления выходом конфигуратора. Драйвер светодиодного дисплеяMAX7219 и драйвер светодиодного дисплея TM1637
Каждый дисплейный модуль, построенный на драйвере MAX7219, имеет 3 входных сигнала управления (помимо линий питания) — CLK, DIN («D») и CS («L»).
Вход CLK подключен к одному из 16 выходов мультиплексора, номер которого вы присвоили в конфигураторе (0-15).
Два других сигнальных входа — «DIN» и «CS» — должны быть подключены к соответствующим общим сигнальным линиям — выходным сигналам «D» (контакт № 28) и «L» (контакт № 27).
, построенный на драйвере TM1637, имеет 2 входа управляющего сигнала (кроме линий питания) — CLK и DIO. Вход «CLK» подключается к назначенному выходу мультиплексора, вход «DIO» подключается к сигнальной линии «T» (контакт №29), а не к линии «D»!
Дисплей собран на драйверах светодиодов DM13A или регистрах сдвига
Это удобный способ сделать любой 7-сегментный дисплей с любым количеством цифр и размером цифр.С одним драйвером можно сделать дисплей 2-значным, с двумя — 4-значным и т. Д. Подробнее об индикаторах, собранных на драйверах DM13A. Все подключения такие же, как для драйвера MAX7219, указанного выше. Таким образом, вы можете использовать один мультиплексор для подключения до 16 дисплеев. Таким же образом вы можете использовать регистры сдвига 74HC595 вместо светодиодных драйверов (но драйверы предпочтительнее)
Опция: 8-канальный удлинитель
Чтобы увеличить количество 7-сегментных дисплеев или последовательных светодиодных индикаторов, которые расположены в какой-либо части вашей кабины, но вам не нужно больше 8 выходов, вы можете использовать 8-канальную коммутационную плату мультиплексора 74HC4051 (см. картина).
Примечание: если вы используете 8-битную плату мультиплексора, вам следует позаботиться о расположении сигнальных входов — оно немного отличается от 74HC4067. Все линии шины используются так же, как и для 74HC4067, за исключением одной адресной линии S3 — она не используется в 8-канальном мультиплексоре.
ПРИМЕЧАНИЕ: «понижающий» резистор, подключенный к CLK со значением ~ 1 … 3 кОм, используется для предотвращения случайного включения светодиодов при запуске или из-за помех между различными дисплеями, подключенными к одному мультиплексору (потому что пока выход мультиплексора не выбран, он остается в состоянии с высоким сопротивлением, и без резистора вход дисплея, подключенный к нему, очень чувствителен к помехам от окружающих сигналов).
Опция: прямое подключение
В случае, если вам нужно использовать всего несколько 7-сегментных дисплеев в вашей кабине, или вам нужно добавить еще один к назначенным мультиплексированным, вы можете использовать «прямое» соединение, без мультиплексора. Вход «CLK» в этом случае должен быть подключен к назначенному выводу контроллера (нет необходимости использовать понижающий резистор), остальные сигнальные входы (L, D) являются общими для всех устройств вывода (выводы 27,28).
Примечание: для прямого подключения можно использовать только 8 контактов с №30 по №37 на плате контроллера (это порт C с прямым управлением из соображений скорости).Вы можете назначить их в конфигураторе, все остальные контакты недоступны для прямого управления отображением.
Вот схема подключения MAX7219, то же самое для драйверов / регистров светодиодов. Для TM1637 просто подключите вход «DIN» к сигнальной линии «T»:
Не спрашивайте, возможно ли «шлейфовое подключение» модулей MAX7219. Вы можете подключить до 16 дисплеев к одному выходному выводу, используя один мультиплексор и линии общей шины адреса, как описано выше!
Конфигурация унифицирована для всех дисплеев, вам нужно только выбрать тип дисплея и некоторые дополнительные параметры.Все перечисленные параметры предварительно настроены для вывода в правильном формате с положением точки, количеством цифр и некоторыми предопределенными параметрами отображения.
Опции
Любой дисплей можно легко настроить для вывода более одного значения данных. Например, вы можете иметь 2 или 3 независимых данных на одном 8-значном дисплее. На картинке выше вы можете видеть напряжение на шине + нагрузка на шину на правом дисплее TM1637 и расстояние DME + время DME на верхнем дисплее MAX7219).
Для отображения значения данных в позиции, отличной от правой стороны дисплея, используйте опцию «Позиция», которая позволяет сдвинуть младший разряд влево. Просто введите необходимое значение смещения.
Чтобы вывести значение дополнительного параметра на тот же дисплей, вам нужно выбрать второй параметр, затем выбрать тот же номер вывода вывода дисплея, что и для первого параметра (используйте кнопку «Apeernd»), а затем введите номер позиции сдвига.
Варианты конфигурации
Пользовательские текстовые символы
Вы можете настроить 7-сегментный индикатор для отображения некоторого произвольного текста (как фиксированного текста или текста, отображаемого по условиям), используя эти 26 символов (вместе с цифрами и точкой):
Примечание: эта опция доступна начиная с вер.0.9.17 бета.
Примеры текста:
— «Ch» или «CH» (канал)— «Пр» или «Профи» (программирование ..)
— «Err» или «Error»
— Вы можете использовать верхнюю, среднюю или нижнюю строку (используя символы «~», «-«, «_»)
— С помощью символа «*» можно отобразить знак градуса (для температуры).
Текст может быть частью отображаемого значения параметра, сконфигурированным как смещенный текст и отображаться вместе со значением параметра, или он может отображаться в той же позиции, заменяя значение условием.
… будут добавлены примеры …. .Управление 7-сегментным дисплеем с помощью микроконтроллера PIC и 7-сегментного драйвера VINOD NATLA 11/07/2008. Примечания по применению.
Семисегментные светодиодные дисплеи
Семисегментные светодиодные дисплеи Николас Нойман 11/19/2010 Аннотация Семисегментные дисплеи — это электронные устройства отображения, которые используются как простой способ отображения десятичных чисел и как альтернатива более сложным
Дополнительная информацияБеспроводная камера безопасности
Техническое руководство для беспроводной камеры видеонаблюдения 14.12.2001 Содержание Стр. 1.Обзор 3 2. Сторона камеры 4 1. Камера 5 2. Датчик движения 5 3. PIC 5 4. Передатчик 5 5. Питание 6 3. Сторона компьютера 7 1. Приемник
Дополнительная информацияЛист данных коммутатора EB007-00-1
Техническое описание платы коммутатора EB007-00-1 Содержание 1. Об этом документе … 2 2. Общая информация … 3 3. Внешний вид платы … 4 4. Тестирование этого продукта … 5 5. Описание схемы … 6 Приложение 1 Принципиальная схема
Дополнительная информацияАналого-цифровые преобразователи
Аналого-цифровые преобразователи В этой презентации мы рассмотрим периферийные устройства аналого-цифрового преобразователя с микроконтроллерами среднего уровня PICmicro от Microchip.1 Аналого-цифровые преобразователи
Дополнительная информация3-значный счетчик и дисплей
ECE 2B Winter 2007 Lab # 7 7 3-значный счетчик и дисплей Эта последняя лабораторная работа объединяет многое из того, что мы сделали в наших лабораторных экспериментах в этом квартале, чтобы построить простую схему тахометра для измерения
Дополнительная информацияИспользование портов ввода-вывода PIC
EE2801 — Лекция 22 Использование портов ввода-вывода PIC EE2801-L22P01 Разнообразие доступных портов ввода-вывода Микроконтроллер PIC 16F874 имеет пять различных портов ввода-вывода, что составляет тридцать три из сорока процессоров
Дополнительная информацияСовет по развитию PICmicro tm
Совет по развитию PICmicro tm Заявление об отказе от ответственности Crownhill Associates в области интеллектуальных электронных устройств В соответствии с директивой EMC 89/336 / EEC, этот продукт не следует использовать за пределами классной комнаты или лаборатории
Дополнительная информацияКОМБИНАЦИОННЫЕ ЦЕПИ
КОМБИНАЦИОННЫЕ ЦЕПИ http: // www.tutorialspoint.com/computer_logical_organization/combinational_circuits.htm Авторские права tutorialspoint.com Комбинированная схема — это схема, в которой мы объединяем различные
Дополнительная информацияРуководство по эксплуатации, версия 1.1
4-битный двоичный счетчик пульсаций (счетчик вверх-вниз). Руководство по эксплуатации, версия 1.1. ISO 9001: 2000, компания 94-101, Electronic Complex Pardesipura, Indore- 452010, India Тел: 91-731-2570301/02, 4211100 Факс: 91- 731-
Дополнительная информацияКонтроль скорости внутривенного капания
Мониторинг скорости внутривенного капания Видьядхар В.Kamble, Prem C. Pandey, Chandrashekar P. Gadgil и Dinesh S. Choudhary Abstract Измеритель скорости капельного введения для контроля внутривенной инфузии разработан с использованием
Дополнительная информацияAVR ET-BASE ATmega64 / 128
ET-BASE AVR ATmega64 / 128 ET-BASE AVR ATmega64 / 128, который является семейством платных микроконтроллеров AVR от ATMEL, использует MCU No. ATmega64 и ATmega128 64PIN. Плата ET-BASE AVR ATmega64 / 128 использует ресурсы MCU на
Дополнительная информацияEasyPIC4 Руководство пользователя
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ И АППАРАТНОЕ ОБЕСПЕЧЕНИЕ ДЛЯ ВСТРОЕННОГО МИРА MikroElektronika — Книги — Компиляторы Руководство пользователя ПЛАТА ДЛЯ РАЗРАБОТКИ МИКРОЧИПОВ PIC 3in1 mikro ВНУТРЕННИЙ ОТЛАДИТЕЛЬ USB 2.0 СХЕМА ПРОГРАММИРОВАНИЯ с
Дополнительная информацияРаздел 9. Порты ввода / вывода
Порты ввода-вывода M Раздел 9. Порты ввода-вывода ОСНОВНОЕ В этом разделе руководства содержатся следующие основные темы: 9.1 Введение … 9-2 9.2 PORTA и регистр TRISA … 9-4 9.3 PORTB и регистр TRISB … 9-6
Дополнительная информацияОсновы цифровых технологий
Основы цифровых технологий Десятое издание Глава 1 Флойда, 2009 г., Pearson Education, Upper 2008 Pearson Saddle River, Education NJ 07458.Все права защищены. Аналоговые величины. Наиболее естественные величины, которые мы видим.
. Дополнительная информацияВстроенное программирование на C
Микропроцессоры и микроконтроллеры Встроенное программирование на C EE3954 Маартен Юйт де Хааг, Тим Бамбек EmbeddedC.1 Ссылки MPLAB XC8 C Compiler User’s Guide EmbeddedC.2 Assembly vs C C Code High-level
Дополнительная информацияEC313 — Пример конечного автомата VHDL
EC313 — Пример конечного автомата VHDL Один из лучших способов научиться программировать — это увидеть рабочий пример.Ниже приведен пример колеса стола рулетки. По сути, рулетка — это игра, в которой выбираются случайные
Дополнительная информацияРуководство пользователя информационной доски
Мы здесь только для вас! Sure Electronics Руководство пользователя информационной панели матричного дисплея Название продукта Идентификатор продукта: Информационная панель матричного дисплея: DE-DP0 Версия продукта: Ver. Версия документа
Дополнительная информацияВведение в микроконтроллеры
Введение в микроконтроллеры Motorola M68HC11 Спецификации Ассемблер Язык программирования BUFFALO Темы обсуждения Микроконтроллеры M68HC11 Корпус и выводы Аккумуляторы Индексные регистры Специальные регистры
Дополнительная информацияИСПОЛЬЗОВАНИЕ РЕЖИМА ПРИОСТАНОВКИ НА USB-МЫШИ
ПРИМЕЧАНИЕ ПО ПРИЛОЖЕНИЮ ОБРАЩЕНИЕ С РЕЖИМОМ ПРИОСТАНОВКИ НА USB-МЫШИ, разработанное командой разработчиков микроконтроллеров ВВЕДЕНИЕ Все USB-устройства должны поддерживать режим ожидания.Режим ожидания позволяет устройствам перейти в режим пониженного энергопотребления
Дополнительная информацияHT6P20 2 Кодер 24 OTP
2 24 OTP Encoder Характеристики Рабочее напряжение: 2 В ~ 12 В Низкое энергопотребление Встроенному генератору требуется только 5 резисторов 0/2/4/8 выбираемых данных 2 24 максимального адреса и кодов данных Простой интерфейс с RF
Дополнительная информацияПРИМЕЧАНИЕ ПО ПРИМЕНЕНИЮ АН-812
ПРИМЕНЕНИЕ ПРИМЕЧАНИЕ One Technology Way P.O. Box 90 Norwood, MA 00-90, США Тел .: 7.9.700 Факс: 7 .. www.analog.com Схема загрузки интерфейса последовательного порта (SPI) на основе микроконтроллера, автор Альфредо Баррига ВВЕДЕНИЕ
Дополнительная информацияЛист данных светодиодной платы EB004-00-2
Спецификация платы светодиодов EB004-00-2 Содержание 1 Об этом документе … 2 2 Общая информация … 3 3 Внешний вид платы … 4 4 Тестирование этого продукта … 5 5 Описание схемы … 6 Приложение 1 Принципиальная схема Авторское право
Дополнительная информацияСинтезатор частоты с ФАПЧ
АНАЛОГОВАЯ И ТЕЛЕКОММУНИКАЦИОННАЯ ЭЛЕКТРОНИКА ЛАБОРАТОРНОЕ УПРАЖНЕНИЕ 4 Лаборатория 4: Синтезатор частоты с ФАПЧ 1.1 Цель Цели этого лабораторного упражнения: — Проверить поведение А и всей ФАПЧ — Найти захват
Дополнительная информация .7-сегментный дисплей — расположение выводов и способы его использования
Семисегментный дисплей (SSD) — широко используемый электронный дисплей для отображения десятичных чисел от 0 до 9. Они чаще всего используются в электронных устройствах, таких как цифровые часы, таймеры. и калькуляторы для отображения числовой информации. Как следует из названия, он состоит из семи различных светящихся сегментов, которые расположены таким образом, что он может формировать числа от 0 до 9, отображая различные комбинации сегментов.Он также может формировать некоторые алфавиты, такие как A, B, C, H, F, E и т. Д.
7-сегментные дисплеи являются одними из самых простых дисплеев для отображения чисел и символов. Как показано на приведенном выше изображении 7-сегментного дисплея , он состоит из 8 светодиодов, каждый светодиод используется для освещения одного сегмента устройства, а светодиод 8 -й используется для освещения точки на 7-сегментном дисплее. Мы можем обозначать каждый сегмент как СТРОКА, так как мы видим, что в блоке 7 строк, которые используются для отображения числа / символа.Мы можем ссылаться на каждый сегмент «a, b, c, d, e, f, g», а для символа точки мы будем использовать «h». Есть 10 контактов, в которых 8 контактов используются для обозначения a, b, c, d, e, f, g и h / dp, два средних контакта являются общим анодом / катодом всех светодиодов. Эти общие анод / катод закорочены внутри, поэтому нам нужно подключить только один вывод COM.
Распиновка 7-сегментного дисплея
Есть два типа 7-сегментных дисплеев: с общим анодом и с общим катодом:
Общий катод: В этом случае все отрицательные клеммы (катод) всех 8 светодиодов соединены вместе (см. Диаграмму ниже) и обозначены как COM.И все положительные клеммы остаются в покое.
Общий анод: В этом случае все положительные клеммы (аноды) всех 8 светодиодов соединены вместе и называются COM. И все отрицательные термики остаются в покое.
Как отображать числа на 7-сегментном дисплее?
Если мы хотим отобразить число «0», нам нужно зажечь все светодиоды, кроме светодиода, принадлежащего линии «g» (см. Схему выводов из 7 сегментов выше, поэтому нам нужен битовый шаблон 11000000.Аналогично отображению «1» нам нужно зажечь светодиоды, связанные с b и c, поэтому битовая комбинация для этого будет 11111001. Ниже приведена таблица для всех чисел при использовании 7-сегментного дисплея с общим анодом.
Цифра для отображения | ч г ф е д ц б а | Шестнадцатеричный код |
0 | 11000000 | C0 |
1 | 11111001 | F9 |
2 | 10100100 | A4 |
3 | 10110000 | B0 |
4 | 10011001 | 99 |
5 | 10010010 | 92 |
6 | 10000010 | 82 |
7 | 11111000 | F8 |
8 | 10000000 | 80 |
9 | 10010000 | 90 |
Чтобы узнать больше о 7-сегментных дисплеях, прочтите ниже руководства, в которых объясняются практические приложения для использования 7-сегментных дисплеев:
Взаимодействие 7-сегментного дисплея с микроконтроллером 8051
0-99 счетчик с микроконтроллером AVR
Digital Dice с использованием Arduino
.