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

[Atmega8][C]Obsługa czujnika

A.T. 23 Paź 2011 23:28 1508 14
REKLAMA
  • #1 10059387
    A.T.
    Poziom 20  
    Witam
    mam problem z obsługą czujnika, który daje poziom niski, jeśli wykryje jakiś metalowy element. Problem w tym, że jeśli ten element znajduje się ciągle przy czujniku, to ten poziom niski się utrzymuje. A ja bym właśnie potrzebował tylko na chwileczkę niski poziom(taką szpilkę), a potem znowu stan wysoki, podczas gdy element metalowy byłby wciąż przy czujniku. Wejście tego czujnika mam podpięte pod Atmege. W programie po prostu sprawdzam jaki jest poziom na danym pinie.
    Czy da się to zrobić programowo, czy trzeba sprzętowo?
    Pozdrawiam
  • REKLAMA
  • #2 10059444
    archanoid
    Poziom 26  
    Witam. Poczytaj o przerwaniach i o reakcji na opadające zbocze. Wykrywasz przerwanie na opadające zbocze. W obsłudze przerwania sprawdzasz czy na wejściu jest stan niski.
  • REKLAMA
  • #3 10059527
    A.T.
    Poziom 20  
    Tylko dalej nie rozumiem w jaki sposób mi pomoże zewnętrzne przerwanie i w jakim celu mam w nim sprawdzać czy jest na nim stan niski?
  • #5 10059539
    A.T.
    Poziom 20  
    Raczej wiem co to jest przerwanie.
    Tylko co jeśli chcę jeden czujnik użyć w paru miejscach w programie do robienia różnych rzeczy?
    Czyli mam po prostu w tym przerwaniu ustawiać jakąś flagę. A po chwili w pętli głównej ją zerować?
  • REKLAMA
  • #7 10061114
    A.T.
    Poziom 20  
    Dziękuję za odpowiedź. A gdybym chciał zliczać ilość przyłożeń czegoś metalowego do czujnika? Np.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    To w którym miejscu muszę zerować zmienną czujnik? Może w jakimś przerwaniu po przepełnieniu się timera? Np. co 20ms?
  • #8 10061450
    dondu
    Moderator na urlopie...
    A.T. napisał:
    A gdybym chciał zliczać ilość przyłożeń czegoś metalowego do czujnika? Np.
    .... To w którym miejscu muszę zerować zmienną czujnik? Może w jakimś przerwaniu po przepełnieniu się timera? Np. co 20ms?

    Aby podać Ci najlepszą odpowiedź, musiałbyś dokładniej opisać całe zadanie, czyli co Twój projekt robi.
  • #9 10061602
    A.T.
    Poziom 20  
    po prostu chcę zliczać ilość przyłożeń metalowego elementu do czujnika. Jak to można najlepiej zrobić?
  • #10 10061612
    dondu
    Moderator na urlopie...
    A.T. napisał:
    po prostu chcę zliczać ilość przyłożeń metalowego elementu do czujnika. Jak to można najlepiej zrobić?


    No nie tak po prostu, bo pytasz o zerowanie:

    A.T. napisał:
    To w którym miejscu muszę zerować zmienną czujnik? Może w jakimś przerwaniu po przepełnieniu się timera? Np. co 20ms?


    Czyli zliczanie to nie wszystko co chcesz osiągnąć.
    No chyba, że "zmienna czujnik" top "flaga czujnki" o której pisałeś wcześniej.
    Ale jeżeli tak to trzymaj się jednej wersji nazewnictwa.
  • #11 10061656
    A.T.
    Poziom 20  
    Nie wiem czy dobrze wytłumaczę. Mam dwa czujniki dające niski sygnał na procka. Podłączam je do wejścia int0 i int1 na przerwania zewnętrzne.
    I teraz chcę napisać taki fragment kodu, który jeśli zobaczy chwilowy stan niski na pierwszym czujniku, to zacznie zliczać impulsy z drugiego czujnika dopóki nie pojawi się ponownie krótki stan niski na pierwszym czujniku.
  • REKLAMA
  • #13 10061694
    A.T.
    Poziom 20  
    czujnik indukcyjny, ale z wbudowaną elektroniką dający stan niski w razie przyłożenia czegoś metalowego do niego. Jego częstotliwość przełączania jest wysoka, rzędu kilku set herców:)
    Pozdrawiam
  • Pomocny post
    #14 10061768
    dondu
    Moderator na urlopie...
    Czyli przyjmujemy, że nie ma problemu z drganiami styków i innymi zakłóceniami.
    Jeżeli dobrze zrozumiałem zasadę działania czujników oraz Twój cel i chcesz wykorzystać obydwa INTx, to zrobiłbym tak:

    1. pod INT0 podpinasz sygnał decydujący o starcie i końcu zliczania
    2. pod INT1 podpinasz sygnał, który ma być zliczany

    Pseudo kod:

    1. inicjacja:
    1.1 INT0 włączone
    1.2 INT1 wyłączona
    1.3 PomStart = 0 (flaga rozpoczęcia pomiarów)

    2. Jeżeli INT0 zostanie wzbudzony, to:

    2.2 czy PomStart=1?
    2.2.1 tak, zatrzymaj zliczanie i wyłącz przerwania z INT1

    2.2.2 nie:
    2.2.2.1 włącza przerwania z INT1
    2.2.2.2 PomStart=1

    3. procedura obsługi przerwania INT1 zlicza kolejne impulsy
  • #15 10064874
    A.T.
    Poziom 20  
    Dziękuję za pomoc:)
REKLAMA