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

ATmega16 Zamek szyfrowy - podłączenie układu iButton

10 Sty 2010 11:04 5816 26
  • Poziom 9  
    Witam
    Realizuje projekt zamka szyfrowego na mikrokontrolerze ATmega16. W chwili obecnej projekt składa się z układu klawiatury do wprowadzania kodu oraz układu mikrokontrolera. Dodatkowo układ zawiera dwie diody sygnalizujące poprawność wpisanego kodu. Chciałbym rozszerzyć mój projekt o możliwość autoryzacji osoby przy pomocy pastylek iButton(pastylka iButton oraz czytnik). Z tego co wiem wystarczy do wspomnianego wyżej układu dołączyć czytnik pastylek iButton. Bardzo proszę o informację na temat podłączenia takiego czytnika do układu mikrokontrolera oraz o przykład kodu AVR GCC do obsługi takiego czytnika. Jako załącznik dorzucam schemat mojego układu.

    ATmega16 Zamek szyfrowy - podłączenie układu iButton
  • Relpol przekaźniki
  • Poziom 32  
    To bedzie to samo co 1-wire. Jezeli umiesz odczytac czujnik DS18b20 to z tym sobie tez poradzisz.
  • Poziom 9  
    Niestety ja w tej dziedzinie jestem bardzo początkujący dlatego bezcenne byłyby dla mnie jakieś przykłady.
  • Poziom 32  
    A jaki układ chcesz podłaczyc? Chya DS1991 czy cos takiecgo. Wyłuskaj PDF z sieci i poczytaj o 1-wire. Niestety albo stety jak dla mnie mam tylko procedure do odbioru 1-wire w ASM (600B)
  • Relpol przekaźniki
  • Poziom 9  
    Co do wyboru układu to liczę na Wasze wskazówki - najlepiej taki który jest najprostszy w obsłudze. A co do programu to czy wystarczy tylko obsługa odbioru danych z czytnika czy należy obsłużyć coś jeszcze ??
    Jeśli ktoś z Was ma schemat z przykładowym podłączeniem takiego czytnika do mikrokontrolera ATmega16 oraz przykładowy program obsługi czytnika to byłbym zobowiązany(generalnie chodzi o wyposażenie układu o możliwość autoryzacji przy pomocy pastylek iButton w możliwie jak najprostszej postaci)
  • Poziom 32  
    DS1990 unikany numer seryjny.
  • Moderator Mikrokontrolery Projektowanie
    Sa tez wersje implementujace algorytmy szyfrujace. Wszystko na ten temat masz tu: http://www.maxim-ic.com/products/ibutton/

    Potrzebujesz czytnik - poogladaj w TME, do procesora najprosciej podlaczyc go tak jak zwykly uklad 1-wire, potrzebujesz pomiedzy linie danych a Vcc rezystor ok. 4k7. Chociaz - i tu wszystko zalezy do czego to ma byc zamek i czy spodziewasz sie, ze ktos bedzie probowal go zlamac - wypadaloby dac jakies dodatkowe zabezpieczenia ESD (tu Dallas ma gotowe scalaki) i jakies antysabotazowe. No i implementacja algorytmu skanujacego 1-wire tak, zeby w ciagu paru sekund nie zlamac kodu nie jest banalna.
  • Poziom 9  
    Czy ktoś może opisać jak wygląda standardowa obsługa układu z czytnikiem pastylek iButton tzn. z jakich części powinna się składać.
    Byłbym bardzo wdzięczny o przykład programu do zczytywania kodu z pastylki iButton i sprawdzaniu jego poprawności.
  • Moderator Mikrokontrolery Projektowanie
  • Poziom 9  
    Znalazłem na necie informacje na temat układu iButton DS1992. Z tego co wyczytałem układ ten posiada unikalny numer seryjny. Czy wg Was autoryzacja użytkownika może opierać się na właśnie tym numerze seryjnym ?? Jeśli tak to przy obsłudze układu dla wielu pastylek należałby zaszyć w programie ich wszystkie numery seryjne aby autoryzować dostęp. Taka jest standardowa metoda obsługa tych układów ??
    Co do programów obsługi 1-Wire to znalazłem parę na necie ale są strasznie rozwlekłe.
    Potrzebowałbym najprostszy program do obsługi takich układów, jeśli ktoś ma coś takiego to bardzo proszę.
  • Moderator Mikrokontrolery Projektowanie
    Niestety, jesli chcesz autoryzowac uzytkownikow to wczesniej musisz znac ID pastylek, ktore umozliwiaja autoryzacje. Czy jest to wystarczajace to juz zalezy od zastosowania twojego zamka i wymogow zleceniodawcy. Najogolniej jest to ok - tak np. sa zamykane szafki na wielu basenach. ID jest 8 bajtowe, wiec ilosc kombinacji jest spora. Z tym, ze jak pisalem program skanowania pastylki trzeba napisac rozwaznie, bo inaczej latwo bedzie to zabezpieczenie zlamac. Sa pastylki obslugujace szyfrowanie i te pewnie byloby lepiej zastosowac, aczkolwiek to znowu komplikuje program. Jesli chcesz na szybko obslugi 1-wire to oferuje to Bascom, napisanie tego w C to kwestia ok. 50 linii kodu.
  • Poziom 9  
    Dzięki za informacje. Miałbym jeszcze jedno pytanie dotyczące kwestii podłączenia czytnika do mikrokontrolera. Otóż uK ATmega16 nie posiada magistrali 1-wire natomiast z tego co wiem można ją zrealizować sprzętowo. Tylko jest jeden problem dany PIN mikrokontrolera mogę tylko skonfigurować jako wejście lub wyjście a nie oba jednocześnie. Jak w tym przypadku podłączyć mikrokontroler ??
    Dla przykładu podam że chcę podłączyć czytnik do portu PA0 mikrokontrolera - tylko pytanie jak skonfigurować ten PIN ??
  • Moderator Mikrokontrolery Projektowanie
    Zwykle robi sie to tak, ze odpowiedni bit rejestru PORTx zerujesz, a potem sterujesz odpowiadajacym mu bitem DDRx. Jesli go ustawisz to mikrokontroler wystawia "0" na szyne, jesli wyzerujesz to przelaczasz port na wejscie - stan magistrali 1-wire ustala sie za pomoca zewnetrznego pull upa na "1" - pamietaj, ze jest to magistrala typu OD (OC) z recesywnym stanem "1" i dominujacym "0". Stan magistrali zczytujesz z odpowiedniego bitu rejestru PINx.
  • Poziom 9  
    W końcu udało mi się napisać program obsługi czytnika iButton. Mam tylko jeden problem otóż zczytuje numer identyfikacyjny pastylki z kodu ROM (bajty: 2,3,4,5,6 w sumie 48 bitów) po 1 bajcie. Chcę w kodzie umieścić na sztywno numery identyfikacyjne które będą autoryzowane i za bardzo nie wiem jak obsłużyć sprawdzenie z aktualnie zczytanym identyfikatorem.
    Poniżej przedstawiam swój kod zczytywania numeru identyfikacyjnego:

    Code:
    // Odczyt 48 bitów nr identyfikacyjnego pastylki (od 2 do 6 bajtu)
    
    // Tutaj definiuje jakieś numery identyfikacyjne na sztywne które są autoryzowane(jak powinny być zdefiniowane ???)
             for(int z=0; z<8; z++) {
                if (z > 0 && z< 7) { // Pominięcie bajtu 1 i 8
                                            byte = wire_read_byte();
                   // Tutaj odczytuje pojedynczy bajt (???)
                }
             }
    // Tutaj powinno być sprawdzenie zczytanego numeru identyfikacyjnego (???)


    Bardzo proszę o propozycję obsłużenia tej autoryzacji(szczególnie chodzi mi o miejsca oznaczone ???)

    Dodano po 10 [minuty]:

    Czy uważacie że może być coś takiego:

    Code:
    // Funkcja sprawdza czy dana pastylka iButton ma autoryzowany dostęp
    
    unsigned char iButton_autoryzuj(unsigned char id) {

       // Wartości liczbowe identyfikatorów pastylek iButton dopuszczonych do autoryzacji
       int iButtonId[3] = {100, 200, 300};

       for (int i=0; i<3; i++) {
          if (iButtonId[i] == (int)id) {
             return 1;
          }
       }
       return 0;
    }
    ######
    // Odczyt 48 bitów nr identyfikacyjnego pastylki (od 2 do 6 bajtu)
             byte = 0;
             for(int z=0; z<8; z++) {
                if (z > 0 && z< 7) { // Pominięcie bajtu 1 i 8
                   byte += wire_read_byte(); // Odczyt pojedynczego bajtu
                }
             }
             // Kontrola czy dana pastylka iButton ma dostęp
             if (iButton_autoryzuj(byte)) {
                // Otwarcie zamka
                PORTC |= 0x01;

                // Sygnalizacja otwarcia zamka(zapalenie diody zielonej i zgaszenie diody czerwonej)
                PORTB = 0x01;

                _delay_ms(1000);
             }


    inventco.eu - post poprawiłem regulamin p.7.2
  • Poziom 14  
    Witam proponuje ci DS1990 lub 2401 te same układy inna obudowa.
    posiadają nie powtarzający się nr. podłączasz rezystor 4,7k do 5v data do opornika masa do masy. Data podpinasz do jakiegoś portu ustawiasz go jako 1-wire w programie
    resetujesz ten port potem wysyłasz 33h i układ wysyła ci nr a ty go zapisujesz do tablicy. Reszta to program i wszystko tak skrótem najprościej.

    Dodano po 10 [minuty]:

    wcześniej nie poczytałem do końca.
    Ja to robiłem w ten sposób że pierwszy odczyt i z czytany nr z tablicy zapisywałem w danych 1 do 8 w eepromie atmegi nastę pnie znacznik, flaga i układ nie robi ponownego
    zapisu tylko omijał ten fragment programu. Potem po wykryciu układu porównywał tablice z danymi zapisanymi w eepromie jak ok to otwiera dostęp jak nie to nic się nie dzieje lub informuje o próbie wejścia nie autoryzowanym kluczem.
  • Poziom 12  
    Tak jak napisał tmf, radzę zastanowić się nad użyciem kluczy szyfrujących (zdaje się, pastylki realizujące jakieś SHA są). Problem z unikatowym kluczem pastylki jest taki, że jest on wygrawerowany na obudowie pastylki, można go więc w dość prosty sposób sczytać. Trafiałem również już na metody pozwalające emulować damy ID pastylki, w tym momencie niestety narażamy się na dostęp nieautoryzowanej osoby. Wszystko zależy od tego jak bardzo newralgiczne jest miejsce do którego dostęp chcesz kontrolować.
  • Poziom 9  
    Mam jeszcze jeden problem mianowicie potrzebuje sterować układem zamka zasilanym na 24 V. Sterowanie to chcę obsłużyć przy pomocy przekaźnika który w zależności od stanu na wyjściu PC0 uC będzie podawał na wejście układu zamka 0 lub 24 V(tak jak na schemacie). Prosiłbym o poradę jak należy podłączyć ten przekaźnik - na schemacie widać próbę podłączenia go ale nie jestem przekonany co do tego rozwiązania. Najlepiej gdy ktoś wrzucił jakiś schemat z przykładem podłączenia takiego przekaźnika.
  • Poziom 32  
    Ale on nie jest konieczny we wszystkich przypadkach.
  • Poziom 32  
    Na wewnetrzym pull-ap powinno dzialac w 99% przypadków
  • Poziom 24  
    :) , czyli jednak mam rację. Dla mnie osobiście 99% nie jest żadną gwarancją działania. Przykład : zmontuj układ w domu ,potem przenieś gotowe urządzenie (czyt. sprzedaj) w miejsce w którym ma być zainstalowane i tu klapa- nie działa . Dlaczego? Zmieniły się warunki pracy, doszły obciążenia układu (peryferia) . A tak na prawdę winę ma "oszczędność" 1 grosza na rezystor :] . Ale za to Otrzymujesz kupę problemów z szukaniem usterki, to spojrzenie klienta "bezcenne" itd. Nie dziękuję, wolę nie oszczędzać na kondensatorach ,rezystorach i wszystkim co zaleca nota katalogowa. Ale to tylko moja osobista wypowiedź. Autor zrobi co uważa za stosowne.
    Amen :]
  • Poziom 32  
    Wszyscy montują rezystory podciagające coraz mniejszej wartosci i myslą ze to rozwiaże wszystkei problemy z magistralą 1-Wire. Ja juz przetestowałem na 12 czujnikach rozmieszczonyc w całym domu i dziłało bez rezystora podciagającego bo wazniejsze są rezystory szeregowe instalowane w kazdej gałezi czujników. (I tak na koncu dla swietego spokoju dałem rezystor bo to troszke poprawiło odczyty)
    A pewnei najwieksze klopoty maja basicowcy stosujący standardowy program 1-wire bez mozliwosci doboru parametrow.
  • Moderator Mikrokontrolery Projektowanie
    Tak, teoretycznie to moze dzialac na wewnetrznym pull upie, z tym, ze to strasznie wydluza czasy powrotu magistrali do stanu "1". Timingi 1-wire sa bardzo tolerancyjne, ale przy duzej magistrali raczej zle sie to skonczy. No i przy tak slabym podciaganiu moze sie pojawic problem z zakloceniami.
  • Poziom 32  
    No cóz u mnie praktycznie to chodzi nawet na długiej magistrali. Powiem inaczej jak pisze program to stram sie tak napisac zeby wszystko chodzilo bez rezystora i było jak najmniej bełdenych CRC, a potem dodanie rezystora to na pewno nie zaszkodzi. Moze chodzi dlatego, że mam specyficznie napisany program -wszystko w przerwaniach?
  • Poziom 14  
    Jak sądzicie czy tak pastylka to skuteczne zabezpieczenie dla np. drzwi wejściowych do domu? czy nawet samochodu?Tak jak było napisane wyżej ID można odczytać bo jest na pastylce. A jeśli zastosujemy jakieś szyfrowanie przy odczycie to czy tak naprawde coś nam to daje? Jeśli ktoś skopiuje taką pastylkę i zastąpi ją jakimś emulatorem to i tak na nic szyfrowanie? co sądzicie?