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

Czytnik kart magnetycznych - zamek itp...

psine.pl 23 Mar 2009 12:28 22207 23
  • Czytnik kart magnetycznych - zamek itp...

    Witam.
    Oto mój następny projekt.
    Myślę, że może się komuś przydać.

    Projekt powstał w wyniku chęci wykorzystania czytnika , który kiedyś kupiłem na alledrogo :-) za 25 pln (w sumie to się napaliłem i kupiłem 10sztuk).

    okazało się , że jego pinout nie zgadza się , z żadnym sprzedawanym na rynku (a przynajmniej kolory przewodów się nie zgadzają).

    No nic... po wielu bojach udało mi się rozpracować pinologię wyprowadzeń.

    Czytnik oparty jest o specjalizowany układ KD2320B ... ale nie udało mi się odnaleźć jego aplikacji (można go tylko kupić u naszych chińskich kolegów).

    topografia wyprowadzeń :
    - czerwony - 5V zasilanie (to było w miarę oczywiste)
    - czarny - masa (GND)
    - brązowy - STROBE (CLK)
    - pomarańcz - DATA
    - zielony - CARD PRESENT (pojawia się niski po wykryciu obecności ścieżki z danymi na karcie)

    mając te dane i posługując się troszkę netem udało mi się napisać program na atmegę8 który czyta jedną ścieżkę (bo te karty mają ich czasem więcej).

    Kartę trzeba przeciągnąć w jednym kierunku bo w drugą stronę wywala masę głupot. :-) trzeba by zmodyfikować soft ale taka funkcja mi akurat nie jest potrzebna.

    poniżej umieszczam kod programu działa bezbłędnie .
    Atmega pracuje na 8MHz taktowanie wewnętrzne.



    Code:

    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    #include <avr/io.h>
    #include <util\delay.h>
    #include <avr/interrupt.h>
    #include <avr/io.h>
    #define BitVal(x) (1 << (x))
    #define CARD_PRESENT ((PIND & 0x80)==0)
    #define CARD_NOTPRESENT ((PIND & 0x80)==0x80)
    #define DANE ((~PIND) & 1)
    unsigned char CiagBitow[100];
    unsigned char Znak, ptrS, ptrD;
    unsigned char wposrednia=1;
    void ConvertASCII(void );


    void Przerwanie_init()
    {
       MCUCR |= BitVal(ISC01) | BitVal(ISC00);
        GICR = BitVal(INT0);
        ptrS = ptrD = 0;
    }

    void main(void )
    {
       DDRB=0b00000011;
       Przerwanie_init();
        sei();
        while(1){
            while(CARD_NOTPRESENT){
            }
            wposrednia = 1;
            while(CARD_PRESENT){
            }
           ConvertASCII();
           }
    }

    SIGNAL(SIG_INTERRUPT0)
    {
        if(wposrednia){
            if(DANE == 1) {
                wposrednia=0;
                Znak = 0x40;
                ptrS = 1;
                ptrD = 0;
               }
        } else
          {
            Znak = Znak >> 1 | ((DANE)?0x40:0);
            ptrS++;
            if (ptrS == 7){
                ptrS = 0;
                CiagBitow[ptrD] = Znak;
                Znak = 0;
                ptrD++;
               }
           }   
    }

    void ConvertASCII(void ){

    unsigned char i;
    char str1[15]; //tutaj podajemy ile znakow ma odczytywac do zmiennej +1 ... oryginalnie koniec znakow oznaczony jest: ?
        for(i=0; i< ptrD; i++){
            CiagBitow[i] = (CiagBitow[i] & 0x3F) + 0x20;
        }
    strncpy(str1,CiagBitow,14);
    str1[14]='\0';
       if (strcmp(str1,"%MAR0020251651")==0) {PORTB ^=_BV(1);}
       if (strcmp(str1,"%MAR0022389903")==0) {PORTB ^=_BV(0);}
    }




    Jak widać w programie odczytuję tylko 14 bajtów ... można wszystkie ale wtedy należy pamiętać, że ostatnim znakiem będzie zawsze: ?



    Do tego softu teraz muszę dodać uczenie kart np jakimś przyciskiem serwisowym .
    Do czego to może służyć ... ja używam do załączania zasilania w warsztacie . Z bratem mamy 2 stanowiska i teraz jest bajer :-) on wchodzi ciach kartą i działa jego stanowisko ... ja wchodzę ciach kartą i działa moje ... jak wychodzi któryś z nas to tylko ciach kartą :-)

    oczywiście to tylko taki bajer .

    Ale pomysłów na zastosowanie znajdziecie na pewno wiele .

    tu zdjęcie układu podczas testowania.

    Czytnik kart magnetycznych - zamek itp...


    ja akurat użyłem karty do zbierania punktów z BP ... ale sprawdzałem na karcie VISA też działa.

    Pozdrawiam
    i mam nadzieję, że ktoś z tego skorzysta .
    W sumie ja się z tym męczyłem trochę - głównie dlatego , że nie chciało mi się rozpracowywać jak to podłączyć.

    Jeśli ktoś z kolegów będzie chciał taki czytnik to parę mogę odstąpić.
    Sam ich raczej nie wykorzystam - w takiej sytuakcji proszę PW

    Pozdrawiam
    Marek

    p.s.
    jeśli uda mi się dodać tą funkcję zapamietywania z przycisku to wrzucę kod programu.

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    psine.pl

    Poziom 29  
    Offline 
    Naprawiam Komputery, Laptopy, Sprzęt radiołączności(np.CB), Elektronikę samochodową, Sterowniki, Konsole do gier i Różne urządzenia nietypowe a niewymienione wcześniej. Projektuję urządzenia elektroniczne na zamówienie.Staram się połączyć niską cenę z szybką usługą i profesjonalną obsługą Klienta.Kontakt poprzez e-mail, tel.534534469 lub www.esvblog.com
    Specjalizuje się w: elektronika ogólna, elektronika przemysłowa, elektronika
    psine.pl napisał 1834 postów o ocenie 222, pomógł 103 razy. Mieszka w mieście KIELCE. Jest z nami od 2003 roku.
  • #2
    lord_blaha
    Poziom 33  
    Czy czytnik ma możliwość (albo będzie miał) również zapisywania danych na kartę?
  • #3
    ghost666
    Tłumacz Redaktor
    Te czytniki siedzą też w kasie fiskalnej(?) sprzedawanej na Allegro. Razem z całkiem ciekawym wyświetlaczem graficznym, którego opis także znajduje się na elektrodzie.
  • #4
    Decado
    Poziom 21  
    Bawiłem się tym samym czytnikiem, bardzo fajna sprawa tylko w jeśli ktoś programuje w BASCOMie i użyje gotowych poleceń do zczytywania danych z karty to sie rozczaruje bawiąc się kartą BP. Poprostu mu jej nie zczyta.

    Pozdrawiam
  • #5
    psine.pl

    Poziom 29  
    Ano bascom nie zczyta.
    głównie podejrzewam, że chodzi o znak % na początku transmisji.
    Czy występują w kasie z lcd to nie wiem ja kupiłem luzem tylko wtyki poobcinałem .
    Co do tego czy ma możliwość zapisu . wydaje mi się , że nie . ale jak już wspomniałem, zero dokumentacji do tego układu. Poza tym nie widzę żadnego układu kasowania lub czegoś w tym stylu.
    Poza tym jezeli nie ma na tej karcie żadnych danych to nie pojawia się sygnał CARD PRESENT .

    Reasumując - moim zdaniem technicznie i fizycznie ten konkretny model czytnika nie może programować kart.

    Pozdrawiam
    Marek
  • #6
    kamilekaaaaa
    Poziom 23  
    Witam,
    biały-zielony - CARD PRESENT
    fiolet - STROBE (CLK) II
    Niebieski- DATA II
    Ale nie na wszystkich kartach jest zapis na 2 polach
  • #7
    rafik71
    Poziom 16  
    Ciekawy projekt. Czy myślisz że mogą pracować na zewnątrz?
  • #8
    ...KUBA...
    Poziom 23  
    A można by było wykorzystać taki lub podobny czytnik do uruchamiania zapłonu w motorze?
  • #9
    psine.pl

    Poziom 29  
    moim zdaniem można spokojnie użyć jako blokady zapłonu.
    Zasilanie razem z logiką to 5V (większość motorów ma minimum 6V)
    Dodatkowo jakiś przekaźnik i po sprawie .
    Trzeba troszkę dodać pojemności by się nic nie sprzęgało ale działać będzie.
    Czytnik w takim miejscu by nie zalał się wodą.

    Ja właśnie chcę zonie i sobie w aucie odpalić taką blokadę .

    Na wcześniejsze pytanie - mogę odstąpić 5 max 6 sztuk.
    Cena 25 pln + koszt wysyłki
    nie będę na nikim zarabiać.

    jeżeli ktoś jest zdecydowany to proszę na PW.

    Co do sterownika , już zapisuje do EEPROMA ... teraz tylko pozostało odczytać i porównać. :-)

    Pozdrawiam
    Marek
  • #10
    piotrekcrash
    Poziom 12  
    ...KUBA... do tego celu lepiej zastosować czytnik RFID
    sam moduł można kupić za 30zł na allegro do tego jakiś AVR
    prosty programik i masz dużo lepszy system nie wymagający kontaktu karty z czytnikiem wystaczy ja na chwilke zbilzyc i to wszystko.
  • #11
    danio8522
    Poziom 12  
    armacomp - możesz dać na forum ten schemat tej płytki i jak to do kompa podłączyć
  • #12
    rpal
    Poziom 27  
    ...KUBA... napisał:
    A można by było wykorzystać taki lub podobny czytnik do uruchamiania zapłonu w motorze?

    Najpierw zacząłbym od odkłócenia całej instalacji elektrycznej a potem myślał o motocyklu i blokadzie zapłonu do niego.
  • #13
    psine.pl

    Poziom 29  
    której płytki schemat ?
    samego czytnika ?
    czy tego do czego jest podłączony .

    Pozdrawiam
    crzero


    odkłócić instalację ... moim zdaniem nie jest to konieczne . ale odfiltrowanie dokładnie płytki sterującej z czytnikiem ależ i owszem.

    Co do czytnika RFID ... wszystko ma swoje zalety i wady.
    poza RFID zostaje jeszcze pastylki Dallasa itd...

    ale żadna nie bdzie tak bajerancka jak przeciąganie kartą :-)
  • #15
    rpal
    Poziom 27  
    Generalnie pochwalam pomysł na użycie czytnika od kasy bo sam mam takie (to samo żródło z Goleniowa) jednak są pewne wady o których przez uczciwość nalezy wspomnieć.
    1) w motocyklu takowy "zamek" musi być wodoodporny a tym już nie jest najlepiej. Z tego powodu lepsza jest już pastylka.
    2) wszelkie rozwiązania i nie tylko to konkretne jak w tym poscie ale oparte na częściach z kasy mają jedną podstawową wadę. Części tam zastosowane a będące "budulcem" są w zasadzie już nie do kupienia. Tak jest z czytnikiem,SED-em. Sam popełniłem sterownik LCD i trzeba przyznać że kiedyś te kasy się skończą i nikt już nie powieli publikowanych tu pomysłów bo kas nie będzie a podzespoły jako wybitnie egzotyczne się wyczerpią.
    3) Sam mam kilka motocykli i wadą blokady zapłonu jest to że jak się nie da odpalić to można motocykl podprowadzić na wiele innych sposobów więc lepszy jest może po prostu alarm albo ew. garaż. Tego typu samoróbki przeszkadzają głównie motocykliście a nie potencjalnym złodziejom. No chyba że chodzi o efekt o którym kolega pisał :) Tu zapytałbym właścicieli Renault-ów co myślą o odpalaniu z karty :) PZDR
  • #16
    saper_2
    Poziom 17  
    Hej, widzę iż nie dotarłeś do specyfikacji ale duże gratulacje za dojście co i jak i napisanie programu!

    To ja w takim razie podpowiem iż uruchomiłem ten czytnik z teminali z aledrogo już trochę temu i działa w obie strony czytanie, ten czytnik czyta tylko jedną scieżkę: scieżkę nr 2 na której jest zapisany numer karty i data ważności (w przypadku bankomatowych)... A to link do mojej kontstrukcji: http://del-el.jcom.pl/?module=3&smod=7&mode=2&id=1 i nota: http://del-el.jcom.pl/?module=256&mode=view&id=4
  • #17
    psine.pl

    Poziom 29  
    co do kart renault :-) fajna sprawa dokąd nie padnie ... droga wymiana :-)

    co do motocykla - zgadzam się , w zasadzie jedynym kłopotem będzie woda .

    Jak już wcześniej wspomniałem, nie wiem czy i z czego wymontowane są te czytniki .
    Ja kupiłem je jako sam czytnik bez żadnych dodatków.

    Nigdy nie miały mieć komercyjnego zastosowania ... ot taka ciekawostka .

    Zrobiłem na nich na razie bajer z włączaniem oświetlenia w zakładzie :-)
    i działa !
    po prostu obok klawiatury od alarmu przykręciłem ten czytnik.
    Kto wchodzi do zakładu przeciąga kartę i ma włączone stanowisko.
    Jak wychodzi przeciąga raz jeszcze i ma wyłączone.

    Super sprawa.
    teraz bawię się z odfiltrowaniem atmegi i chcę sobie pyknąć blokadę do auta .
    Też jako bajer - bo dla złodzieja to i tak nie stanowi problemu ... ale dla amatora ależ i owszem.

    Już niedługo skończę wersję softu z zapamiętywaniem kart z przycisku ...
    jak tylko skończę program to załączę do postu ... także stay tuned :-)

    pozdrawiam
    Marek


    kolego saper_2 to nie ten sam czytnik ... na moim jest napisane : KDR-1972

    co do ścieżki 2 czy pierwszej .... jak nie chcesz czytać drugiej to włóż 2 - 3 mm kawałek plastiku na dole czytnika (taki pasek wycięty np z np z karty) i będziesz miał odczyt pierwszej ścieżki od dołu :-)
  • #18
    saper_2
    Poziom 17  
    Patrząc na zdjęcie, mają taką samą tą szarą ramkę/podstawkę jak te w tych terminalach z aledrogo więc założyłem iż są to te (i dalej sie przy tym upieram :D ), kolory tutaj nie mają już większego znaczenia (chociaż w nocie JSR-xxxx są podane kolor co ułatwiło mi podłączenie i uruchomienie :P ), bo złącza są takie same (raster 2mm 5 pin) i kolejność wyprowadzeń będzie taka sama.

    Czy ten sam czy nie liczy się tylko ażeby dawał te same sygnały co inne - więc taki sam ,no dobra odpowiednik :) bo się pokłucimy zaraz :D.
    Ja mam GSR1120 i JSR1120 - kolory kompletnie inne...
    PS. co do detekcji kierunku przesuwania - zainteresuje się ilością bitów "1" na początku i na końcu paska :D
  • #19
    bolek
    Specjalista - oświetlenie sceniczne
    blokada zapłonu taka kartą jest po prostu poroniona :)
    Bardzi łatwo taką karte zniszczyć do tego stopnia że nigdzie sie nie pojedzie, a sam czytnik zostanie wyzwany od wszytskich h%@ świata :)

    Na próbe proponuje wam kilka razy dziennie tankować albo płacić za zakupy. Żadna karta nie dożyje swojego terminu
  • #20
    kamilekaaaaa
    Poziom 23  
    Armacomp co z tym odczytem danych z karty?Z tego c nie wiem jak to rozszyfrowa dekodowanie danych z karty.
  • #21
    psine.pl

    Poziom 29  
    Witam.

    mówiąc najprościej ....
    odbieramy programem daną do tego służy procedurka zamknięta w obsłudze przerwania.

    Code:
    SIGNAL(SIG_INTERRUPT0) 
    
    {
        if(wposrednia){
            if(DANE == 1) {
                wposrednia=0;
                Znak = 0x40;
                ptrS = 1;
                ptrD = 0;
               }
        } else
          {
            Znak = Znak >> 1 | ((DANE)?0x40:0);
            ptrS++;
            if (ptrS == 7){
                ptrS = 0;
                CiagBitow[ptrD] = Znak;
                Znak = 0;
                ptrD++;
               }
           }   
    }


    dalej program w zależności od tego czy wykrył włożenie karty magnetycznej czy nie wykonuje pustą pętlę lub coś co nazwane jest convert_ASCII

    nie rozumiem w czym jest kłopot ze zrozumieniem tej konwersji ....
    Code:
     CiagBitow[i] = (CiagBitow[i] & 0x3F) + 0x20;


    w powyższej linii zawarta jest cała magia przekształcenia odebranej wartości na literę zgodną ze standardem ASCII .
    odebrana dana podstawiana jest do tablicy .... ciagbitow[i] ... następnie ta wartość jest podmieniana wartością zgodną ze wzoru : ciagbitow (logiczne AND) z wartością 0x3F (3F HEX) po wykonaniu tej operacji dodawane jest 0x20 (20 HEX) . Dzięki tej operacji uzyskujemy literki i cyferki zgodne z alfabetem ASCII (duże litery) i cyfry

    a cały pic polega na tym, że zazwyczaj literki zapisywane są jako 8 bitów . a transmisja z karty nie ma 8 bitow nawet ze znakiem sumy kontrolnej najczesciej jest to 6 lub 7 bitow . Trzeba to po prostu jakoś uzupełnić.

    Nie wiem czy pomogłem ale mam nadzieję . Mogłem trochę zamieszać . Nie jestem jeszcze aż tak dobry w C .

    Już niedługo skończe program rejestrujący karty. (trochę się opóźnia ale praca i praca)

    Pozdrawiam
    Marek
  • #22
    kasaidolar
    Poziom 19  
    Doszedl do mnie czytnik :) Dzieki! Nie wiem jeszcze jak sie mam do niego zabrac. Mozesz napisac blizej jak wyglada zczytywanie z czujnika danych? Czy to wyglada tak ze pojawia sie stan niski na CARD PRESENT i wtedy mozemy pusic tyle razy CLK z procka zeby zczytac ile tam sobie bitow chcemy? Pozdrawiam!
  • #23
    kamilekaaaaa
    Poziom 23  
    Kasaidolar to nie procek wysyla sygnal CLK tylko czytnik. W zaleznosci ile taktow zegara jest zczytanych tyle danych odczytasz.
  • #24
    psine.pl

    Poziom 29  
    sorki , że tak długo nie pisałem ale odpowiedź i tak była u przedmówcy :-)
    ogólnie odczyt z tego ustrojstwa jest banalny - przeanalizuj program który jest podany i zobaczysz jak to leci.

    Pozdrawiam
    Marek