Jít k navigaci - Jít k vyhledávání


Seriál - PIC16F84 - 23 - Zobrazovače úvod a multiplexní režim

11. 01. 08 - 20:25. Napsal Jiří Chytil. Přečteno 6618x. 8 komentářů

Když budete dělat s MCU, tak se snad vždy naskytne nutnost něco zobrazit. Možnosti jak stav, výsledek nebo cokoliv jiného zobrazit je několik, od jediné diody, přes sedmi segmentové displeje až po grafické displeje a PCčka.

Zobrazení pomocí diod jsme používali po celou dobu. Nyní je čas přejít na něco trochu jiného a v prvé řadě to budou sedmi segmentové displeje. V dnešní době máme většinou displeje, které mají společnou ANODU. Použít můžeme i displej LCD. Běžně jsou v nabídce se zobrazením 3,5 nebo 4 znaků. Jenže se nám zde objevuje problém, už když bychom na PIC16F84A chtěli připojit dva sedmi segmentové displej napřímo, neměli bychom dostatek vývodů, a co teprve kdyby displejů bylo 6 nebo dokonce ještě víc?

obrázek přímého připojení k PICu
Obrázek č. 1 - Přímé připojení k PICu (po jednoduchost nejsou zakresleny ochrané rezistory)

Při realizaci zapojení je nutné počítat s ochrannými odpory pro jednotlivé segmenty (nejsou z úsporných důvodů zakresleny).

Řešení problémů je ohromná spousta a také má velký vliv na počet zabraných vývodů. Zatím co pokud bychom chtěli celé zapojení realizovat bez přídavných integrovaných obvodů, bylo by pro 4 sedmi segmentovky nutných minimálně 7+4 vývody, tedy 11 vývodů. Pokud bychom ovšem použili pouhé dva integrované obvody, stáhneme počet na 6 vývodů, to je skoro poloviční úspora a ušetřit se dá ještě více. Prvně se ale podíváme na zobrazovaní na jediném display. Kód je poměrně jednoduchý a je zde ukázán i převod z BCD na 7seg. Samotné zobrazení spočívá pouze s přesunem hodnot na PORTB.


		INCLUDE	"P16F84A.INC"
		LIST 	P=16F84A, R=DEC
		__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;-------------------------------------------------------------
		
dat		EQU		H'0C'
c1		EQU		H'0D'
c2		EQU		H'0E'

program		BSF		STATUS,RP0	;inicializace uP
		MOVLW		b'00000000'		
		MOVWF		TRISB			
		BCF		STATUS,RP0
		CLRF		dat
			
run		CALL		wait		;hlavní běh programu	
		INCF		dat,1
		CALL		print
		MOVLW		b'00001010'
		SUBWF		dat,0
		BTFSC		STATUS,Z
		CALL		clearB		
		goto		run

print		MOVLW		b'00000000'	;struktura která rozhoduje o tom
		SUBWF		dat,0		;které číslo bude na
		BTFSC		STATUS,Z	;7 segmentovém displeji 
		CALL		print0		;zobrazeno
		BCF		STATUS,Z
		MOVLW		b'00000001'
		SUBWF		dat,0
		BTFSC		STATUS,Z
		CALL		print1
		BCF		STATUS,Z
		MOVLW		b'00000010'
		SUBWF		dat,0
		BTFSC		STATUS,Z
		CALL		print2
		BCF		STATUS,Z
		MOVLW		b'00000011'
		SUBWF		dat,0
		BTFSC		STATUS,Z
		CALL		print3
		BCF		STATUS,Z
		MOVLW		b'00000100'
		SUBWF		dat,0
		BTFSC		STATUS,Z
		CALL		print4
		BCF		STATUS,Z
		MOVLW		b'00000101'
		SUBWF		dat,0
		BTFSC		STATUS,Z
		CALL		print5
		BCF		STATUS,Z
		MOVLW		b'00000110'
		SUBWF		dat,0
		BTFSC		STATUS,Z
		CALL		print6
		BCF		STATUS,Z
		MOVLW		b'00000111'
		SUBWF		dat,0
		BTFSC		STATUS,Z
		CALL		print7
		BCF		STATUS,Z
		MOVLW		b'00001000'
		SUBWF		dat,0
		BTFSC		STATUS,Z
		CALL		print8
		BCF		STATUS,Z
		MOVLW		b'00001001'
		SUBWF		dat,0
		BTFSC		STATUS,Z
		CALL		print9
		BCF		STATUS,Z
		RETURN

print0		MOVLW		b'01000000'	;zobrazení čísla 0
		MOVWF		PORTB
		RETURN

print1		MOVLW		b'01111001'	;zobrazení čísla 1
		MOVWF		PORTB
		RETURN

print2		MOVLW		b'00100100'	;zobrazení čísla 2
		MOVWF		PORTB
		RETURN

print3		MOVLW		b'00110000'	;zobrazení čísla 3
		MOVWF		PORTB
		RETURN

print4		MOVLW		b'00011001'	;zobrazení čísla 4
		MOVWF		PORTB
		RETURN

print5		MOVLW		b'00010010'	;zobrazení čísla 5
		MOVWF		PORTB
		RETURN

print6		MOVLW		b'00000010'	;zobrazení čísla 6
		MOVWF		PORTB
		RETURN

print7		MOVLW		b'01111000'	;zobrazení čísla 7 
		MOVWF		PORTB
		RETURN

print8		MOVLW		b'00000000'	;zobrazení čísla 8
		MOVWF		PORTB
		RETURN

print9		MOVLW		b'00010000'	;zobrazení čísla 9
		MOVWF		PORTB
		RETURN

clearB		MOVLW		b'01111111'	;nulování registru data
		MOVWF		PORTB		;a zhasnutí displeje
		CLRF		dat
		RETURN

wait		MOVLW		255			;podprogram čekání
		MOVWF		c2			
wait2		MOVLW		255
		MOVWF		c1
wait1		DECFSZ		c1,1
		GOTO		wait1
		DECFSZ		c2,1
		GOTO		wait2
		RETURN
		END

Prvním řešením zobrazení na více displejích je tedy multiplexní provoz, je založen na nedokonalosti lidského oka. Takže displej vlastně nesvítí, ale velice rychle bliká. Mikrořadič první rožne potřebné segmenty na displeji prvním, potom se přesune na druhý, a tak dál, a tak dál. Toto se celé opakuje mnohokrát za sekundu.

obrázek přímého připojení k PICu
Obrázek č. 2 - Zapojení do multiplexu (po jednoduchost nejsou zakresleny ochrané rezistory)

Kód, který takové zobrazení zajistí, není příliš složitý. Mnohem složitější by byl kód, který by převáděl z binární hodnoty na hodnotu BCD nebo přímo na 7segmentový displej.


		INCLUDE	"P16F84A.INC"
		LIST 	P=16F84A, R=DEC
		__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;-------------------------------------------------------------
		
c1		EQU		h'0C'

program		BSF		STATUS,RP0	;inicializace uP
		MOVLW		b'00000000'		
		MOVWF		TRISB	
		MOVLW		b'00000000'		
		MOVWF		TRISA		
		BCF		STATUS,RP0
		CLRF		PORTA
		
display		CALL		print2		;zjednodušená ukázka 
		BSF		PORTA,0	;multiplexního režimu
		CALL		wait		;(statická)
		BCF		PORTA,0				
		CALL		print6
		BSF		PORTA,1
		CALL		wait
		BCF		PORTA,1
		GOTO		display		

print0		MOVLW		b'01000000'	;tisk číslic 0 - 9
		MOVWF		PORTB
		RETURN

print1		MOVLW		b'01111001'
		MOVWF		PORTB
		RETURN

print2		MOVLW		b'00100100'
		MOVWF		PORTB
		RETURN

print3		MOVLW		b'00110000'
		MOVWF		PORTB
		RETURN

print4		MOVLW		b'00011001'
		MOVWF		PORTB
		RETURN

print5		MOVLW		b'00010010'
		MOVWF		PORTB
		RETURN

print6		MOVLW		b'00000010'
		MOVWF		PORTB
		RETURN

print7		MOVLW		b'01111000'
		MOVWF		PORTB
		RETURN

print8		MOVLW		b'00000000'
		MOVWF		PORTB
		RETURN

print9		MOVLW		b'00010000'
		MOVWF		PORTB
		RETURN

			
wait		MOVLW		255
		MOVWF		c1
wait1		DECFSZ	c1,1
		GOTO		wait1
		RETURN
		END

V další zapojení budeme používat jednoho přídavného obvodu a to převodníku z BCD na 7seg. kód. V zapojení tím ušetříme 3 vodiče. Což někdy může být i více než dost. Ovšem ani zde nám neodpadne nutnost převodu ze šestnáctkového čísla, což je záležitost poněkud komplikovaná.

obrázek přímého připojení k PICu
Obrázek č. 3 - Zapojení do multiplexu s převodníkem BCD -> 7seg. (po jednoduchost nejsou zakresleny ochrané rezistory)

		INCLUDE	"P16F84A.INC"
		LIST 	P=16F84A, R=DEC
		__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;-------------------------------------------------------------
		
c1		EQU		h'0C'
program		BSF		STATUS,RP0	;inicializace uP
		MOVLW		b'00000000'		
		MOVWF		TRISB	
		MOVLW		b'00000000'		
		MOVWF		TRISA		
		BCF		STATUS,RP0
		CLRF		PORTA
		
display		CALL		print3		;zjednodušená ukázka 
		BSF		PORTA,0	;multiplexního režimu
		CALL		wait		;(statická)
		BCF		PORTA,0				
		CALL		print4
		BSF		PORTA,1
		CALL		wait
		BCF		PORTA,1
		GOTO		display		

print0		MOVLW		b'00000000'	;tísk číslic 0 - 9
		MOVWF		PORTB
		RETURN

print1		MOVLW		b'00000001'
		MOVWF		PORTB
		RETURN

print2		MOVLW		b'00000010'
		MOVWF		PORTB
		RETURN

print3		MOVLW		b'00000011'
		MOVWF		PORTB
		RETURN

print4		MOVLW		b'00000100'
		MOVWF		PORTB
		RETURN

print5		MOVLW		b'00000101'
		MOVWF		PORTB
		RETURN

print6		MOVLW		b'00000110'
		MOVWF		PORTB
		RETURN

print7		MOVLW		b'00000111'
		MOVWF		PORTB
		RETURN

print8		MOVLW		b'00001000'
		MOVWF		PORTB
		RETURN

print9		MOVLW		b'00001001'
		MOVWF		PORTB
		RETURN

wait		MOVLW		255
		MOVWF		c1
wait1		DECFSZ		c1,1
		GOTO		wait1
		RETURN
		END

Ušetřit můžeme ještě více vývodů, například tím, že anody nebudeme spínat přímo z procesoru, ale přes nějaký převodník, 1 z 10 nebo podobný. Toto řešení se vyplatí tím víc, čím víc je sedmi segmentů.

obrázek přímého připojení k PICu
Obrázek č. 4 - Zapojení do multiplexu s převodníkem BCD -> 7seg. a BIN -> 1/16 (po jednoduchost nejsou zakresleny ochrané rezistory)

Kód pro toto řešení vůbec uvádět nebudu, protože je ještě jednodušší než pro předchozí zapojení. Potřeba je ovšem dbát na to, aby se displeje stíhali bez problémů rozsvěcovat. A neblikal.

Obnovování (rozsvěcování) displeje lze při běhu nějakého programu provádět pomocí přerušení od časovače, který vždy, když je to nutné a možné, po určitém čase přeruší běh programu a znovu rozsvítí segmenty na displeji a potom se zpět vrátí se své činnosti a to se stále opakuje.



Autor
Jiří Chytil

Jiří Chytil24 let

Šéfredaktor 8bitu.cz. V současné době je studentem prvního ročníku magisterského studia na Fakultě elektrotechické na VUT v Brně. Mezi jeho koníčky patří elektrotechnika, bastlení, programování a hudba. Pracuje na částečný úvazrek ve společnosti Honeywell HTS ACS.


Novinky Další novinky

[10. 03.]  Tak jsem pro Vás připravil novou anketu. A snažím se pokračovat na projektu jehož výsledky bych zde rád zveřejnil, ale poněkud mě brzdí diplomová práce a práce.
[30. 01.]  Omlouvám se za nečinnost způsobenou značným nedostatkem času. Nevím, ale jestli se mi to podaří změnit. To víte, člověk stárne a jeho čas je potřeba jinde než na internetu.
[07. 03.]  Po dlouhé době jsme pro vás přichystali novou anketu - najdete ji níže v pravém panelu.
[12. 12.]  Zajímavý počin v oblasti měřící techniky jsou Real-time spektrální analyzátory - odkaz
[07. 12.]  Sice již starší video, ale stále mě uchvacuje. Výroba elektronek "doma" - odkaz

Reklama

Morphy Richards elektronika Okruháři.cz

Programujte.com

Léčivé obrazy - enkaustika Lenka Blažíková

Keramika Věra Coufalová - užitková keramika

Anketa

Jaký obchod preferujete při nákupu součástek?

TME

GES

GME

Farnell

SOS electronic

TIPA

EZK

PS Electronic

Mouser

Buček

Denkl Electronic

FK Technics

Hadex

Conrad

Jiný český

Jiný zahraniční