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.

Bariera podczerwini na atmega 8

ojciec10 15 Sty 2012 12:12 1650 6
  • #1 15 Sty 2012 12:12
    ojciec10
    Poziom 20  

    Dzień dobry.
    Jestem zielony jeżeli chodzi o podczerwień.
    Atmega 8 - taktowanie 8MHz, nadajnik (zwykła dioda ir wymontowana z pilota) podłączony wprost do zasilania (5V) poprzez rezystor 680ohm. odbiornik(scalony odbiornik podczerwieni wymontowany z telewizora) podłączony wprost po portd.0 .
    Odbiornik z nadajnikiem są oddalone od siebie o jakieś 2cm.
    Do tego do procesora mam podpięty lcd 2*16.

    Napisałem krótki program w bascom który miał wyświetlać liczbę przekroczeń bariery na lcd
    '$regfile = "m8def.dat"
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Potrc.3 , Db6 = Portc.4 , Db7 = Potrc.5 , E = Portc.1 , Rs = Portc.0


    Config Portd.0 = Input
    Portd.0 = 1
    Ir Alias Pind.0

    Dim Liczba As Integer
    Liczba = 0
    Cls
    Lcd Liczba

    Do

    If Ir = 0 Then
    Waitms 25
    If Ir = 0 Then

    Incr Liczba
    Cls
    Lcd Liczba
    End If
    End If
    Loop

    End'

    Problem polega na tym że przekroczenie bariery raz powoduje zwiększenie stanu zmiennej liczba o różna wartość(np. od 5 do 10 inkrementacji).

    Czy w takiej konfiguracji ma prawo to działać? Może trzeba całkiem inaczej podejść do sprawy np generować jakąś częstotliwość na nadajniku ir i spodziewać się jej na wejściu procka.

    0 6
  • #2 15 Sty 2012 12:39
    McMonster
    Poziom 32  

    Podejście z gruntu złe nie jest, po prostu z tego, co widzę, co 25 milisekund sprawdzasz, czy dioda jest zakryta i za każdym sprawdzeniem zwiększasz licznik. Więc żeby przy przekroczeniu zwiększał się dokładnie o jeden musiałbyś zakryć diodę na mniej, niż 25 milisekund, a to trochę mało.

    Najprostsze rozwiązanie, to sprawdzać w kółko, czy bariera jest przekroczona, gdy tak się stanie, zapisujemy sobie, a licznik zwiększać tylko, jeśli przy wcześniejszym sprawdzeniu zapisaliśmy sobie przekroczenie bariery, po czym zerować stan przekroczenia.

    W pseudokodzie:

    Kod: pascal
    Zaloguj się, aby zobaczyć kod

    0
  • #3 19 Sty 2012 17:57
    Wujek94
    Poziom 9  

    Ja również mam pytanie z tego zakresu (jestem początkującym elektronikiem, dopiero zaczynam bawić się elektroniką cyfrową). Otóż chciałbym zrobić taką barierę w łazience do zapalania i gaszenia światła. Miało by się odbywać to tak, że gdy wiązka raz zostałaby przerwana to światło by się zapalało. Przy drugim przerwaniu wiązki powiedzmy po 3 sekundach światło byłoby gaszone. Dodatkowo, gdy świało byłoby zapalone (ktoś jest w środku) na drzwiach paliła by się czerwona dioda, a w przeciwnej sytuacji zielona. Czy do zrobienia czegoś takiego wystarczyła by mi atmega8?

    Pozdrawiam ;)

    0
  • #4 19 Sty 2012 19:55
    gaskoin
    Poziom 38  

    Do tego nie potrzebował byś w ogóle mikrokontrolera :)

    0
  • #5 19 Sty 2012 20:33
    Wujek94
    Poziom 9  

    To w jaki sposób mógłbym to zrobić najprościej i najtaniej? ;)

    Pozdrawiam ;)

    0
  • #6 19 Sty 2012 21:11
    nsvinc
    Poziom 35  

    na mikrokontrolerze...;]

    0
  • #7 22 Sty 2012 13:39
    ojciec10
    Poziom 20  

    Jeszcze jedno pytanie do tematu w jaki sposób wykryć zbocze opadające w atmedze. Chce zwiększyć wartość zmiennej po wykryciu takiego zbocza. Czy do tego celu muszę wykorzystać przerwania? Jeśli tak to w jaki sposób? A może jest w bascomie jakaś gotowa funkcja której należy użyć?

    Dodano po 1 [godziny] 35 [minuty]:

    ok temat rozwiązany, dziękuję

    0