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.

zamek elektroniczny cyfrowy kodowy BASCOM AVR

wojlej 31 Mar 2009 18:47 2704 1
  • #1 31 Mar 2009 18:47
    wojlej
    Poziom 17  

    Witam.
    Wpadłem na pomysł zrobienia zamka cyfrowego na uP. Jako, że to mój pierwszy tego typu projekt to pojawiło się kilka problemów. Głównie z programem. Kupiłem sobie książkę "Programowanie mikrokontrolerów AVR w języku BASCOM". Zaprojektowałem układ i napisałem jakiś tam
    program. Umieszczam to tutaj:


    A) Schemat:
    zamek elektroniczny cyfrowy kodowy BASCOM AVR

    Pytanie nr1. Czy to w ogóle ma prawo działać i czy jest sens stosowania EEPROMu dla przechowywania PINu? Zworka JP3 służy do awaryjnego otwarcia rygla poprzez zwarcie przekaźnika do masy (jakby coś nawaliło).
    Mikroprocesor ATMEGA-8 DIP28. Klawiaturę postanowiłem, że zrobię z 12 microjumperków.

    B) Program (Pisany w BASCOM-AVR)

    Code:
    $regfile = "m8def.dat"                                      
    

    $crystal = 8000000                                         

    Config Portc = Input                                       

    Config Portb = Input                                       

    Config Portd = Input                                       

    Const Pin = 1234                                           

    Zero Alias Pinc.0
    Jeden Alias Pinc.1
    Dwa Alias Pinc.2
    Trzy Alias Pinc.3
    Cztery Alias Pinc.4
    Piec Alias Pinc.5

    Szesc Alias Pinb.0
    Siedem Alias Pinb.1
    Osiem Alias Pinb.2
    Dziewiec Alias Pinb.3
    Gwiazdka Alias Pinb.4
    Kratka Alias Pinb.5

    Config Portc = &B000000                                     'deklaracja wartości
    Config Portb = &B000000                                     'początkowej portów


    Dim Liczba_1 As Integer                                     'liczba tysięczna
    Dim Liczba_2 As Integer                                     'liczba setna
    Dim Liczba_3 As Byte                                        'liczba dziesiętna
    Dim Liczba_4 As Byte                                        'liczba jedności

    Dim Haslo As Integer                                       


    Do
         If Zero = 1 Then
          Liczba_1 = 0 * 1000

         If Jeden = 1 Then
          Liczba_1 = 1 * 1000

         If Dwa = 1 Then
          Liczba_1 = 2 * 1000

         If Trzy = 1 Then
          Liczba_1 = 3 * 1000

         If Cztery = 1 Then
          Liczba_1 = 4 * 1000

         If Piec = 1 Then
          Liczba_1 = 5 * 1000

         If Szesc = 1 Then
          Liczba_1 = 6 * 1000

         If Siedem = 1 Then
          Liczba_1 = 7 * 1000

         If Osiem = 1 Then
          Liczba_1 = 8 * 1000

         If Dziewiec = 1 Then
          Liczba_1 = 9 * 1000

          Waitms 500

         If Zero = 1 Then
          Liczba_2 = 0 * 100

         If Jeden = 1 Then
          Liczba_2 = 1 * 100

         If Dwa = 1 Then
          Liczba_2 = 2 * 100

         If Trzy = 1 Then
          Liczba_2 = 3 * 100

         If Cztery = 1 Then
          Liczba_2 = 4 * 100

         If Piec = 1 Then
          Liczba_2 = 5 * 100

         If Szesc = 1 Then
          Liczba_2 = 6 * 100

         If Siedem = 1 Then
          Liczba_2 = 7 * 100

         If Osiem = 1 Then
          Liczba_2 = 8 * 100

         If Dziewiec = 1 Then
          Liczba_2 = 9 * 100

          Waitms 500

         If Zero = 1 Then
          Liczba_3 = 0 * 10

         If Jeden = 1 Then
          Liczba_3 = 1 * 10

         If Dwa = 1 Then
          Liczba_3 = 2 * 10

         If Trzy = 1 Then
          Liczba_3 = 3 * 10

         If Cztery = 1 Then
          Liczba_3 = 4 * 10

         If Piec = 1 Then
          Liczba_3 = 5 * 10

         If Szesc = 1 Then
          Liczba_3 = 6 * 10

         If Siedem = 1 Then
          Liczba_3 = 7 * 10

         If Osiem = 1 Then
          Liczba_3 = 8 * 10

         If Dziewiec = 1 Then
          Liczba_3 = 9 * 10

          Waitms 500

         If Zero = 1 Then
          Liczba_4 = 0

         If Jeden = 1 Then
          Liczba_4 = 1

         If Dwa = 1 Then
          Liczba_4 = 2

         If Trzy = 1 Then
          Liczba_4 = 3

         If Cztery = 1 Then
          Liczba_4 = 4

         If Piec = 1 Then
          Liczba_4 = 5

         If Szesc = 1 Then
          Liczba_4 = 6

         If Siedem = 1 Then
          Liczba_4 = 7

         If Osiem = 1 Then
          Liczba_4 = 8

         If Dziewiec = 1 Then
          Liczba_4 = 9

          Waitms 100

          Haslo = Liczba_1 + Liczba_2 + Liczba_3 + Liczba_4

          If Haslo = Pin Then
            Pind.5 = 1
            Waitms 10000                                        'czekaj 10s

          Else
            Pind.5 = 0
            Pind.6 = 1
            Pind.7 = 1
            Waitms 2000                                         'czekaj 2s

          End If








    Loop
    End


    Nie miałem pojęcia jak wpisać liczbę za pomocą jumperków więc postanowiłem tak:

    Liczba 5467 to inaczej 5*1000 + 4*100 + 6*10 + 7

    Kompletnie nie wiem czy ma to prawo działać. No i pozostaje wprowadzenie do programu deklaracji o zmianie pinu.

    Proszę o podpowiedź. Pozdrawiam.

    0 1
  • #2 14 Kwi 2009 08:18
    gothye
    Poziom 33  

    A nie prościej użyć gotowej funkcji "GETKBD" ?

    Ściągnij sobie tegoPDF-a i zobacz CONFIG KBD (s. 147) i GETKBD (s. 230).

    0