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 - Przerwania,tryb CTC nie działa tak jak trzeba

adi84_84 27 Sie 2012 23:47 2214 8
REKLAMA
  • #1 11253391
    adi84_84
    Poziom 14  
    Witam :)

    Próbuje odpalić tryb CTC na Atmega8-przerwanie co 5ms i nie mogę sobie poradzić pomimo czytania PDF.Mało rzeczy robiłem na przerwaniach a jeśli już to na Atmega32 gdzie korzystałem z tego:

    Przerwanie co 5ms więc mam 1 sekundę.

    ATMEGA32:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod




    Jedyne co zmieniałem to taktowanie i preskaler.

    Próbuję coś takiego lecz zawsze wychodzi mniej niż jedna sekunda:

    ATMEGA8
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Lecz nic nie działa tak jak trzeba.

    Co robię źle :cry:
  • REKLAMA
  • Pomocny post
    #2 11253430
    mirekk36
    Poziom 42  
    Po pierwsze to wypadałoby napisać jaką częstotliwością taktujesz procka m8 na którym chcesz to zrobić i czy na pewno poprawnie ustawiłeś w nim fusebity

    po drugie, czy przypadkiem nie mylą ci się totalnie nazwy bitów bo w przykładach wyżej używasz np bitów CS02 i CS00 dla Timera1 (teoretycznie mogą akurat pasować ich pozycje ale jeśli takich literówek w całym kodzie robisz więcej i np machniesz się z nazwami wektorów przerwań bo np timer1 ma dwa rodzaje przerwań CompareA i CompareB w trybie CTC a ty używasz wektorów o nazwie TIMER1_COMP_vect, więc muszą ci się generować co najmniej Warningi ale pewnie i na nie żadnej uwagi nie zwracasz hmmm ???

    zatem nie dziwota że wszystko może nie działać tak jak chcesz.

    Postaraj się zrobić poprawnie dla Timera1 z przerwaniem CompareA i konfigurację rejestrów i prawidłowymi nazwami bitów...


    aaaah zresztą widzę typowy błąd przy timerze1 ;) ty sobie dziwnie kojarzysz że TCCR1A dotyczy ustawień jednego kanału a TCCR1B drugiego wyimaginowanego kanału...

    a może jednak weź zamiast sobie coś takiego z pamięci robić - i domyślać się niestworzonych rzeczy - zajrzyj proszę teraz do noty PDF i spójrz na opisy bitów CS12 do CS10 .... i sprawdź w jakim rejestrze one są - TCCR1A czy TCCR1B czy może w obydwu jak wynikałoby z twoich kodów. Oj zdziwisz się - ale może i wtedy zaskoczysz o co chodzi. OK ?
  • Pomocny post
    #3 11253433
    LordBlick
    VIP Zasłużony dla elektroda
    adi84_84 napisał:
    Co robię źle
    Noty katalogowe czytasz po łebkach, a zwłaszcza fragmenty dotyczące rejestrów.
    - W TCCR2 nie ma bitów WGM12/CS02/CS00.
    - W Timer1 oba rejestry TCCR1A/TCCR1B należy konfigurować no i w CTC tylko OCR1A ma znaczenie.
  • REKLAMA
  • #5 11253451
    adi84_84
    Poziom 14  
    Sorki: taktowanie 11059200

    Dodano po 8 [minuty]:

    Muszę przyznać że ciężko idzie mi czytanie PDF (słaby angielski :cry: ),ogólnie coś ciężko przyswajam te przerwania
  • Pomocny post
    #6 11253514
    mirekk36
    Poziom 42  
    No dobra ale weź na razie odstaw angielski na bok i zajrzyj na obrazki do noty - jak niżej - same nazwy rejestrów TCCR1A i TCCR1B jak niżej. Czy widzisz gdzie są bity CS1x ??

    Atmega8 - Przerwania,tryb CTC nie działa tak jak trzeba
    Atmega8 - Przerwania,tryb CTC nie działa tak jak trzeba

    może to ci coś podpowie ?

    Dodano po 5 [minuty]:

    Poza tym zobacz jak trzeba podejść do czytania PDF'a, wystarczy się tylko nauczyć na niego patrzeć. Najpierw szukasz rozdziału modułu który cię interesuje

    1. Timer1

    2. potem lecisz do ostatniego podrozdziału o rejestrach

    3-4 itd ładnie przełączasz się szybko pomiędzy opisami rejestrów i nawet bez dużej znajomości angielskiego po nazwach bitów powoli dojdziesz co i jak

    Atmega8 - Przerwania,tryb CTC nie działa tak jak trzeba
    (oops sorki na górze na rysunku powinien być nr.1 a nie 2, źle mi się wstawiło)
  • REKLAMA
  • #7 11253549
    adi84_84
    Poziom 14  
    Mirek przeczytam jeszcze raz rozdział o przerwaniach 3.6.2-3.6.3.1.2 i podejdę do sprawy jutro ze świeżym umysłem
  • REKLAMA
  • #8 11253666
    wdogli
    Poziom 18  
    Jesli masz problemy z angielskim w sieci mozna znalesc noty katalogowe do atmegi 8 w jezyku polskim.
  • #9 11254096
    adi84_84
    Poziom 14  
    No dobra,po przeczytaniu PDF już trochę zrozumiałem i ustawiłem sobie TIMER2 w ten sposób:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dzięki wszystkim za pomoc ;)
REKLAMA