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

Problem z warunkiem w funkcji ISR

Bojleros 06 Lis 2008 18:54 1259 3
  • #1 5708793
    Bojleros
    Poziom 16  
    Witam.
    Napotkałem dosyć dziwny problem i nie potrafię sobie poradzić. W załączonych źródłach , na samym końcu pliku jest funkcja obsługi przerwania INT1. Funkcja ta ma odpowiadać za wstępne odczytanie bitów przesyłanych do mikrokontrolera przez klawiaturę AT. Problem objawia się tym że nie ważne co bym nacisnął na klawiaturze to zawsze dostaje 00 na wyświetlacze. Nie jest to kwestia funkcji obsługi wyświetlaczy ani buforów ponieważ gdy wpiszę statycznie wywołania odpowiednich funkcji z jakimś kodem ascii to wszystko jest ok. Z drugiej strony sprawdziłem już połączenia. Tu też zdaje się być wszystko w porządku: clck mam na pd3(int1) a data na pd4 mojej atmegi32. Sygnał z klawiatury też zdaje się być ok, sprawdziłem go moim starym oscyloskopem. Nie widziałem dokładnie przebiegów lecz udało mi się zaobserwować że zmieniają kształt i długość w zależności od przytrzymanego przycisku.

    Oto moje źródła: http://bg12.zapto.org/~bartek/system/system.c

    W katalogu w którym znajduje się system.c jest także reszta plików jakie produkuje kompilator. Nie używam znajdującego się tam Makefile.

    Sprawdziłem już wszystko kilka razy i naprawdę nie wiem co dalej dlatego proszę o pomoc.

    Z góry dziękuję.
  • Pomocny post
    #2 5709125
    Dr.Vee
    VIP Zasłużony dla elektroda
    Witam,

    Testujesz i ustawiasz bit ISC10 w MCUCR, ale zerujesz bit SM0 (bit nr 4 zamiast bitu nr 2). W efekcie cały czas sprawdzasz tylko narastające zbocza.

    Trochę przekombinowana ta procedura. Nie musisz obsługiwać wszystkich zboczy, wystarczą opadające i np. ostatnie 2 narastające.

    Pozdrawiam,
    Dr.Vee
  • #3 5709464
    Bojleros
    Poziom 16  
    Dzięki że zauważyłeś tą pomyłkę. Teraz jest ok, muszę jeszcze tylko napisać coś do dekodowania na ascii. Procedura może przerośnięta ale opierałem się o howto od Atmela. Teraz jak to zaczęło działać to pora na optymalizację :)

    Mam jeszcze kilka innych pytań jeśli można w tym samym wątku. Wczoraj poskładałem JTAGA evertool-light. JTAG się odzywa. Mogę programować atmegę32 ale problem mam z obsługą breakepointów w procedurach ISR. Dodam że jako środowisko wykorzystuję avarice + avr-gdb. Jeżeli uda mi się dodać breakepointa do programu obsługi przerwania to debuger wcale nie reaguje na to przerwanie. Inny problem polega na tym że tracę połączenie z JTAGIEM jeżeli wywołam jakąś funkcję poprzez call z poziomu avr-gdb. Inny problem polega na tym że jeszcze do tej pory nie udało mi się wyświetlić zawartości żadnej zmiennej. Jutro postaram się załączyć komunikaty jakie otrzymuję... a może ktoś zna jakieś zintegrowane środowisko pod linuxa lub jakieś stosowne opisy co jak gdzie ??
REKLAMA