Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega8 + Kontaktron = Prowizoryczny alarm

09 Wrz 2014 22:48 1251 10
  • Poziom 6  
    Witajcie :),

    Chciałbym się dowiedzieć jak zrobić prosty alarm na tym mikrokontrolerze [ATMEGA8]. Układ mam już zbudowany na płytce stykowej. Idea działania jest taka :
    - cały czas miga sobie dioda czuwania dopóki nie będzie sygnału niskiego na linii PORTU - KONTAKTRONU - GND
    - Gdy magnes nie będzie stykał kontraktonu gasi się dioda czuwania a zapala się (świeci światłem ciągłym) dioda alarmowa i wydawane są sygnały z buzzera w odstępach 2.5 sekundy.

    Zdaje sobie sprawę z tego, iż ten kod nie jest najwyższych lotów ale za to jest w 100% napisany przeze mnie :)

    Kod: C
    Zaloguj się, aby zobaczyć kod

    Mój wcześniejszy kod (niestety usunąłem) działał lepiej bo był tylko 1 problem, kontrakton nie działał jak przycisk chwilowy tylko jak przełącznik, nie mogłem się z tym uporać, więc jak idiota zacząłem pisać kod od nowa.
  • Specjalista - Mikrokontrolery
    Z pierwszej pętli while (1) nigdy nie wyjdziesz, więc druga nie ma szans zadziałać.
    Poprawka: no fakt, wyjdziesz, tylko sposób sformatowania kodu wskazywał na coś innego.

    Pisanie programu zacznij od oswojenia przerwania timera, zgłaszanego np. 100 razy na sekundę.
  • Poziom 6  
    Dzisiaj pomyślałem ponownie i wygłówkowałem taki oto kod:
    Kod: C
    Zaloguj się, aby zobaczyć kod

    Co prawda działa mi on ale chciałem zrobić aby dioda czuwania migała (niestety tylko świeci) wydaje mi się, że trzeba użyć jakiegoś przerwania aby to miganie działało niezależnie od programu bo inaczej po zbliżeniu magnesu do konaktronu trzeba będzie czekać na zakończenie pętli z _delay_ms, wydaje mi się, że mogło by być do tego użyte przerwanie od przepełnienia timera wtedy można było by ustawić, żeby dioda mignęła x razy na sekundę. Chciałbym uzyskać 1 raz na 2.5 sekundy. Ale w powyższym kodzie nurtuje mnie jeszcze pytanko - jak zrobić aby w czasie alarmu buzzer nie tylko "piszczał jednostajnie" ale "pikał" (np.2 razy w czasie 1sekundy).
    ps. Jak bym wiedział na początku, że SYNTAX istnieje to bym go użył od razu bo co to za problem :D.
  • Pomocny post
    Specjalista - Mikrokontrolery
    Np. coś takiego:
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 6  
    BlueDraco napisał:
    Np. coś takiego:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Dodać to w funkcji main czy poza nią? Szkoda ale przerwań jeszcze za bardzo nie rozumiem, na wszystko przyjdzie pora, zgłosiłem się na projekt, ale niestety trochę przeliczyłem się z moimi możliwościami. A tak poza tym to jaki to typ przerwania, bp nic z tej składni nie rozumiem.
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    Zaglądając do dokumentacji mikrokontrolera i wybierając jedną z dwóch możliwości:

    1. preskaler timera - jedno z ustawień preskalera powoduje zatrzymanie timera czyli "No clock source (Timer/Counter stopped)."

    2. zerując bit TOIE0 (jeśli użyjesz timer0), czyli Timer/Counter0 Overflow Interrupt Enable
  • Poziom 6  
    !!!! DZIĘKUJE !!!! A ja się głowiłem jak to zrobić :). Jeszcze raz dzięki za rzetelną i szybką pomoc.