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

Assembler, atmega16, czestotliwosc wskaźnika

aqwe 15 Mar 2010 19:05 1062 10
REKLAMA
  • #1 7833738
    aqwe
    Poziom 11  
    Witam wszystkich forumowiczów, zacznę może od tego, że od nie dawna interesuje się mikrokontrolerami i to jeszcze nie zupełnie się w to wciągłem. Tak więc mam taki problem, gościu z zajęć kazał nam obliczyć częstotliwość migania pojedynczego wskaźnika na wyświetlaczu 7-mio segmentowym LED, tylko ja niestety nie bardzo pamiętam skąd mam wziasc te wartości z tego programu tak więc zwracam się z prośbą do was o podpowiedz w tym zadaniu.





    Cytat:
    ;opoznienie zalezne od r16 dla 16 MHz
    waitms: push yl
    push yh
    opms1: ldy 2000 ; 2000x8 = 16 000
    opms: nop
    nop
    nop
    nop
    sbiw yl,1
    brne opms
    dec r16
    brne opms1
    pop yh
    pop yl
    ret


    Cytat:
    pocz_w: in r16,pina
    com r16
    andi r16,15
    rcall bin7seg

    out portd,r16
    cbi portb,0

    ldi r16,5
    rcall waitms

    sbi portb,0

    in r16,pina
    com r16
    swap r16
    andi r16,15
    rcall bin7seg

    out portd,r16
    cbi portb,1

    ldi r16,5
    rcall waitms

    sbi portb,1
    rjmp pocz_w
  • REKLAMA
  • #2 7833831
    tadzik85
    Poziom 38  
    Za mało informacji. Ale zapewne chodzi ci o częstotliwość odświeżania. Ludzkie oko nie zauważa migania o częstotliwości większej niż 25Hz. Dla lepszego efektu śmiało można przyjąć 50Hz. A jeśli chodzi ci o to ile trwa opóźnienie w tym przykładzie przeanalizuj kod. ! listing zawiera funkcje opóźniania, przeczytaj komentarz a sam dojdziesz co i jak.
  • #3 7833919
    aqwe
    Poziom 11  
    Co do więcej informacji to już tu wiele nie moge dodac bo nie wiem nic więcej, może jeszcze to ze chodzi tu o wykorzystaną technikę multipleksowania. Te twoje 50Hz byłoby nawet rozsądne, bowiem, gdy do r16 zaladuje wartosc 2(ms) i policze częstotliwośc z tego to da 50Hz
  • REKLAMA
  • #4 7834054
    tadzik85
    Poziom 38  
    No to odpowiedz znalazłeś sam.
  • #5 7834191
    aqwe
    Poziom 11  
    No tak tylko ja sobie odpowiedzialem na pytanie takie gdzie:
    Cytat:
    mov r16,r15
    rcall bin7seg
    out portd,r16
    cbi portb,2
    ldi r16,2
    rcall waitms
    sbi portb,2


    czyli ldi r16,2

    tzn ze mam rozumiec ze dobrze rozumuje ze f=1/0,02

    Tylko wtedy zostaje pytanie co do
    Cytat:
    ldi r16,5
    rcall waitms


    bo tu f wychodzi 20Hz a co wedlug tego co wczesniej powiedziales oko powinno dostrzegac a jednak nie bylo widac mrugania :(
  • REKLAMA
  • Pomocny post
    #6 7834480
    tadzik85
    Poziom 38  
    Ja w kodzie widzę 5ms. co daje 200Hz
  • REKLAMA
  • #7 7834590
    aqwe
    Poziom 11  
    Ojjoj. Teraz mi jest glupio pomyliłem przedrostki i dzieliłem zawsze przez 0,001s co za gafa. No to teraz by w sumie wszystko grało.THX
  • #8 7834602
    tadzik85
    Poziom 38  
    Ale to 200HZ oznacza zmianę wyświetlacza a masz ich tam zapewne 2. Więc masz 100Hz odświeżanie
  • #9 7834879
    aqwe
    Poziom 11  
    Jak juz pisalem jestem ciemny z tego, tak wiec nie wysmiejcie mnie jak cos palnę. Ale chodzi ci ze mam 2 wyświetlacze? Z tego co się orientuje to jest tylko jeden.
  • #10 7834916
    tadzik85
    Poziom 38  
    Ja z kodu wnioskuje, że są 2. Ponieważ 2 razy wywoływana jest funkcja wait, 2 razy dokonujesz operacji jakiś i sterujesz jak widzę 2 pinami. Stąd wniosek, że są 2 wyświetlacze, lub jeden ale 2 x 7-segment.
  • #11 7835032
    aqwe
    Poziom 11  
    Juz zaczynam czaic to. Tak jak piszesz jest jeden 2 x 7 segmentowy. Ogolnie to sa na nim 4 x 7 segment. Ale w tym zadaniu wykorzystywane byly dwa.
    Czyli te 200Hz które mi wyszlo dziele przez 2
    a jak w nastepnym mam 500 i na 3 wyswietlaczach to dziele przez 3
    thx
REKLAMA