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

[ATmega32][bascom]zatrzymanie odczytu stanu pinu

sylwek2293 10 Lis 2011 19:00 1964 6
REKLAMA
  • #1 10123928
    sylwek2293
    Poziom 10  
    Witam
    Mam problem polegający na tym, że potrzebuje napisać program, który po odczytaniu stanu niskiego na pinie np. pinb.0 utrzyma ten stan przez ok. 2 sekundy.
    Wygląda to tak:
    Mam diodę nadawczą i fototranzystor podlączony do pinu procesora. Gdy sygnał z diody nadawczej dociera do fototranzystora to procesor odczytuje stan wysoki. Gdy coś przerwie sygnał - stan niski. Problem polega na tym, że w przypadku mojego programu stan niski pojawia się tylko na ułamek sekundy (sygnał ten ma przerywać przelatująca kulka) i spowrotem przeskakuje na stan wysoki. Jest jakiś sposób by po zmianie na stan niski procesor przestał odczytywać stan tego pinu jak wyżej napisałem na ok. 2s?
    W "polskim helpie" do bascoma znalazłem komende "DEBOUNCE" ale po próbie jej zastosowania nic nie wyszło - po prostu nie działa (może coś źle zrobiłem / może ta komenda się do tego nie nadaje?).
    Dodanie podprogramu z instrukcją "WAIT" nie rozwiązuje problemu bo procesor jest w tym czasie zajęty, a w planach mam by zajął się wtedy czymś innym.
  • REKLAMA
  • Pomocny post
    #2 10124097
    Fredy
    Poziom 27  
    Musisz zastosować przerwania. Poczytaj o przerwaniu np INT0. Ustaw na reakcję zboczem opadającym.

    Sygnał który chcesz odebrać daj na któreś z wejść INTn np na INT0, a w obsłudze przerwania robisz co chcesz. Wtedy nie stracisz żadnych sygnałów .
  • REKLAMA
  • #3 10126160
    sylwek2293
    Poziom 10  
    To chyba mi nie pomoże. Jesem początkujący w bascomie ale z tego co wiem procesor wyjść INT ma 2 lub 3. A ja mam w planach zrobienie 4 odbiorników więc to chyba wyklucza taki sposób. Chyba że każde wyjście da się ustawić jako int?
  • REKLAMA
  • Pomocny post
    #4 10126822
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 10145180
    sylwek2293
    Poziom 10  
    Porawdziłem sobie w trochę inny sposób. Zadeklarowałem sobie 4 zmienne. Ich początkowy stan = 0, gdy mikrokontroler odczyta stan z fotoranzystora to zmienne są inkrementowane. I to właśnie z nich odczytuje w taki sposób jak chciałem. Może ktoś powie, że zrobiłem to trochę dziwnie ale po swojemu i mi odpowiada.
  • #6 10151667
    SylwekK
    Poziom 32  
    Można inkrementować zmienne, ale wystarczyło by po jednej zmiennej bitowej na każdy kanał zatrzaskiwana na 2s (jeśli nie potrzebne jest zliczanie tych impulsów). Czas można odliczać np. na programowym timerze. Takie rozwiązanie byłoby estetyczniejsze i nieco szybsze - w końcu działania są na pojedynczych bitach, a nie całych bajtach. No i o wielkości całego programu nie wspomnę (jeśli miał by robić więcej niż wynika z opisu).
  • #7 10158957
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA