Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATmega8] [C] Timery i przerwania.

Oshel 20 Lip 2012 20:54 1184 5
  • #1 20 Lip 2012 20:54
    Oshel
    Poziom 7  

    Witam,

    Mam mały problem z programem z książki o programowaniu ATmega8 i ARM7 Pawła Borkowskiego tj. cw. 2 z lekcji o przerwaniach.

    Treść ćwiczenia to takie obsłużenie diód podłączonych do PC0, PC2 i PC4, aby PC4 świeciło po załączeniu przycisku, PC2 ma się zaświecić po 1,5 sekundzie przy wykorzystaniu timera1, a PC1 ma się zaświecić po 170ms przy wykorzystaniu timera2. Oczywiście diody podłączone do GND itd itp, normalny prosty układ. Przycisk też podłączony do GND.

    Przesyłam kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Nie wiem jak włączyć CTC na timerze 2 ;/ Przycisk oczywiście działa, po naciśnięciu przez ułamek sekundy, a dioda 170ms świeci cały czas.

    Proszę o pomoc.

    //edit- problem z dioda 170ms opanowany, zle bity na preskaler dalem, ale dlaczego nie dziala dioda 1,5 sek? raz mruga na poczatku, a potem sie wylacza :(

    0 5
  • #2 20 Lip 2012 21:09
    Krauser
    Poziom 26  

    A w czym problem. Jak nie wiesz jakie bity ustawić to zaglądnij do datasheeta atmegi 8 i znajdź rejestr TCCR2. Są tam dwie tabelki. Jedna to tryb pracy a druga preskaler.

    0
  • #3 20 Lip 2012 21:23
    Oshel
    Poziom 7  

    Problem z bitem odpowiadającym za CTC już mam, ta dioda na timerze2 dziala- nie działa dioda na timerze1, chociaż powinna...

    //edit

    Mógłby mi ktoś wytłumaczyć, dlaczego gdy zmieniłem (przypadkiem) OCR1B na OCR1A nagle zaskoczył timer? Przecież operuje na TCCR1B, a nie A, a mimo tego to właśnie OCR1A kontroluje tym rejestrem? O co tu chodzi, bo psuje mi to trochę koncepcje rozumienia timerów ;p

    0
  • #4 20 Lip 2012 21:55
    Krauser
    Poziom 26  

    Kod: c
    Zaloguj się, aby zobaczyć kod


    A odnośnie OCR1A i TCCR1B musisz znowu poszukać w dokumentacji.

    0
  • #5 20 Lip 2012 22:18
    Oshel
    Poziom 7  

    Ooo, faktycznie. Dzięki za zwrócenie uwagi :)

    Ale co do tych rejestrów to nie mam pojęcia. Nienawidzę czytać datasheetów... Nic tam niestety nie widzę. W książce mam napisane że do TCCR1B jest przypisany OCR1B, ale jak widać niezbyt to działa...

    Mimo wszystko, czekam na jakąś sensowną odpowiedź- jak ktoś mógłby to niech podpowie, będę zobowiązany :) Tymczasem pomęczę się z dokumentacją...

    0
  • Pomocny post
    #6 20 Lip 2012 23:00
    mirekk36
    Poziom 42  

    Oshel napisał:
    Nienawidzę czytać datasheetów...


    Ooojo joj ... to będzie bolesna droga przez mękę ta nauka programowania :(

    Oshel napisał:
    W książce mam napisane że do TCCR1B jest przypisany OCR1B, ale jak widać niezbyt to działa...


    No to hmmm książek też nienawidzisz czytać ? tak by wynikało skoro piszesz, że ktoś tak napisał w książce. Coś chyba mało uważnie czytałeś. Nikt tak nie mógł napisać bo to absolutnie wyssane z palca co napisałeś. Rejestr OCR1B nie jest przypisany do TCCR1B ;) .... On jest przypisany do kanału B dla sprzętowego PWM. A rejestry TCCR1A oraz TCCR1B służą do konfiguracji trybu pracy całego Timera1 i jego poszczególnych modułów. Powielasz myślenie skojarzeniowe początkujących, którzy (nie zaglądając do noty PDF) wymyślają sobie na szybko że OCR1A przypisany jest do TCCR1A natomiast OCR1B do TCCR1B ;) gdy tymczasem to jest jakaś wierutna bzdura bo nawet nie ma takiego pojęcia jak przypisanie OCR1x do TCCR1x

    Sensowna opdowiedź, postaraj się nauczyć czytać notę PDF, to nie trudne i nawet nie trzeba wielce znać angielskiego. Podpowiem ci coś, co może ułatwi ci to zadanie.

    Każdy rozdział po lewej stronie PDF ma zwykle na końcu opis rejestrów danego modułu. Tak samo masz z Timer1. Rozwijasz ten podrozdział i masz dalej pięknie kolejne podrozdziały w postaci ładnie opisanych kolejnych rejestrów.

    Patrz TCCR1A i TCCR1B zawierają bity o nazwach WGMxx - to za ich pomocą ustawiasz interesujący cię tryb pracy - w tych dwóch rejestrach rozumiesz? Dlatego najpierw przy opisie TCCR1A szukasz tabelki z tymi trybami i sprawdzasz w niej które bity WGM masz ustawić. Potem patrzysz na pozostałe bity jak CS12..CS10 które odpowiadają za preskaler a też są jak zauważysz w TCCR1B. Wystarczy że rzucisz okiem na obrazek z TCCR1B i przejdzie ci myślenie o jakimś dziwnym powiązaniu go z OCR1B.

    0