Site Loader

Содержание

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, пять светодиодов на сегмент), разных цветов и с различным типом подключения — с общим катодом и с общим анодом. Чтобы покрыть использование всех этих типов пришлось посидеть над схемой и разводкой, которая давала бы возможность без изменения топологии печатной платы управлять разными индикаторами. Поискав вечерок в интернете мне не удалось найти универсальных решений или схем, что и стало поводом для написания данной статьи.

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

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

Приступим к деталям


Начнем с питания семисегментных индикаторов большого размера, где каждый сегмент представляет собой цепочку из нескольких последовательно включенных светодиодов. Такие дисплеи уже не получится зажечь «цифровыми» уровнями напряжения, так как падение на цепочке светодиодов больше этого значения. Конкретное значение указывается в даташите на дисплей, оно зависит от характеристик светодиодов, цвета и их количества и может варьироваться от 6 до 12 Вольт. Ток через каждый сегмент также превышает допустимые значения тока через отдельный пин для большинства контроллеров и составляет от 20 до 50 мА. Соответственно, нужно использовать напряжение 12 Вольт и коммутирующие ключи для управления сегментами и общими выводами. Также не стоит забывать о динамической индикации — последовательном переключении разрядов с частотой превышающей частоту восприятия глаза человека. Это позволяет значительно снизить энергопотребление практически без потери визуальной яркости дисплея.

Общее питание было решено брать от порта USB, как наиболее универсального стандарта на данный момент. После непродолжительного гугления я выбрал готовый модуль повышающего DC-DC преобразователя на МТ3608. Он компактный, дешевый (<0.5$), регулируемый, с достаточно высоким КПД — всё что нужно для наших целей. От резервного питания отказался, так как под рукой есть Интернет, где можно получить актуальную информацию в любой момент.

Питание цифровой части обеспечит линейный low-dropout стабилизатор LM1117-3.3, классическое решение для нетребовательных применений.

Теперь по транзисторным ключам.

Для управления индикатором с общим катодом на сегменты нужно подавать плюс питания, общий контакт, катод, подключить к земле. Для данных целей удобно использовать микросхемы источников тока (source drivers IC), как пример UDN2981. На картинке ниже подключение индикатора к драйверу и упрощенная схема одной ячейки для лучшего понимания пути прохождения тока. Стоит заметить, что в классической схеме должны быть токоограничивающие резисторы в цепи каждого сегмента, они упущены по причинам использования другого метода ограничения тока — МАХ7219 имеет изменять скважность управляющих импульсов, что в сумме с возможность регулировки напряжения питания индикаторов даст необходимый результат.


Для индикаторов с общим анодом — наоборот, общий контакт подключается к плюсу питания, а сегменты коммутируются на землю. В плане управления индикаторы с общим анодом более простые, так как не требуют коммутации высокого напряжения, по этой причине они более распространены. Для управления сегментами удобно использовать микросхему-массив составных транзисторов Дарлингтона (Darlington Transistor Arrays), например всеми любимую ULN2803.

Значительным преимуществом перед UDN2981 является стоимость, которая в разы меньше. На картинке ниже подключение индикатора к драйверу и упрощенная схема одной ячейки.


Можно заметить, что верхние части схем очень схожи. Пара драйверов UDN2981 и ULN2803 подобрана неспроста. Относительно ножек вход/выход они pin-to-pin совместимы. Это дает возможность сделать универсальное посадочное место на плате добавив всего несколько перемычек под запайку для ножек питания. Бинго!

Чтобы упростить задачу динамической индикации я решил не изобретать велосипед, не городить 595-е сдвиговые регистры, а взять надежное и проверенное решение — специализированный драйвер семисегментного дисплея MAX7219. Эта микросхема умеет хранить во внутренней памяти до восьми цифр и самостоятельно коммутировать разряды с заранее установленной яркостью. По этой причине и не нужны резисторы последовательно с каждым сегментом. Управляется драйвер по шине SPI. Как по мне, микросхема имеет всего один недостаток — высокую стоимость. Имела. Пришли китайцы и наклепали полный функциональный аналог со стоимостью в несколько центов. Название такое же, правда маркировка отличается, отсутствует оригинальный логотип Maxim. В работе отличий не замечено, временные диаграммы такие же, не греется, отказов пока не было. Но для ответственных применений все-таки рекомендую ставить дорогой оригинал.


Вот такой набор 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
 

$regfile = «attiny2313.dat»
$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В /
  • Соединительные провода
  • Макет

Принципиальная схема

7 segment display driver circuit diagram using IC4511

В этой схеме BCD-7-сегментного драйвера мы передаем вход через кнопки как LOW или HIGH на контакты 1, 2, 6 и 7.Контакт 3 (проверка лампы) напрямую подключен к 5В, используемому для проверки светодиодов. Используя этот вывод, мы можем включить все светодиоды дисплея, чтобы протестировать 7-сегментный дисплей.

Контакт 4 из 4511, который является пустым входным контактом, используется для выключения всех светодиодов дисплея, мы не используем этот контакт в этой схеме. Мы можем выключить все светодиоды, используя этот пин. Контакт 5 подключен к земле, поскольку мы используем контакт для стробирования выхода. Контакт 16 подключен к источнику питания, а контакт 8 подключен к земле.Остальные контакты 9, 10, 11, 12, 13, 14 и 15 подключены к 7-сегментному дисплею.

7-segment display driver circuit hardware implementation

CD4511 7-сегментный драйвер IC

CD4511 — это ИС драйвера декодера с двоично-десятичной кодировкой для 7-сегментного защелки, сформированная с помощью логики КМОП и биполярных транзисторных выходных устройств NPN на неподвижной конструкции. Эта ИС используется там, где нам нужно управлять дисплеями с общим катодом, такими как 7-сегментный дисплей, флуоресцентный дисплей низкого напряжения и дисплей с лампой накаливания. Он имеет высокий выходной ток до 25 мА, имеет тест лампы и способность гашения для тестирования дисплея.Диапазон входных напряжений постоянного тока составляет от 3 до 18 В с диапазоном нормальной рабочей температуры от -40 ° C до + 85 ° C.

Схема контактов

IC 4511 Pin Diagram

Конфигурация контактов

Контактный №

Имя контакта

Описание

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 Segment Display Pinout

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.И все отрицательные термики остаются в покое.

Types of seven segment displays

Как отображать числа на 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

Высокая

Низкая

Низкая

Высокая

7 segment display driver circuit in action

Полная работа схемы показана на видео , приведенном ниже.

.

Интерфейс 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. Примечания по применению.

Семисегментные светодиодные дисплеи

Seven-Segment LED Displays Семисегментные светодиодные дисплеи Николас Нойман 11/19/2010 Аннотация Семисегментные дисплеи — это электронные устройства отображения, которые используются как простой способ отображения десятичных чисел и как альтернатива более сложным

Дополнительная информация

Беспроводная камера безопасности

Wireless Security Camera Техническое руководство для беспроводной камеры видеонаблюдения 14.12.2001 Содержание Стр. 1.Обзор 3 2. Сторона камеры 4 1. Камера 5 2. Датчик движения 5 3. PIC 5 4. Передатчик 5 5. Питание 6 3. Сторона компьютера 7 1. Приемник

Дополнительная информация

Лист данных коммутатора EB007-00-1

Switch board datasheet EB007-00-1 Техническое описание платы коммутатора EB007-00-1 Содержание 1. Об этом документе … 2 2. Общая информация … 3 3. Внешний вид платы … 4 4. Тестирование этого продукта … 5 5. Описание схемы … 6 Приложение 1 Принципиальная схема

Дополнительная информация

Аналого-цифровые преобразователи

Analog-to-Digital Converters Аналого-цифровые преобразователи В этой презентации мы рассмотрим периферийные устройства аналого-цифрового преобразователя с микроконтроллерами среднего уровня PICmicro от Microchip.1 Аналого-цифровые преобразователи

Дополнительная информация

3-значный счетчик и дисплей

3-Digit Counter and Display ECE 2B Winter 2007 Lab # 7 7 3-значный счетчик и дисплей Эта последняя лабораторная работа объединяет многое из того, что мы сделали в наших лабораторных экспериментах в этом квартале, чтобы построить простую схему тахометра для измерения

Дополнительная информация

Использование портов ввода-вывода PIC

Using The PIC I/O Ports EE2801 — Лекция 22 Использование портов ввода-вывода PIC EE2801-L22P01 Разнообразие доступных портов ввода-вывода Микроконтроллер PIC 16F874 имеет пять различных портов ввода-вывода, что составляет тридцать три из сорока процессоров

Дополнительная информация

Совет по развитию PICmicro tm

PICmicro tm Development Board Совет по развитию PICmicro tm Заявление об отказе от ответственности Crownhill Associates в области интеллектуальных электронных устройств В соответствии с директивой EMC 89/336 / EEC, этот продукт не следует использовать за пределами классной комнаты или лаборатории

Дополнительная информация

КОМБИНАЦИОННЫЕ ЦЕПИ

COMBINATIONAL CIRCUITS КОМБИНАЦИОННЫЕ ЦЕПИ http: // www.tutorialspoint.com/computer_logical_organization/combinational_circuits.htm Авторские права tutorialspoint.com Комбинированная схема — это схема, в которой мы объединяем различные

Дополнительная информация

Руководство по эксплуатации, версия 1.1

Operating Manual Ver.1.1 4-битный двоичный счетчик пульсаций (счетчик вверх-вниз). Руководство по эксплуатации, версия 1.1. ISO 9001: 2000, компания 94-101, Electronic Complex Pardesipura, Indore- 452010, India Тел: 91-731-2570301/02, 4211100 Факс: 91- 731-

Дополнительная информация

Контроль скорости внутривенного капания

Monitoring of Intravenous Drip Rate Мониторинг скорости внутривенного капания Видьядхар В.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 ET-BASE AVR ATmega64 / 128, который является семейством платных микроконтроллеров AVR от ATMEL, использует MCU No. ATmega64 и ATmega128 64PIN. Плата ET-BASE AVR ATmega64 / 128 использует ресурсы MCU на

Дополнительная информация

EasyPIC4 Руководство пользователя

EasyPIC4 User s Manual ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ И АППАРАТНОЕ ОБЕСПЕЧЕНИЕ ДЛЯ ВСТРОЕННОГО МИРА MikroElektronika — Книги — Компиляторы Руководство пользователя ПЛАТА ДЛЯ РАЗРАБОТКИ МИКРОЧИПОВ PIC 3in1 mikro ВНУТРЕННИЙ ОТЛАДИТЕЛЬ USB 2.0 СХЕМА ПРОГРАММИРОВАНИЯ с

Дополнительная информация

Раздел 9. Порты ввода / вывода

Section 9. I/O Ports Порты ввода-вывода M Раздел 9. Порты ввода-вывода ОСНОВНОЕ В этом разделе руководства содержатся следующие основные темы: 9.1 Введение … 9-2 9.2 PORTA и регистр TRISA … 9-4 9.3 PORTB и регистр TRISB … 9-6

Дополнительная информация

Основы цифровых технологий

Digital Fundamentals Основы цифровых технологий Десятое издание Глава 1 Флойда, 2009 г., Pearson Education, Upper 2008 Pearson Saddle River, Education NJ 07458.Все права защищены. Аналоговые величины. Наиболее естественные величины, которые мы видим.

. Дополнительная информация

Встроенное программирование на C

Embedded C Programming Микропроцессоры и микроконтроллеры Встроенное программирование на C EE3954 Маартен Юйт де Хааг, Тим Бамбек EmbeddedC.1 Ссылки MPLAB XC8 C Compiler User’s Guide EmbeddedC.2 Assembly vs C C Code High-level

Дополнительная информация

EC313 — Пример конечного автомата VHDL

EC313 - VHDL State Machine Example EC313 — Пример конечного автомата VHDL Один из лучших способов научиться программировать — это увидеть рабочий пример.Ниже приведен пример колеса стола рулетки. По сути, рулетка — это игра, в которой выбираются случайные

Дополнительная информация

Руководство пользователя информационной доски

Information Board User s Guide Мы здесь только для вас! Sure Electronics Руководство пользователя информационной панели матричного дисплея Название продукта Идентификатор продукта: Информационная панель матричного дисплея: DE-DP0 Версия продукта: Ver. Версия документа

Дополнительная информация

Введение в микроконтроллеры

Introduction to Microcontrollers Введение в микроконтроллеры Motorola M68HC11 Спецификации Ассемблер Язык программирования BUFFALO Темы обсуждения Микроконтроллеры M68HC11 Корпус и выводы Аккумуляторы Индексные регистры Специальные регистры

Дополнительная информация

ИСПОЛЬЗОВАНИЕ РЕЖИМА ПРИОСТАНОВКИ НА USB-МЫШИ

HANDLING SUSPEND MODE ON A USB MOUSE ПРИМЕЧАНИЕ ПО ПРИЛОЖЕНИЮ ОБРАЩЕНИЕ С РЕЖИМОМ ПРИОСТАНОВКИ НА USB-МЫШИ, разработанное командой разработчиков микроконтроллеров ВВЕДЕНИЕ Все USB-устройства должны поддерживать режим ожидания.Режим ожидания позволяет устройствам перейти в режим пониженного энергопотребления

Дополнительная информация

HT6P20 2 Кодер 24 OTP

HT6P20 2 24 OTP Encoder 2 24 OTP Encoder Характеристики Рабочее напряжение: 2 В ~ 12 В Низкое энергопотребление Встроенному генератору требуется только 5 резисторов 0/2/4/8 выбираемых данных 2 24 максимального адреса и кодов данных Простой интерфейс с RF

Дополнительная информация

ПРИМЕЧАНИЕ ПО ПРИМЕНЕНИЮ АН-812

AN-812 APPLICATION NOTE ПРИМЕНЕНИЕ ПРИМЕЧАНИЕ One Technology Way P.O. Box 90 Norwood, MA 00-90, США Тел .: 7.9.700 Факс: 7 .. www.analog.com Схема загрузки интерфейса последовательного порта (SPI) на основе микроконтроллера, автор Альфредо Баррига ВВЕДЕНИЕ

Дополнительная информация

Лист данных светодиодной платы EB004-00-2

LED board datasheet EB004-00-2 Спецификация платы светодиодов EB004-00-2 Содержание 1 Об этом документе … 2 2 Общая информация … 3 3 Внешний вид платы … 4 4 Тестирование этого продукта … 5 5 Описание схемы … 6 Приложение 1 Принципиальная схема Авторское право

Дополнительная информация

Синтезатор частоты с ФАПЧ

PLL frequency synthesizer АНАЛОГОВАЯ И ТЕЛЕКОММУНИКАЦИОННАЯ ЭЛЕКТРОНИКА ЛАБОРАТОРНОЕ УПРАЖНЕНИЕ 4 Лаборатория 4: Синтезатор частоты с ФАПЧ 1.1 Цель Цели этого лабораторного упражнения: — Проверить поведение А и всей ФАПЧ — Найти захват

Дополнительная информация .

7-сегментный дисплей — расположение выводов и способы его использования

Семисегментный дисплей (SSD) — широко используемый электронный дисплей для отображения десятичных чисел от 0 до 9. Они чаще всего используются в электронных устройствах, таких как цифровые часы, таймеры. и калькуляторы для отображения числовой информации. Как следует из названия, он состоит из семи различных светящихся сегментов, которые расположены таким образом, что он может формировать числа от 0 до 9, отображая различные комбинации сегментов.Он также может формировать некоторые алфавиты, такие как A, B, C, H, F, E и т. Д.

7-сегментные дисплеи являются одними из самых простых дисплеев для отображения чисел и символов. Как показано на приведенном выше изображении 7-сегментного дисплея 7 segment display unit working, он состоит из 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 Segment Display Pinout

Распиновка 7-сегментного дисплея

Есть два типа 7-сегментных дисплеев: с общим анодом и с общим катодом:

Общий катод: В этом случае все отрицательные клеммы (катод) всех 8 светодиодов соединены вместе (см. Диаграмму ниже) и обозначены как COM.И все положительные клеммы остаются в покое.

Общий анод: В этом случае все положительные клеммы (аноды) всех 8 светодиодов соединены вместе и называются COM. И все отрицательные термики остаются в покое.

Types of seven segment displays

Как отображать числа на 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

.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *