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

[Atmega8][BASCOM] Odczyt karty systemu RFID Unique

00gtw00 15 Lut 2009 22:55 25124 44
  • #1 6156168
    00gtw00
    Poziom 15  
    Pracuje nad mikroprocesorową aplikacją odczytująca karty systemu RFID Unique.
    Poniżej kod i filmik przedstawiający efekty mojej pracy. Do budowy wykorzystałem moduł czytnika RFID za 35zł z allegro, procesor atmega8 pracujący z kwarcem 8MHz.


    Mój problem polega na tym, że jak dodamy po Reset Portc.5 a przed Loop polecenie Wait 1 czy np. Waitms 1000 program odczytuje błędne dane jednak zawsze dla każdej z kart takie same. Czy to może mieć z wiązek z użytym przerywaniem? Chodzi o to aby odczytywał jeden raz ID karty i ciągłym przyłożeniu, a nie jak jest teraz że co 100ms bo tak moduł przesyła. Podsuncie pomysł. Z góry dziękuję za pomoc.





    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Enable Interrupts
    
    Config Portc.5 = Output
    Set Portc.5
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.3 , Db6 = Portc.2 , Db7 = Portc.1 , E = Portb.0 , Rs = Portb.1
    Cursor Off Noblink
    Cls
    
    Dim Bufor(7) As Byte
    Dim I As Byte
    Dim Crc As Byte
    Dim Status As String * 4
    
    Lcd "APLIKACJA RFID 1"
    Lowerline
    Lcd "SEBASTIAN IZYCKI"
    
    Do
       For I = 0 To 7
          Bufor(i) = 0
       Next I
    
       Crc = 0
       Status = ""
       Set Portc.5
    
       For I = 1 To 7
          Bufor(i) = Waitkey()
       Next I
    
       Crc = Crc8(bufor(2) , 5)
    
       If Crc = Bufor(7) Then
          Status = "OK"
       Else
          Status = "FAIL"
       End If
    
       Print Bufor(1) ; "." ; Bufor(2) ; "." ; Bufor(3) ; "." ; Bufor(4) ; "." ; Bufor(5) ; "." ; Bufor(6) ; "." ; Bufor(7) ; "   CRC:" ; Crc ; "     " ; Status
       Reset Portc.5
    Loop
    End
  • #2 6157732
    wader_669
    Poziom 28  
    moim zdaniem jest to podobny problem jak opisywany tutaj:
    https://www.elektroda.pl/rtvforum/topic1228679.html
    pisalem, ze nie jetem pewien co do rozwiazania. Jednak wystestowac zawsze mozesz.
    Powstawiaj w odpowiednie miejsca diasble serial i enable serial
    moze zadziala
  • #3 6158064
    00gtw00
    Poziom 15  
    Niestety nie działa :( Zerknijcie na screena ... wygląda na to że zamienia miejscami w tablicy dane. :cry:

    [Atmega8][BASCOM] Odczyt karty systemu RFID Unique
  • #4 6236999
    klops_mops
    Poziom 17  
    Odnawiam..

    Udało Ci się to rozwiązać?
  • #5 6237219
    00gtw00
    Poziom 15  
    Z braku czasu niestety nie, projekt zszedł na drugi plan. Masz jakąś propozycję?
  • #6 6237596
    klops_mops
    Poziom 17  
    Mam ten sam moduł, ten sam problem...

    Pozwoliłem sobie przerobić troszkę Twój kod:
    
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    
    
    
    Config Portb.3 = Output
    Config Portb.2 = Output
    Set Portb.3
    Set Portb.2
    
    
    
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
    
    Cursor Off Noblink
    Cls
    
    Dim Bufor(7) As Byte
    Dim I As Byte
    Dim Crc As Byte
    Dim Status As String * 4
    Dim Dostep As String * 10
    
    Locate 1 , 1
    Lcd "RFID PO RS232"
    
    Pocz:
    Do
       For I = 0 To 7
          Bufor(i) = 0
       Next I
    
       Dostep = "Czekam"
       Crc = 0
       Status = ""
    
       For I = 1 To 7
          Bufor(i) = Waitkey()
       Next I
    
       Crc = Crc8(bufor(2) , 5)
    
       If Crc = Bufor(7) Then
          Status = "OK"
       Else
          Status = "FAIL"
       End If
    
       If Bufor(2) = 28 And Bufor(3) = 0 And Bufor(4) = 148 And Bufor(5) = 25 And Bufor(6) = 152 And Bufor(7) = 102 Then
       Dostep = "DOZWOLONY"
       Set Portb.3
       Reset Portb.2
       Else
       Dostep = "ZABRONIONY"
       Reset Portb.3
       Set Portb.2
       End If
    
       Print Bufor(1) ; " ---    " ; Bufor(2) ; "." ; Bufor(3) ; "." ; Bufor(4) ; "." ; Bufor(5) ; "." ; Bufor(6) ; "." ; Bufor(7) ; "   CRC:" ; Crc ; "     " ; Status ; "           Dostep:  " ; Dostep
       Locate 3 , 1
    Lcd Dostep
    Goto Diody
    Loop
    
    Diody:
    Wait 1
    Set Portb.2
    Set Portb.3
    Bufor(1) = 0
    Bufor(2) = 0
    Bufor(3) = 0
    Bufor(4) = 0
    Bufor(5) = 0
    Bufor(6) = 0
    Bufor(7) = 0
    
       Dostep = "Czekam"
       Crc = 0
       Status = ""
    Goto Pocz
    
    End
    


    W terminalu dostaję co sekundę:
    
    255 ---    28.0.148.25.152.102   CRC:102     OK           Dostep:  DOZWOLONY
    
    255 ---    28.102.255.28.0.148   CRC:183     FAIL           Dostep:  ZABRONIONY
    
    25 ---    152.102.255.28.0.148   CRC:99     FAIL           Dostep:  ZABRONIONY
    
    25 ---    152.102.255.28.0.148   CRC:99     FAIL           Dostep:  ZABRONIONY
    


    Co oznacza, że tylko pierwsza transmisja jest poprawna (czasem zdarzą się 2 poprawne jedna po drugiej i zawsze tylko pierwsze)... Coś jest nie tak z tymi buforami chyba. Jutro z tym będę dalej kombinował, dziś muszę odrobić jeszcze lekcje..

    Jak coś mi się uda zrobić, to oczywiście tu napiszę.
  • #7 6265987
    PiotrEtenM500
    Poziom 19  
    kod:
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    
    Cursor Off
    Cursor Off Noblink
    
    Dim Bufor(7) As Byte
    Dim I As Byte
    Dim A As Byte
    Dim B As Long
    Dim C As Byte
    
    Config Portb = Output
    Portb = &B00000000
    
    
    
    
    B = 0
    
    
    P0:
    Cls
    Lcd "Czekam na Karte"
    
    For A = 0 To 99 Step 6
         For I = 1 To 7
          Bufor(i) = Waitkey()
         Next I
         Locate 1 , 1
         Lcd "CZYTAM KARTE..."
         Locate 2 , B
         B = B + 1
         Lcd "{219}"
    Next A
    B = 1
    C = 0
    
     'Locate 1 , 1
     'Lcd Bufor(1) ; "." ; Bufor(2) ; "." ; Bufor(3) ; "." ; Bufor(4) ; "              "        ' Wyświetla nr Karty RFID
     'Locate 2 , 1
     'Lcd Bufor(4) ;Bufor(5) ; "." ; Bufor(6) ; "." ; Bufor(7)
     'Wait 20
    
    Cls
    Lcd "   Odczytane"
    If Bufor(1) = 137 And Bufor(2) = 160 And Bufor(3) = 192 Then C = 1
    If Bufor(1) = 104 And Bufor(2) = 80 And Bufor(3) = 5 Then C = 2
    If Bufor(1) = 103 And Bufor(2) = 74 And Bufor(3) = 230 Then C = 3
    If Bufor(1) = 104 And Bufor(2) = 253 And Bufor(3) = 87 Then C = 4
    If Bufor(1) = 119 And Bufor(2) = 4 And Bufor(3) = 75 Then C = 5
    If C = 0 Then Goto P2:
    
    Locate 2 , 4
    Lcd "KARTA Nr" ; C
    Portb = &B00000100
    Wait 5
    Portb = &B00000000
    
    Goto P0
    P2:
    Locate 2 , 1
    Lcd " NIEZNANA KARTA "
    Portb = &B00000000
    Wait 3
    Goto P0
    
    End
    
    :


    Odczytuje za każdym razem poprawnie
    odczyt jest w pętli, ponieważ moduł wysyła błędne dane w pierwszych trzech odczytach, aby to ładnie ominąć na czas zwłoki wykonałem suwak:)
    reszta powinna być zrozumiała
    odczyt numeru karty dałem na pierwszych trzech bajtach, jak na moje potrzeby wystarcza

    Pozdrawiam
  • #8 6396449
    mateusz.c
    Poziom 13  
    witam

    jestem początkujący i mam prosbe czy bys mogl umiescic schematy tego układu i opis co i jak podłączyć biorąc pod uwage moj poziom zaawansowania w tych sprawach = 0

    ---
    pozdrawiam
  • #9 6396474
    PiotrEtenM500
    Poziom 19  
    Moduły mozna kupić gotowe np. na Allegro
    mozna tez zrobic samememu, ale cena gotowca to zaledwie 29zł!!!
    wiec chyba niema co bawic sie w sklejanie
    soft masz zamieszczony w poscie wiec wszytko gotowe
  • #10 6396497
    00gtw00
    Poziom 15  
    [Atmega8][BASCOM] Odczyt karty systemu RFID Unique

    Do nogi 7 VCC podłączasz zasilanie +5V
    Do nogi 8 GND podłączasz zasilanie -
    Do nogi 2 PD0(RXD) podłączasz TXD z modułu
    Oczywiście zgodnie z notą modułu, zasilasz go też 5V.

    Wyświetlacz podłączasz zgodnie z linią kodu programu:
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2 

    Dodatkowo wyświetlacz musi mieć zasilanie - na pin1 - GND na pin2 +5V. Pin3 to jest kontrast - do celów testowych możesz podłączyć poprzez rezystor 3k3 do GND i będzie coś widać :) Żeby precyzyjnie wyregulować kontrast musisz dać rezystor nastawny (potencjometr).

    Rysować nie ma tutaj co bo układ można złożyć na pająku. Zalecam pomiędzy nogą 7 a 8 atmegi dać kondensator ceramiczny 100n. Chyba jaśniej się już nie da :D Chyba zapomniałem dodać, że atmege trzeba zaprogramować. Program podany wyżej, wystarczy go tylko skompilować w bascomie i wgrać za pomocą programatora np. stk500.
  • #11 6396514
    mateusz.c
    Poziom 13  
    wielkie dzieki ale jeszcze mam 1 pytanie: czy w calej "instalacji" stosowac jakies kondensatory i rezystory? jak powinna wygladac wytaczka do komputera (tj jak podlaczyc piny rs232 do ukladu) poniewaz chce rowniez odbierac nr karty przez komputer a nie na sam lcd

    ATMega 8-16PU DIP28
    czy
    ATMega 8L-8PU DIP28 ?
  • #12 6396596
    00gtw00
    Poziom 15  
    Co do tego czy 8pu czy 16pu to bez znaczenia większego. Różnią się taktowaniem z tego co pamiętam.

    Z podłączeniem do komputera jest troszkę trudniej bo trzeba zastosować układ max232 - na elektrodzie pełno tego, poszukaj, nie można mieć wszystkiego na tacy bo się nic nie nauczysz :)

    Podpowiem tylko, że nogę 3 atmegi czyli PD1(TXD) podłączasz do RXD układu na max232.

    TXD - nadawanie
    RXD - odbieranie

    Czy kondensatory i rezystory są potrzebne? Rezystory w tym wypadku nie są potrzebne. Co do kondensatorów to przy max232 muszą być 4 szt 1uF lub 10uF zależy od wersji, a szczegóły znajdziesz w nocie katalogowej. U mnie sprzedają MAX232N i on działa na 1uF. Kolejne kondensatory mogą, ale nie muszą być w układzie zasilania, wszystko zależy z jakiego źródła użyjesz. Jak dobrze stabilizowany zasilacz to nic nie trzeba jeżeli jakiś chiński to lepiej dać zasilacz np na 7,5V + stabilizator 7805 + kondensator na wejściu i wyjściu powiedzmy 100uF/16V. 7,5V dlatego, że stabilizator potrzebuje o ok. 2V więcej, żeby zadziałał.
  • #13 6397818
    mateusz.c
    Poziom 13  
    czy mozecie mi powiedziec czy jezeli do takiego schematu

    Link

    podłacze Atmege8 PIN10 HTRC110 do PIN2 Atmegi z wgranym programem podanym kilka postow wyzej bedzie dzialac?
  • #14 6405665
    PiotrEtenM500
    Poziom 19  
    Powinien dzialac:) program, modyfikujesz na wlasne potrzeby wiec i tak napewno beda potrzebne zmiany
  • #15 6406021
    mateusz.c
    Poziom 13  
    a moglbys powiedziec jak takie zmiany powinny wygladac? czy zmieni sie sposob odczytu zy trzeba wprowadzic jakies komendy sterujace itp?

    czy htrc110 wystarczy podpiac tylko pod 2noge atmegi i zasilanie czy cos jeszcze?
  • #16 6406674
    Szymon Tarnowski
    Poziom 27  
    Takie mam niedyskretne pytanko, gdzie dostać HTRC110? Jak na razie nikt nie chciał mi sprzedać.
  • #17 6406797
    mateusz.c
    Poziom 13  
    Szymon Tarnowski napisał:
    Takie mam niedyskretne pytanko, gdzie dostać HTRC110? Jak na razie nikt nie chciał mi sprzedać.


    np tutaj
    http://www.piekarz.pl
    lub na ebayu

    ponawiam moja prosba z poprzedniego postu
  • #18 6407034
    Szymon Tarnowski
    Poziom 27  
    mateusz.c napisał:
    Ebay, allegro, swistak nie ma. Piekarz mi odpisał że minimum 30sztuk a sklep namadero przyjął zamówienie i zero odzewu od 2 tygodni.

    mateusz.c napisał:
    ponawiam moja prosba z poprzedniego postu
    Zobacz notę aplikacyjną chipa, potrzeba dodać kilka elementów a programowo zainicjować układ i okresowo odczytywać numer karty.
  • #19 6407102
    PiotrEtenM500
    Poziom 19  
    na Allegro sa gotowe moduły po 29zł i po 32zł
    nie wiem po co szukac samego ukladu kosztuje on ok 9zł
    + do tego atmel + plytka + cewka i inne pasywne elementy
    policz czy sie oplaca

    Tak pomogę zmienić program
    mój obejmuje sprawdzenie 3 kodów i jest bez sum kontrolnych
    osobiscie wazam z esa niepotrzebne
    progranm mozna rozwinąć o kolejne 2 kody
    bo tyle wysyła moduł
    ja posiadam ten za 32zł
    ten za 29zł ma inną ramkę wiec na ślepo niewiele pomoge
    chyba ze oferent poda dane ramki to zmozernizuje soft i zaskoczy program
  • #20 6407479
    mateusz.c
    Poziom 13  
    jak mozesz wrzuc kod tutaj lub wyslij na mateusz.ciok(_at_)gmail.com bede b. wdzieczny
  • #21 6407519
    PiotrEtenM500
    Poziom 19  
    Kup moduł, zrob płytke z ATMegą
    wgraj program
    reszte pytań jak bedziesz miał juz gotowy zestaw
  • #22 6407686
    Szymon Tarnowski
    Poziom 27  
    PiotrEtenM500 napisał:
    na Allegro sa gotowe moduły po 29zł i po 32zł
    nie wiem po co szukac samego ukladu kosztuje on ok 9zł
    + do tego atmel + plytka + cewka i inne pasywne elementy
    policz czy sie oplaca
    Opłaca się, bo jeśli chciałbym dodać dodatkową funkcjonalność do czytnika RFID to muszę dołożyć swój własny procesor, a jak chcę jeszcze zmieścić całość w innym urządzeniu to gotowy moduł moge o kant du.. potłuc.
  • #23 6407720
    PiotrEtenM500
    Poziom 19  
    ale musisz dołożyć
    np ATmega8
    tak czy inaczej
    do atmegi dasz jeszcze kwarc 8Mhz i 2 kondesatory 27p
    pewnie tranyztor i 2 rezystory jak ma byc przekaźnik
    jakie chcesz jeszcze funkcje
    ten uklad tylko czyta kartę
    nic wicej nie robi
    reszt afunkcji spoczywa na procku i programie
  • #24 6407982
    Szymon Tarnowski
    Poziom 27  
    PiotrEtenM500 napisał:
    ale musisz dołożyć
    np ATmega8
    tak czy inaczej
    do atmegi dasz jeszcze kwarc 8Mhz i 2 kondesatory 27p
    pewnie tranyztor i 2 rezystory jak ma byc przekaźnik
    jakie chcesz jeszcze funkcje
    ten uklad tylko czyta kartę
    nic wicej nie robi
    reszt afunkcji spoczywa na procku i programie
    Ale ten czytnik z aledrogo już zawiera w sobie procesor, jakbym chciał dodać coś więcej to muszę dodać swój drugi. Co do procesora to nie musi mieć on kwarcu i innych dodatkowych elementów, funkcjonalność jaką chcę dodać to własna ramka danych z czytnika i coś w rodzaju numeru seryjnego urządzenia. Praktycznie będzie to przypominało układ z allegro, ale software i projekt pcb będzie mój. A że układ tylko czyta RFID to jest dokładnie to co od niego oczekuję.
  • #25 6408187
    PiotrEtenM500
    Poziom 19  
    soft z posta nie będzie działać prawidłowo
    trzeba napisać nowy niemalże od podstaw
    odczyt danych jest sformułowany pod ramkę z danymi wychodzących z procka

    program powinien wyglądać mniej więcej tak:

    
    $regfile = "m8def.dat"                            
    $crystal = 8000000                        
    $baud = 4800                                          
    
    Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    
    Cursor Off
    Cursor Off Noblink
    Enable Serial
    
          Dim K1 As Byte                                          
          Dim K2 As String * 80 
    
    Do
                 Do
    
                     K1 = Inkey()                  ' czyta RS232
                     If K1 = 13 Then Exit Do   ' szuka znak końca linii (13) to enter w ascii
                     K2 = K2 + Chr(k1)          ' BUDUJE ramkę
                 Loop                                                     
                                      
                Locate 1 , 1                           
                Lcd K2                                   ' POKAZUJE CAŁĄ RAMKĘ
                .....  ' Tu
                .....  ' Będzie część programu modyfikująca ramkę na Twoje potrzeby
                .....  ' Zależna od inwencji twórczej
    
    k2=""   ' Czyści!!! ramkę szykuje do odbioru kolejnej
      cls
    wait 20
    loop
    END
    



    reszte pytań jak bedziesz miec juz elektronike

    ATM8 z wewnetrznym oscylatorem gubi sie
    z mojego doswiadczenia wynika ze do RS potrzeba minimum 4MHz, ceny kwarców są identyczczne co do wartosc, wiec z reguły daje 8MHz

    Dodano po 28 [minuty]:

    do zabawy proponuje uzyć programu terminalowego np. RealTerm poniewaz ramka nie miesci sie cala na LCD
    wtedy zamien instrukcje Lcd K2 na Print K2

    link do Terminala:
    [url] http://sourceforge.net/project/downloading.ph...lename=Realterm_2.0.0.57_setup.exe&a=70766472 [url/]
  • #26 6433313
    mateusz.c
    Poziom 13  
    witam

    znalazlem w necie kod w C oraz schemat budowy czytnika rfid na EM4095 i mam kilka pytan:

    (schemat i kod w załączniku)
    1. co to za symbole ktore zaznaczylem czerwonymi kreskami
    2. czy to bedzie dzialac ;-) <- chyba najwazniejsze
    3. czy niepowinien tam byc uklad max232 przed wyjsciem na rs232 ?!

    projekt wzielem z: http://www.avrfreaks.net/index.php?module=Fre...iewItem&item_id=825&item_type=project

    ---
    pozdrawiam
    Załączniki:
  • #27 6440041
    PiotrEtenM500
    Poziom 19  
    na schemacie zaznaczona dioda powinna byc zenerką 4,7V reszt jest poprawnie tranzystory na RS'ie zastepuja maxa i jak najbardziej to poprawny uklad
  • #28 6440476
    mateusz.c
    Poziom 13  
    PiotrEtenM500 napisał:
    na schemacie zaznaczona dioda powinna byc zenerką 4,7V reszt jest poprawnie tranzystory na RS'ie zastepuja maxa i jak najbardziej to poprawny uklad


    a czy mozna jakos zredukowac ilosc komponentow na plytce? np co zredukowac aby zamontowac max232 i ponawiam pytanie: co to sa te symbole kotre zaznaczylem
  • #29 6440615
    Nol
    Poziom 15  
    Zależy co rozumiesz pod pojęciem redukowania - MAX232 wymaga podłączenia 4 kondensatorów + kolejny na zasilaniu (100nF). Łącznie jest to 6 elementów, a na schemacie masz 7. Teraz zależy w jakiej technologii chcesz wykonać obwód - SMD czy w przewlekanej - to Ci odpowie czy zaoszczędzisz miejsca. Generalnie jeśli chodzi choćby o niezawodność, to poleciłbym zastosowanie MAX232 lub odpowiednika zgodnie ze schematem:
    [Atmega8][BASCOM] Odczyt karty systemu RFID Unique

    Co do zaznaczonych elementów, to szkoda, że nie ponumerowałeś... Lewy górny róg to dioda zenera (zgodnie z tym co napisał PiotrEtenM500), choć na schemacie jest zły symbol diody prostowniczej. Następnie masz tranzystory NPN typu 2N2222 z emiterami dołączonym do masy. Symbol X1 to kwarc z podaną wartością częstotliwości w MHz. A po prawej stronie masz również tranzystor NPN z emiterem dołaczonym do masy (ten trójkąt obrócony w dół to symbol potencjału masy). Wybór tranzystora zależy od użytego przekaźnika, ale najprawdopodobniej wystarczy również 2N2222. Brakuje mi tylko rezystora w obwodzie kolektorowym, który ograniczyłby prąd.
  • #30 6440702
    mateusz.c
    Poziom 13  
    wielkie dzieki i jeszcze jedna porśba: czy mogbyś zaznaczyc na schemaicie co mam pominąć jesli chce zastosowac max232

    a kod zalaczony w archiwum jest dobry? bedzie to dzialac z kartami unique?
REKLAMA