Модуль индикации для микроконтроллеров

Техническое решение защищено патентом РФ №2390048 на изобретение

Возможности:
• двухпроводный последовательный интерфейс;
• 10-и разрядный 7-и сегментный ЖКИ-модуль МТ-10Т7/8/9;
• клавиатура — 4х1
— работа по прерыванию
— маскирование кнопок
• канал звуковой индикации;

Модуль (рис.1) имеет двухпроводный последовательный интерфейс передачи данных. Линия SD (Serial Data) двунаправленная, используется для передачи данных от микроконтроллера к модулю, чтения состояния клавиатурной матрицы, выбора режима записи (адрес/данные) в ЖКИ и управления ключом динамика. По линии CLK микроконтроллером передаются синхроимпульсы.

i1Состав: сдвиговый регистр (DD1), коммутатор кнопок (DD2), ключ выхода (Q1), ЖКИ-модуль, ключ динамика (Q2), интегрирующая цепь-D1,R1,C1.

Каждый бит входной последовательности (рис.2) данных на SD тактируется передним фронтом импульса синхронизации, по которому производится запись и сдвиг информации в регистре. Высокий уровень на CLK открывает ключ Q1 и замыкает выход коммутатора на шину SD. Это время используется для чтения состояния адресуемого канала портом микроконтроллера, сконфигурированного как вход. Сканирование кнопок осуществляется «бегущей 1».

i2

Запись в ЖКИ производится занесением в сдвиговый регистр 4-х бит информации, установкой/сбросом линии SD (данные/адрес) и очисткой CLK на время формирования низкого уровня на входе WRL ЖКИ. При указанных на схеме номиналах на это требуется 12-14 мкС. По истечении защитного интервала рекомендуется установить высокий уровень на CLK, защелкнув тем самым данные в регистре ЖКИ.

Описанные процедуры позволяют организовать три независимых режима работы:
— сканирование кнопок (высокий уровень на CLK по завершении операции);
— запись данных в ЖКИ (низкий уровень на CLK на время защитного интервала);
— формирование звукового сигнала.

Режим прерывания от клавиатуры.
Запись в младшие разряды сдвигового регистра 1111 и установка высокого уровня на CLK позволяет определить активность клавиатуры по низкому уровню на SD. Запись 0 в соответствующий разряд регистра заблокирует выбранную кнопку. Код 0000 в регистре запрещает какую либо активность клавиатуры и позволяет без помех формировать звуковой сигнал. Использовать для этой цели сброс линии CLK не рекомендуется, т.к. неизбежна запись в ЖКИ случайной информации.

Практическое применение.
Приведенная схема ориентирована на работу с MCS-51 совместимыми микроконтроллерами, но модуль универсален и позволяет работать с любым семейством. При применении микроконтроллеров AVR рекомендуется увеличить номинал R2 до 20K. В приложениях, критичных по времени исполнения или активно использующих прерывания, записью в ЖКИ можно управлять отдельным портом микроконтроллера по резервной линии WR. В этом случае детали интегрирующей цепи не требуются.

Программная поддержка микроконтроллеров MCS-51:

;Ports
SD	EQU	P3.2  		;INT0 для работы kbd по прерыванию
;Vectors Aria
	org	EXTI0		; EXT0 interrupt vector
	clr	ex0		; запрет прерывания
	setb	kbd_req		; флаг запроса обслуживания
	reti
;Subroutines
scan:	mov	a, #08H
	acall	wrnb		; CLK=1, SD=0 
				; регистр: xxxx0001 (справа-мл)
	mov	r6, #4
RK_4:	setb	SD		; подготовка чтения
	mov	C, SD
	rlc	A
	clr	CLK
	clr	SD		; подготовка записи 0
	setb	CLK		; запись 0, блокир. записи LCD
; РАЗРЕШЕНИЕ ЧТЕНИЯ SD
	djnz	r6, RK_4
	anl	a, #0FH
	xrl	a, #0FH 
	ret			; (A)-scancode 0000xxxx (наж.-1)
;
;Indicate Dig[0-9]
Ind:	clr	a		; SG1 address
	acall	LCD_WA
	mov	dptr, #FONT
	mov	r1, #Dig
	mov	r2, #10
ind_1:	mov	a, @r1		; read next byte
	inc	r1	
	mov	C, acc.7	; сохранить указатель ДТ
	anl	a, #00011111B
	movc	a, @a+dptr 	; бит-карта символа
	mov	acc.7, C	; восстановить указатель ДТ

; Write character
	acall	LCD_WN
	acall	LCD_WN
	djnz	r2, ind_1
	ret

LCD_WA:	acall	wrnb
	clr	sd
	sjmp	lcd_wr

dly_wr	equ	18		; кварц 22,1184 МГц

LCD_WN:	setb	CLK
	acall	wrnb
lcd_wr:	clr	clk
wait:	mov	r6, #dly_wr 
	djnz	r6, $
	ret

wrnb:	mov	r7,#4
wrn1:	clr	clk
	rrc	a		;младшим вперед
	mov	sd, C
	setb	CLK
	djnz	r7, wrn1	;A0=?, CLK=1
	setb	SD
	ret

;Sleep keys
pre_k4:	; блокировка любой комбинации клавиш
	mov	a, EKR		; чтение регистра разрешенных клавиш
	acall	wrnb		; out: CLK=1 - блокировка записи LCD
	setb	ex0		; разрешить внешнее прерывание 0
	ret

;Font table     [x51, AVR]
;          .BCFGEDA   .BCFGEDA
FONT:	DB 01110111B, 01100000B    ; 0, 1
	DB 01001111B, 01101011B    ; 2, 3
	DB 01111000B, 00111011B    ; 4, 5
	DB 00111111B, 01100001B    ; 6, 7
	DB 01111111B, 01111011B    ; 8, 9
	DB 01111101B, 00111110B    ; A, b
	DB 00001111B, 01101110B    ; C, d
	DB 00011111B, 00001000B    ; E, BLANK
	DB 00001000B, 00000000B    ; -, BLANK

Программная поддержка микроконтроллеров AVR:

;Ports
;Keyboard support:
SCAN: 
	ldi	temp,0b00001000	;load 0bXXXX0001
	rcall	wr4b		;OUT: CLK=1, SD=1
	ldi	temp,0b00010000	;scan 4 buttons
scl:	cbi	DDRB,0		;port as input
	cbi	PORTB,SD
	clc
	sbis	PINB,SD
	sec
	sbi	DDRB,0		;port as output	
	cbi	PORTB,CLK
	rol	temp
	sbi	PORTB,CLK
	sbi	PORTB,SD
	brcc	scl		;OUT: CLK=1, SD=1
	ret           		;Out: temp – scancode
;Indicate Dig[0..9]
Ind:    ldi     temp,0x00       ;SG1 address
        rcall   LCD_WA
        ldi     YL,low(Dig)
;       ldi     YH,high(Dig)
ld1:    ld      temp,Y+         ;temp <- digit
;Write symbol from temp to LCD: ;temp.7 - point
        bst     temp,7          ;T <- temp.7
        andi    temp,0x7F       ;temp.7 <- 0
        ldi     ZL,low (FONT*2) ;char table base
        ldi     ZH,high(FONT*2)
        add     ZL,temp         ;add offset (Z + temp)
        clr     r0
        adc     ZH,r0
        lpm                     ;read next byte
        mov     temp,r0

;Write data from temp to LCD:
        bld     temp,7         ;bit 7 - segment H, restore DP
        rcall   LCD_WN         ;write nibble from temp to LCD
        rcall   LCD_WN         ;write nibble from temp to LCD
        cpi     YL,low(Dig+10)
        brne    ld1            ;repeat for 10 digits
        ret

;LCD support:
.equ    Dly_wr    =80          ;Write delay        x0,10uS

;Write nibble from temp to LCD:
LCD_WA: rcall   wr4b           ;OUT: CLK=1, SD=1
        cbi     PORTB,SD       ;SD==0 -> A0
        rjmp    lcd_wr
;
wr4b:	ldi	tempD,4		;write 4 bits to LCD
wr4:	cbi	PORTB,CLK
	cbi	PORTB,SD
	sbrc	temp,0		;Low bit forward
	sbi	PORTB,SD
	lsr	temp
	sbi	PORTB,CLK
	dec	tempD
	brne    wr4		;OUT: CLK=1, SD=?
	Sbi	PORTB,SD
	ret

Недостатки.
Взаимозависимость аппаратных и программных средств при записи в ЖКИ, использование нерекомендованых изготовителем режимов, безусловно, не достоинство описанного решения, но его экономичность — не недостаток.

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

Испытания.
Модуль специально испытывался в составе Генератора прямоугольных импульсов на основе AVR Ридико Леонида Ивановича [1]. Главным критерием служила работа микроконтроллера на пределе возможностей быстродействия. Исходный текст программы позволил без проблем интегрировать описанный модуль. Объем исполняемого кода даже уменьшился. Сбои в индикации наблюдались только при включении питания с предустановкой предельно малого периода следования импульсов. Работа генератора в области малых значений периода и длительностей имеет, увы, звуковое сопровождение, не предусмотренное авторами. В остальном замечаний нет.

Варианты.
Для некоторых применений может оказаться полезным повышенная нагрузочная способность выходов регистра. Для этого случая — 74HC164. Возможна замена 4094 на 4015 (К561ИР2). На месте DD2 работают К176, К561КТ1/КТ3. Подтягивающие резисторы применяются по необходимости, но особое внимание токам, протекающим через контакты кнопок. Для приложений, где наличие четырех кнопок излишне, схема упрощается (Рис.3) Читатель может самостоятельно разработать еще более простую схему для прибора, где и три кнопки — много.

i3

В ряде особых случаев вместо 4066 используются 4051/52/53, но их применение потребует дополнительно инвертор. Давно снятые с производства отечественные КР590КН6/3 имеют неинвертирующий вход разрешения (в отличие от 4051/52/53) и схема (рис.4) получается наиболее простой. Ключ Q1 на полевом транзисторе уже не нужен. Программная составляющая изменяется незначительно. Модуль с КР590КН3/6 имеет достоинства и недостатки, главным из которых автор считает невозможным сохранить работу клавиатуры по прерываниям.

i4

Описанная выше реализация имеет значительные потенциальные возможности по превращению модуля в стандартное универсальное устройство ввода-вывода микроконтроллерных систем, поскольку позволяет использовать любые ЖКИ-модули с 4/8 бит параллельной шиной данных.

Ссылки:
1. Редико Л.И. Генератор прямоугольных импульсов на основе AVR.

200308-5

Comments are closed.