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

[ATmega8A] [C] przerywanie timera2 z zew. kwarcem zegarkowym

PIterCziter 27 Cze 2017 11:23 861 3
  • #1 16553800
    PIterCziter
    Poziom 7  
    Witam , postanowiłem zrobic swój pierwszy zegarek na zew,kwarcu zegarkowym .
    kwarc podłaczyłem do tosc1 i tosc2 , wyswietlacz led do portów D i zasilanie wyswietlacza do portów C a do portów B przyciski ,
    wyswietlacz jest dobrze podłączony jak i przyciski , ale pojawia sie problem z przerwaniem , program nie wykonuje przerywania(kod z niego działa testowałem w pętli ) , i własnie pytanie gdzie popełniłem błąd ?

    ps jestem początkujacy i wiem ze zegarek nie jest idealny, ale proszę wziąść pod uwage ze dopiero się uczę i popełniam masę blędów :)

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




    [/code]
  • Pomocny post
    #2 16554064
    dondu
    Moderator na urlopie...
    1. Volatile: http://mikrokontrolery.blogspot.com/2011/04/problemy-c-volatile.html

    2. Tryb asynchroniczny:

    Datasheet napisał:
    1. Disable the Timer/Counter2 interrupts by clearing OCIE2 and TOIE2.
    2. Select clock source by setting AS2 as appropriate.
    3. Write new values to TCNT2, OCR2, and TCCR2.
    4. To switch to asynchronous operation: Wait for TCN2UB, OCR2UB, and TCR2UB.
    5. Clear the Timer/Counter2 Interrupt Flags.
    6. Enable interrupts, if needed.


    Przeanalizuj ten przykład: http://mikrokontrolery.blogspot.com/2011/04/SmartPIP-Licznik-czasu-testowanie.html

    3. ... i przy okazji F_CPU: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html
  • Pomocny post
    #3 16555590
    excray
    Poziom 41  
    datasheet napisał:

    1. Disable the Timer/Counter2 interrupts by clearing OCIE2 and TOIE2.
    2. Select clock source by setting AS2 as appropriate.
    3. Write new values to TCNT2, OCR2, and TCCR2.
    4. To switch to asynchronous operation: Wait for TCN2UB, OCR2UB, and TCR2UB.
    5. Clear the Timer/Counter2 Interrupt Flags.
    6. Enable interrupts, if needed.

    DS pod tym względem trochę strzela nam w kolano. Najlepiej najpierw ustawić wszystko tak jak powinno być, a dopiero na samym końcu ustawić tryb asynchroniczny. Nie ma sensu blokować procesora w czasie startu rezonatora.
    PIterCziter napisał:
    TCCR2 |= _BV(CS22) | _BV(CS20) ;//preskaler 128
    TIMSK |= _BV(TOIE2) ;// przerwanie od przepelniaia
    ASSR |= _BV(AS2) ;
  • #4 16555620
    PIterCziter
    Poziom 7  
    Dzieki za podpowiedzi , zabieram sie za lekture i dokańczam zegarek :)

    Dodano po 1 [godziny] 10 [minuty]:

    ahh... poprawiłem kod tak jak podaliście , dodałem volatile do zmiennych globalnych,ustawiłem tryb asynchroniczny według punktów z noty katalogowej i tylko jedna rzecz sie zmieniła ,program przestał dochodzić do pętli głownej , zatrzymuje sie na kodzie
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    a tu cały kod
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA