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

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

PIterCziter 27 Cze 2017 11:23 609 3
  • #1 27 Cze 2017 11:23
    PIterCziter
    Poziom 3  

    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
    Zaloguj się, aby zobaczyć kod




    [/code]

    0 3
  • CControls
  • Pomocny post
    #2 27 Cze 2017 13:54
    dondu
    Moderator Mikrokontrolery Projektowanie

    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

    0
  • CControls
  • Pomocny post
    #3 28 Cze 2017 08:59
    excray
    Poziom 39  

    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) ;

    0
  • #4 28 Cze 2017 10:30
    PIterCziter
    Poziom 3  

    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
    Zaloguj się, aby zobaczyć kod


    a tu cały kod
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0