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.

ATMega8A - użycie _delay_us() program dziwnie działa

KonradIC13 28 Gru 2012 22:33 795 2
  • #1 28 Gru 2012 22:33
    KonradIC13
    Poziom 10  

    Witam,

    Mam taki problem. Chcę zrobić program który (jak na razie) będzie miał następujące zadanie: Sprawdza stan dwóch przycisków, ich stan zapisuje do dwóch różnych zmiennych. Gdy którykolwiek z przycisków jest wciśnięty ma zapalić LED.

    Poniżej zamieszczam program:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    oraz

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Kompilacja bez problemów, wgranie tak samo, a jak działa?
    Gdy żaden przycisk nie jest wciśnięty LED zgaszony, OK. Kiedy wciskam przycisk podpięty do PB7 (czyli zmienna DOWN) led w pełni się zapala i świeci ciągłym światłem, OK. Puszczam ten przycisk i naciskam drugi (podpięty do PB6, zmienna UP). Co się dzieje? Led ledwo co się świeci, mała kropeczka światła widoczna z góry, do tego nie jest to ciągłe światło ale pulsujące (albo i świeci się w pełni ale z uwagi na pulsowanie wydaje się że świeci owiele słabiej).

    Gdy w kodzie zakomentuję _delay_ms(250); program działa poprawnie.

    Nie mam pojęcia dlaczego tak się dzieje. Próbowałem już chyba wszystkiego, zmieniałem piny przycisków, zmieniałem piny diody, omijałem przyciski (kabelkiem podpinałem pin do masy udając przycisk). Sprawdzałem program na innej ATmega8A. Programowałem po kilka razy, kompilowałem (Atmel Studio 6 i Sinaprog z USBasp), zmieniałem port USB programatora, restartowałem system.

    Moje pomysły się skończyły, co się tu dzieje, że zawsze ten przycisk przypisany do zmiennej UP powoduje niepoprawne zachowanie diody?

    Z góry dziękuję za pomoc.

    0 2
  • #2 28 Gru 2012 22:46
    BlueDraco
    Specjalista - Mikrokontrolery

    A co to jest to "poprawne zachowanie"?

    Wciśnięty UP zapala diodę. Zwolniony DOWN po jakiejś mikrosekundzie ją gasi.

    0
  • #3 28 Gru 2012 22:52
    KonradIC13
    Poziom 10  

    O rety nie zauważyłem tego, rzeczywiście, pierwszy if zapala , drugi zaraz gasi (efekt migania) i dioda jest zgaszona przez czas delaya, ale ze mnie :roll:

    0