Witam
Programuję w ASMie jestem średnio zaawansowany kilkanaście softów już napisałem ale mam problem mianowicie nie mogę wymyślić algorytmu i jego implementacji w procku do wyświetlania w multipleksie 4 segmentów LED ale z regulowaną ich jasnością. Regulacja np była by przez ADC ale to już nie problem. Sam wyświetlacz w multiplexie w przerwaniu od timer0 mi działa. Częstotliwość przerwań to około 480Hz (musi taka być bo za bardzo mruga ). Jednakże skończyły mi sie pomysły na regulację jasności. Do rzeczy mój program działa tak. Przychodzi przerwanie, gaszę wszystkie 4kolumny(segmenty) LED po czym ustawiam cyfrę na porcie (8 bitów z kropką) (jakaś tam odpowiadającą jakiejś cyfrze na wyświetlaczu) i załączam pierwszy segment, kończę przerwanie . Następne przerwanie znów gasi wszystko , wybieram cyfrę (8bitów) i zapalam segment 2 i tak dalej do 4 segmentu po czym zaczynam od nowa. Zamieszczam większy fragment kodu i w załączniku cały program
Dodam jeszcze że próbowałem zrobić tak, że dodałem 4 puste wyświetlacze (tzn przerwania przeszły przez 4 kolumny po czym jeszcze liczyły do 4 niewidocznych kolumn Smile) dawało to owszem efekt dobry ale malała częstotliwość przełączania kolumn co powodowało większe mruganie więc ten pomysł odpada. Proszę o pomoc
Pozdrawiam
Programuję w ASMie jestem średnio zaawansowany kilkanaście softów już napisałem ale mam problem mianowicie nie mogę wymyślić algorytmu i jego implementacji w procku do wyświetlania w multipleksie 4 segmentów LED ale z regulowaną ich jasnością. Regulacja np była by przez ADC ale to już nie problem. Sam wyświetlacz w multiplexie w przerwaniu od timer0 mi działa. Częstotliwość przerwań to około 480Hz (musi taka być bo za bardzo mruga ). Jednakże skończyły mi sie pomysły na regulację jasności. Do rzeczy mój program działa tak. Przychodzi przerwanie, gaszę wszystkie 4kolumny(segmenty) LED po czym ustawiam cyfrę na porcie (8 bitów z kropką) (jakaś tam odpowiadającą jakiejś cyfrze na wyświetlaczu) i załączam pierwszy segment, kończę przerwanie . Następne przerwanie znów gasi wszystko , wybieram cyfrę (8bitów) i zapalam segment 2 i tak dalej do 4 segmentu po czym zaczynam od nowa. Zamieszczam większy fragment kodu i w załączniku cały program
Timer0_Ovf:
in temp,sreg
push temp
ldi temp,0
out TCNT0,temp
sbi Port_K1,Seg_K1 ;wygas wszystkie kolumny LEDow
sbi Port_K2,Seg_K2
sbi Port_K3,Seg_K3
sbi Port_K4,Seg_K4
clr temp
ldi Zl,low(wektory)
ldi Zh,high(wektory)
add Zl,licznik
adc Zh, temp
icall
koniec:
Cpi licznik,3
brne PC+3
ldi licznik,0
rjmp PC+2
inc licznik
pop temp
out sreg,temp
reti
wektory:
rjmp k4
rjmp k3
rjmp k2
rjmp k1
k4:
rcall cyfra_minus
sbi Port_Led_DP,Led_DP
cbi Port_K4,Seg_K4
ret
k3:
rcall cyfra1
sbi Port_Led_DP,Led_DP
cbi Port_K3,Seg_K3
ret
k2:
rcall cyfra3
cbi Port_Led_DP,Led_DP
cbi Port_K2,Seg_K2
ret
k1:
rcall cyfra9
sbi Port_Led_DP,Led_DP
cbi Port_K1,Seg_K1
ret
;*************************************************************************
;Kody znakow wyswietlanych na LED
;*************************************************************************
cyfra0: ;wystawia na odpowiednie koncowki portu
cbi Port_Led_A,Led_A ;stany odpowiadajace cyfrze 0
cbi Port_Led_B,Led_B
cbi Port_Led_C,Led_C
cbi Port_Led_D,Led_D
cbi Port_Led_E,Led_E
cbi Port_Led_F,Led_F
sbi Port_Led_G,Led_G
ret
Dodam jeszcze że próbowałem zrobić tak, że dodałem 4 puste wyświetlacze (tzn przerwania przeszły przez 4 kolumny po czym jeszcze liczyły do 4 niewidocznych kolumn Smile) dawało to owszem efekt dobry ale malała częstotliwość przełączania kolumn co powodowało większe mruganie więc ten pomysł odpada. Proszę o pomoc
Pozdrawiam