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 szyfrowy na EEPROM

GadQ 08 Wrz 2005 20:19 2866 6
  • #1 08 Wrz 2005 20:19
    GadQ
    Poziom 10  

    Witam ! Jestem w 3 klasie technikum i w ciągu tego roku muszę zaprojektowac zamek szyfrowy z możliwością zmiany kodu z klawiatury. Niestety mikrokontrolery zaczynają się dopiero w 4 klasie i nauczyciel dopuszcza rozwiązania tylko oparte na układach małej i średniej skali itegracji. Zasugerował mi, abym zmianę i odczyt kodu otwierającego przeprowadził na kostce EEPROM, tylko problem w tym, że niewiem jak to wogóle obsłużyć i na jakiej zasadzie to działa. Jeśli ktoś mógłby mi pomóc (pokazać obsługę wejść/wyjść itd.) to będę bardzo wdzięczny.

    0 6
  • #2 08 Wrz 2005 20:41
    elektryk
    Poziom 42  

    Otwórz sobie specyfikacje pamięci np 28C64 i będziesz widział. Myśle że ukłąd będzie dość rozbudowany, ale od strony edukacyjnej bardzo ciekawy.

    0
  • #3 09 Wrz 2005 04:57
    shg
    Specjalista techniki cyfrowej

    Będzie nawet bardziej niż bardzo rozbudowany :]
    No i trochę "na wyrost", a to ze względu na bardzo duży rozmiar pamięci w porównaniu do wymagań.
    Znacznie bardziej "dopasowany" byłby jakiś mały EEPROM z interfejsem szeregowym, np. 24C01, no ale obsługa interfejsu szeregowego bez mikrokontrolera to kupa scalaków :]

    Rozwiązać to proponuję tak:
    Licznik podający adres do zapisu.
    klawiatura + enkoder np. 1 z 10 na BCD.
    Naciśnięcie dowolnego klawisza powoduje zwiększenie adresu (impuls zegarowy), odczytanie komórki pamięci EEPROMu i porównanie jej zawartości ze stanami na wyjściach enkodera.
    Jeżeli wartość z pamięci i z enkodera będą się różnić, to licznik adresu powinien zostać zresetowany. Można ewentualnie wygenerować też opóźnienie na przerzutniku monostabilnym, aby uniemożliwić szybkie wprowadzanie kodów "na chybił trafił". Powiedzmy 10s (+jakaś kontrolka LED)
    dodatkowo do wyjść licznika podpiąć np. dekoder z binarnego na 1 z 10, po osiągnięciu odpowiedniej wartości (może być również programowalna, ale będzie trochę trudniej), czyli gdy zostanie wprowadzona odpowiednio długa sekwencja poprawnych cyfr, zamek zostanie odblokowany, a licznik adresu zresetowany.
    Programowanie kodu można rozwiązać tak, że najpierw wymagane będzie wprowadzenie poprawnego kodu otwierającego zamek, poza odblokowaniem rygla ustawiony zostanie przerzutnik RS (każda zła cyfra będzie go resetowala) oznaczający poprawny kod. Jeżeli teraz zostanie naciśnięty przycisk programowania (bramka AND z przycisku i przerzutnika), to układ przechodzi w tryb programowania.
    Programowanie działa tak samo jak odczyt, z tym że zamiast odczytu pamięci wykonywany jest zapis, a licznik adresu nie jest resetowany gdy wprowadzimy złą cyfrę (sygnał RESET licznika można blokować sygnałem z przerzutnika RS), bo przecież żadna cyfra nie bedzie zla :]
    Problemem może być osiągnięcie odpowiednich zależności czasowych sygnałów sterujących EEPROMem, ale przy tak powolnym zapisie i odczycie można to zrobić nawet na kilku przerzutnikach monostabilnych.

    Należy również pamiętać o odbijających się stykach przełączników w momencie włączania. Można tu zastosować proste filtry RC i przerzutniki Schmitta.
    Wskazane też było by zastosowanie zatrzasków zapamiętujących przez chwilę naciśnięte przyciski, aby uniknąć możliwości błędnego zaprogramowania pamięci wskutek np. zbyt krótkiego naciskania przycisków. Można nawet zrobić obie te rzeczy za jednym zamachem - wykorzystując przerzutniki RS przy przełącznikach ustawiane naciśnięciem przycisku, a zerowane przez np. przerzutnik monostabilny po zakończeniu programowania.

    A generalnie zasada programowania/odczytu wygląda tak:
    Programowanie
    - Na wejście adresowe podajesz adres
    - Na wejście danych podajesz dane do zapisu
    - na wyjścia sterujące podajesz sygnały odpowiadające programowaniu (zdaje się końcówka /WE w stan niski, ale nie wiem, nie zajrzałem do noty ;] )
    - czekasz chwilę (a ile, to się z noty katalogowej dowiesz)
    - gotowe. na wejścia sterujące podajesz "neutralną" kombinację sygnałów, zwalniasz magistralę danych i adresową (to akurat nie jest konieczne w Twoim układzie)

    Odczyt tak samo, ale po podaniu adresu nie podajesz danych, tylko odrazu kombinację sygnałów sterujących odpowiadającą odczytowi i po chwili ma magistrali danych pojawia się zawartość żądanej komórki pamięci.

    Tak jeszcze wpadłem na prosty sposób zrobienia dowolnie długiej sekwencji kodowej z możliwością programowania.
    Mając dziesięciocyfrową klawiaturę wykorzystujesz tylko 4 bity z dostępnych ośmiu, więc i pozostałe 4 mogą się do czegoś przydać :]
    Robisz klawisz Enter który podczas programowania powoduje, jak pozostałe, zwiększenie licznika adresu i zapis jakiejś wartości do któregoś z "wolnych" bitów. Powoduje to także automatyczne zakończenie programowania i przejście w tryb odczytu.
    Podczas odczytu licznik był by normalnie zwiększany, jak powyżej to opisałem, po wprowadzeniu szyfru naciskasz enter, co powoduje zwiększenie adresu i jeżeli w następnej komórce będzie ustawiony podczas programowania bit oznaczający koniec sekwencji, to zamek zostanie odblokowany. Pozbywamy się przy okazji dodatkowego kodera na magistrali adresowej.

    A no i jeszcze musisz pamiętać, że przed rozpoczęciem zapisu musisz skasować całą zawartość pamięci (o ile to jest Flash), ale to akurat nie powinno być zbyt skomplikowane.


    Taka luźna idea tylko :] lepszego pomysłu nie mam.

    A tak BTW, to ciekawy temat... :]

    0
  • #4 09 Wrz 2005 17:45
    GadQ
    Poziom 10  

    Dzięki za odpowiedź ;D Co do tego EEPROMU to wiem, że ma zbyt dużo pamięci do tego celu niestety tak zalecił mi mój nauczyciel i spodziewam się że nic innego nie mam.
    Niezbyt satysfakcjonujący jest fakt, że mówisz że układ będzie dość rozbudowany, ponieważ będzie on częścią dezaktywującą alarm. Mam na to rok, ale niewiem czy podołam.
    Jakiś blokowy schemat chociaż z tym EEPROMEM, przerzutnikami itd. by się przydał, bo tak z czytania trochę będę się musiał namęczyć by zrozumieć.

    0
  • #5 09 Wrz 2005 20:37
    frohme
    Poziom 21  

    Wiesz co! Zastanawiam się czy nauczyciele zawsze muszą starać się zrobić to metodą " czy można jeszcze gorzej ?". Adresy, liczniki, dekodery i dzikie węże a jakiś czas temu realizowano takie wybryki prawie w technice dyskretnej i stąd trzeba czerpać wzorce prostoty przy wykorzystywaniu współczesnych elementów. Owszem EEPROM bo łatwo dostępny i niezbyt drogi, jakiś licznik a właściwie rejestr przesuwający jedynkę logiczną długości nie więcej niż 8 bitów (a może wystarczy już 4 - taka długość ile cyfr kodu), dekoder klawiatury na kod binarny i komparator 4 bitowy.Według tej idei działało by to tak: po wciśnięciu klawisza dekoder podaje na komparator kod klawisza rejestr bitem 0 adresuje EEPROM i z 4 wyjść na drugą część komparatora podawany jest kod jaki miałby być. Równe to nie ma alarmu, i czekamy na następny klawisz. Naciśnięty to proces się powtarza, aż wreszcie naciśniemy enter, jako żądanie otwarcia zamka. To nic, że adresowanie EEPROM'u będzie wyjątkowo nieciągłe, przecież potrzebnych jest tylko kilka lokacji pamięci. Tak w skrócie pomysł by się przedstawiał. Wszystko jeszcze do przetworzenia i poprawek.

    0
  • #6 09 Wrz 2005 21:03
    kamyczek
    Poziom 34  

    Układ zapamiętujący kod możesz zrobić na przerzutnikach lub rejestrze 4094 kostka epromu to też rozwiązanie

    0
  • #7 09 Wrz 2005 23:06
    shg
    Specjalista techniki cyfrowej

    No właśnie, jeżeli stosowanie EEPROMu zostało Ci tylko zalecone, a nie jest konieczne, to znacznie prostszym rozwiązaniem będzie skonstruowanie pamięci statycznej na przerzutnikach D wykonanych w technologii CMOS i podtrzymanie zasilania tych układów za pomocą akumulatorka.
    Układy CMOS, gdy na ich końcówkach (ani wewnątrz struktury) nie występują zmiany stanów, pobierają tak znikomy prąd, że jest on pomijalnie mały przy zasilaniu bateryjnym. Znacznie większy jest tzw. prąd samorozładowania baterii, powodujący z czasem utratę ładunku.
    No i jeszcze taki myk - lepiej jest stosować baterię alkaliczną niż akumulator. Akumulatory cechują się bardzo dużym samorozładowaniem w porównaniu do baterii alkalicznych (chyba nawet do 30% na miesiąc dla NiCd). Natomiast bateria alkaliczna przez rok od wyprodukowania traci nie więcej jak kilka procent swojej pojemności. Okres trwałości baterii porządnej firmy (znaczy takiej za 2-3 zł ;) ) wynosi najczęściej 5 lat, czyli dłużej niż niektórych akumulatorów, a lepiej po tym okresie wymienić baterię niż akumulator.
    Oczywiście założenie jest takie, że układ jest stale zasilany z sieci, a bateria ma służyć tylko do podtrzymania zawartości pamięci na czas przerw w zasilaniu. chociaż taki układ CMOS na jednej baterii (a właściwie to na dwóch, lub trzech bo potrzebne jest min. 3V napięcia zasilania) to by i z rok pociągnął bez problemu :]
    Mój kalkulator na oryginalnych bateriach alkalicznych działa już ponad 7 lat :] a używam bardzo często, ale on jest w technologii n-MOS chyba wykonany, nie wiem ;]

    Jak tak umotywujesz zasadność stosowania przerzutników CMOS podtrzymanych bateryjnie zamiast EEPROMu to myślę, że prowadzący powinien się zgodzić.
    A najważniejsze - obsługa takiej pamięci będzie znacznie prostsza niż EEPROMu.

    0