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

Atmega32 - TIMSK &=~(1<<OCIE2) Resetuje caly uC

eXcLiFe 28 Sty 2013 22:59 1512 6
REKLAMA
  • #1 11856397
    eXcLiFe
    Poziom 14  
    Witam. Potrzebuje rady bo już naprawę zaczynam głupieć. Chciałem obsłużyć czujnik HC-SR04 za pomocą uC atmega32 używając trochę gotowych kawałków i tu się pojawia problem. Jest on dla mnie naprawdę dziwny i nie zrozumiały ponieważ w trakcie wyłączania (TIMSK &=~(1<<OCIE2); ) i ponownego włączania ( TIMSK |=(1<<OCIE2); ) TIMER2 następuje reset uC. Kombinowałem na wszystkie możliwe sposoby więc kod może być popsuty ale mimo to proszę was o radę co tu może być nie tak.
    Do PORTC0 podłączony TRIG
    PORTD2 podłączony ECHO

    Efekt pracy uC:
    
    ATMega32 UART test
    Dokonuje pomiaru
    Flaga 0
    INT0
    Flaga 1
    INT0
    ATMega32 UART test
    Dokonuje pomiaru
    Flaga 0
    INT0
    ATMega32 UART test
    


    Oto kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 11857050
    BlueDraco
    Specjalista - Mikrokontrolery
    W kodzie, który pokazałeś, przerwanie timera jest w zasadzie niepotrzebne (bo nic istotnego nie robi), a przerwanie INT0 jest źle napisane (nie wolno w przerwaniu czekać, a Ty wysyłasz w nim długie łańcuchy, więc procedura wykonuje się bardzo długo, a w tym czasie inne przerwania wiszą, kod poza przerwaniami też).

    Ponadto wołasz sendstr zarówno z pętli głównej, jak i z przerwania - jedno wywołanie rozwala drugie- Delay w procedurze pomiar jest niedeterministyczny, bo w międzyczasie stoisz w przerwaniu INT0.

    Na razie wystarczy - jak widzisz jest wiele powodów, la których to nie ma szans działać.
  • REKLAMA
  • #3 11857251
    eXcLiFe
    Poziom 14  
    Dodałem to tylko dlatego aby sprawdzić gdzie i kiedy resetuje się procesor. Bez łańcuchów nie wiedziałem gdzie i co się dzieje bo otrzymywałem tylko
    
    ATMega32 UART test
    Dokonuje pomiaru 
    ATMega32 UART test
    Dokonuje pomiaru 
    ATMega32 UART test
    Dokonuje pomiaru 
    

    TIMER2 Liczy mikrosekundy jak długo trwa echo z HC-SR04 i po jego ponownym uruchomieniu następuje reset całej Atmegi32.
  • REKLAMA
  • #4 11857321
    BlueDraco
    Specjalista - Mikrokontrolery
    A obsługę INT1 masz?
  • REKLAMA
  • Pomocny post
    #6 11857353
    BlueDraco
    Specjalista - Mikrokontrolery
    Procedurę usunąłeś, a przerwanie odblokowane. Jak zostanie zgłoszone to procesor idzie w maliny. Posprawdzaj dobrze, czy masz jakieś włączone i nie obsługiwane przerwania. No i sprawdź, czy masz stos tam gdzie trzeba - to może być też np. błędne ustawienie typu procesora.
  • #7 11857408
    eXcLiFe
    Poziom 14  
    Ok Dzięki za pomoc faktycznie nie pomyślałem że procek idzie wtedy tam gdzie mu się umyśli, myślałem że jest bardziej "debilo odporny" i po prostu nic nie zrobi :) Poprawiłem jeszcze TCNT2 |= 0x00; na = z |= i względnie działa teraz muszę poszukać dlaczego po aktywacji INT1 nagle nie mierzy odległości pomimo że dodałem obsługę. Najważniejsze że się już nie resetuje :)
REKLAMA