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

ATmega8[C] - Wyrażenie PORTD & PORTD2 nidy nie zwraca prawdy

teel 15 Sie 2012 22:05 891 2
  • #1 15 Sie 2012 22:05
    teel
    Poziom 10  

    Witam,
    Przyznam, że powoli wymiękam, dlatego postanowiłem tutaj poszukać pomocy.
    Prosta sprawa: do PD2 (INT0) podpięty przycisk ściągający do masy. Przerwania uruchomione, działają, aktywują się na zmianę poziomu, jednak w kodzie poniżej wykonanie nigdy nie wpada w warunek if.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Przerwania przygotowane wg kodu
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Po podłączeniu PD2 do masy dioda się zapala, ale po odpięciu PD2 od masy dioda nie gaśnie, zatem wnioskuję, że wyrażenie
    Kod: c
    Zaloguj się, aby zobaczyć kod
    nigdy nie zwraca nie-zero.
    Gdzie mam szukać przyczyny? Spędziłem nad tym kilka godzin, uprościłem kod do maksimum, bez efektów.
    Funkcje zapalające i gaszące diodę same w sobie działają.

    Pozdrawiam,
    Tomek

    0 2
  • #3 15 Sie 2012 22:20
    teel
    Poziom 10  

    mickpr napisał:
    http://elecrom.wordpress.com/2008/02/12/avr-tutorial-2-avr-input-output/

    Pierwszy lepszy help o portach w AVR ci to wyjaśni.
    (Poczytaj o różnicach między PORT a PIN).


    Wstyd mi, dziękuję! :-)

    Różnica między PORT a PIN to pierwszy błąd.
    A drugi to ten, że nie mogę ANDować z wartością 2 (dec) (#define PORTD2 2 czyli binarnie 0b00000010) tylko z _BV(PORTD2) lub równoznacznym (1 << PORTD2).

    Działa.
    Jeszcze raz dziękuję i pozdrawiam,
    Tomek

    0