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

[AVR][bascom] dekoder 4 cyfr DTMFu

VSS 07 Lis 2008 18:39 2361 5
REKLAMA
  • #1 5712384
    VSS
    Poziom 21  
    Witam !

    Czy ktoś może mi pomóc napisać program pozwalający na wystawienie jedynki logicznej na wyjściu proca po podaniu odpowiedniego czterocyfrowego kodu. Tych kodów byłoby około 10. Dekodowanie cyfr jakoś zrobię ale nie wiem jak zapamiętać kolejno 4 cyfry i potem je sprawdzić z wpisanymi, w razie poprawności wystawić stan wysoki.
    Pomożecie ? Konfiguracja sprzętowa: atmega16 i do tego mt8870 jako dekoder DTMFu. Za rozwiązanie zapłącę punktami.
  • REKLAMA
  • #2 5714180
    sylwunia35
    Poziom 18  
    Ja ostatnio zrobiłem zamek do drzwi otwierany za pomocą telefonu komókowego, na procesorze ATiny2313 oraz dekoderze DTMF . Układ porównuje zawartość EEPROM z klawiszami, które zostały wciśnięte w telefonie. Program napisany jest w BASCOM, bez użycia przerwań. Jak będziesz zainteresowany to mogę dać szkielet programu do przerobienia do własnych potrzeb.
  • REKLAMA
  • #3 5716092
    VSS
    Poziom 21  
    sylwunia35 napisał:
    Ja ostatnio zrobiłem zamek do drzwi otwierany za pomocą telefonu komórkowego na ATiny2313 oraz dekodera DTMF . Układ porównuje eprom z klawiszami w telefonie. Program napisany w BASCOM bez użycia przerwań. Jak będziesz zainteresowany to mogę dać szkielet programu do przerobienia do własnych potrzeb.


    Bardzo chętnie zobaczyłbym ten kawałek kodu. Czy masz kilka kodów czy tylko jeden ? Rozumiem, że poprzez słuchawkę telefonu układ dekoduje kody DTMF i w przypadku poprawnego kodu steruje zamkiem?
  • REKLAMA
  • #4 5721002
    sylwunia35
    Poziom 18  
    WITAM


    if pind.0 = 0 THEN                      'jesli bedzie masa
    call rej                                'skok do rejestracji
    portb.2 = 1
    end if
    portb.2 = 1
    '*****************głoewma********************
    
    Do
    if a = 4 then
    a = 0
    end if
    waitms 250
    toggle portb.0
    if pind.2 = 1 then
    call odb
    end if
    'debounce pind.2 , 1 , odb , sub
    if pomoc = 1 then
    't = 0
    pomoc = 0
    call werfikacja
    call czas
    end if
     loop
    
    
    '***************werfikacja******************
    sub werfikacja
    incr d
    if d = 4 then
    d = 0
    call pik
    waitms 250
    call pik
    
    portb.1 = 1
    for d = 1 to 4
    call odczyt
    if s(d) = temp(d) then
    'incr t
    pomoc2 = 1
    else
    pomoc2 = 0                              'zamkniete
    start watchdog
    end if
    next d
    call zamek
    d = 0
    end if
    end sub
    '***********rejestracja*********************
    sub rej
    do
    waitms 100
    toggle portb.0
    debounce pind.2 , 1 , odb , sub
    if pomoc = 1 then
    call zapis
    pomoc = 0
    'call czas
    end if
    if a = 4 then
    call pik
    call pik
    a = 0
    start watchdog
    end if
    loop
    end sub
    '***********zapis EPROM*******************
    sub zapis                               'zapis do eproma klucza
    writeeeprom s(a) , a
    waitms 150
    end sub
    
    sub odczyt
    readeeprom temp(d) , d
    waitms 200
    end sub
    '**************************************************
    sub czas
    TU JESZCZE COŚ BĘDZIE
    end sub
    '++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    sub zamek
    call pik
    call pik
    call pik
    portb.1 = 1
    if pind.1 = 1 then
    toggle portb.2
    call servo
    end if
    if pind.1 = 0 then
     portb.2 = 0
    call servo
    wait 3
    call servo
     portb.2 = 1
    end if
    pomoc2 = 0
    end sub
    
    
    sub pik
     portb.1 = 0
    waitms 250
    portb.1 = 1
    end sub
    
    
    sub odb
    portb.1 = 0
    portb.0 = 1
    do
    loop until pind.2 = 0
    portb.0 = 0
    waitms 100
    incr a
    waitms 20
    s(a) = pind and 120
    waitms 100
    pomoc = 1
    portb.1 = 1
    pind.2 = 0
    'if a = 4 then : a = 0 : end if
    end sub
    
    Sub Servo
    For R = 1 To 100
    Reset portb.3
    Waitms 3
    Set portb.3
    For T = 1 To 10
    Waitms 1
    Next T
    Next R
    End Sub

    To tylko ogólny zarys ale to już działa
    Kod zamka ma 4 cyfry.

    Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
  • REKLAMA
  • #6 8961130
    copernick
    Poziom 10  
    Witam.
    Chciałbym odgrzać temat.
    Robię coś podobnego z tym , że z obsługą dłuższego kodu polecenia np. 332.
    Nigdy nie pracowałem z CT8870 więc nie wiem jak jest on w stanie przesłać taki pakiet i czym docelowo ma się sugerować program dekodujący kombinację czterech wyjść.
REKLAMA