multiplex s atmega8 na velkom displeji
Napsal: 22 srp 2011, 10:18
Vyskytol sa mi menší problém pri multiplexe s atmega8. a chcem sa spýtať na nejaké drobnosti. v schéme pouzívam veľké displeje konkrétne tieto http://www.sos.sk/?str=371&artnum=11953 . a program je nesledujuci :
.include "m8def.inc" ; definičný súbor AT
.def temp=r16
.def temp1=r17
.def temp2=r18
.cseg
.org 0x0
rjmp RESET
RESET:
ldi temp,high(RAMEND) ;Nastavenie ukazovateľa zásobníka-SP
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,0b00111000
out DDRB,temp;výstup je na PB5,PB4 a PB3
ser temp;nastavenie temp na 0xff
out DDRD,temp ;celyPORTD bude výstupný
out PORTD,temp
out PORTB,temp ;zhasnute všetky DSP
ldi r20,0x01; chceme zobraziť "1"
rcall ZOBRAZ; volanie podprogramu
cbi PORTB,3; svieti DSP1
; ak chceme zobraziť jednotku aj DSP2
cbi PORTB,4
; ak chceme zobraziť jednotku aj na DSP3
;cbi PORTB,5
KON: rjmp KON
;podprogram zobraz zobrazí hodnotu spodných 4 bitov r20
ZOBRAZ:
ldi r21,0b11000000 ;do r21 ulož hodnotu „nula“=0b11000000
andi r20,0x0f;maskovanie horných štyroch bitov r20
breq Z1;skoè na návestie Z1 ak výsledok bol 0
Z1:
out PORTD,r21 ;vyslanie obsahu r21 na PORTD
ret;návrat z podprogramu
po skompilovaní a napáleni programu do atmega8 mi vykresluje cislo aj na ostatne displeje nie len na jeden. podobny problem je aj ked dam na rozne displeje vypisat rozne cisla v cykle tak sa akokeby prekryva vsetko na vsetkych displejoch. Som uz z toho trosku bezradny za každú radu budem veľmi vďačný.
.include "m8def.inc" ; definičný súbor AT
.def temp=r16
.def temp1=r17
.def temp2=r18
.cseg
.org 0x0
rjmp RESET
RESET:
ldi temp,high(RAMEND) ;Nastavenie ukazovateľa zásobníka-SP
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,0b00111000
out DDRB,temp;výstup je na PB5,PB4 a PB3
ser temp;nastavenie temp na 0xff
out DDRD,temp ;celyPORTD bude výstupný
out PORTD,temp
out PORTB,temp ;zhasnute všetky DSP
ldi r20,0x01; chceme zobraziť "1"
rcall ZOBRAZ; volanie podprogramu
cbi PORTB,3; svieti DSP1
; ak chceme zobraziť jednotku aj DSP2
cbi PORTB,4
; ak chceme zobraziť jednotku aj na DSP3
;cbi PORTB,5
KON: rjmp KON
;podprogram zobraz zobrazí hodnotu spodných 4 bitov r20
ZOBRAZ:
ldi r21,0b11000000 ;do r21 ulož hodnotu „nula“=0b11000000
andi r20,0x0f;maskovanie horných štyroch bitov r20
breq Z1;skoè na návestie Z1 ak výsledok bol 0
Z1:
out PORTD,r21 ;vyslanie obsahu r21 na PORTD
ret;návrat z podprogramu
po skompilovaní a napáleni programu do atmega8 mi vykresluje cislo aj na ostatne displeje nie len na jeden. podobny problem je aj ked dam na rozne displeje vypisat rozne cisla v cykle tak sa akokeby prekryva vsetko na vsetkych displejoch. Som uz z toho trosku bezradny za každú radu budem veľmi vďačný.