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

Atmega8 + Kontaktron = Prowizoryczny alarm

pablo4480 09 Wrz 2014 22:48 1167 10
  • #1 09 Wrz 2014 22:48
    pablo4480
    Poziom 5  

    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.

    0 10
  • #2 09 Wrz 2014 23:44
    BlueDraco
    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ę.

    0
  • #4 10 Wrz 2014 19:23
    pablo4480
    Poziom 5  

    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.

    0
  • Pomocny post
    #5 10 Wrz 2014 19:40
    BlueDraco
    Specjalista - Mikrokontrolery

    Np. coś takiego:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    1
  • #6 10 Wrz 2014 19:45
    pablo4480
    Poziom 5  

    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.

    0
  • Pomocny post
    #9 10 Wrz 2014 21:09
    dondu
    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

    0
  • #10 10 Wrz 2014 21:14
    pablo4480
    Poziom 5  

    !!!! DZIĘKUJE !!!! A ja się głowiłem jak to zrobić :). Jeszcze raz dzięki za rzetelną i szybką pomoc.

    0