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

ATmega8 - Niezależne sterowanie przekaźnikami po wykryciu czujników

enroline 23 Cze 2014 17:51 2481 18
  • #1 13734422
    enroline
    Poziom 10  
    Posty: 18
    mój projekt wymaga tego by na reakcję na czujnik, zadziałał przekaźnik na kilka sekund a potem musi się wyłączyć.
    Mam łącznie trzy czujniki i zadziałanie każdego z czujników, uruchamia odpowiedni przypisany do niego przekaźnik.

    problem mam z tym, że czujniki mogą zadziałać po sobie w odstępach pół sekundowych jak i 20 sekundowych.

    Chciałem zrobić to komendami wait, lecz ta komenda opóźnia wszystko co jest po niej wpisane, nawet reakcję kolejnych przekaźników na czujniki...

    proszę o wskazówkę jak należy zaprojektować program by działały niezależne podprogramy, gdzie każdy obsługuje swoje porty i odmierza swój czas ?
  • #2 13734438
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Zrób wszystko w przerwaniu timera zgłaszanym ze stałą częstotliwością, np. 100 Hz. Trzy zmienne posłużą do do odmierzania czasu dla każdego przekaźnika oddzielnie.
  • #3 13734453
    archanoid
    Poziom 26  
    Posty: 867
    Pomógł: 76
    Ocena: 251
    Witam .Jakie czujniki ?.
  • #4 13734551
    enroline
    Poziom 10  
    Posty: 18
    Co do czujników to są różne czujniki analogowe ale wszystkie podłączone poprzez transoptory. Jeden czujnik typowo drzwiowy, drugi podczerwieni, trzeci czujka ruchu.
    Co do timerów. To rozumiem, że mają to być trzy podprogramy z timerami?

    komenta if.... then ... i odniesienie poniżej do kolejnego zbiegu zdarzeń?
    Nie jestem zbyt lotny w bascomie i prosze o bliższe informacje co do tych 100Hz.
  • #5 13734801
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Nie wspominałeś o Bascomie. W C wyglądałoby to tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 13736687
    enroline
    Poziom 10  
    Posty: 18
    Niestety ledwo w bascomie się orientuje a w C to niestety...

    A jak to w bascom'ie miałoby to wyglądać.
    Rozumiem, że ma to być oparte o Timer0?
  • #7 13736786
    Konto nie istnieje
    Poziom 1  
  • #8 13737764
    enroline
    Poziom 10  
    Posty: 18
    Bascom'a staram się uczyć, jednak nie potrafie ogarnąć kwestii timerów. Czytam książkę jakies teksty w necie ale dotyczą one innych przypadków i nie potrafie tego wykorzystać. Kwestia timerów wszędzie jest dla mnie jakoś nielogicznie wytłumaczona i więcej mam pytan niż odpowiedzi..


    Bardziej mi zależało na przykładzie takim jaki dostałem w C tyle, że w bascomie.
    NIe oczekuje gotowca tylko przykładu gdzie jest wytłumaczony taki chyba prosty przypadek jak u mnie.
  • #9 13737838
    archanoid
    Poziom 26  
    Posty: 867
    Pomógł: 76
    Ocena: 251
    Witam. ATMega 8 to raczej przerost formy nad treścią . Do tego wystarczy i to na wyrost starczy ATTiny2313 albo jeszcze mniejszy . Potrzebujesz 3 wejścia i 3 wyjścia czyli nawet jakiś w obudowie dip 8 wystarczy .
  • #10 13737983
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    1. Skonfiguruj porty wyjściowe do przekaźników.
    2. Zaprogramuj dowolny timer na zgłaszanie przerwań ze stałą częstotliwością rzędu kilkadziesiąt..100 Hz.

    Na tym kończy się program główny, a jak to się robi - znajdziesz w setkach miejsc w sieci.

    3. W procedurze obsługi przerwania zrób 3 razy to, co pokazałem wyżej. Chyba nietrudno to zrozumieć i przepisać na dowolny język programowania.
  • #11 13738233
    archanoid
    Poziom 26  
    Posty: 867
    Pomógł: 76
    Ocena: 251
    Witam . Jeśli nie jesteś w stanie zrobić tego na procku to zrób to na 3 NE555 . Rozwiązanie także jest proste .
  • #12 13745682
    Konto nie istnieje
    Poziom 1  
  • #13 13774658
    mavi
    Poziom 19  
    Posty: 493
    Ocena: 41
    Wracam do tematu bo oporni mi idzie.
    Stworzyłem coś co nie działa... NIe wiem czego brakuje i czy dobry jest zamysł..
    proszę o konstruktywne uwagi co do treści programu.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #14 13774950
    Konto nie istnieje
    Poziom 1  
  • #15 13776745
    enroline
    Poziom 10  
    Posty: 18
    Przerwanie to miało być odliczenie czasu.

    By uprościć program na potrzeby forum chciałem by każdy ze spełnionych warunków
    uruchomił dany przekaźnik o ten sam ustalony w 'Przerwaniu' czas.


    Chodzi mi tylko o to by na zadziałanie czujników, włączyły się odpowiednie przekaźniki na określony czas.
    Faktycznie zrobiłem mase błędów ale niestety metodą prób i błędów widze muszę dojść do tego jak zrobić program z pozoru o banalnej funkcji...

    poniżej zmodyfikowałem program ale przekaźniki nawet nie drgną na zadziałanie czujników.
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #16 13776767
    Konto nie istnieje
    Poziom 1  
  • #17 13776791
    enroline
    Poziom 10  
    Posty: 18
    Dziekuje za wytlumaczenie. Rozjaśnia mi się już bo widzę przykłady.
    Ktoś wcześniej napisał mi, że powinienem oprzeć program na przerwaniach i tu moje pytanie o deklaracje odnośnie przerwania:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    W przypadku gdy zadeklarowałem powyższą komendą, że będzie to przerwanie, to jak potem kontunuować program z komendą warunkową " If " ?
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #18 13776954
    Konto nie istnieje
    Poziom 1  
  • #19 13779901
    mavi
    Poziom 19  
    Posty: 493
    Ocena: 41
    Wytłumaczone jak krowie na granicy ;)
    Mam kurcze książke do nauki Bascoma ale tam jest to napisane nieprzyswajalnym językiem bez podania przykładu.

    Jeszcze nie zdażyłem przysiąść do zastosowania teorii w praktyce ale jestem optymistą i z góry Podziekowania dla atom'a1477 i emarcus'a

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukuje rozwiązania do projektu, w którym przekaźniki muszą działać niezależnie w odpowiedzi na sygnały z trzech różnych czujników. Problematyczne jest to, że czujniki mogą aktywować się w różnych odstępach czasu, co uniemożliwia użycie prostych komend wait. Uczestnicy dyskusji sugerują wykorzystanie przerwań timerów do obsługi niezależnych podprogramów, co pozwoli na równoległe działanie przekaźników. Wskazówki obejmują konfigurację timerów oraz przykłady kodu w języku Bascom, a także podkreślenie znaczenia zrozumienia koncepcji przerwań. Użytkownik zmaga się z implementacją, ale otrzymuje pomocne wskazówki dotyczące struktury programu i użycia timerów.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA