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

AVR/Atmega168/CAVRStudio4 - Delay zrobiony na timerze nie działa - why?

folkien 09 Paź 2012 01:22 1623 2
REKLAMA
  • #1 11392389
    folkien
    Poziom 12  
    Czołem!

    Chciałem napisać własną funkcję delay_ms w oparciu o timer procesora Atmega168. Namęczyłem się z tym strasznie, aż w koncu wziąłem gotowca - trochę przerobiłem - i dochodzę do takich wniosków, że

    Ten kod nie działa(nie wiem czemu) - próbuje w nim mrygać diodą przypięta do portu B za pomocą odczekiwania 10[jednostek czasu] poprzez wywołanie funkcji wait.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Natomiast jeżeli zamiast używać mojej funkcji wait(), zmienimy stanu portu B w przerwaniu to poniższy kod działa.

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


    Timer0 w obydwu przypadkach służy do wygenerowania przerwania przy porównaniu z rejestrem OCR0A. Przerwanie te zwiększa o jeden zmienna count, na podstawie której chciałem stworzyć moją funkcję wait().

    Ktoś wie w czym jest haczyk?
  • REKLAMA
  • Pomocny post
    #2 11392394
    kiziu13
    Poziom 17  
    Zmienna count powinna być volatile.
  • #3 11392400
    folkien
    Poziom 12  
    Szok! Taka mała rzecz, a ja straciłem nad tym 1h. Dzięki wielkie, problem rozwiązany - temat zamknięty.

    Pzdr
REKLAMA