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

ATTiny85 - Opóźnienie i ciągłe świecenie diody po przerwaniu INT0

Pontar90 28 Maj 2014 19:38 1023 7
  • #1 13642665
    Pontar90
    Poziom 9  
    Witam,
    Mam taki problem: napisałem program do obsługi odbiornika na ATTiny85. W skrócie po wykryciu zbocza narastającego ma wyzwolić diodę na określony czas.
    Tymczasem dioda zapala się z niewielkim opóźnieniem i pali się cały czas. Gdzie tkwi problem? Będę wdzięczny za pomoc. Dopiero się uczę więc proszę o wyrozumiałość.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #2 13642800
    BlueDraco
    Specjalista - Mikrokontrolery
    Tak to raczej diody nie zaświecisz:

    #define LED_ON PORTB&=LED_PIN

    Zapomniałeś o jednym znaczku... ;)

    Zapewne też podłączyłeś diodę pomiędzy wyjście i masę, więc instrukcja, ktra iała ją gasić, obecnie ją zapala, a ta, która miała zapalać, nie robi nic.
  • #3 13642969
    Pontar90
    Poziom 9  
    Dzięki, rzeczywiście brak ~powodował problem.
    Lecimy dalej.

    Mam jeszcze program z działający na zasadzie gdy stan niski na PB2 generuj sygnał przez 80 ms. Problem tkwi w tym, że non stop wszystko się generuje. bez względu na to, że pin podpięty do vcc i nic go nie zwiera do masy.
    Będę wdzięczny za pomoc.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #4 13643003
    BlueDraco
    Specjalista - Mikrokontrolery
    Instrukcja umieszczona po return nie ma szans się wykonać, o czym zapewne uczynnie próbuje poinformować Cię kompilator, co zapewne skrzętnie ignorujesz. ;)
  • #5 13643052
    Pontar90
    Poziom 9  
    Kompilator składa wszystko bez błędów, w tym rzecz.
    Nawet po przeniesieniu przed returny dalej działa tak samo.
  • #6 13643241
    BlueDraco
    Specjalista - Mikrokontrolery
    Deklaracja procedury pod if() nie zastępuje jej wywołania. Mam wrażenie, że nie wiesz, co oznacza Twój zapis w języku C. Kompilator na pewno sieje mnóstwem ostrzeżeń.

    Nie deklaruj procedur wewnątrz innych procedur, chyba, że dobrze wiesz, co robisz. Co prawda C99 na to pozwala, ale na ogół nic dobrego z tego nie wynika.
  • #7 13644851
    Pontar90
    Poziom 9  
    Więc w jaki sposób najlepiej wyzwolić licznik tylko w czasie, w którym na odpowiednim pinie(PB2) znajduje się stan niski? Napisałem w pierwszym poście, ze dopiero się uczę i nie wszystko jest dla mnie zrozumiałe.

    (a kompilator nie pokazuje żadnych ostrzeżeń).
  • #8 13644880
    BlueDraco
    Specjalista - Mikrokontrolery
    Twój kod nie wywołuje procedury d_led_init_(). Jest ona zadeklarowana, ale nigdzie nie jest wywoływana.
REKLAMA