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

[ATMega8][ASM] - Ćwiczenie na PWM - jak ustawić bity?

Asmox 12 Lip 2014 13:10 1974 8
REKLAMA
  • #1 13789711
    Asmox
    Poziom 9  
    Uczę się programować mikrokontrolery z książki Pawła Borkowskiego: "AVR&ARM7. Programowanie mikrokontrolerów dla każdego". Ćwiczenie, które mam do wykonania, wygląda tak:
    Cytat:
    To ćwiczenie należy do trudnych, gdyż wiedzę konieczną do jego wykonania należy zdobyć samodzielnie. Na rysunku 7.9 widać schemat z podłączoną tylko jedną diodą. Należy układ obsłużyć tak, by wciśnięcie przycisku S4 powodowało zaświecenie diody z maksymalną jasnością, po naciśnięciu przycisku S3 dioda powinna świecić dwukrotnie słabiej, po naciśnięciu S2 - czterokrotnie słabiej, a wciśnięcie przycisku S1 powinno powodować jej zgaszenie. Aby rozwiązać zadanie, należy posłużyć się sygnałem generowanym przez PWM.

    [ATMega8][ASM] - Ćwiczenie na PWM - jak ustawić bity?
    Znalazłem w Internecie dwa artykuły, dzięki którym byłbym w stanie ten układ zaprogramować, ale mam problem z fusebitami.
    Na stronie mikrokontrolery.blogspot.pl (to link do artykułu) znalazłem zapis o fusebitach. Nie wiem czy dobrze zrozumiałem, ale mam ustawić bity WGM13-WGM10 w następującej kombinacji: 1110. Problem w tym, że nigdy nie ustawiałem fusebitów, a okno ich ustawień w AVR8Burn-O-Mat wygląda tak:
    [ATMega8][ASM] - Ćwiczenie na PWM - jak ustawić bity?
    Nie widzę tu możliwości ustawienia potrzebnych fusebitów. Więc nawet nie mam jak włączyć obsługi PWM. Co robić w takiej sytuacji?

    @Edit: Dowiedziałem się że to jednak nie fusebity, tylko bity konfiguracyjne, więc nieco zmieniłem nazwę tematu
  • REKLAMA
  • #2 13789725
    excray
    Poziom 41  
    Jeszcze dłuuuga, dłuuuga droga przed Tobą. Radzę zacząć czytać książkę od początku. Bity o których mowa to nie fusebity ale bity w rejestrze konfiguracyjnym licznika.
  • REKLAMA
  • #3 13806738
    Asmox
    Poziom 9  
    No to jestem o krok do przodu... Niestety dalej nie rozumiem jak to wszystko się ustawia. Po prostu nie ogarniam załączania tych timerów, za dużo jest tych funkcji i się gubię. Proszę o przykład kodu z jakimś banalnym ustawianiem PWM, ja sobie ten kod przeanalizuję i wtedy dam radę zrobić ćwiczenie.

    Bardzo proszę o demonstrację kodu w Assembly na Atmegę8. Przypuśćmy że dioda jest podłączona od PB1 przez rezystor do masy. Jedyne co kod ma robić to włączać PWM na tym wyjściu. Dopiszcie proszę komentarze do kodu gdzie się ustawia tę wartość, po przekroczeniu której zmienia się stan na wyjściu.

    Być może niektórych oburzy fakt, że jest "tyle kodu i nie może sobie poradzić", no ale ja naprawdę tego nie rozumiem. Proszę tylko o kod włączający PWM tak jak napisałem wyżej, a przerobienie tego na przyciski powinienem dać sobie radę.
  • #4 13806849
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 13806853
    BlueDraco
    Specjalista - Mikrokontrolery
    Przy takim podejściu wątpię, cz ydasz sobie radę. Wszystko o programowaniu timera w trybie PWM znajdziesz w dokumentacji mikrokontrolera. Dla leniwych są jeszcze tysiące przykładów w Internecie. Dla zbyt leniwych na używanie Google w zasadzie już nie ma ratunku.

    Odradzam pisanie w asemblerze. W C będzie dużo łatwiej.
  • Pomocny post
    #6 13807100
    excray
    Poziom 41  
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #7 13809076
    Asmox
    Poziom 9  
    Bardzo dziękuję za pomoc. Przedstawiony kod sprawił, że zaczynam rozumieć rozdział o zegarze w ATmedze. Przerobiłem program tak, aby obsługiwał układ z ćwiczenia.

    [ATMega8][ASM] - Ćwiczenie na PWM - jak ustawić bity?



    Edytuj
    Mam jedno pytanie do obwodu: Czy tak samo jak diody, klawiaturę też powinno się zabezpieczać opornikami?

    Oto gotowy kod, być może przyda się komuś kto też posiada w/w książkę.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Ten program również proszę o przeanalizowanie. Jestem ciekawy, czy są w nim jakieś niedoróbki mimo że wszystko działa poprawnie. W szczególności mam jeszcze jedno pytanie:
    Czy przy włączaniu zegara TCCR2 trzeba również włączać stan wysoki na odpowiednim bicie PORTB? Chodzi mi o to, czy albo się używa - w tym przypadku - PORTB albo TCCR2, czy należy używać obu na raz do zapalania diody.
  • #8 13810543
    excray
    Poziom 41  
    Moja propozycja:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    - zostawiaj obszar pamięci na skoki - wg datasheet str 47
    - na wszelki wypadek zainicjuj wskaźnik stosu - jw.
    - program można skrócić jak w załączonym kodzie.
  • #9 13812746
    rrytel
    Poziom 14  
    drobna literówka zamiast:
    excray napisał:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    powinno być bez dwukropka
    Kod: text
    Zaloguj się, aby zobaczyć kod
REKLAMA