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

Przycisk szyfrowy - Attiny13

SylwekK 28 Lut 2011 14:56 16849 18
REKLAMA
  • Przycisk szyfrowy - Attiny13
    Było już na elektrodzie prezentowanych wiele zamków szyfrowych – z pełną klawiaturą, dwoma przyciskami i jednym też. Mój projekt z serii pchełka zrealizowałem na Attiny13 i jednym przycisku. Potrzebne mi było rozwiązanie nieco inne – coś co nie będzie chronić sejfu w banku ale coś prostego i malutkiego co zabezpieczy układ przed np. zabawą dzieci (dorosłych też) we włączanie/wyłączanie jakiegoś urządzenia. Może też spełniać rolę włącznika gdzie wymagana jest trzeźwość umysłu lub po prostu immobilizer dla auta czy motoru. Pomyślałem, że może się komuś przyda taki gadżet więc umieszczam tu kompletny opis. Zdjęcie przedstawia jeszcze prototyp na płycie stykowej. Układ docelowy jest na kostce w wersji SMD. Myślę, że moderator przymknie oko, na brak gotowego układu - w końcu wartość intelektualna (program) to też coś co sam zrobiłem ;)

    Schemat jest bardzo prosty:
    Przycisk szyfrowy - Attiny13

    Program napisałem w BASCOM i po kompilacji zajmuje dokładnie 1024 bajty :) Plik .bin do zaprogramowania w załączniku. Fusy na nowym procku bez zmian (zegar na 1,2MHz). Źródła w BASCOM tym razem nie udostępnię...

    Działanie szyfrowego przycisku przypomina nieco alfabet Morse'a gdzie kodem jest krótkie i długie przyciskanie w odpowiednim czasie. Do dyspozycji mamy w sumie tylko ...256 kombinacji. Może to i nie dużo ale jak wspomniałem banku toto chronić nie będzie, a dodatkowym utrudnieniem jest właśnie czas wprowadzania kodu. Uwierzcie naprawdę należy się z tym oswoić ale jak już chwilkę poćwiczymy to problemu nie ma.

    Po włączeniu zasilania w ciągu 1,5s układ robi wewnętrzne porządki i jest gotowy do pracy. Posiada dwa tryby i wszelkie flagi konfiguracyjne są nieaktywne.

    Tryb OFF - przekaźnik wyłączony i oczekiwanie na kod. W zasadzie to jedyna funkcja w tym trybie...
    Przycisk włącza urządzenie (przechodzi w tryb ON) po wprowadzeniu 8-o bitowego kodu (podobnie jak w transmisji szeregowej).
    Czasy dla przycisku:
    - "0" krótki impuls 25ms - 150ms
    - "1" długi impuls 150ms - 1s
    - maksymalny czas przerwy między impulsami przy wprowadzaniu kodu 1,5s. - po tym czasie kod należy wprowadzać od nowa
    Przez cały czas trzymania przycisku aktywna jest czerwona dioda (dla wygody i pewności, że przycisk jest wciśnięty).

    Tryb ON - przekaźnik załączony. Wyłączenie (przejście do OFF) następuje po krótkim wciśnięciu przycisku (na długi nie zareaguje).
    W trybie tym możliwa jest też wszelka konfiguracja przycisku:

    - [A] przytrzymanie przycisku przez 2s do 3,5s - jednorazowe żądanie kodu warunkiem aby przejść do trybu OFF (czyli wyłączyć przekaźnik). Miga wtedy cały czas dioda zielona co 0,5s (moment wejścia w tą funkcję niewidoczny). Teraz jeśli nie wprowadzimy kodu to nie wyłączymy urządzenia.

    - [B] przytrzymanie przycisku przez 4s do 5,5s - wyłączenie żądania kodu. Przycisk wtedy działa jak zwykły ...przycisk (bez kodu). Włączenie bądź wyłączenie przekaźnika odbywa się prze krótkie (na długie brak reakcji) wciśnięcie przycisku. Tryb jest aktywny do momentu ponownego przytrzymania przycisku w trybie ON przez 4s do 5,5s lub do momentu wyłączenia zasilania (moment wejścia w tą funkcję niewidoczny).

    - [C}przytrzymanie przycisku przez 6s - wejście do zmiany kodu. Po tym czasie zaczyna szybko migać zielona dioda co 75ms i miga tak do momentu wyjścia z opcji zmiany kodu.
    Procedura zmiany kodu wygląda następująco:
    Wprowadzamy nowy kod z zachowaniem czasów dla przycisku, o których pisałem wcześniej. Po wprowadzeniu ostatniego ósmego stanu, wciskamy znowu przycisk i trzymamy przez 6s aż przestanie migać dioda. Czas przerwy od wprowadzenia kodu do przycisku zatwierdzającego nie może być dłuższy niż 1,5s - po tym czasie następuje automatyczne wyjście z trybu zmiany kodu bez jego zmiany. Wyjść z tego trybu można też przez przytrzymanie przez 6s przycisku po wprowadzeniu niepełnego kodu (program bada czy było 8 znaków).
    Wprowadzony kod jest zapamiętywany w pamięci EEPROM więc po wyłączeniu urządzenia i jego ponownym włączeniu będzie aktualny.

    Dodatkowe warunki:
    jeśli aktywna jest opcja [A] wtedy niemożliwe jest wejście w opcje [B] i [C] oraz dezaktywowana jest opcja [B] jeśli była aktywna,
    przy aktywności [C] nie możliwe jest wejście w opcje [A] i [B] oraz dezaktywowana jest opcja [B] jeśli była aktywna,

    A co się stanie jeśli zapomnieliśmy kodu? Odłączamy zasilanie, przytrzymując przycisk ponownie włączamy i mamy chwilowy kod "00000000" - w pamięci EEPROM jednak cały czas siedzi ten zapomniany więc dobrze jest wejść w tryb ON i go zmienić...

    Myślę, że jak na Attiny13 i BASCOM to sporo udało mi się upchać. Jeśli Wam się podoba to... klik FAJNE ;)
    Załączniki:
    • zamek szyfrowy.bin (1 KB) Musisz być zalogowany, aby pobrać ten załącznik.

    Fajne? Ranking DIY
    O autorze
    SylwekK
    Poziom 32  
    Offline 
    Tu można zajrzeć www.sylwekkuna.com
    SylwekK napisał 2764 postów o ocenie 2762, pomógł 82 razy. Mieszka w mieście Lipsko. Jest z nami od 2007 roku.
  • REKLAMA
  • #2 9216495
    ^Rachel
    Poziom 21  
    Posty: 570
    Pomógł: 15
    Ocena: 149
    A zmierz napięcie na kolektorze tranzystora względem masy.

    "Układ docelowy jest na kostce w wersji SMD" - to co za problem zrobić zdjęcie tego układu ?
  • #3 9216539
    SylwekK
    Poziom 32  
    Posty: 2764
    Pomógł: 82
    Ocena: 2762
    Po co mam mierzyć to napięcie? Zasilam w ten sposób przekaźniki nawet przez rezystory bazowe 10k i jeszcze nigdy nie miałem z tym problemu - układy bezawaryjnie działają wiele lat.
    Jest problem ze zdjęciem gotowca, bo został już zamontowany u znajomego i jakoś wtedy nie przyszło mi do głowy, żeby robić fotki :)
  • #4 9216634
    ^Rachel
    Poziom 21  
    Posty: 570
    Pomógł: 15
    Ocena: 149
    Aż pewnego pięknego dnia, tranzystor w Twoim przycisku szyfrowym, nie przełączy przekaźnika i będzie wtedy szukanie, dlaczego ten układ nie działa.

    A wiesz może jak działa klucz tranzystorowy ? i wiesz, że tranzystor wtedy wchodzi w stan nasycenia ? a u Ciebie mi się wydaje, że on nie wejdzie w nasycenie..
  • #5 9216665
    zdebel
    Poziom 15  
    Posty: 158
    Pomógł: 9
    Ocena: 3
    Faktycznie, 5V chcesz przełączać 12V, by trzeba sprawdzić jakie wzmocnienie ma ten tranzystor żeby móc stwierdzić czy prąd 5V/4.7K [A] wystarczy aby nasycić tranzystor.
  • #6 9216687
    ^Rachel
    Poziom 21  
    Posty: 570
    Pomógł: 15
    Ocena: 149
    Ale z tego co ja tu widzę, to pewnie ten układ nigdy nie był zmontowany, a już nie mówiąc, że nigdy nie widział przekaźnika ;)
  • REKLAMA
  • #7 9217047
    SylwekK
    Poziom 32  
    Posty: 2764
    Pomógł: 82
    Ocena: 2762
    @^Rachel, a czy Ty przypadkiem nie jesteś tylko czystym teoretykiem?? :) Ja wiem jak działa tranzystor ale... daleko szukać - z projektów na elektrodzie np. to bez problemu intensywnie działa od wakacji albo to też działa od zeszłego roku bez najmniejszych problemów i napięcie zasilające przekaźniki to nie 12 tylko 24V to raz, bo prockami zająłem się w tamtym roku, a dwa to pracują w ten sposób u mnie jeszcze układy na zwykłych TTL-ach, które mają 20lat(!)
    Zupełnie nie rozumiem dlaczego podważasz sprawdzone rozwiązanie, które od wielu lat z powodzeniem nie tylko ja stosuję, bo przeglądając nawet elektrodę można co chwilę na podobne sterowanie trafić...
    Nigdy, ale to nigdy nie zdarzyło mi się w ten sposób spalić tranzystor lub ten tranzystor nie miał siły uciągnąć przekaźnika. Zawsze zaskakuje szybko i pewnie. Nic się nie grzeje. Przeważnie stosuję tanie BC547 (dawniej BC237, BC107), a jeśli Pu nieco większy to BC211, BD135, itp. Nakupiłem kiedyś tego od groma to upycham gdzie się da...
    Pozdrawiam.
  • #8 9219878
    Sławek-K
    Poziom 15  
    Posty: 143
    Pomógł: 7
    Ocena: 13
    Panowie ( i panie) elektrycy. Taki przekaźnik może brać poniżej 20mA (im wyższe napięcie tym prąd cewki będzie mniejszy) co przy wzmocnieniu prądowym ok 200 daje ok 0,1mA prądu bazy. Przy wyjściu z procka ok 5V i spadku na złączu baza-emiter ok 0,7V rezystor bazowy może mieć wartość 4,3V/0,1mA czyli 43k om. Każda mniejsza wartość gwarantuje pełne nasycenie w tym zakresach prądu. Więc 4,3k to już dawno pełne nasycenie! 20 LAT TAK ROBIĘ I WSZYSTKO DZIAŁA ! A co do napięć przełączających (tutaj 12V) co ma piernik do wiatraka ? Mżna sobie przełączać 200V (robiłem takie rzeczy) i o ile UCE0 jest większe od napięcia zasilania a wzmocnienie wystarczająco duże to wszystko gra ! No i z innej beczki - Może by dało radę jednak zamieścić program żródłowy, (w celach choćby edukacyjnych)?
  • REKLAMA
  • #9 9220038
    SylwekK
    Poziom 32  
    Posty: 2764
    Pomógł: 82
    Ocena: 2762
    A niech tam, może ktoś coś ciekawszego wymyśli... W samym programie jest tyle If-ów, że można dostać oczopląsu :) Dlaczego tak, a nie inaczej ? - spróbujcie ten sam program napisać czytelniej z zachowaniem większej estetyki i skompilujcie... ;)
    Oprócz założeń, o których pisałem w pierwszym poście nie ma tam nic nadzwyczajnego. Sercem programu jest mój algorytm badania czasu trwania przycisku krótki/długi (pisałem już o tym na elektrodzie), a wszystko jest upchane na maksa i zoptymalizowane, żeby jak najmniej miejsca zajmowało - z tym było najgorzej - walczyłem o każdy bajt ;)
    Główny program (czyli czekanie na kod i jego zmiana) na początku zajmował około 500 bajtów to szkoda mi było nie wykorzystać reszty, dodałem tryb, żądania kodu wyłączenia - nadal sporo miejsca. Dopiero jak zacząłem upychać opcję przycisku bez kodu zaczęły się schody - ciągle 10-12 bajtów brakowało.
    Można by to pewnie trochę inaczej wszystko rozpisać tylko trzeba by już wcześniej znać założenia, a nie dopisywać po kawałku - to rada dla początkujących - zawsze starajcie się sprecyzować wszystko od A do Z jak ma działać w programie. Późniejsza jego modyfikacja często komplikuje sam program i bywa, że lepiej go wtedy napisać od nowa...

    Aha, starsze wersje Bascoma mogą nie skompilować tego programu tak aby go wcisnąć w tiny13 (a takie było moje główne założenie - tylko ten i żaden inny).
    Mam pełną wersję Bascoma prosto od MSC w wersji 2.0.4.0 i ten ku mojej uciesze w odróżnieniu od wersji demo 1.11.9.8 (którą miałem wcześniej) tworzy średnio co najmniej 10% mniejsze pliki wynikowe (!) - to jeden z powodów dlaczego nie chciałem dawać źródła.
    Pozdrawiam
    Załączniki:
    • przycisk szyfrowy.bas.txt (3.91 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #10 9223096
    Nerwus
    Poziom 18  
    Posty: 339
    Pomógł: 10
    Ocena: 22
    A słyszałeś o maszynie stanu? Bardzo ładnie nadaje się właśnie do małych procesorów.
    Daje Ci gwarancje ze kod na switch/case jest 10x mniejszy niż na if/else . I jest 1000x czytelniejszy.
    Jak ustawisz 0 pkt prowizji to Ci chętnie zademonstruje.
  • #11 9223207
    SylwekK
    Poziom 32  
    Posty: 2764
    Pomógł: 82
    Ocena: 2762
    Wedle życzenia, punkty wyłączone. Lubię pooglądać fachowców przy pracy. Zawsze czegoś się można nauczyć :)

    Dodam jeszcze, że gdybym ten program pisał od nowa znając wszystkie jego zależności to zamiast pojedynczych zmiennych bitowych wykorzystał bym cały bajt i w nim ustawiane były by bity. Dzięki temu prawdopodobnie if-ów było by zdecydowanie mniej, a co za tym idzie i objętość samego programu dużo mniejsza.
  • #12 9228688
    musashimm
    Poziom 11  
    Posty: 8
    Ocena: 82
    SylwekK napisał:
    Mam pełną wersję Bascoma prosto od MSC w wersji 2.0.4.0 i ten ku mojej uciesze w odróżnieniu od wersji demo 1.11.9.8 (którą miałem wcześniej) tworzy średnio co najmniej 10% mniejsze pliki wynikowe (!) - to jeden z powodów dlaczego nie chciałem dawać źródła.


    Czy możesz wyjaśnić ten powód? Z Bascomem nie mam za dużo do czynienia, więc mogło mi coś umknąć.
  • #13 9228787
    SylwekK
    Poziom 32  
    Posty: 2764
    Pomógł: 82
    Ocena: 2762
    Nie wiem co tu wyjaśniać. Wnioskuję, że Mark Alberts zoptymalizował kompilator... Już otrzymałem PW z elki, że na którejś z wcześniejszych wersji moje źródło zajmuje o prawie 200 bajtów (!) za dużo przez co nie wchodzi do attiny13, więc chyba lepiej dać dla ogółu skompilowany i w pełni działający program...
  • #14 9239286
    szczupx
    Poziom 19  
    Posty: 555
    Pomógł: 29
    Ocena: 94
    SylwekK napisał:
    Program napisałem w BASCOM
    (...)
    walczyłem o każdy bajt ;)

    Wyczuwam pewną niekonsekwencję ;)
    O rozmiar kodu oczywiście najlepiej walczyć w assemblerze. Kompilatory C też wygenerują mniejszy kod wynikowy niż dość wredny z punktu widzenia optymalizacji Basic.
  • #15 9241067
    SylwekK
    Poziom 32  
    Posty: 2764
    Pomógł: 82
    Ocena: 2762
    Dawno temu programowałem w assemblerze (czasy commodore 64) i w zasadzie mało było rzeczy, których bym wtedy nie zaprogramował (przeważnie pisałem użytki ale zrobiłem też kilka gier). Pewne nawyki mi zostały i przynajmniej w części chcę je przełożyć do Bascom'a. Na C nie przechodzę, bo bliżej mi właśnie do asm i to w nim planuje robić wstawki w Bascomie. Znaczki w C mnie przerażają ;) - kod w nim nigdy nie był dla mnie czytelny...
  • REKLAMA
  • #16 9241292
    leoha
    Poziom 17  
    Posty: 173
    Pomógł: 18
    Ocena: 8
    SylwekK napisał:
    Na C nie przechodzę, bo bliżej mi właśnie do asm i to w nim planuje robić wstawki w Bascomie. Znaczki w C mnie przerażają ;) - kod w nim nigdy nie był dla mnie czytelny...


    Tak jakby w asmie byl...
  • #17 9241703
    SylwekK
    Poziom 32  
    Posty: 2764
    Pomógł: 82
    Ocena: 2762
    @leoha - może po prostu nigdy nie miałeś do czynienia z asm. Jeśli assembler na atmela będzie mi niezbędny to zapeniam Cię, że przejdę na niego w ciągu tygodnia. Mam naprawdę solidne podstawy z programowania jeszcze 6502. Poza tym na studiach w ciągu dwóch zajęć po otrzymaniu od wykładowcy listy rozkazów 8051 (mój pierwszy kontakt z tego typu prockami), napisałem wersję programu na kilkanaście linijek, która u innych zajmowała po 3-4 strony zeszytu w kratkę(!) - mina wykładowcy - bezcenna :D
    Mam zasadę - zdobywam wiedzę w zależności od aktualnego zapotrzebowania :)
    Pozdrawiam
  • #18 9242734
    leoha
    Poziom 17  
    Posty: 173
    Pomógł: 18
    Ocena: 8
    SylwekK napisał:
    ...

    Zle mnie zrozumiales. Chodzi mi o to ze asm w stosunku do C, jest bardzo nieczytelny no i oczywiscie dla kazdej architektury/procka moze wygladac inaczej.
    Jestem programista systemow embedded i z asmem roznych prockow i architektow spotykam sie na codzien (wiec chybiles z zalozeniem).
    Zdecydowanie polecam przerzucic sie na C a w asmie pisac tylko to co jest niezbedne lub jakies optymalizacje ewentualnie.
    Jak to mawia moj kolega: C to taki wysokopoziomowy assembler wraz z jego wadami, tyle ze skladnia jest niezalezna od architektury procka.

    --
    Pozdrawiam,
    Mateusz
  • #19 9242950
    SylwekK
    Poziom 32  
    Posty: 2764
    Pomógł: 82
    Ocena: 2762
    Już parę osób mnie namawiało na C... No cóż może się kiedyś wreszcie przełamię :)
    Pozdrawiam

    EDIT:
    Kolego @Nerwus, będzie coś z tego zoptymalizowanego kodu ? Czekamy na demonstracje maszyny stanu... ;)

Podsumowanie tematu

✨ Użytkownik zaprezentował projekt prostego zamka szyfrowego opartego na mikrokontrolerze Attiny13, wykorzystującego jeden przycisk. Celem projektu było stworzenie urządzenia zabezpieczającego przed przypadkowym włączaniem/wyłączaniem przez dzieci lub dorosłych. W dyskusji poruszono kwestie dotyczące działania tranzystora w układzie, nasycenia oraz doboru rezystora bazowego. Uczestnicy wymienili się doświadczeniami związanymi z długoletnim użytkowaniem podobnych rozwiązań oraz optymalizacją kodu, w tym sugestiami dotyczącymi użycia maszyny stanów i programowania w assemblerze. Pojawiły się również pytania o możliwość udostępnienia źródłowego kodu programu.
Wygenerowane przez model językowy.
REKLAMA