Site Loader

Содержание

Управление семисегментными индикаторами по одному проводу

Часто бывает ситуация, когда надо выполнить простую задачу с которой справится даже грошовый контроллер вроде ATTiny12, но вот незадача — нужна индикация, а под какой нибудь семисегментный индикатор придется убить дофига выводов, а их всего восемь, из которых два питание, а один Reset. Можно, конечно, взять просто МК потолще, но мне больше по душе разные схемотехнические извраты. Вот и тут камрад Kalobyte подкинул ссылку на прикольную схему управления тройным (а в перспективе хоть десятерным) семисегментным индикатором по одному проводу.

Индикатор зажигается посредством сдвигового регистра 74HC164, всего таких регистров можно навесить очень много, просто соединив по цепи несколько регистров. Если отбросить RESET, то для проталкивания данных в регистр нужны две линии — Data и Clock. Путем небольшого изврата можно эти две линии обьединить в одну.

Для начала немного теории
Обычная RC цепочка. Отличается тем, что напряжение на конденсаторе не может измениться мгновенно. Время заряда и разряда зависит от емкости кондера и сопротивления резистора. Оценить его можно по постоянной времени T=R*C , это время за которое заряд изменится примерно втрое (в е=2.7 раз).


Если мы пустим через нее длинный импульс, то конденсатор успеет как полностью зарядиться, так и полностью разрядиться.

Если подадим короткий импульс, по времени намного меньше чем постоянная времени, то напряжение на конденсаторе изменится совершенно

незначительно. Так, дрыгнется да и только. То же относительно короткой паузы. Незначительный провал и все возвращается на круги своя. Чуете куда я клоню?

Правильно!
У нас у регистра есть линия данных (Data) и линия строба (Clock). Когда уровень на Clock меняется с нуля на единицу (передний фронт) с линии Data считывается текущий уровень. Их можно разнести по разные стороны RC фильтра. И одни сигналы передавать узкими, другие широкими импульсами.

А теперь думаем. Строб един для всех регистров, а данные различные для разных битов. Поэтому строб будет всегда один, а данные будут меняться. Делаем

строб узким и снимаем его до RC цепи. Узкие импульсы не могут пройти сквозь RC цепь, а данные передаем широкими импульсами, которые спокойно перезаряжают конденсатор. Данные мы снимаем после RC цепи.

Получается вот такая схема:


Сигналы Reset я даже рисовать не стал — они там намертво на +5 повешаны. Сброс регистров осуществляется загоном в него нулей. Регистов тут два, но как я уже писал, можно навесить их еще очень много, лишь бы хватило скорости их заполнять.

Осталось теперь хитрым образом формировать биты на линии. Чтобы было понятней, я нарисовал поясняющую картинку, на которой показана передача байта

10011010.


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

Ниже показаны типовые формы единицы и нуля. Как видишь, тут идет длинный импульс данных, который призван зарядить/разрядить конденсатор до нужного логического уровня, а потом краткий, как иголка, импульс строба. Причем в стробе нам важен только передний фронт.

А вот так выглядит осциллограмма реальной передачи

Вот, взяли и применив копеечный регистр, сэкономили на микроконтроллере. Зажопили кучу выводов и получили моральное удоволетворение от извращенского метода 🙂 Попутно вкурив в очередной пример применения конденсатора и интегрирующей цепочки.

Ссылки по теме:

Управление семисегментным индикатором — Alex.StarSpirals.Net

В этой статье я расскажу о подключении к микроконтроллеру ATtiny13 семисегментного LED-индикатора, об управлении им (включая программный код на AVR ассемблере) и о возможностях использования полученной печатной платы.

Принципы, оговариваемые в статье универсальны, и подойдут, разумеется, и для других микроконтроллеров.

Семисегментные индикаторы используются повсеместно для индикации какой-то простой информации (чаще всего, разумеется, счётной). Например, на материнских платах большинства производителей ПК можно встретить индикатор состояния системы (односимвольные коды). Ну и очень часто студентам дают различные задания, связанные с этим простым прибором. Поэтому я, когда начинал осваивать микроконтроллеры, ну никак не мог обойти его вниманием 🙂

Сам по себе семисегментный индикатор обычно представляет собой набор светодиодов, «упакованных» в корпус. Светящиеся прозрачные полоски, передающие свет от диодов наблюдателю, называются сегментами. Сегменты принято называть буквами латинского алфавита A, B, C, D, E, F, G. На многих семисегментных индикаторах присутствует также точка, которую обозначают dp. Вот принятое соответствие сегментов буквам:

Обычно используются либо красные, либо зелёные светодиоды. Подключаются семисегментные индикаторы посредством семи (если с точкой — восьми) контактных выводов для управления каждым отдельным сегментом, а также общим выводом — тут очень важно обратить внимание, что является общим выводом индикатора — общий анод или катод. В первом случае общий анод подключается на напряжение питания, а сегменты зажигаются на низком логическом уровне «0»; во втором — общий катод вешается на землю, а сегменты светятся, если подать на них логическую «1»:

Не забываем также, что каждому светодиоду необходим токоограничивающий резистор. Я использую здесь резисторы номиналом 1К (хотя вполне подойдут и резисторы в пределах 250-1250 Ом). Нетрудно догадаться, что резисторная обвязка для устройств с большим количеством семисегментных индикаторов будет довольно тяжёлой.

Для экспериментов прежде всего необходима тестовая плата. Учитывая, что в начале статьи я упоминал ATtiny13, возможно, кто-то уже хочет задать вопрос: как можно управлять семисегментным индикатором при помощи микроконтроллера, у которого всего лишь 5 (максимум 6) программируемых линий ввода-вывода? Ответ: используя дополнительный компонент в виде товарища по имени сдвиговый регистр. Восьмибитный товарищ 74HC164 типа SIPO (serial in parallel out, т.е. последовательный ввод, параллельный вывод) может управляться посредством всего двух сигнальных линий — одна синхролиния (часы), и одна информационная (сэмпловая) линия. На выходе его имеем 8 сигналов, которые сохраняются с течением времени, если не трогать вход синхролинии.

Пользуясь далее общими принципами подключения микроконтроллеров, я сделал плату ATtiny13 xBoard v2. Использовал SMD-версию 74HC164, а в качестве индикатора — довольно большой Kingbright SA08-11EWA с общим анодом. Если кому-то понадобится разводка соответствующей печатной платы (напоминаю, прошивочный интерфейс у меня особенный и заточено всё под SMD+оговоренный выше толстый индикатор), то её можно похитить отсюда, в формате Sprint Layout 5.0. А вот как она выглядит:

Дополнительно поставил на плату оранжевый светодиод и кнопку. Питается плата от стабилизированного напряжения +5В от гнезда 2.1/5.5мм. У меня, кстати, в качестве источника питания используется адаптер от зарядки мобильного телефона, прямо в провод которого я встроил стабилизатор 7805.

Важные замечания:

1) Если вы захотите использовать код программ ассемблера без изменений, то вам нужен семисегментный индикатор с общим анодом, а также необходимо будет выполнить подключения точь-в-точь согласно вышеприведённой схеме, нетрудно заметить, что у меня нет строгого соответствия выходов сдвигового регистра сегментам, то есть Y0 != A, Y1 != B и так далее, что обсуловлено в первую очередь требованиями разводки платы. В общем-то, если вы поймёте программный код, то изменить закодированные символы индикатора по таблице соответствий выходов регистра сегментам не составит никакой проблемы. Поэтому советую разводить плату как вам удобно будет.

2) В схеме указан индикатор LA-401AD, и приходится констатировать, что его распиновка и близко не стояла с SA08-11EWA, который использовал я, поэтому будьте внимательны — обязательно почитайте в даташите, какой пин чему соответствует.

3) Индикатор управляется через сдвиговый регистр только по двум проводам, поэтому при проталкивании значений через регистр сегменты индикатора будут неизбежно слабо мерцать. Чтобы избежать этого, можно добавить в схему дополнительный транзистор, который будет управляться ещё одной сигнальной линией с микроконтроллера и запирать/открывать напряжение питания для индикатора (иными словами, на время загрузки сегментов весь индикатор можно разом погасить). Однако в этом случае опять же нужно будет дополнять мой код.

Итак, предположим плата готова. Дело теперь за программированием микроконтроллера. Для этой простой платы, как ни странно, можно придумать много применений. Я рассмотрю четыре из них.

Однако первым делом рассмотрим фрагмент кода, который используется для достижения нашей главной цели — управления индикатором.

 ; Проект для ATtiny13
.INCLUDE "tn13def.inc"

.DEF	TMP 	= R17
.DEF	SYM  	= R18
.DEF	CNT		= R19

; OUTP порт, значение
.MACRO OUTP
	LDI R16,@1
	OUT @0,R16
.ENDM

.CSEG
.ORG 0x0000

RJMP init

sym_table:
	; Таблица символов 7SEG дисплея
	; для платы ATtiny13 xBoard v2

	; Q0 = C, Q1 = D, Q2 = dot, Q3 = E,
	; Q4 = F, Q5 = A, Q6 = B,   Q7 = G

	; Для ОБЩЕГО АНОДА:
	; 0 = сегмент горит, 1 = сегмент погашен

	; (для ОБЩЕГО КАТОДА инвертировать значения)

	;     qqqqqqqq
	;     01234567

	.DB 0b00100001, 0b01111101	; 0, 1
	.DB 0b10101000, 0b00111000  ; 2, 3
	.DB 0b01110100, 0b00110010  ; 4, 5
	.DB 0b00100010, 0b01111001  ; 6, 7
	.DB 0b00100000, 0b00110000  ; 8, 9
	.DB 0b01100000, 0b00100110  ; A, B
	.DB 0b10100011, 0b00101100  ; C, D
	.DB 0b10100010, 0b11100010  ; E, F
	.DB 0b11111111, 0b00000000  ; all_clr, all_set

; setdisplay рисует указанный символ
; SYM на 7-мисегментном дисплее
; NB! До вызова нужно указать SYM
setdisplay:

	; Установить контрольные биты порта
	OUTP DDRB, (1<<PB3) | (1<<PB4)

	; Загрузить адрес таблицы символов
	LDI ZL, LOW (2*sym_table)
	LDI ZH, HIGH(2*sym_table)

	; Найти нужный символ
	ADD ZL, SYM

	; Загрузить данные символа в R0
	LPM

	; Начало итерации
	LDI TMP, 8

	back1:

		SBRC R0, 0
		RJMP bitset
			; Установить сегмент в 0 (горит)
			OUTP PORTB,(0<<PB3)|(0<<PB4)
			OUTP PORTB,(1<<PB3)|(0<<PB4)
		RJMP bitunset
		bitset:
			; Установить сегмент в 1 (погашен)
			OUTP PORTB,(0<<PB3)|(1<<PB4)
			OUTP PORTB,(1<<PB3)|(1<<PB4)
		bitunset:

		LSR R0
		DEC TMP

	BRNE back1	

	; Выход из процедуры
	RET

init:
	; Инициализация
	...

Как видно, в начале кода задаются символьные имена для регистров R17, R18, R19, макро для выдачи в порт какого-то значения, а программный код начинается с адреса во флеш-памяти 0x0000 (то есть, таблица переходов по прерываниям в данном случае отсутствует, однако мы ещё о ней поговорим). Далее идёт безусловный переход на процедуру инициализации, она располагается после метки init.

Что нас интересует, так это сама процедура вывода желаемого символа на индикатор. Очевидно, где-то в памяти нужно держать таблицу всех символов. Эта таблица содержится после метки sym_table и в неё посредством директивы .DB занесены символы 0x0…F (0…15 в десятичном представлении). Кроме того, есть два дополнительных символа в конце, для полной очистки индикатора и для полного заполнения.

Далее смотрим процедуру setdisplay. Первым делом в процедуре устанавливаются пины порта B для управления индикатором: у меня пин PB3 — это синхролиния, а пин PB4 — сэмпловый вход регистра.

Затем в регистр Z загружается адрес таблицы символов и прибавляется номер нашего символа SYM, который должен быть предварительно задан. Дальше байт — 8 бит — символа загружаются в регистр R0. Если определённый бит этого байта «0» — то соответствующий сегмент (см. таблицу) будет по оканчании процедуры гореть, если «1» — то он будет погашен.

И тут начинается итерация. Смысл такой: проверяется нулевой бит байта символа. Если он «0», то то инструкция перехода RJMP bitset будет пропущена, и на регистр будет подано значение «0» = «сегмент горит»:

OUTP PORTB,(0<<PB3)|(0<<PB4) ; Сэмпловое значение «0»
OUTP PORTB,(1<<PB3)|(0<<PB4) ; Протолкнуть значение

Ну а если нулевой бит установлен в «1», то переход происходит и в регистр проталкивается «1» = «сегмент погашен»:

OUTP PORTB,(0<<PB3)|(1<<PB4) ; Сэмпловое значение «1»
OUTP PORTB,(1<<PB3)|(1<<PB4) ; Протолкнуть значение

При подаче сигнала 0→1 на синхролинию значение на сэмпловой линии проталкивается в сдвиговый регистр так: Y7=Y6, Y6=Y5, Y5=Y4, Y4=Y3, Y3=Y2, Y2=Y1, Y1=Y0, Y0=sample. Примечание: в даташите может использоваться буква Q вместо Y.

После этого байт в R0 побитово сдвигается вправо, и проверяется следующий бит. И так всего 8 раз, пока все значения не окажутся в сдвиговом регистре аналогично байту символа. После последней итерации в регистре R0 окажется ряд нулей.

Приведу конкретный пример. Пусть нам нужно отобразить на дисплее цифру 7. Смотрим по таблице: код этого символа также будет 7 (байт символа — 0b01111001). Вызываем откуда-то из нашей программы процедуру следующим образом:

 ; Занесём в регистр SYM значение 7
LDI SYM, 7
; Вызовем процедуру
RCALL setdiplay

Предположим, что все светодиоды индикатора погашены (на выходах сдвигового регистра 0b11111111). Тогда после вызова процедуры произойдёт следующее:

При реальной работе микроконтроллера это происходит очень быстро, поэтому практически мгновенно на индикаторе загорается нужная цифра или символ. Однако, как видите, значения пробегают по сегментам — отсюда их слабое мерцание. Особенно это заметно, когда необходима быстрая смена символов на индикаторе.

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

1. Счетчик
В самом простом случае счётчик будет считать нажатия кнопки. Это и сделаем. Процедура для управления индикатором уже готова, так что продолжим код начиная с инициализации:

 ; Инициализация
init:

	; Установить кнопку как ввод, LED как вывод
	OUTP DDRB, (1<<PB0) | (0<<PB1) | (0<<PB2)

main:

	; Установить счётчик в ноль и вывести на индикатор
	LDI CNT, 0
	MOV SYM, CNT
	RCALL setdisplay
	RJMP back2

	; Ждать пока кнопка нажата
back3:

	; Зажечь светодиод
	OUTP PORTB, (1<<PB0)

back31:

	IN R0, PINB
	SBRS R0, 1
	RJMP back31

	; Ждать пока кнопка не нажата
back2:

	; Отключить светодиод
	OUTP PORTB, (0<<PB0)	

back21:

	IN R0, PINB
	SBRC R0, 1
	RJMP back21

	; Инкрементация счётчика
	INC CNT

	; Проверить условие CNT>15
	CPI CNT, 16
	BRNE next1

	; CNT=0
	LDI CNT, 0;

next1:
	; Отобразить новое значение
	MOV SYM, CNT
	RCALL setdisplay

	RJMP back3

RJMP main

Работает это следующим образом: сперва на индикаторе высвечивается «0», а потом программа будет крутиться в цикле back21 до тех пор, пока в первом бите порта B (PB1), который настроен у нас на ввод с кнопки, не окажется значения «0», что значит собой нажатую кнопку.

Тогда произойдёт инкремент счётчика и на обратном пути загорится светодиод, который будет гореть, пока кнопка нажата — ещё один цикл. И дальше всё повторяется. А при достижении значения 0xF следующим будет 0x0.

У этого программного кода есть небольшой недостаток — не учитывается «дребезг» контактов кнопки, но для сохранения простоты кода мы пока этим будем пренебрегать.

Демонстрация работы:

Полный код (комментарии на английском).

Для чего можно использовать подобный счётчик? Ну, например, подключить к микроконтроллеру сенсор, прицепив его на АЦП, и считать что-нибудь, а при достижении какого-нибудь значения выдавать сигнал на выводной порт. Так можно сделать копилку, которая показывает, сколько монет в неё было положено. Конечно, для этого было бы неплохо добавить пару индикаторов — учитывая, что по двум проводам можно управлять каким угодно их количеством, это не кажется большой проблемой.

2. Метроном
Давайте теперь сделаем что-нибудь посложнее и поинтереснее. Например, метроном, тикающий в темпе 120bpm, в метре 4/4.

Для этого задействуем такую железную фичу ATtiny13, как таймер. Я не буду сильно вдаваться в технические детали настройки таймера в работу (это материала на отдельную статью, наподобие этой), плюс они весьма подробно описаны в даташите.

Таймер в железе у нас восьмибитный, это значит, что в соответствующем регистре будет пробегать значение в пределах 0x00…0xFF (0…255). При переполнении таймера (когда он сбрасывается 0xFF→0x00) будет возникать прерывание, и управление будет передаваться обработчику прерывания. Таблицу прерываний необходимо будет добавить в код программы, соответственно, начало непосредственно кода будет смещено. Изменим предыдущий код:

 ; Проект для ATtiny13
.INCLUDE "tn13def.inc"

.DEF	TMP 	= R17
.DEF	SYM  	= R18
.DEF	CNT		= R19

; OUTP порт, значение
.MACRO OUTP
	LDI R16,@1
	OUT @0,R16
.ENDM

.CSEG

; Таблица прерываний
.ORG 0x0000

RJMP init 		; Обработчик сброса
RETI			; Обработчик IRQ0
RETI			; PCINT0 Handler
RJMP TIM0_OVF	; Обработчик переполнения Timer0
RETI			; Обработчик готовности EEPROM
RETI			; Обработчик аналогового компаратора
RETI			; Обработчик Timer0 CompareA
RETI			; Обработчик Timer0 CompareB
RETI			; Обработчик Watchdog прерывания
RETI			; Обработчик АЦП-преобразования

; Код основной программы
.ORG 0x000A

sym_table:
...

Здесь нас интересует инструкция RJMP TIM0_OVF: при переполнении таймера произойдёт прерывание и будет вызвана процедура, расположенная после метки TIM0_OVF. После окончания процедуры, выполнение программы продолжится с места прерывания.

Теперь подумаем, как реализовать метроном. Немного элементарной математики. Нам нужен темп 120 bpm — то есть 120 ударов (четвертных нот) в минуту или 120/60 = 2 удара/сек.

Прошивать фьюзы микроконтроллера будем так, чтобы он работал от внутреннего частотогенератора с частотой 128000 Гц (см. даташит). В качестве делителя частоты таймера используем 1024. Значит, за одну секунду таймер будет нащёлкивать 128000/1024 = 125 тиков.

Поскольку нам нужно два удара на секунду, посчитаем 125/2 = 62.5, округлённо 63. Прерывание генерируется на переполнении 255→0, поэтому количество тиков, устанавливаемое в таймер, будет 255-63 = 192.

К сожалению, от внутреннего частотогенератора, да ещё с погрешностью вычислений при восьмибитном таймере будет несколько сложно получить 100% точность метронома. Однако, играя с количеством тиков у меня при разных условиях получалась неплохая точность (проверял относительно точного метронома) при значениях 192…195. Экспериментируйте. Однако так или иначе, для хорошего точного дигитального метронома лучше подойдёт микроконтроллер подороже с кварцем в обвязке.

Исходя из всего вышесказанного получаем код программы:

 ; Инициализация
init:

	; Кнопка — ввод, светодиод — вывод
	OUTP DDRB, (1<<PB0) | (0<<PB1) | (0<<PB2)

main:	

	; Отобразить точку
	LDI SYM, 18
	RCALL setdisplay

	LDI CNT, 0

	; Включить прерывание по переполнению таймера
	OUTP TIMSK0, (1<<TOIE0)

	; Ждать нажатия кнопки
wait:
	SBIC PINB, 1
	RJMP wait

	; Выключить флаг прерываний
	CLI

	; Установить число тиков
	OUTP TCNT0, 192

	; Установить делитель частоты = 1024
	OUTP TCCR0B, 5

	; Включить прерывания
	SEI

	; Установить пустой цикл

loop:

	NOP

RJMP loop

; Обработчик прерываний
TIM0_OVF:

	; Установить число тиков
	OUTP TCNT0, 192

	; Зажечь светодиод
	OUTP PORTB, (1<<PB0)

	; Увеличить счётчик удара
	INC CNT

	; Проверить условие CNT>4
	CPI CNT, 5
	BRNE next1

	; CNT=0
	LDI CNT, 1

next1:

	MOV SYM, CNT
	RCALL setdisplay

	; Выключить светодиод
	OUTP PORTB, (0<<PB0)

	;Вернуться из прерывания
	RETI

Пара комментариев по приведённому выше коду. Во-первых, я слегка расширил таблицу символов, добавив туда точку, которая отображается при включении микроконтроллера до нажатия кнопки (посмотреть расширенную таблицу можно в полном коде). Во-вторых, обращаю ваше внимание: для того, чтобы метроном вообще заработал нужно выполнить два условия: выставить требуемый делитель частоты, а также разрешить прерывания. Это правило распространяется на все ситуации, где нужно использовать прерывание по переполнению таймера. Ну и в-третьих, метроном будет после нажатия кнопки щёлкать до бесконечности (пока на него подано питание).

Вот как это работает:

Полный код

3. Змейка
Практической пользы от змейки мало — это обыкновенный несложный визуальный эффект. Учитывая опыт, полученный при создании метронома, говорить я тут почти ничего не буду. Изменить код будет совсем не трудно — всего-то и нужно, что добавить символы, в которых горит только один сегмент, и запустить похожий счётный цикл.

Однако тут как раз будет заметно мерцание сегментов, напоминая нам, что лучше по возможности использовать управление сдвиговым регистром/семисегментным индикатором по трём проводам.

Вот что получается:

Полный код

4. Вольтметр
Для создания простенького вольтметра применим одного из лучших друзей цифровой аппаратуры — аналого-цифровой преобразователь (АЦП), благо на борту ATtiny13 он наличиствует, и аж 4-х канальный. Опять же, вдаваться в мельчайшие технические детали не буду, однако покажу как это дело у меня функционирует.

Начальный код программы будет эквивалентен счётчику. А вот после инициализации последует такое:

 ; Инициализация
init:

	; Установить кнопку — ввод, светодиод — вывод
	OUTP DDRB, (1<<PB0) | (0<<PB1) | (0<<PB2)

	; Запустить ADC1 на PB2 используя опорное
	; напряжение +5V с выравниванием по левой стороне
	OUTP ADMUX, (0<<REFS0) | (1<<ADLAR) | (0<<MUX1) | (1<<MUX0)

	; Загрузить 0 в SYM и отобразить это
	LDI SYM, 0
	RCALL setdisplay

	; Запустить АЦП
	OUTP ADCSRA, (1<<ADEN) | (1<<ADSC)

main:

	; Получить значение
	IN VOLT, ADCH

	; Высчитать порог, вычитая по 25 единиц
	LDI TMP1, 0
	LDI TMP2, 25

	; Начало итерации

back:

	; Прибавить значение (напряжения*2)
	INC TMP1

	SBC VOLT, TMP2
	BRCS next

	RJMP back

next:

	; Поделить значение напряжения на 2 чтобы
	; получить округленное (погрешность +/- 0.5В)
	LSR TMP1

	; Сравнить текущее и предыдущее значения
	; и не изменять отображение индикатора, если
	; значения одинаковые
	CP SYM, TMP1
	BREQ equal

	; Иначе показать округленное значение напряжения
	MOV SYM, TMP1
	RCALL setdisplay

equal:

	; Если А/Ц преобразование закончено, возобновить его
	SBIS ADCSRA, 6
	OUTP ADCSRA, (1<<ADSC) | (1<<ADEN)

RJMP main

Во-первых, здесь я использую в качестве опорного напряжения для АЦП на порте PB2 напряжение питания, то есть +5В. За его стабильность я не сильно переживаю, так как использую относительно надёжный источник. Понятно, что потолок измерения в таком случае будет эти самые 5В, больше на АЦП лучше не подавать, если нет большого желания пожечь вход микроконтроллера.

Выравнивание по левой стороне означает следующее. Наш АЦП 10-битный, значит его регистр состоит из двух байт. Однако в нашем случае нам хватит точности в 8 бит, да и в младших разрядах АЦП болтается по обыкновению всякий дигитальный мусор. Так что по идее, можно выкинуть эти два бита совсем. Разработчики AVR дали нам эту возможность — при помощи так называния выравнивания по левому краю — старшие 8 бит АЦП улетают в регистр ADCH.

А вот по какому принципу работает расчёт измеряемого напряжения. Учитывая, что в нашем распоряжении 8 бит, измеренное значение напряжения изменяется в пределах 0…255 (0…5В). У нас в распоряжении один индикатор, и точность выше +/- 0.5В нам ни к чему. Отсюда 5/0.5 = 10 — это число областей измерения. Дальше 255/10 = 25, в каждой области выходит по 25 значений оцифрованного сигнала.

Далее из полученного оцифрованного значения напряжения вычитается число 25 столько раз, пока результат вычисления больше/равен 0. Число вычитаний складывается, затем делится на 2 и в итоге мы получем измеренное число вольт с погрешностью +/- 0.5В. Если сразу не понятно как это работает, помедитируйте на код 🙂

Вот, в принципе, и всё. В тесте я использовал потенциометр. Ползунок сидел на АЦП-канале на PB2, а крайние контакты я приладил на +5В и землю соответственно. Кстати, вот так напрямую подключать АЦП к измеряемому источнику не рекомендую — желательно добавить ещё токоограничивающие резисторы. Но моих для тестов и незащищенное подключение сойдёт:

Полный код

Также я использовал этот вольтметр для измерения напряжения на двух 1.5В плоских батарейках, соединённых последовательно. Видео, впрочем, заснять не удосужился, так что вам придётся поверить мне на слово — маленький прибор с индикатором показал ровно 3В 🙂

Вообще, применение АЦП ограничено только воображением конструктора. Конкретный аппарат можно использовать как, например, индикатор и/или переключатель режимов работы какого-нибудь другого устройства.

Надеюсь, данная информация поможет вам лучше разобраться с простыми семисегментными индикаторами, контроллерами и их совместной работой. Удачных экспериментов!


Примечания

Светодиодные семисегментные индикаторы.

Их конструкция и особенности

Наверняка вы уже видели индикаторы – «восьмёрки». Это и есть семисегментный светодиодный индикатор, который служит для отображения цифр от 0 до 9, а также децимальной точки (DP – Decimal point) или запятой.

Конструктивно такое изделие представляет собой сборку светодиодов. Каждый светодиод сборки засвечивает свой знакосегмент.

В зависимости от модели сборка может состоять из 1 – 4 семисегментных групп. Например, индикатор АЛС333Б1 состоит из одной семисегментной группы, которая способна отображать всего лишь одну цифру от 0 до 9.

А вот светодиодный индикатор KEM-5162AS уже имеет две семисегментных группы. Он является двухразрядным. Далее на фото показаны разные светодиодные семисегментные индикаторы.

Светодиодные семисегментные индикаторы

Также существуют индикаторы с 4-мя семисегментными группами – четырёхразрядные (на фото – FYQ-5641BSR-11). Их можно использовать в самодельных электронных часах.

Четырёхразрядный индикатор

Как обозначаются семисегментные индикаторы на схемах?

Так как семисегментный индикатор – это комбинированный электронный прибор, то изображение его на схемах мало отличается от его внешнего вида.

Обозначение семисегментного индикатора на принципиальных схемах

Стоит только обратить внимание на то, что каждому выводу соответствует конкретный знакосегмент, к которому он подключен. Также имеется один или несколько выводов общего катода или анода – в зависимости от модели прибора.

Особенности семисегментных индикаторов.

Несмотря на кажущуюся простоту этой детали и у неё есть особенности.

Во-первых, светодиодные семисегментные индикаторы бывают с общим анодом и с общим катодом. Данную особенность следует учитывать при его покупке для самодельной конструкции или прибора.

Вот, например, цоколёвка уже знакомого нам 4-ёх разрядного индикатора FYQ-5641BSR-11.

Цоколёвка семисегментного индикатора FYQ-5641BSR

Как видим, аноды у светодиодов каждой цифры объединены и выведены на отдельный вывод. Катоды же у светодиодов, которые принадлежат к знакосегменту (например, G), соединены вместе. От того, какую схему соединений имеет индикатор (с общим анодом или катодом) зависит очень многое. Если взглянуть на принципиальные схемы приборов с применением семисегментных индикаторов, то станет ясно, почему это так важно.

Кроме небольших индикаторов есть большие и даже очень большие. Их можно увидеть в общественных местах, обычно в виде настенных часов, термометров, информеров.

Чтобы увеличить размеры цифр на табло и одновременно сохранить достаточную яркость каждого сегмента, используется несколько светодиодов, включенных последовательно. Вот пример такого индикатора – он умещается на ладони. Это FYS-23011-BUB-21.

Индикатор FYS-23011-BUB-21

Один его сегмент состоит из 4 светодиодов, включенных последовательно.

Цоколёвка индикатора FYS-23011

Чтобы засветить один из сегментов (A, B, C, D, E, F или G), нужно подать на него напряжение в 11,2 вольта (2,8V на каждый светодиод). Можно и меньше, например, 10V, но яркость тоже уменьшится. Исключение составляет децимальная точка (DP), её сегмент состоит из двух светодиодов. Для неё нужно всего 5 — 5,6 вольт.

Работа семисегментного индикатора на светодиодах

Также в природе встречаются двухцветные индикаторы. В них встраиваются, например, красные и зелёные светодиоды. Получается, что в корпус встроено как бы два индикатора, но со светодиодами разного цвета свечения. Если подать напряжение на обе цепи светодиодов, то можно получить жёлтый цвет свечения сегментов. Вот схема соединений одного из таких двухцветных индикаторов (SBA-15-11EGWA).

Двухцветный семисегментный индикатор

Если коммутировать выводы 1 (RED) и 5 (GREEN) на «+» питания через ключевые транзисторы, то можно менять цвет свечения отображаемых чисел с красного на зелёный. А если же одновременно подключить выводы 1 и 5, то цвет cвечения будет оранжевым. Вот так можно баловаться с индикаторами Двухцветный семисегментный индикатор.

Управление семисегментными индикаторами.

Для управления семисегментными индикаторами в цифровых устройствах используют регистры сдвига и дешифраторы. Например, широко распространённый дешифратор для управления индикаторами серии АЛС333 и АЛС324 – микросхема К514ИД2 или К176ИД2. Вот пример.

А для управления современными импортными индикаторами обычно используются регистры сдвига 74HC595. По идее, управлять сегментами табло можно и напрямую с выходов микроконтроллера. Но такую схему используют редко, так как для этого требуется задействовать довольно много выводов самого микроконтроллера. Поэтому для этой цели применяются регистры сдвига. Кроме этого, ток, потребляемый светодиодами знакосегмента, может быть больше, чем ток, который может обеспечить рядовой выход микроконтроллера.

Для управления большими семисегментными индикаторами, такими как, FYS-23011-BUB-21 применяются специализированные драйверы, например, микросхема MBI5026.

Что внутри семисегментного индикатора?

Ну и немного вкусненького. Любой электронщик не был бы таковым, если бы не интересовался «внутренностями» радиодеталей. Вот что внутри индикатора АЛС324Б1.

Индикатор АЛС324 в разобранном виде

Чёрные квадратики на основании – это кристаллы светодиодов. Тут же можно разглядеть золотые перемычки, которые соединяют кристалл с одним из выводов. К сожалению, этот индикатор уже работать не будет, так как были оборваны как раз эти самые перемычки Индикатор АЛС324 в разобранном виде. Но зато мы можем посмотреть, что скрывается за декоративной панелькой табло.

Главная &raquo Радиоэлектроника для начинающих &raquo Текущая страница

Также Вам будет интересно узнать:

 

Семисегментный индикатор — Википедия

Семисегме́нтный индика́тор — устройство отображения цифровой информации. Это — наиболее простая реализация индикатора, который может отображать арабские цифры. Для отображения букв используются более сложные многосегментные и матричные индикаторы.

Таблица, отображающая все 128 вариантов состояния сегментов Обозначение сегментов индикатора

Семисегментный индикатор, как говорит его название, состоит из семи элементов индикации (сегментов), включающихся и выключающихся по отдельности. Включая их в разных комбинациях, из них можно составить упрощённые изображения арабских цифр.

Цифры 6, 7 и 9 имеют по два разных представления на семисегментном индикаторе[1][2]. В ранних калькуляторах Casio и Электроника цифра 0 отображалась в нижней половине индикатора[3].

Сегменты обозначаются буквами от A до G; восьмой сегмент — десятичная точка (decimal point, DP), предназначенная для отображения дробных чисел.

Изредка на семисегментном индикаторе отображают буквы.

Чертёж из патента Вуда

Сегментный индикатор был запатентован в 1910 году (U.S. Patent 974 943) Фрэнком Вудом. Эта реализация была восьмисегментной — был дополнительный косой сегмент для отображения четвёрки. Патент был практически забыт — вплоть до 1960-х годов радиолюбителям приходилось применять для отображения цифр знаковые индикаторы тлеющего разряда или просто десять лампочек.

В 1970 году американская компания RCA выпустила семисегментную лампу накаливания «Нумитрон»[4].

Для отображения букв появились четырнадцатисегментные индикаторы и шестнадцатисегментные индикаторы, но сейчас их почти повсеместно заменили матричные (точечные) индикаторы. И лишь там, где нужно отображать только цифровую информацию, семисегментные индикаторы остались незаменимыми — из-за простоты, контраста и узнаваемости.

Одноразрядные семисегментные индикаторы могут быть устроены на светодиодах, лампах тлеющего разряда, электровакуумные индикаторы (катодолюминесцентные, накаливаемые), нити накаливания[5], жидкие кристаллы и т. д. На больших табло наподобие цен на бензин могут применяться механические индикаторы, или блинкерные индикаторы, переключающиеся с помощью электромагнитов.

В обычном светодиодном индикаторе используется девять выводов: один идёт к катодам (минусам) всех сегментов, и остальные восемь — к аноду каждого из сегментов, включая точку. Эта схема называется «схема с общим катодом», существуют также схемы с общим анодом, где имеется общий анод (плюс) и индивидуально подключенные катоды. Часто делают не один, а два общих вывода на разных концах корпуса — это упрощает разводку, не увеличивая габаритов.

Многоразрядные индикаторы часто работают по : выводы одноимённых сегментов всех разрядов соединены вместе. Чтобы выводить информацию на такой индикатор, управляющая микросхема должна подавать ток на общие выводы всех разрядов, в то время как на выводы сегментов ток подаётся в зависимости от того, зажжён ли данный сегмент в данном разряде. Таким образом, чтобы получить десятиразрядный экран микрокалькулятора, нужны всего восемнадцать выводов (8 анодов и 10 катодов) — а не 81.

Существуют специальные микросхемы семисегментных дешифраторов, переводящие четырёхбитный код в его семисегментное представление. К примеру, отечественные (КР)514ид1 для индикаторов с общим катодом или (КР)514ид2 с общим анодом. Иногда дешифраторы встраивают прямо в индикатор. В настоящее время, в связи с широким распространением однокристальных микроконтроллеров с GPIO, семисегментные светодиодные индикаторы подключаются напрямую к выводам микроконтроллера.

Часто на ценниках применяются закрашиваемые фломастером сегменты. Также встречаются трафареты в виде семисегментных индикаторов для изображения цен или телефонных номеров.

Кроме десяти цифр, семисегментные индикаторы способны отображать буквы. Но лишь немногие из букв имеют интуитивно понятное семисегментное представление.

  • В латинице: заглавные A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, строчные b, c, d, e, g, h, i, n, ñ, o, q, r, t, u.
  • В кириллице: А, Б, В, Г, г, д, Е, е, и, й, Н, О, о, П, п, Р, С, с, У, Ч, Ы (два разряда), Ь, Э/З.

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

и т. д.

На перевёрнутом микрокалькуляторе можно получить некоторый диапазон букв, на этом основаны игры с калькулятором.

  • Батушев В. А. Электронные приборы: Учебник для вузов. — 2-е, перераб. и доп. — М.: Высшая школа, 1980. — С. 302—303. — 383 с.

Семисегментный индикатор | Принцип работы, виды, как проверить

Существуют такие параметры, для которых было бы удобнее выдавать объективную информацию, чем просто индикацию. Например, температура воздуха  на улице или время на будильнике. Да, все это можно было бы сделать на светящихся лампочках или светодиодах. Один градус  – один  горящий светодиод или лампочка и тд. Но считать эти светлячки – ну уж нет! Но, как говорится, самые простые решения – самые надежные. Поэтому, долго не думая, разработчики взяли простые светодиодные полосы и расставили их в нужном порядке.

Как все начиналось

В начале двадцатого века с появлением электронных ламп появились первые газоразрядные индикаторы

Nixie2

С помощью таких индикаторов можно было вывести цифровую информацию в арабских цифрах. Раньше именно на таких лампах делали различную индикацию для приборов и других электронных устройств. В настоящее время газоразрядные элементы почти уже нигде не применяются. Но ретро – это всегда модно, поэтому, многие радиолюбители собирают для себя и своих близких прекрасные часы на газоразрядных индикаторах.

Семисегментный индикатор

Минус газоразрядных ламп – кушают много электроэнергии. Про долговечность можно и поспорить. У нас в университете до сих пор в лабораторных  кабинетах эксплуатируются частотомеры на газоразрядных индикаторах.

Семисегментные индикаторы

С появлением светодиодов ситуация кардинально изменилась в лучшую сторону. Светодиоды сами по себе потребляют маленький ток. Если расставить их в нужном положении, то можно высвечивать абсолютно любую информацию. Для того, чтобы высветить все арабские цифры, достаточно всего семь светящихся светодиодных полос – сегментов, выставленных определенным образом:

семисегментный индикаторсемисегментный индикатор

Почти ко всем таким семисегментным индикаторам добавляют также и восьмой сегмент – точку, для того, чтобы можно было  показать целое и дробное значение какого-либо параметра

семисегментный индикатор с точкой

По идее у нас получается восьми сегментный индикатор, но по-старинке его также называют семисегментным.

Что получается в итоге? Каждая полоска на семисегментном индикаторе засвечивается светодиодом или группой светодиодов. В результате, засветив определенные сегменты, мы можем вывести цифру от 0 и до 9, а также буквы и символы.

Виды и обозначение на схеме

Существуют одноразрядные, двухразрядные, трехразрядные и четырехразрядные семисегментные индикаторы. Более четырех разрядов я не встречал.

семисегментный индикатор одноразрядныйсемисегментный индикатор двухразрядный

семисегментный индикатор трехразрядныйсемисегментный индикатор четырехразрядный

На схемах семисегментный индикатор выглядит примерно вот так:

семисегментный индикатор обозначение на схемах

В действительности же, помимо основных выводов, каждый семисегментный индикатор также имеет общий вывод с общим анодом (ОА) или общим катодом (ОК)

Семисегментный индикатор

Внутренняя схема семисегментного индикатора с общим анодом будет выглядеть вот так:

семисегментный индикатор внутреннее строение с общим анодом

а с общим катодом вот так:

семисегментный индикатор с общим катодом

Если семисегментный индикатор у нас с общим анодом (ОА), то в схеме мы должны на этот вывод подавать “плюс” питания, а если с общим катодом (ОК) – то “минус”  или землю.

Как проверить семисегментный индикатор

У нас имеются в наличии вот такие индикаторы:

Для того, чтобы проверить современный семисегментный индикатор, нам достаточно мультиметра с функцией прозвонки диодов. Для начала ищем общий вывод – это может быть или ОА или ОК.  Здесь только методом тыка.  Ну а далее проверяем работоспособность остальных сегментов индикатора по схемам выше.

Как вы видите ниже на фото, у нас загорелся проверяемый сегмент. Таким же образом проверяем и другие сегменты. Если все сегменты горят, то такой индикатор целый и его можно использовать в своих разработках.

 

Иногда напряжения на мультиметре не хватает для проверки сегмента. Поэтому, берем блок питания, и выставляем на нем 5 Вольт. Чтобы ограничить ток через сегмент, проверяем через резистор на 1-2 Килоома.

Таким же образом проверяем индикатор от китайского приемника

Семисегментный индикатор

В схемах семисегментные индикаторы  соединяются с резисторами на каждом выводе

Семисегментный индикатор

В нашем современном мире семисегментные индикаторы заменяются жидко-кристаллическими индикаторами, которые могут высвечивать абсолютно любую информацию

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

Семисегментные индикаторы. Практическая электроника :: SYL.ru

Семисегментными индикаторами в наше время называют устройства, которые отображают цифровую информацию. В электрических приборах данные элементы используются довольно часто. Если к ним подключить модулятор, то можно сделать из индикаторов интересные электронные часы. Чтобы более подробно разобраться в этом вопросе, необходимо изучить основные типы устройств. Также важно ознакомиться с моделями, которые представлены на рынке.

семисегментные индикаторы

Одноразрядные модели

Одноразрядный семисегментный индикатор (схема показана ниже) в наше время отличается своей простотой. Как правило, контакты у моделей установлены в параллельном порядке. При этом светодиоды используются самые обычные. Сделать электронные часы из одноразрядных индикаторов можно довольно просто. В данном случае блок питания потребуется на 30 В.

Также следует учитывать, что модулятор для этого типа индикаторов может использоваться исключительно одноканальный. Непосредственно регулятор для него важно вывести через двойной переходник. При этом резисторы для часов подойдут как импульсного, так и инерционного типа. Непосредственно подключение семисегментного индикатора осуществляется через проводник. Предельное напряжение он обязан выдерживать не менее 35 В. При этом параметр силы тока должен составлять 5 А.

электронные часы

Двухразрядные модификации

Двухразрядные модификации на сегодняшний день являются довольно распространенными. Светодиоды в данном случае чаще всего используются красного типа. Однако на рынке можно найти и другие варианты. Сила свечения у данных индикаторов зависит от производителя. Как правило, контакты у них устанавливаются медного типа.

При этом резисторы используются в основном импульсные. Для того чтобы понять, как сделать часы на практике, необходимо заранее подготовить модулятор, а также преобразователь для устройства. В первую очередь для часов подбирается корпус. При этом семисегментные индикаторы важно устанавливать на модулятор. Непосредственно регулятор должен располагаться в стороне. Соединяется он с блоком питания через тетрод. Также для лучшей проводимости многие специалисты рекомендуют использовать усилитель. В данном случае блок питания подойдет на 15 В. В конце работы останется лишь зафиксировать проводник.

семисегментный индикатор схема

Трехразрядные устройства

Трехразрядные устройства обладают большой мощностью. Светодиоды в данном случае имеются резонансного типа, и на рынке они, как правило, представлены белого цвета. Резисторы для подключения индикаторов применяются инерционного типа. Для того чтобы сделать из трехразрядной модификации часы, потребуется найти качественный модулятор. При этом управление семисегментным индикатором будет происходить через регулятор кнопочного типа.

Тетроды в данном случае пороговое напряжение обязаны выдерживать на уровне 15 В. Проводимость их зависит от частотности конденсаторов. Многие специалисты при сборе часов советуют преобразователи устанавливать с тиристором. В данном случае блок питания можно использовать без усилителя. Для подключения индикаторов понадобятся проводники. Для безопасного использования прибора их необходимо изолировать.

Индикаторы серии E 10561

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

Пороговая частота этих устройств не должна превышать 3 Гц. При этом блоки питания, как правило, используются на 30 В. В такой ситуации показатель номинального тока должен располагаться на уровне 12 А. Все это позволит успешно включить индикатор. Непосредственно подсоединение прибора осуществляется через контакты. В некоторых случаях тетрод в цепи может располагаться после преобразователя. В таком случае можно надеяться на пороговое напряжение на уровне 15 В.

управление семисегментным индикатором

Особенности моделей серии E 15461

Семисегментные индикаторы данной серии относятся к классу двухразрядных. В этом случае светодиоды в устройствах установлены резонансного типа. Для подключения модели используются медные контакты. Сделать часы в данном случае довольно просто. Модулятор для этих целей можно использовать одноканального типа. При этом резисторы подбираются средней мощности. Напряжение они обязаны выдерживать минимум на уровне 20 В.

Блоки питания для этих целей можно использовать от персонального компьютера. Также следует отметить, что указанные индикаторы являются довольно компактными. При этом яркость их можно регулировать при помощи модуляторов. Для этого дополнительно потребуется установка преобразователя. Для повышения мощности свечения используются поворотные регуляторы. Усилители в данном случае устанавливаются довольно редко.

Подключение устройства серии E 10578

Индикаторы указанной серии имеются с резонансными светодиодами. В настройке они довольно просты и цифры способны отображать четко. Также следует учитывать, что параметр рассеивания у них очень высокий. Таким образом, устанавливать их в электронные приборы можно довольно просто. Как правило, такие модели используются в микроволновых печах. При этом для секундомеров они также подходят. В данном случае модулятор устанавливается с расширителем. При этом многоканальные модификации являются более распространенными. Усилители для устройств подходят только низкоомного типа. Дополнительно следует учитывать, что частотность модели зависит от блока питания. Если рассматривать прибор на 20 В, то вышеуказанный параметр будет находиться в районе 4 Гц.

подключение семисегментного индикатора

Схема индикаторов серии E 10509

Семисегментные индикаторы данного типа способны похвастаться высокой чувствительностью. При этом светодиоды для них подходят резонансные. На рынке они чаще всего представлены красного и синего цвета. Резисторы для подключения модели применяются в основном импульсные. Однако инерционные аналоги также активно используются в бытовой технике. Тетроды в данном случае напряжение должны быть способны выдерживать максимум на уровне 30 В.

При этом система контактов, как правило, подбирается на два проводника. Усилитель для сборки часов потребуется низкоомного типа. Все это необходимо для того, чтобы справляться с большим отрицательным сопротивлением. Однако в данной ситуации многое зависит от модулятора, который устанавливается.

семисегментный светодиодный индикатор

Применение индикаторов серии E 22563

Индикаторы данного типа на сегодняшний день являются довольно востребованными. На электронные приборы указанные модели устанавливать можно. При этом в промышленной сфере устройства данного типа также являются востребованными. В этом случае светодиоды устанавливаются средней мощности. Причем контактные системы на рынке представлены самые разнообразные.

Подключение моделей к модулятору, как правило, осуществляется через тетроды. Преобразователи подходят с частотой не менее 4 Гц. Дополнительно следует учитывать, что параметр рассеивания свечения светодиодов зависит от мощности блока питания. Если рассматривать самые простые часы с модулятором серии РР20, то он подбирается на 20 В.

электронные приборы

Модель на хроматических резисторах

Семисегментные индикаторы на хроматических резисторах встречаются довольно редко. Модуляторы в данном случае могут использоваться только одноканального типа. Также следует учитывать, что при подключении устройства обязательно необходимо устанавливать усилители. Все это позволит стабилизировать в цепи параметр порогового напряжения. Блоки питания в данном случае можно использовать от персональных компьютеров. Также важно учитывать, что чувствительность системы зависит от типа тетродов.

Использование оптических модуляторов

Оптические модуляторы, как правило, используются с индикаторами резонансного типа. При этом на электроприборы данные конфигурации устанавливаются часто. В данном случае регуляторы используются в основном поворотного типа. При этом кнопочные варианты встречаются довольно редко. Резисторы для указанных систем подходят асинхронного типа. Непосредственно подсоединение модуляторов в цепи происходит через преобразователи.

Драйвер семисегментных индикаторов MAX7219/MAX7221.

Драйвер семисегментных индикаторов MAX7219/MAX7221.

Микросхемы MAX7219 и MAX7221 предназначенs для управления 8-ю семисегментными светодиодными индикаторами, либо светоизлучающими матрицами 8х8 с общим катодом. В микросхеме реализован принцип динамической индикации. Управление работой производится по трехпроводной последовательной  шине. Модель  MAX7221 совместима со стандартами SPI™, QSPI™, и Microwire™. Областью применения данных микросхем является построение многоразрядных индикаторов, шкальных индикаторов, графических дисплеев, управление светодиодными матрицами.

Электрические характеристики.

Напряжение питания 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

alexxlab

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

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