Multiplexné riadenie LED displeja

Zdravím všetkých.
Učím sa programovať PIC-ká potrebujem poradiť pri návrhu multiplexného ovládania troch 7-segmentoviek picom 16f627 ktorý pracuje ako počítadlo impulzov na vstupe RA4.Použil som TMR0 ako čítač
a chcem jeho “obsah” dostať na segmenty.Zatiaľ som sfunkčnil len jeden segment no neviem ako previesť číslo 0-255 na tri segmentovky zapojené zo spoločnou anódou.Anódy jednotlivých segmentoviek sa zapoja na výstupy RA0/2.Výstupy RB0/6 sú paralelne prepojené z jednotlivými segmentmi displejov.Vstup RA4 som zatiaľ zámerne neošetril proti zákmitom kvôli jednoduchosti.
Budem vďačný za každú radu ,prípadne za hotový zdroják na ktorom sa dá pochopiť tento problém.
Zatiaľ vďaka .Relatko.
citac.asm (1.99 KB)

Zdravim,

toto sem řešil tak že sem si vyhranil tři volné registry stovky, desitky, jednotky (nazval sem si je takto XOO,OXO,OOX) a to číslo sem si do nich rozložil. takže například: 154 bylo rozloženo > XOO=1, OXO=5, OOX=4. pak sem použil tabulku čísel jak maš vytvořenou pro zobrazení jednotlivých čísel.

průběh programu vypadal asi takto:

XOO na portB
zapni segnem XOO
počekj chvilku
zhasni segnent XOO

OXO na portB
zapni segmet OXO
počkej chvilku
zhasni segnent OXO

OOX na portB
zapni segnent OOX
počkej chvilku
zhasni segnent OOX

Zdravím.
Chcem sa opýtať ako rozdelím číslo uložené v jednom registri na tri čísla
v troch registroch,obsahujúce stovky,desiatky a jednotky?
Čítal som niečo o zamaskovaní horných a potom dolných štyroch bitov
ale nerozumiem tomu veľmi.Ďalší postup ako zobraziť na “chvíľu”
jednotky ,desiatky a stovky chápem.
Zatiaľ vďaka.Relatko.

HEX císlo rozdělíš na DEC číslo tímhle podprogramem, registry si uprav dle svojích názvů
Před volaním podprogramu dej HEX číslo do W.

;************************************************************************** ; Prevod Hex 8bit na DEC T3,T2,T1 ;************************************************************************** HexDec banksel TMP0 movwf TMP0 clrf TMP1 banksel T1 CLRF T1 CLRF T2 Rad100 banksel TMP0 MOVLW .100 SUBWF TMP0,W ;TMP0-100 MOVWF TMP2 ;TMP2 BTFSC STATUS,C ;zaporne? GOTO Uloz ;NE MOVLW .1 ; SUBWF TMP1,W ;TMP1-1 BTFSS STATUS,C ;kladne? GOTO Rad10 ;NE MOVWF TMP1 ; MOVF TMP2,W Uloz banksel TMP0 MOVWF TMP0 banksel T2 INCF T2,F ;+1 GOTO Rad100 Rad10 banksel TMP0 MOVLW .10 SUBWF TMP0,W ;TMP0-10 BTFSS STATUS,C ;kladne? GOTO End10 ;NE MOVWF TMP0 banksel T1 INCF T1,F ;+1 GOTO Rad10 End10 banksel TMP0 MOVF TMP0,W banksel T0 MOVWF T0 ;T0,1,2=vysledna hodnota banksel 0 return

Myslim že tím, že mu předhodíš hotový program téměř bez popisu, začátečníkovi nepomůžeš.

Hodnotu z registru na 3 cifry rozdělíš takle: (Jedno z mnoha řešení)
stovky = reg / 100
desitky = zbytekpodeleni / 10
jednotky = zbytekpodeleni

Aha,promiň,to mi nějak nedošlo

*banksel * T0 je výběr registru. Je to náhrada za BSF nebo BCF STATUS,RP0 nebo RP1, viz kapitola 3.2 v datasheetu. Mám to tam proto, že kdybych náhou předělal registry do jiné banky než 0, nemusím se starat o banky.
Je to vytažené z kousku programu, kde TMPx je v BANK0 a Tx je v BANK2. Pokud používaš zatím jen BANK0, tak to tam mít nemusíš.

Pred voláním HEX16 dej do NumH a NumL 16bit číslo. V DEC1xxxx budeš mít výsledek.

Proč se to jmenuje:"Prevod Hex 16bit ", když to má převádět binární číslo?

Nebudeš tomu věřit, ale čekal jsem, že se zeptáš. :smiley: :smiley:

Sice je to binární číslo, ale v programu, ze kterého jsem to vytáhl, tak to tak mám, aby se mi to nepletlo. BIN 11111111 11111111 je DEC 65535, ale 2 registry po 0x255 jsou taky 65535, jinak 0xFFFF, když je spojiš. A v programech nepoužívám BINární čísla moc často, vetšinou HEX a DEC.
A psal jsem v 3 ráno, tak se mi to nechtělo moc přepisovat.
Mám to přepsat? :smiley:

Nevím jestli je to dobře nebo špatně, že jsem tak průhlednej. :smiley:
Ale šlo mi o to, že je to trochu zavádějící i když se tenhle obrat běžně používá.
V každém případě jsem si algoritmus zkusil a funguje.

Můžu doporučit
microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en529949
Tam je vícero algoritmů i ten Bin16BCD

Zdravím.
Všetkým ďakujem,mám vo veci úplne jasno.Relatko.

Já beru příklady odsud