Multiplex 7 segment

Zdravím všechny.

Potřeboval bych poradit s řizením multiplexního displeje. Jedná se o 57 mm LED displeje se společnou katodou. Napájecí napětí jednoho segmentu je cca 8V. Napájení celého displeje jsem zkoušel až do 12 V a nemá to skoro žádnej vliv na svítivost. Multiplex je řízen PIC16F877A. Bude s toho info panel do hospody, teplota piva, hodiny, datum atd.
Mám to takhle.

A teď problém.

Jde mi o to, že když na prvním displeji svítí číslo 1 a na druhém displeji svítí číslo 8 tak rozdíl ve svitu je mezi nimi až katastrofický.

Nevíte někdo jak to správně zapojit aby svit displeju byl nezavislej na tom, co na nich svítí? Plošnák ještě nemám, takže není problém jakakoliv úprava.

Díky
57mm.JPG

Problém bude v tranzistorech. Zkontroluj otevření tranzistorů a proudovou spotřebu, protože se mi zdá, že BC547 je pro buzení 7-mi segmentů nedostatečný.

Tak, jak je to teď, je spotřeba při 8.8.8.8.8.8.8.8. 95mA, což je dobré. Mýslíš že změnit 547 za BD139?

Zkoušel jsem teď BD139, ale se stejným výsledkem

Tak chyba bude přímo v tom displeji, když není schopen mít stejný jas pro 1 či 7 segmentů.

Je to 8x 7 segmentovka. Tak pochybuji o tom, že by to dělalo všech 8.

Zkoušel jsem jen jednu zapojit a spínat A, A+B, A+B+C atd a takhle svítí všechny stejně. Něco je špatně a já nevím co. :smiley:

chyba bude podla mna v programe…
imho: veľmi krátko nechávaš na tej 7segmentovke tú konkrétnu hodnotu… skús sem hodiť program (alebo najlepšie časť programu kde realizujes vypisovanie)…

Pokud není chyba ve statickém režimu, je ji třeba hledat v dynamickém. A ještě jedna věc, nikde tam nevidím rezistory omezující proud pro jednotlivé segmenty.

Zkoušel jsem 220 ohm a nemělo to vliv, jen jsem musel zvýšit napětí cca o 1,2 V, abych se dotal na stejnej jas, tak jsem je vypustil.

IT0IF	
	BCF		INTCON,T0IF	;vynulovat příznak
	incf	DISPORADI,f
	movlw	.8
	subwf	DISPORADI,w
	btfss	STATUS,Z
	goto	$+2
	clrf	DISPORADI
Anody
	swapf	DISPORADI,w
	movwf	PORTC
Katody
	movlw	DIS0
	addwf	DISPORADI,w
	movwf	FSR
	movf	INDF,w
	call	PA
	movwf	PORTD	

Přerušení každých 1.6ms

Katody jsou spínány přes 74HC4514. Chybou v programu to asi nebude, protože když dám jednu přes tranzistor a spínám segmenty, tak se mění jas. Chyba bude ve spínání katody. Ale BD139 by ji utáhnout měla bez problému a dělá to taky. A s odpory i bez nich se ten jas mění. Když ji zapnu na 8V bez tranzistoru, tak jede normálně.

aha… tak nic :blush:

heh :slight_smile: to ti to jeste neshorelo? ten display asi bude mit vic LED na segment, ale urcite ne tolik, aby vydrzely 12V… bez ochrannejch odporu to je blbej napad…

Zkus vypnout multiplex a nech rozsvicenou 1 cislici… promer napeti na tranzistorech - vsechny, kde to sviti, musej bejt v saturaci (do 0,5V), jesli ne, omrkni proudy a odpory v bazich.

a jeste neco - pokud by to byl cervenej disp. a mel 3 diody na segment, 8V mu musi stacit i s ochrannyma odporama :wink:

To od tebe není hezký!!!

Které tranzistory myslíš? Které spínaj katody nebo anody? Dneska my to nějak nemyslí :blush:

Ty co spínaj katody, BC547, je tam 0,82V. Anodové, co svítí, 547 má 0,78V, 557 má 0.74

A ten displej má 4 diody, podle katalogu.

pokud na jedny cislici rozsvitis “8”, mely by bejt v saturaci vsechny (vsechny segmentovy a ten co vybira, ktera cislice ma svitit). (teda krome tech u tecky) 0,8V asi bude dobry, preci jen je to malej tranzistor :wink:
(btw. ja si katody a anody furt pletu :unamused: , takze ty nazvy radsi nepouzivam… orientuju se podle znacek :smiley: )

Jste napad: pokud budou skutecne vsechny naplno otevreny, zkus zmerit napajeni, jesli nepada :wink:

Když tam dám BD139, do katod, tak je na něm 0,748V

Googlil jsem, ale návod na multiplex se společnou katodou jsem nevygooglil. S anodama je toho dost, ale s katodama an ťuk.

Napětí nepadá, nemá jak padat. Krmim to ze zdroje. Odběr všeho je cca při 8,5 V 100mA

ty BD139 do horni rady jsou dobry, ale maj mensi zesileni, trochu bych je prikrmil :wink: nicmene jesli maj jen 0,7V pri rozsviceny “8” tak to klido nech.

Jakej je rozdil v odberu pri “1” a pri “8” ? mel by to bejt skoro 8mi nasobek :wink:

jaky je napeti na 1 segmentu?

Je to divný, ale jestli mu dám do báze 220 ohm 0,72V a 10k 1,1V a na jas to skoro nemá vliv.

Připojil jsem měřák pro přesnější měření.

Při 1 je to 84,5mA, při 8. je to 133mA při 9V, když svítí všech 8 displeju. Ale když rožnu jen jeden, klesne odběr při 8. na 43mA a při 1 na 36mA. To je nějaký divný, vždyt svítí vlastně jen jeden, i když jako svítí všechny.
Vyhodím tu 74HC4514 a zkusím to přímo na porty procesoru, abych vyloučl tu 74HC4514. Ať neřeším něco, za co muže jinej IO

Tak vyhozením 74HC4514 jsem ušetřil 3mA a zabral jsem 5 portu. :blush:

to je teda hodne divny - hlavne ten rozdil pri “1” a “8”… (predtim sem kecal, melo by to bejt asi 4 nasobek)

Ten rozdil pri 1 cislu a vice by mohl bejt diky saturaci - jedno cislo jeste nezhasne a uz se rozsveci dalsi (pokud mas velkou frekvenci, coz asi pri tolika cislech mas)… Da se udelat protisaturacni uprava, ale to zatim neni dulezity.

merils napeti na nejakym segmentu? (primo na LED, ne napajeci)

Přímo na segmentovce, napájecí napětí pro segmentovky je 9.51V, segment A - F je tam 7.36 ± 0.1V.

Čistě teoreticky, dle datasheetu, jedna LED má 1,8V, jsou tam 4, to je 7.2V, tak to by celkem souhlasilo.

hmm… to je asi 5xled v segmentu…

tohle napeti musi bejt stejny pri rozsviceni “1” i “8” (± nejaka desetina), jesli ne, tak se ten rozdil musi obevit bud na nekterym tranzistoru, nebo bejt mensi napajeni (kdyby povolil zdroj).

Jesli to bude na nejakym tranzistoru, pritlac mu par mA do baze, jesli zdroj, mas peska. Ale rozhodne to musi bejt jedno z toho. Kdyby se napeti nemenilo a presto to pri kazdy cislici svitilo jinak, tak ses asi v bermudskym trojuhelniku :slight_smile: (pokud nemas v programu dobu sviceni ovlivnenou zobrazovanou cislici, coz nepredpokladam)

Tak jsem trošku upravil odpory ale dělá to pořád, sice už ne tak moc. Ale vypl jsem multiplex a jednu segmentovku ovládám přímo přes porty a nedělá to. Spínám postupně A, A+B atd a jas neklesá. Když zapnu multiplex, tak to zase začne dělat. Chyba v programu! Ale jaká? Přerušení každých 2,4ms

[code]
PK
ADDWF PCL,F ; a pricist k PCL
; hgfedcba 1 sviti
retlw b’00000001’ ;0
retlw b’01000000’ ;1
retlw b’00100000’ ;2
retlw b’00010000’ ;3
retlw b’00001000’ ;4
retlw b’00000100’ ;5
retlw b’00000010’ ;6
retlw b’10000000’ ;7

PA
addlw .230 ;255 - 0x19 = 243
btfss STATUS,C
goto $+3
movlw 0x0B
goto $+2
movf INDF,w
ADDWF PCL,F ; a pricist k PCL
; hgfedcba 1 sviti

retlw	b'00111111'	;0
retlw	b'00000110'	;1
retlw	b'01011011'	;2
retlw	b'01001111'	;3
retlw	b'01100110'	;4
retlw	b'01101101'	;5
retlw	b'01111101'	;6
retlw	b'00000111'	;7
retlw	b'01111111'	;8
retlw	b'01101111' ;9
retlw	b'00000000' ; 0x0A NIC
retlw	b'01000000' ; 0x0B -
retlw	b'00000100' ; 0x0C _
retlw	b'00000100' ; 0x0D _
retlw	b'00000100' ; 0x0E _
retlw	b'00000100' ; 0x0F _

retlw	b'10111111'	;0x10 0.
retlw	b'10000110'	;0x11 1.
retlw	b'11011011'	;2
retlw	b'11001111'	;3
retlw	b'11100110'	;4
retlw	b'11101101'	;5
retlw	b'11111101'	;6
retlw	b'10000111'	;7
retlw	b'11111111'	;8
retlw	b'11101111'   ;9

;přerušení od přetečení časovače0
IT0IF
movlw .100
movwf TMR0
BCF INTCON,T0IF ;vynulovat příznak
incf DISPORADI,f
movlw .8
subwf DISPORADI,w
btfss STATUS,Z
goto $+2
clrf DISPORADI
Anody
movf DISPORADI,w
call PK
movwf PORTC
Katody
movlw DIS0
addwf DISPORADI,w
movwf FSR
movf INDF,w
call PA
movwf PORTD

;********************************
;dokončit přerušení
;--------------------------------[/code]

v tom se nevyznam, na to potrebujes nejakyho picare :wink: zrovna dneska odpoledne jsem daval dohromady se spolustudakem mx obsluhu 7seg, ale je to v C a pro avr, takze to by ti moc nepomohlo…