logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

M8+4xwyświetlacz LED MPX i jego regulacja jasnościProblemASM

psooya 03 Gru 2007 18:22 1263 5
  • #1 4547757
    psooya
    Poziom 38  
    Posty: 5341
    Pomógł: 376
    Ocena: 574
    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
    
    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
    Załączniki:
    • termometr.asm.txt (8.56 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #2 4552876
    psooya
    Poziom 38  
    Posty: 5341
    Pomógł: 376
    Ocena: 574
    kurcze nikt mi nie pomoże?? No ja zdaje sobie sprawę zę to nie jest baskupa i mało kto wie co się dzieje ale chodzi mi o samą koncepcje ewentualnie reszte sam sobie zrobię. NIe oczekuję tu raczej kodu a dobrego pomysłu (znaczy takiego żeby nie używać zbędnych waitów bo zrobienie na wait'cie to nie problem ale jaki sens ??)
  • Pomocny post
    #3 4553053
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    psooya napisał:
    ...
    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

    Pomysł z "pustymi" jest dobry , tylko wykonanie kiepskie ;)
    Ty zrobiłeś 1,2,3,4,pusty,pusty,pusty,pusty , a należało zrobić "przeplatankę" 1,pusty,2,pusty,3,pusty,4,pusty.Niestety , taka "regulacja" , jest tylko dwupoziomowa :|
    Gdybyś mógł "przenieś" obsługę LED na timer2 , to do wygaszania LED-ów , mógłbyś wykorzystać przerwanie od OCR2 i wtedy regulacja była by ... "płynna".
    Jeśli zaś chodzi o sam kod , to po co używasz skoków typu BRNE PC+/- ileśtam :?: Tym niech sie martwi kompilator , a Ty masz od tego etykiety - to tak na marginesie :)

    Piotrek
  • #4 4553308
    psooya
    Poziom 38  
    Posty: 5341
    Pomógł: 376
    Ocena: 574
    heheh dlatego że robi sie w kodzie nie czytleność jak trzeba co drugą linijkę użyć brne breq itp to jest mega syf i nie wiadomo co się dzieje. Etykiet używam jak skacze daleko a nie o 3 rozkazy czy o 2 tak wygląda to zdecydowanie ładniej i czytelniej. Mam pytanie co do Timer 2. Niema problemów z przeniesieniem tylko że w jakim sensie wykorzystać przerwanie od OCR2? Pomysł z przeplotem zrobiłem nic to nie daje bo również zmienia sie wypełnienie ale i częstotliwość co jest nie dopuszczalne w tym projekcie. Już patrze do PDF do M8 zobaczę jak działa ORC2
    Pozdrawiam

    Dodano po 9 [minuty]:

    Popatrzyłem do PDFa i jeśli bym mógł poprosić o rozjaśnienie twojej koncepcji myślenia... :-) będę bardzo wdzięczny bo przerwanie można zrobić na różne sposoby i różnie wykorzystać OCR2. Mogę porównywać TCNT z ORC2 hmm jak będzie równe to przerwanie... hmmm ....coś dziś ciężko myślę i wtedy kasować kolumny? wtedy by można na jednym timerze mieć dwa przerwania hmm :-) dobrze dedukuję :-)

    Dodano po 1 [godziny] 8 [minuty]:

    Witam
    To działa zrobiłem tak jak wydedukowałem z Twojej propozycji i to jest wypas pomysł. Normalnie dlaczego na to nie wpadłem ?? Za mało praktyki :/ a za dużo możliwości tego procesora :)
    Bardzo dziękuję za pomoc
    Zamieszczam swój kod dla innych na przyszłość może się komuś przyda
    Załączniki:
    • termometr.asm.txt (9.04 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #5 4554542
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    psooya napisał:
    heheh dlatego że robi sie w kodzie nie czytleność jak trzeba co drugą linijkę użyć brne breq itp to jest mega syf i nie wiadomo co się dzieje. Etykiet używam jak skacze daleko a nie o 3 rozkazy czy o 2 tak wygląda to zdecydowanie ładniej i czytelniej.

    Hmmm... każdy ma prawo mieć własne zdanie , ale ... to tak na marginesie ;)
    psooya napisał:

    Zamieszczam swój kod dla innych na przyszłość może się komuś przyda

    A to jest to , "co tygrysy lubią najbardziej" i świadczy o "profesjonalnym" podejściu do naszego forum :)

    Pozdrawiam
    Piotrek
REKLAMA