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

[attiny2313][bascom] zamek szyfrowy

dezmontnikus 31 Maj 2009 17:10 4018 14
  • Poziom 21  
    Witam...
    Niedawno udało mi się zbudować sterownik do bramy przesuwnej ale teraz mam problem z otwieraniem jej z miejsca. Przy bramie mogłem zastosować zwykły przełącznik ale każdy by się nim bawił :) Chcę zbudować zamek szyfrowy który po wprowadzeniu odpowiedniego kodu poda sygnał przez jakąś 1s na wyjście. Kod miałby się wyświetlać na wyświetlaczu siedmiosegmentowym. Chciałem użyć do tego Attiny2313 bo mam kilka na składzie. Trochę będzie z tym zamieszania żeby odpalić 4 cyfrowy wyświetlacz na tym procku. Może użyć jakiś transkoderów i odpowiednio z procka przełączać je. Kod najlepiej jakby był napisany w bascom. Jeżeli by wystarczyło miejsca można dodać opcję że po trzech błędnych kodach układ blokuje się na 1minute (ale to już opcja). z góry dzięki wszystkim za pomoc
    Pozdrawiam.
  • Poziom 28  
    Ja moge cos takiego napisac, ale napewno nie attiny2313 i napewno nie za darmo. Mozliwe ze kodu calego bym nie zmiescil w attiny i pinow tez moze nie starczyc, dlatego odrazu najlepiej uzyc atmegi8.
    Jak chcesz za darmo moge ci opisac pokolei jak wszystko zrobic.
  • Poziom 26  
    A moze jeden segment i enekoder? na wyświetlaczu wyswietlana aktualna liczba i enekoderm ją wybiera
  • Poziom 37  
    Może rejestr SIPO jakiś może (ls164 czy jakie tam są popularne) i multiplex na 4 segmenty? Do tego klawiatura 4x4 albo 3x3 chodzącą w tym samym przerwaniu co wyświetlacz i używającą tych samych pinów to sterowania multuiplexem co zmniejszy ilość pinów o 4 tylko trzeba diody dodać ? Pinów starczy ale pamięci w baskomie to raczej wątpię choć kto wie ja tego nie używam więc musisz spróbować.
    Pozdrawiam
  • Pomocny post
    Poziom 35  
    dezmontnikus napisał:
    Witam...
    Chcę zbudować zamek szyfrowy który po wprowadzeniu odpowiedniego kodu poda sygnał przez jakąś 1s na wyjście. Kod miałby się wyświetlać na wyświetlaczu siedmiosegmentowym. Chciałem użyć do tego Attiny2313 .....
    Pozdrawiam.

    Tu masz gotowy projekt (AN#144) na AT90S2313, mozesz go bez problemu dostosowac dla 'attiny';
    http://www.mcselec.com/index.php?option=com_content&task=view&id=160&Itemid=57
    Jezeli bylbys zainteresowany robic go z 3 tylko przyciskami i "menu" to znajdziesz w net pod haslem '3button menu'.

    Tu masz jeszcze jeden link - mozesz narobic tych zamkow kilka..
    http://www.avr.4mg.com/custom3.html
    Praktycziej jest dzis z LCD zamiast 7- segment.

    e marcus
  • Poziom 21  
    emarcus jak by miała wyglądać ta przeróbka na Attiny2313.. właśnie chodzi mi o coś takiego jak napisałeś. Ok można zrezygnować z tego siedmiosegmętowego i dać LCD. Klawiatura zostanie taka jak jest tam w projekcie. Będzie trzeba przerobić kod, nie wiem czy sobie z tym poradzę.
  • Poziom 22  
    Może zamiast dużej klawiatury rozważ wprowadzanie kodu tylko dwoma przyciskami na zasadzie sekwencji lewo-prawo.
  • Poziom 21  
    Ale po co... z całą klawiaturą i wyświetlaczem będzie to bardziej profesjonalnie wyglądać wbudowane w słupek. Można użyć tych dwóch klawiszy ale nie widzę sensu jeżeli miejsca w procku jest wystarczająco dużo.
  • Poziom 35  
    dezmontnikus napisał:
    emarcus jak by miała wyglądać ta przeróbka na Attiny2313.. właśnie chodzi mi o coś takiego jak napisałeś. Ok można zrezygnować z tego siedmiosegmętowego i dać LCD. Klawiatura zostanie taka jak jest tam w projekcie. Będzie trzeba przerobić kod, nie wiem czy sobie z tym poradzę.


    Przgladnij ten drugi link, ktory podalem.
    Praktycznie jest to o co pytasz. Wyglada ze oba projekty maja ten sam koncept i podobny uklad. W jednym jest wiecej opcji i wiekszy zakres stosowanych uC. Oba projekty pochodza z dwoch roznych zrodel; nie wiem kto, na kim sie wzorowal.
    Nie mialem potrzeby testowac zadnego z nich.
    W kazdym jednak razie opisy sa na tyle dostateczne ze wybrany uklad mozna wytestowac i wprowadzic ewentualne zmany wynikajace z wlasnych potrzeb.

    e marcus
  • Poziom 21  
    NIe no poddaje się... jak wspominalem wcześniej na bascom jestem początkujący i nie mogę sobie poradzić z symulacją tego kodu.

    Code:
    '-------------------------------------
    
    '    !  D E M O  P R O G R A M  !
    '
    '      FOR Bascom AVR Simulator
    '-------------------------------------
    ' Code is consisted of 4 digits.
    ' 1 user code is entered in program.
    '-------------------------------------
    'Project:     CodeLockAVR - LCD
    '           File:codelcd-D1SIM.bas
    'Copyright:    Rudi Slejkovec
    'WWW:          www.avr.4mg.com
    'Device:        Atmel AVR uC
    'Date:           15.11.2005
    '-------------------------------------

    $sim
    'Instructs the compiler to generate empty wait loops for the WAIT and WAITMS statements.
    'Instruction allows faster simulation.
    '
    '! In AVR Simulator run the simulation with the command:
    '! Step into code (F8)
    '
    '! SET LCD PIN CONNECTIONS in menu:
    'Options => Compiler => Output => LCD
    '
    '     Lcd type = 16 * 2
    '     DB4 = Portb.0 , DB5 = Portb.1 , DB6 = Portb.2 , DB7 = Portb.3
    '     RS = Portd.5, Enable = Portd.6

    $regfile = "2313def.dat"
    $crystal = 4000000

    Dim Keyread As Byte
    Dim Key As Byte
    Dim Code As Word
    Dim Mycode As Word
    Dim Digits As Byte
    Dim Point As Byte

    Ddrd = 255
    Portd = 0

    Relay Alias Portd.4
    Beep Alias Portd.3

    Config Kbd = Portb , Debounce = 40

    Config Lcd = 16 * 2



    '-------------------------------------
    Mycode = 5060
    '-------------------------------------



    Do
          Cls
          Cursor Off Noblink
          Lcd "WWW.AVR.4MG.COM"
          Wait 2
          Lowerline
          Lcd "CodeLockAVRdemo"
          Wait 4
          Cls

          Set Beep
          Waitms 100
          Reset Beep
          Waitms 100

    Begin:
          Code = 0
          Digits = 0
          Point = 0

    Scan:
          Cls
          Lcd "   Enter code"

       Do
          Keyread = Getkbd()
          If Keyread <> 16 Then Gosub Gotkey
          Waitms 100

          If Digits = 4 Then

             If Code = Mycode Then
                Goto Opendoor
             Else
                Goto Error
             End If

          End If
       Loop

    Loop



    Gotkey:
          Ddrb = 255
          Set Beep
          Waitms 100
          Reset Beep
          Waitms 100

          Key = Lookup(keyread , Dta)

          Incr Digits
          Point = Digits + 6
          Locate 2 , Point
          Lcd Key
          Code = Code * 10
          Code = Code + Key
    Return

    Dta:
    Data 1 , 2 , 3 , 13 , 4 , 5 , 6 , 14 , 7 , 8 , 9 , 15 , 11 , 0 , 12 , 16

    Error:
          Cls
          Lcd "   Code wrong"
          Waitms 100
          Set Beep
          Wait 3
          Reset Beep
          Wait 20
    Goto Begin

    Ok:
          Waitms 100
          Set Beep
          Waitms 200
          Reset Beep
          Waitms 200
          Set Beep
          Waitms 200
          Reset Beep
    Return

    Opendoor:
          Cls
          Lcd " Code accepted"
          Gosub Ok
          Lowerline
          Lcd "    Unlocked"
          Waitms 300
          Set Relay
          Wait 1
          Reset Relay
          Wait 1
    Goto Begin


    Ustawiłem piny wyświetlacza i skompilowałem ten kod. PO właczeniu symulatora i LCD wyświetla mi jakieś krzaki. Pomóżcie
  • Poziom 22  
    Już na wstępie masz złą deklarację procesora $regfile. Na początku pisałeś o ATtiny2313, więc $regfile = "ATtiny2313.DAT"
  • Poziom 21  
    Dobra poprawione lecz nadal nie działa tak jak powinno. Teraz chociaż wyświetla cyfry po wciskaniu klawiszy. Znaczy to wpisywanie to nie jest tak prawidłowe bo np: wciskając 2 wyskakuje 223 i tak na innych cyfrach
  • Poziom 35  
    dezmontnikus napisał:
    Dobra poprawione lecz nadal nie działa tak jak powinno. Teraz chociaż wyświetla cyfry po wciskaniu klawiszy. Znaczy to wpisywanie to nie jest tak prawidłowe bo np: wciskając 2 wyskakuje 223 i tak na innych cyfrach


    W zasadze cod jest poprawny, chociaz:

    Zamiast
    '! SET LCD PIN CONNECTIONS in menu:
    'Options => Compiler => Output => LCD
    '
    Powinno raczej byc w kodzie:
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portd.5 , E = Portd.6

    Czy powyzszy problem wystepuje w rzeczywistym ukladzie np. na plytce testowej, czy tylko w Bascom Symulator?
    Bascom Symulator nie zawsze daje pelne odwzorowanie rzeczywistosci ze wzgledu na pomijanie niekiedy waznych timingow ( patrz $sim).
    Testowanie w symulatorze powinno byc w trybie 'Step into code" a nacisniecie klucza powinno byc przed:
    Keyread = Getkbd()
    a nie przypadkowe.

    Wytestuj to wszystko na plytce testowej z rzeczywista keypad - byc moze zajdzie potrzeba zwiekszyc 'debounce' nawet do 100 ms.

    e marcus
  • Poziom 23  
    A możne zamiast klawiatury zrobić na pastylkę DS1990?
    Nie trzeba się bawić z wpisywaniem kodu i pinów w procesorze trzeba mniej, bo tylko na magistrale 1wire i ze dwie diody lub jedna dwukolorową :)
  • Poziom 21  
    Pastylka odpada :) nie każda osoba będzie miała taką przy sobie... Mam jeszcze pytanie jak ustawić fuse bity do Attiny2313 żeby działał z tym programem