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

[C] Attiny13A czytnik RFID wysyłanie kodu przez RS232

mjc 09 Sty 2012 19:50 23773 31
  • [C] Attiny13A czytnik RFID wysyłanie kodu przez RS232
    Witam wszystkich na forum. Jest to moje pierwsze publikowane DIY.

    Słowo wstępu…

    Projekt powstał z jednego, bardzo ważnego powodu: bo bardzo chciałem coś takiego mieć! Jest to układ odczytujący kod karty poprzez interface EM4095 z anteną, dekoduje, sprawdza i wysyła poprzez port szeregowy. Interface’u z układem EM4095 i anteną użyłem kupionego, ale z jakich powodów wyjaśnię w dalszej części artykułu. Generalnie w Internecie znajdzie się mnóstwo tego typu projektów, a jednak po przyjrzeniu się bliżej ten jest wyjątkowy. Dostępne czytniki są oparte na procesorach albo Atmega8 (najczęściej) albo Atmega16 (a zdarzają się i na Atmega32!) – mój natomiast zrealizowany jest na Attiny13 ! Nie spotkałem się z czytnikiem RFID na tak małym procesorku. Program zajmuje jedynie 782 bajty!!!(Jeśli by zrezygnować z migania diodą (2x _delay_ms(350);) i wysyłania znaczników początku i końca transmisji oraz wysyłać 2 cyfry szesnastkowe jednym bajten transmisji można by osiągnąć rozmiar +/- 550bajtów.)


    Część elektroniczna

    Z uwagi na to, że nie mam sprzętu do lutowania SMD całość jest wykonana metodą przewlekaną. W projekcie zastosowałem gotowy interface EM4095 z anteną z dwóch powodów.
    1. układ EM4095 jest trudno dostępny w ilościach detalicznych a jak nawet się chce kupić to wychodzi drożej niż gotowy moduł.
    2. idealnie dobrana antena – trzeba się sporo natrudzić aby dobrze nawinąć antenę na określoną częstotliwość (w tym wypadku 125kHz) nie mając oscylatora.
    Interface jest to typowy obwód EM4095 wykonany wg noty katalogowej. Nic więcej, nic mniej. Na listwę goldpin wyprowadzone piny układu analogowego (MOD, DEMOD_OUT, SHD, RDY_CLK). Układ zaprojektowałem tak, aby można go było łatwo wykonać w domowych warunkach. Moja płytka wykonana została metodą termotransferową „na żelazko”, wiercona 0,8mm małą wiertareczką na 12V ze sklepu elektronicznego za 20zł. Na koniec polakierowana lakierem bezbarwnym do paznokci. Płytka się niestety trochę przesunęła przy prasowaniu. Mój czytnik po prostu wciska się złączem FHY06 SSG PIN HEADER w goldpiny na interface’ie i gotowe! Oczywiście przy montażu zamiast gniazda można zastosować zwykłą listwę goldpin i podłączać inne interface’y EM4095, lub umieścić wszystko jako część większego projektu.


    Firmware - oprogramowanie mikrokontrolera

    W mikrokontrolerze przed zaprogramowaniem należy odpowiednio ustawić fusebity.
    Domyślnie Atiny13 ma włączone dzielenie zegara przez 8. Należy tę opcję wyłączyć! Jeżeli zegar jest ustawiony na inną częstotliwość niż 9,6MHz trzeba ustawić taką wartość. Reasumując fusebity prezentują się następująco: High fuse: FF Low fuse: 7A
    W przypadku ustawienia innych wartości trzeba liczyć się z nieprawidłową pracą programu.

    UWAGA
    Jako, że nie miałem żadnego czytnika kart RFID aby wypróbować czy aby mój projekt działa poprawnie, zbudowałem oparty o Atmega88 czytnik wg. specyfikacji z pomocy środowiska BASCOM (jest tam gotowy program do współpracy z EM4095). W ten sposób testowałem zgodność odczytów mojego czytnika z odczytem rzeczywistym (jeśli ufać inżynierom BASCOM’a).
    Testowane karty:
    7A 60 B8 00 28
    8D 21 B8 00 28

    Działanie programu jest bardzo proste. Cały czas czeka (funkcja na Timer0) na odebranie danych z analogowego układu EM4095, gdy dane się pojawią (użytkownik przyłoży kartę lub inny znacznik RFID) mikrokontroler je odbiera, dekoduje oraz sprawdza ich poprawność(większość czytników nawet na większych procesorach tego nie robi!!!), gdy kod odczytano poprawnie wysyłany jest przez port szeregowy (Attiny13 nie ma sprzętowego UART’a więc sprawę tę rozwiązałem software’owo) ciąg danych określony - kod karty, na koniec mikroprocesor miga diodą na znak że odczytał i przesłał dane.

    UWAGA
    Bardzo ważne jest podłączenie układu pod interface EM4095 przed włączeniem zasilania. Program po włączeniu zasilania dokonuje inicjalizacji układu EM4095 i przechodzi do swojego normalnego trybu pracy (czekania na karte). W przypadku podłączenia układu pod interface z włączonym zasilaniem, mikrokontroler nie wykona niezbędnej inicjalizacji układu EM4095 co uniemożliwi mu odbieranie danych.

    Do czytnika można wgrać oprogramowanie w dwóch wersjach. Różnią się one jedynie prędkością przesyłania danych przez port szeregowy. Pozostałe parametry takie jak protokół transmisji, wyprowadzenia itp. pozostają bez zmian.
    Dostępne prędkości przesyłania danych:

    9600 bps
    4800 bps

    Teoretycznie przy prędkości 9600bps i wewnętrznym oscylatorze 9,6MHz (wahania 9,45-9,7MHz) powinny występować błędy transmisji (około 0,8%) lecz ja przy ŻADNYM odczycie (a robiłem ich podczas testów sporo) NIGDY nie doświadczyłem błędu. Jednak na wszelki wypadek udostępniam wersję na 4800bps w której teoretycznie nie powinny występować błędy transmisji. Dodam, że używam przejściówki RS232-COM na FT232RL oraz laptopa IBM ThinkPad (jeszcze produkcji kanadyjskiej) więc może brak błędów jest spowodowany wysoką jakością portu USB???


    Ramka danych:

    Czytnik wysyła 14bajtów danych.

    1. 0x0a LF
    2. 0x0d CR
    3. 0x7E znak rozpoczęcia transmisji kodu karty
    4-13 szesnastkowo kod karty. Każdy bajt zawiera jedną cyfrę szesnastkową
    14. 0x7C znak końca transmisji


    Ustawienia transmisji szeregowej:

    Prędkość: w zależności od wybranego programu: 9600 lub 4800
    Data bits: 8
    Stop bits: 1
    Parity: None


    Przykład z terminala: ~7A60B80028|

    W przypadku ciągłego trzymania karty w polu anteny następuje cykliczne wysyłanie kodu co 0,7s.

    Oczywiście program był pisany w C (Avr Studio 4 + WinAVR-20100110) oraz po części w asemblerze - niewyobrażam sobie implementacji tego problemu w środowisku BASCOM dla tak małego procesora jakim jest Attiny13. BASCOM oferuje obsługę RFID poprzez kilka prostych poleceń ale jest to strasznie nieoptymalne rozwiązanie, zresztą zajmuje strasznie dużo pamięci i nadaje się raczej na Atmegę a nie Attiny.


    Odbiór danych na PC lub innym mikrokontrolerze.

    Do odbioru danych na komputerze musimy mieć zainstalowany program odbierający dane z portu szeregowego. Może to być terminal (np. Putty lub Br@y++) lub posłużyć się własnym kodem (np. jako fragment większej aplikacji). Ważne jest aby transmisja szeregowa w programie była ustawiona tak jak pisałem w poprzednim akapicie. Przedstawiam prosty program napisany w C++ (do kompilowania możemy użyć Dev-C++, ja korzystam z edytora Vim do którego wrzuciłem lata temu gcc wyciągnięte właśnie z Dev’a). Program ten po podaniu numeru portu szeregowego i prędkości transmisji odczytuje numer karty i zapisuje do pliku wraz z godziną i datą (numer portu i prędkośc ustawiamy przed kompilacją. Umieszczony w archiwum program ma ustawienia następujące: com7, 9600.). Jest to najprostszy przykład, na którym opierając się możemy utworzyć własną aplikację współpracującą z moim czytnikiem kart bezstykowych.
    Dla czego w terminalu między numerem karty widzę symbole ~ i | ?
    Są to symbole zapisane jako 0x7E oraz 0x7C – służą jak widać w kodzie do ustalenia kiedy zaczyna się odbieranie kodu karty a kiedy kończy. W terminalu widać je dla tego, że mają akurat taką interpretację graficzną ASCII.
    Przykładowy program dla mikrokontrolera dołączę w wolnej chwili – aktualnie jestem trochę zajęty i nie mam czasu na testy. Generalnie zasada odbioru danych jest taka sama jak na PC, tylko że na mikrokontrolerze wykorzystamy sprzętowy UART lub będziemy zmuszeni do napisania własnej, sofware’owej implementacji.


    Koszty

    Niewielkie… Interface można zrobić samemu (schemat w nocie katalogowej) lub kupić na allegro, najtańsze po ok. 20zł, taki jak ja użyłem kosztował 32zł. Robiąc to samemu, zamawiając 1szt. EM4095 w TME wyjdzie sporo drożej…

    Attiny13A – 4,67zł
    Dioda LED - 0,31zł
    Podstawka DIP8 - 0,05zł
    10K i 150R - 2x 0,07zł
    FHY SSG 6PIN 0,28zł
    Listwa kątowa 40pin 0,60zł, wyk. 3pin 0,045zł
    Laminat 160cm^2 4,20zł, wyk. 9,89cm^2 0,2596125zł

    SUMA: 5,7546125zł
    ~5,76zł

    Koszty cyny i energii elektrycznej do zasilenia lutownicy w zestawieniu zaniechałem.

    Ceny z Warszawy więc na pewno da się taniej. Sam procesor w wersji SMD kosztuje 2,60zł co jest prawie połową ceny DIP8 ...


    Podsumowując...

    Projekt stanowi ciekawą alternatywę dla dostępnych w sprzedaży czytników. Jego cena jest niewielka, a budując wersję SMD możemy koszty zredukować o 1/3. Układ znajdzie zastosowanie w projektach, w których chcemy odczytać kartę a albo nie wiemy jak to zrealizować programowo (w C nie jest to z pozoru takie łatwe) lub po prostu szkoda nam pamięci. Na koniec mam taką prośbę: jeżeli koś ma kilka sztuk EM4095 i zechciał by się podzielić to bardzo proszę ;-)


    Kilka zdjęć:

    [C] Attiny13A czytnik RFID wysyłanie kodu przez RS232 [C] Attiny13A czytnik RFID wysyłanie kodu przez RS232 [C] Attiny13A czytnik RFID wysyłanie kodu przez RS232 [C] Attiny13A czytnik RFID wysyłanie kodu przez RS232 [C] Attiny13A czytnik RFID wysyłanie kodu przez RS232 [C] Attiny13A czytnik RFID wysyłanie kodu przez RS232 [C] Attiny13A czytnik RFID wysyłanie kodu przez RS232

    Załączniki:

    „firmware” – zawiera pliki do zaprogramowania procesora Attiny13
    „KiCad” – zawiera pliki projektu dla systemu CAD KiCad (schemat, płytka)
    „oprogramowanie PC” – zawiera przykładowy program ilustrujący transmisje danych z czytnikiem w C++ (zawiera również pełny kod źródłowy)
    „schemat PDF” – zawiera schemat ideowy układu w formacie PDF

    @edit:
    Strona projektu: www.matciok.elektroda.eu

    Fajne! Ranking DIY
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
    O autorze
    mjc
    Poziom 14  
    Offline 
    mjc napisał 165 postów o ocenie 106, pomógł 0 razy. Mieszka w mieście Siedlce. Jest z nami od 2012 roku.
  • Sonel PAT 86Sonel PAT 86
  • #2
    Sobota
    Poziom 26  
    Fajny projekt, rozumiem że RFID MIFARE też czyta?
  • #3
    Szymon Tarnowski
    Poziom 27  
    Sobota napisał:
    Fajny projekt, rozumiem ze RFID MIFARE też rozumiem czyta?
    Nie ma szans, EM4095 obsługuje tylko prostą demodulację i pasmo 125kHz.
  • #4
    raffiki
    Poziom 13  
    Bardzo fajne, brakuje mi tylko jednego - sumy kontrolnej
  • #5
    george2002

    Poziom 20  
    raffiki napisał:
    Bardzo fajne, brakuje mi tylko jednego - sumy kontrolnej


    Dokładnie to samo miałem napisać bo CRC jest wg mnie wskazane/wymagane nawet kosztem większego procesorka, sam projekt bardzo ładny i estetyczny :)

    PS
    Kolega normalnie przesadził z tymi wyliczeniami cenowymi - centuś czy co ;)

    Pozdrawiam
    George2002
  • Sonel PAT 86Sonel PAT 86
  • #6
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #7
    mjc
    Poziom 14  
    Witam. Dziękuję wszystkim za opinie :) rzeczywiście postaram sie w najbliższym czasie jakoś zaimplementować te sumę :-) zasięg to ok 10cm.
  • #8
    eDZio
    Poziom 16  
    Nie kusiło żeby wykorzystać ten kawałek płytki uniwersalnej na montaż tych 4-rech elementów?

    Tak BTW wie ktoś może jak podpiąć i jak wygląda protokół transmisji w czytnikach RFID Unipro 100 i Unipro 101?
  • #9
    androot
    VIP Zasłużony dla elektroda
    m4tc10k napisał:
    Witam. Dziękuję wszystkim za opinie :) rzeczywiście postaram sie w najbliższym czasie jakoś zaimplementować te sumę :-) zasięg to ok 10cm.


    Powinieneś jeszcze dodać, że z kartą, a nie breloczkiem. Te drugie mają zasięg kilka razy mniejszy.
  • #10
    mjc
    Poziom 14  
    Zasięg zależy od anteny w tagu. Karta jest większa więc ma większy zasięg, ale widziałem gdzieś projekt taga na attiny85...
  • #11
    dir3ctor
    Poziom 27  
    Dla zainteresowanych - na allegro są czytniki kart Unique (125kHz), które wysyłają odczytaną wartość via RS232 od 30 PLN, więc nie wiem czy jest sens się bawić (chyba że dla sportu) ;-)
  • #12
    Seba_smd
    Poziom 15  
    dir3ctor napisał:
    Dla zainteresowanych - na allegro są czytniki kart Unique (125kHz), które wysyłają odczytaną wartość via RS232 od 30 PLN, więc nie wiem czy jest sens się bawić (chyba że dla sportu) ;-)

    Kupić to każdy potrafi, ale zrobić już nie. Układ fajny i jestem za. Zawsze można coś się nauczyć przy okazji.
    Pozdrawiam.
  • #13
    mjc
    Poziom 14  
    Wychodząc z takiego założenia jak dir3ctor można wszystko kupić lub zlecić budowę. Przynajmniej dla mnie coś, co zbuduję samemu jakoś bardziej cieszy.

    PS. czyżby reklama ?
  • #14
    Ruzby
    Poziom 19  
    Zwykłe metki sklepowe też czyta?
    Trochę ot.
    m4tc10k napisał:
    Laminat 160cm^2 4,20zł
    - gdzie kupiłeś taki tani laminat? Ja kupowałem w lispol.pl o połowę mniejszy prawie 2 razy droższy...
  • #15
    mjc
    Poziom 14  
    Ruzby napisał:
    Zwykłe metki sklepowe też czyta?


    Też chciałbym wiedzieć, ale przeszukałem w domu wszystkie dezodoranty i na żadnym nie było taga, a od ubrań zawsze przy kasie usuwają te plastikowe kółko...
    Ale myślę, że powinien czytać pod warunkiem, że są na 125kHz bo bywają też na 13 z kawałkiem ...
    Laminat kupiłem na giełdzie WGE w Warszawie.

    @edit dokładnie to mogą być na 13,56MHz
  • #16
    androot
    VIP Zasłużony dla elektroda
    Oj "metki" (etykiety) i "kółka" (klipsy) nie zawierają żadnej informacji. To zwykły układ rezonansowy. W jednym ze stosowanych systemów są na 8,2MHz. Dezaktywacja możliwa jest tylko etykiet i polega na uszkodzeniu kondensatora w obwodzie LC - przebicie. Po jakimś czasie, od wyginania etykiety może jednak zacząć ponownie działać - efekty są znane :)
    Odbiornik wykrywa "dip" w momencie jak częstotliwość nadajnika FM zrównuje się z f etykiety/klipsa. Dewiacja ok. 1MHz, f przemiatania 50-200Hz.
  • #17
    mjc
    Poziom 14  
    Jesteś pewny, że żaden system zabezpieczający nie jest oparty na RFID ? Ktoś kiedyś pisał o bramkach w jakimś sklepie z perfumami "pikało" po przyłożeniu karty 125'ki... Były kiedyś, ale to bardzo dawno takie nalepki z silnym klejem i charakterystyczną, różową anteną z tyłu i wydaje mi się, że one posiadały jakiś układzik zalewany, ale nie jestem pewny bo to ledwo co pamiętam...
  • #18
    satanistik
    Poziom 27  
    Ciekawe czy przeczytało by kartę płatniczą PayPas ? Co do metek próbowałem kiedyś zrobić obwód LC ale nie działał , może źle zestroiłem , za to koledze zapiszczała cewka od iskrownika z kuchenki (ochroniarze myśleli że to bomba ).
  • #19
    androot
    VIP Zasłużony dla elektroda
    Pracowałem z systemem, o którym wspomniałem, ale wszystkich nie znam. Ta różowa antena to mogła być cewka w postaci folii Al. Na środku jest kondensator jako fragment tej folii przedzielony dielektrykiem. Właśnie ten ostatni ulega przebiciu.
    Są też inne systemy, mogą mieć f rezonansowa 125kHz.
    Nie wykluczam, ale raczej wątpię w systemy antykradzieżowe z RFID.
  • #20
    mjc
    Poziom 14  
    satanistik napisał:
    Ciekawe czy przeczytało by kartę płatniczą PayPas ?


    Nie, bo to karta MIFARE, a ona (poza dwukierunkową wymianą danych) pracuje na innej częstotliwości.

    ~androot właśnie w tych "różowych" naklejkach, oprócz kondensatora, w jednym rogu był zalewany jakiś układzik... Tak jak pisałem było to dawno i może coś mi się pomyliło a może jeśli taki system był zestrojony na 125KHz po przyłożeniu karty do bramki piszczał bo "coś było na fali" ;-)
  • #21
    Elektro-man
    Poziom 11  
    Fajna sprawa, a co z zapisem, edycją danych na takich kartach, tagach?
  • #22
    Szymon Tarnowski
    Poziom 27  
    dir3ctor napisał:
    Dla zainteresowanych - na allegro są czytniki kart Unique (125kHz), które wysyłają odczytaną wartość via RS232 od 30 PLN, więc nie wiem czy jest sens się bawić (chyba że dla sportu) ;-)
    Budować taki układ jak zrobił kolega dla samego układu czytnika z RS232 nie ma sensu ekonomicznego, jedna jeśli by użyć tak układ do wbudowania w inne działające urządzenie typu domofon lub zamek szyfrowy to już się opłaca.

    Elektro-man napisał:
    Fajna sprawa, a co z zapisem, edycją danych na takich kartach, tagach?
    Unique są tylko do odczytu.
  • #23
    mjc
    Poziom 14  
    Tak budowa samego czytnika nie ma sensu, ale to co ja tutaj proponuje to oprogramowanie dla takiego czytnika, każdy może sobie użyć procesor zaprogramowany moim programem i wtedy jak kolega mówił w swoim, większym projekcie jako składnik ma to sens.

    Stosowanie tego typu układu w swojej konstrukcji ma wiele zalet a najważniejszą jest to że można odciążyć główny procesor od obsługi RFID (zabiera to oprócz "zżerania" pamięci jeden timer i kilka pinów).

    W przygotowaniu (a w zasadzie przygotowaną - zastanawiam się nad publikacją) mam wersję drugą oprogramowania wyposażoną w liczenie sumy kontrolnej XOR oraz transmisję kodu karty w formacie binarnym - format ASCII zastosowany w pierwszej wersji oprogramowania prezentowanej w tym temacie się nie sprawdził.
  • #24
    icer_cmg
    Poziom 12  
    Zbudowałem i zaprogramowałem układ zgodnie z instrukcją, zastosowałem jednak troszkę inny układ: [C] Attiny13A czytnik RFID wysyłanie kodu przez RS232

    Zamiast numeru karty otrzymuję ˝ŢŹ“Ź“›ťźź—y ?
    Wszystko posprawdzane po kilka razy
  • #25
    mjc
    Poziom 14  
    Problem z ustawieniem programu odbiorczego, na pewno ustawiony jest na odbiór danych ASCII ?
  • #26
    pudzianowski
    Poziom 28  
    Cześć.
    m4tc10k napisał:
    Bardzo ważne jest podłączenie układu pod interface EM4095 przed włączeniem zasilania. Program po włączeniu zasilania dokonuje inicjalizacji układu EM4095 i przechodzi do swojego normalnego trybu pracy (czekania na karte). W przypadku podłączenia układu pod interface z włączonym zasilaniem, mikrokontroler nie wykona niezbędnej inicjalizacji układu EM4095 co uniemożliwi mu odbieranie danych.

    Może sprawdziłby się tu układ typu Power-On-Reset?
    Z poważaniem
    Mateusz
  • #27
    Szymon Tarnowski
    Poziom 27  
    androot napisał:
    Oj "metki" (etykiety) i "kółka" (klipsy) nie zawierają żadnej informacji.
    Metki są nazywane czasem 1 bitowymi RFID, bo dają tylko 1 bitową informację o tym czy są czy ich nie ma. Przy tak przyjętym rozumowaniu metki przeciwko złodziejom sklepowym SĄ urządzeniami RFID.

    pudzianowski napisał:
    Może sprawdziłby się tu układ typu Power-On-Reset?
    A jak układ POR miałby wykryć moment podłączania EM4095 do modułu z procesorem?
  • #28
    mjc
    Poziom 14  
    Z tym PoR'em to myślę że sztuka dla sztuki, ponieważ prezentowany tutaj projekt jest wczesnym prototypem "pełnego czytnika", już jak pisałem kilka postów wcześniej mam przygotowaną nową wersję oprogramowania a jak znajdę trochę czasu (myślę że z początkiem lipca) opublikuję już gotowy projekt czytnika na jednej płytce z EM4095.

    Ma ktoś może jakieś dobre materiały odnośnie anten PCB (takich jak zastosowana w tym gotowym module) ?
  • #29
    lehastar
    Poziom 15  
    Jako anteny można użyć przepustnicę do 1 - 2 mH. PСB antena - 50x60 płyta mm. Na 20 kolejek z każdej strony obwodu.
  • #30
    mjc
    Poziom 14  
    Cytat:
    Na 20 kolejek z każdej strony obwodu.


    Chyba chodzi o 20 zwojów? Jak indukcyjność i jaka szerokość ścieżki? Ja również zrobiłem projekt z anteną PCB Link