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

[Atmega128][c] inicjacja przerwań zewnętrznych

Sokolsok 01 Lis 2011 15:12 1655 7
REKLAMA
  • #1 10089363
    Sokolsok
    Poziom 11  
    Witam, od wczoraj próbuje ogarnąć przerwania zewnętrzne w Atmedze128.
    Sporo o tym czytałem zarówno na forum jak i w dokumentacji ale prawdopodobnie jeszcze coś przeoczyłem bo nie działa. Kod na maxa uprościłem, żeby sprecyzować problem.

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


    Czegoś nie ustawiłem jeszcze? Z góry dzieki:)
  • REKLAMA
  • #2 10089379
    BoskiDialer
    Poziom 34  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Nie ustawia flagi I tylko jakąś inną.
  • REKLAMA
  • #3 10089412
    Sokolsok
    Poziom 11  
    Masz rację, zjadłem 0;)

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


    Ale niestety nadal nie działa..
  • REKLAMA
  • Pomocny post
    #4 10089421
    BoskiDialer
    Poziom 34  
    INT0 jest na pinie PD0, a ten definitywnie ustawiłeś jako wyjście, więc nie może działać.
  • #5 10089462
    Sokolsok
    Poziom 11  
    Znowu czeski błąd z mojej strony:/ Dzięki za pomoc stary, widać potrzebowałem obcego spojrzenia na mój kod;)

    Ostatecznie kod powinien wyglądać następująco (może się komuś przyda):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #6 10089576
    tadzik85
    Poziom 38  
    dlaczego nie stosujesz symbolicznych nazw bitów i pinów??
  • Pomocny post
    #7 10089587
    mirekk36
    Poziom 42  
    Po restarcie mikrokontrolera i tak wszystkie piny są wejściami, zatem ustawianie PD0 jako wejście nie jest konieczne, za to może się bardziej przydać podciągnięcie tegoż wejścia programowo do VCC

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


    Poza tym zamiast pisać tak:

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


    pisz tak:

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


    to zobacz ile zaoszczędziłoby ci to czasu i nerwów. Zakończ jak najszybciej inicjalizację rejestrów za pomocą liczb HEX - bo przy takich literówkach typu 0xfe zamiast 0xef, albo 0x08 zamiast 0x80 .... masz po prostu rwanie włosów z głowy ;)

    Tymczasem czytając taki kod jak podałem wyżej wszystko od razu staje się chyba jasne prawda ? ;)
  • #8 10089732
    Sokolsok
    Poziom 11  
    Prawda, chyba faktycznie będę musiał się przestawić:)
REKLAMA