RFID(MFRC522) İncelemesi Hakkında Kısa Kısa

Başlatan MrDarK, 01 Mayıs 2014, 15:17:30

MrDarK

Konu açık aslında 6 sayfa yorum var. Eğer sayfalardaki mesajların hepsini okuduysan takıldığın yeri sorabilirsin.
Picproje Eğitim Gönüllüleri ~ MrDarK

cyber_cemati

Sayın MrDark hocam.
Aslında amacım en basitten zora doğru gidip sistemi çözmek. Eğer sizin için de mümkünse sizden ricam bu modül en basit şekilde nasıl çalışır?
Şöyle örnek vereyim. Mesela iki kartın aynı anda çalışmaması için anticollision etiketinden doğrulama yapıyoruz. Bunu geçirmeden okuma yapılabilir mi?
Ya da crc sorgusu yapılmadan bu iş olur mu?

Mesela kod yazacağımda kesmeleri aktif etmeden çalıştığını görmek istiyorum. Ardından anti_coll özelliğini açıp denemelere devam etmek istiyorum.

İnşallah meramımı anlatabilmişimdir.

Cevabınızı merakla bekliyorum MrDark hocam. Hayırlı günler.

Not: Bir de hocam gönderdiğim yazılar (diğer üyeler için de mi böyle bilmiyorum) onaylanmadan gözükmüyor. Bu işlem de biraz zaman alıyor gibi. Benim hesapla ilgili bir sorun mudur bu durum?

MrDarK

Selamlar,

Yeni üye olduğunuz ve mesaj sayınız düşük olduğundan onaylanması gerekiyor. Mesaj sayınız arttıkça bu kategoriden çıkacaksınız. Haliyle sabırla beklemenizi rica ediyoruz.

Anticollision yapmadan okuma yapabileceğini sanmıyorum (denemedim). Arduino ile çalışan örnek programlar var, oradaki örnekler üzerinden de denemelerinizi yapabilirsiniz.

Her aşamada led yak söndür yaparak kodunuzun ne durumda olduğunu da gözlemleyebilirsiniz.

En basit şekilde nasıl çalışır sorusuna pek bir anlam veremedim, modülü kuruyorsunuz çalışıyor. Kurmadan çalışmaz veya 10 parametre var ise 4'unu kurayım 6'sını kurmayayım çalışır mı şekilde soruyorsanız çalışmaz tabiki :)
Picproje Eğitim Gönüllüleri ~ MrDarK

cyber_cemati

MrDark hocam öncelikle sabırla cevap verdiğiniz için teşekkür ederim.
Hocam şöyle bir örnekle açıklayayım. Bir süre önce nrf24l01+ modülü ile çalıştım. Bu modülde aynı rc522 gibi adreslere gidip bazı ayarlamalar yaparak çalışıyor.
Mesela nrf modülünde crc biti var. Bu biti isterseniz kullanmayabilirsiniz. Modül yine de istediğiniz veriyi gönderebilir. Ya da duplex half dublex ayarını yapmanıza da gerek yok. Kesmelerde de durum geçerli. Kesmeleri ayarlamasanız da bu modül çalışır. Kayıtçıları nrf'nin de çok ama hepsini ayarlamanıza gerek yok. Tabi sonradan ihtiyaca binaen register ayarlaması yapabilirsiniz. Bu modülle çalışırken burada anlatmaya çalıştığım gibi önce temel olarak çalıştırdım. Ardından crc bitini denedim. Ya da kesme ile deneme yaptım. Duplex olayını denedim falan.
Tam olarak anlatmaya çalıştığım da buydu. rc522'de de böyle ayarlanmasa da modülün çalıştığı adresler var mıdır?
İyi akşamlar...

cyber_cemati

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2018 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 24/08/2018                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
;-------------------------------------------------------------------------------
;**** Added by Fuse Configurator ****
; Use the Fuse Configurator plug-in to change these settings


@ DEVICE pic16F628a
@ DEVICE pic16F628a, WDT_ON
@ DEVICE pic16F628a, PWRT_ON
@ DEVICE pic16F628a, BOD_ON
@ DEVICE pic16F628a, PROTECT_OFF
@ DEVICE pic16F628a, LVP_OFF
@ DEVICE pic16F628a, CPD_OFF
@ DEVICE pic16F628a, MCLR_OFF
@ DEVICE pic16F628a, INTRC_OSC_NOCLKOUT
TRISA=%01000000  'A portu 6. pin giriş diğerleri çıkış olarak ayarlandı.
TRISB=0  'B portu çıkış olarak ayarlandı.

'mfrc 522 tanımlamaları
miso var porta.6   'master in slave out
mosi var porta.7  'master out slave in
sck var porta.0  'sck pini
nss var porta.1 'sda pini

PORTA=0
PORTB=0

CMCON=7      'komparatörler iptal.
OPTION_REG=7 'pull up direncleri pasif   
 'lcd tanımlamaları
DEFINE LCD_DREG PORTB 'lcd data pinleri portb ye bağlı  
DEFINE LCD_DBIT 0     'lcd data pinleri 0. pinden başlıyor.
DEFINE LCD_EREG PORTB  'enable pini portb de
DEFINE LCD_EBIT 4      'enable portb 4. pine bağlı
DEFINE LCD_RSREG PORTB  ' rs pini portb de 
DEFINE LCD_RSBIT 5      ' rs portb 5. pine bağlı
DEFINE LCD_BITS 4       'data 4 pini bağlı
DEFINE LCD_LINES 2       'lcd 2 satır
pause 200

  ' Pin Assignments
  Symbol RC522_PCD_IDLE       = $00
  Symbol RC522_PCD_AUTHENT    = $0E
  Symbol RC522_PCD_RECEIVE    = $08
  Symbol RC522_PCD_TRANSMIT   = $04
  Symbol RC522_PCD_TRANSCEIVE = $0C
  Symbol RC522_PCD_RESETPHASE = $0F
  Symbol RC522_PCD_CALCCRC    = $03

  Symbol RC522_PICC_REQIDL    = $26
  Symbol RC522_PICC_REQALL    = $52
  Symbol RC522_PICC_ANTICOLL_CL1  = $93
  Symbol RC522_PICC_ANTICOLL_CL2  = $95
  Symbol RC522_PICC_ANTICOLL_CL3  = $97

  Symbol RC522_PICC_SELECTTAG_CL1 = $93
  Symbol RC522_PICC_SELECTTAG_CL2 = $95
  Symbol RC522_PICC_SELECTTAG_CL3 = $97
  Symbol RC522_PICC_AUTHENT1A = $60
  Symbol RC522_PICC_AUTHENT1B = $61
  Symbol RC522_PICC_READ      = $30
  Symbol RC522_PICC_WRITE     = $A0
  Symbol RC522_PICC_DECREMENT = $C0
  Symbol RC522_PICC_INCREMENT = $C1
  Symbol RC522_PICC_RESTORE   = $C2
  Symbol RC522_PICC_TRANSFER  = $B0
  Symbol RC522_PICC_HALT      = $50  
  
  Symbol RC522_MI_OK          = 0
  Symbol RC522_MI_NOTAGERR    = 1
  Symbol RC522_MI_ERR         = 2

  Symbol RC522_Reg_Reserved00     = $00
  Symbol RC522_Reg_CommandReg     = $01
  Symbol RC522_Reg_ComIEnReg     = $02
  Symbol RC522_Reg_DivlEnReg      = $03
  Symbol RC522_Reg_ComIrqReg     = $04
  Symbol RC522_Reg_DivIrqReg      = $05
  Symbol RC522_Reg_ErrorReg       = $06
  Symbol RC522_Reg_Status1Reg     = $07
  Symbol RC522_Reg_Status2Reg     = $08
  Symbol RC522_Reg_FIFODataReg    = $09
  Symbol RC522_Reg_FIFOLevelReg   = $0A
  Symbol RC522_Reg_WaterLevelReg  = $0B
  Symbol RC522_Reg_ControlReg     = $0C
  Symbol RC522_Reg_BitFramingReg  = $0D
  Symbol RC522_Reg_CollReg        = $0E
  Symbol RC522_Reg_Reserved01     = $0F
  
  Symbol RC522_Reg_Reserved10     = $10
  Symbol RC522_Reg_ModeReg        = $11
  Symbol RC522_Reg_TxModeReg      = $12
  Symbol RC522_Reg_RxModeReg      = $13
  Symbol RC522_Reg_TxControlReg   = $14
  Symbol RC522_Reg_TxAutoReg      = $15
  Symbol RC522_Reg_TxSelReg       = $16
  Symbol RC522_Reg_RxSelReg       = $17
  Symbol RC522_Reg_RxThresholdReg = $18
  Symbol RC522_Reg_DemodReg       = $19
  Symbol RC522_Reg_Reserved11     = $1A
  Symbol RC522_Reg_Reserved12     = $1B
  Symbol RC522_Reg_MifareReg      = $1C
  Symbol RC522_Reg_Reserved13     = $1D
  Symbol RC522_Reg_Reserved14     = $1E
  Symbol RC522_Reg_SerialSpeedReg = $1F
  
  Symbol RC522_Reg_Reserved20        = $20  
  Symbol RC522_Reg_CRCResultRegM     = $21
  Symbol RC522_Reg_CRCResultRegL     = $22
  Symbol RC522_Reg_Reserved21        = $23
  Symbol RC522_Reg_ModWidthReg       = $24
  Symbol RC522_Reg_Reserved22        = $25
  Symbol RC522_Reg_RFCfgReg          = $26
  Symbol RC522_Reg_GsNReg            = $27
  Symbol RC522_Reg_CWGsPReg          = $28
  Symbol RC522_Reg_ModGsPReg         = $29
  Symbol RC522_Reg_TModeReg          = $2A
  Symbol RC522_Reg_TPrescalerReg     = $2B
  Symbol RC522_Reg_TReloadRegH       = $2C
  Symbol RC522_Reg_TReloadRegL       = $2D
  Symbol RC522_Reg_TCounterValueRegH = $2E
  Symbol RC522_Reg_TCounterValueRegL = $2F
  
  Symbol RC522_Reg_Reserved30      = $30
  Symbol RC522_Reg_TestSel1Reg     = $31
  Symbol RC522_Reg_TestSel2Reg     = $32
  Symbol RC522_Reg_TestPinEnReg    = $33
  Symbol RC522_Reg_TestPinValueReg = $34
  Symbol RC522_Reg_TestBusReg      = $35
  Symbol RC522_Reg_AutoTestReg     = $36
  Symbol RC522_Reg_VersionReg      = $37
  Symbol RC522_Reg_AnalogTestReg   = $38
  Symbol RC522_Reg_TestDAC1Reg     = $39
  Symbol RC522_Reg_TestDAC2Reg     = $3A
  Symbol RC522_Reg_TestADCReg      = $3B
  Symbol RC522_Reg_Reserved31      = $3C
  Symbol RC522_Reg_Reserved32      = $3D
  Symbol RC522_Reg_Reserved33      = $3E
  Symbol RC522_Reg_Reserved34      = $3F
    
  Symbol RC522_MaxLen = 20


  RC522_Temp var Byte
  RC522_ReqMode var Byte



  RC522_Address var Byte
  RC522_Value var Byte
  RC522_BitMask var Byte

  RC522_backLen var Byte
  RC522_bitLen var Byte
  RC522_backData var Byte[20]
  RC522_sendLen var Byte
  RC522_sendData var Byte[20]
  RC522_Status var Byte

  RC522_irqEn var Byte
  RC522_waitIRq var Byte
  RC522_lastBits var Byte
  n var Byte
  i var Word
  RC522_Command var Byte
  serNumCheck var Byte
  RC522_BlockAddress var Byte
  RC522_RequestMode var Byte
  RC522_Level var Byte

  RC522_ATQA var Byte[2]
  RC522_Token var Byte[10]
  RC522_TokenLen var Byte
  RC522_SAK var Byte


lcdout $fe,1,"Modul init."
  GoSub RC522_Init
lcdout $fe,$C0,"Modul ok."
DetectLoop:  
  GoSub RC522_DetectCard
  If RC522_TokenLen=0 Then GoTo DetectLoop
  lcdout $fe,1, "ATQA: ", Hex RC522_ATQA[0] , Hex RC522_ATQA[1]
  pause 1000
  lcdout $fe,$c0, "Token Length: ",Hex RC522_TokenLen
  lcdout $fe,1, "Card read UID: "
  n=0
  While n<RC522_TokenLen
    lcdout $fe,$c0, Hex RC522_Token[n], ","
    n= n +1
  Wend

  'RsOut "SAK: ", Hex RC522_SAK, 13,10
  GoTo DetectLoop

RC522_DetectCard:
  RC522_TokenLen =0
  RC522_RequestMode=RC522_PICC_REQIDL  'kartı ara
  lcdout $fe,1,"dc bolum 1"
  pause 500
  GoSub RC522_Request
  If RC522_Status=RC522_MI_OK Then
    RC522_ATQA[0]=RC522_backData[0]
    RC522_ATQA[1]=RC522_backData[1]
  Else
    Return  
  EndIf
  lcdout $fe,1,"bolum 2 dc"
  pause 500
  
  RC522_Level=RC522_PICC_ANTICOLL_CL1
  GoSub RC522_Anticoll                  ' başka kart var mı?
  If RC522_Status=RC522_MI_OK Then
    If RC522_backData[0]=$88 Then
      ' More data to come
      RC522_Token[0]=RC522_backData[1]
      RC522_Token[1]=RC522_backData[2]
      RC522_Token[2]=RC522_backData[3]
      RC522_Level=RC522_PICC_SELECTTAG_CL1
      GoSub RC522_SelectTag
      RC522_Level=RC522_PICC_ANTICOLL_CL2
      GoSub RC522_Anticoll
      If RC522_Status=RC522_MI_OK Then
        If RC522_backData[0]=$88 Then
        lcdout $fe,1,"bolum 3 dc"
  pause 500
          RC522_Token[3]=RC522_backData[1]
          RC522_Token[4]=RC522_backData[2]
          RC522_Token[5]=RC522_backData[3]
          RC522_Level=RC522_PICC_SELECTTAG_CL2
          GoSub RC522_SelectTag
          RC522_Level=RC522_PICC_ANTICOLL_CL3
          GoSub RC522_Anticoll
          If RC522_Status=RC522_MI_OK Then
            RC522_Token[6]=RC522_backData[0]
            RC522_Token[7]=RC522_backData[1]
            RC522_Token[8]=RC522_backData[2]
            RC522_Token[9]=RC522_backData[3]
            RC522_TokenLen=10
            RC522_Level=RC522_PICC_SELECTTAG_CL3
            GoSub RC522_SelectTag
            RC522_SAK=RC522_backData[0]
          EndIf
        Else
          RC522_Token[3]=RC522_backData[0]
          RC522_Token[4]=RC522_backData[1]
          RC522_Token[5]=RC522_backData[2]
          RC522_Token[6]=RC522_backData[3]
          RC522_TokenLen=7
          RC522_Level=RC522_PICC_SELECTTAG_CL2
          GoSub RC522_SelectTag
          RC522_SAK=RC522_backData[0]
        EndIf
      EndIf
    Else
    lcdout $fe,1,"bolum 4 dc"
  pause 500
      For n=0 To 3
        RC522_Token[n]=RC522_backData[n]
      Next  
      RC522_TokenLen=4
      RC522_Level=RC522_PICC_SELECTTAG_CL1
      GoSub RC522_SelectTag
      RC522_SAK=RC522_backData[0]
    EndIf
  EndIf  
Return

RC522_ToCard:
  RC522_backLen =0
  RC522_Status=RC522_MI_ERR
   RC522_irqEn =0
   RC522_waitIRq =0
   RC522_lastBits =0
   n=0
   i=0
  
  If RC522_Command=RC522_PCD_AUTHENT Then 'MIFARE standart kimlik doğrulamasını bir okuyucu olarak gerçekleştirir.
    RC522_irqEn=$12
    RC522_waitIRq=$10
  EndIf
  If RC522_Command=RC522_PCD_TRANSCEIVE Then  'FIFO tampondan antene veri iletir ve iletimden sonra alıcıyı otomatik olarak etkinleştirir.
    RC522_irqEn=$77
    RC522_waitIRq=$30
  EndIf 
  lcdout $fe,1,"bolum 1 tocard"
   pause 500
  RC522_Address=RC522_Reg_ComIEnReg 'donanım kesmeler aktif. status kesme
  RC522_Value=RC522_irqEn | $80
  GoSub RC522_Write
  RC522_Address=RC522_Reg_ComIrqReg   'tüm kesmeler açık
  RC522_BitMask=$80
  GoSub RC522_ClearBitMask
  RC522_Address=RC522_Reg_FIFOLevelReg  'flush fifo
  RC522_BitMask=$80
  GoSub RC522_SetBitMask
  RC522_Address=RC522_Reg_CommandReg 'mifare boşta komutu gönderdik.
  RC522_Value=RC522_PCD_IDLE
  GoSub RC522_Write
  While i<RC522_sendLen
    RC522_Address=RC522_Reg_FIFODataReg
    RC522_Value=RC522_sendData[i] 'fifodatareg e 1 gönderiyor. sebep? Fifodaki dataları oku
    GoSub RC522_Write
    i= i + 1      
  Wend
  lcdout $fe,1,"bolum 2 tocard"
   pause 500
  RC522_Address=RC522_Reg_CommandReg
  RC522_Value=RC522_Command      'commangreg e hangi komut verilecek
  GoSub RC522_Write
  If RC522_Command=RC522_PCD_TRANSCEIVE Then 'eger komut transceive ise
    RC522_Address=RC522_Reg_BitFramingReg
    RC522_BitMask=$80
    GoSub RC522_SetBitMask         'bitframe reg in 7. biti 1 yaparak transceive başlat.
  EndIf
  i = 2000   '25ms gecikme süresi
  While i>0
    RC522_Address=RC522_Reg_ComIrqReg  'adresi kesmeye ayarla
    GoSub RC522_Read
    n=RC522_Value   'gelen value değişkenini n e aktar.
   i=i-1    'bunu sor.
    RC522_Temp=RC522_Value & RC522_waitIRq 'başta bununla ilgili atama yapılmıştı.
    If RC522_Temp>0 Then goto devam
  Wend
  lcdout $fe,1,"bolum 3 tocard"
  pause 500
  devam:
  RC522_Address=RC522_Reg_BitFramingReg
  RC522_BitMask=$80
  GoSub RC522_ClearBitMask   'bitframingreg in 7. biti sanırım 0 yapılıyor.
  If i=0 Then Return
  RC522_Address=RC522_Reg_ErrorReg 'hata registerine bak
  GoSub RC522_Read
  RC522_Temp=RC522_Value & $1B  'hatalara bak 11011
  If RC522_Temp=0 Then        'eger hata yoksa
    RC522_Status=RC522_MI_OK   'durumu tamam yap.
    RC522_Temp=n & RC522_irqEn & $01   'bunu anlamadım.
    If RC522_Temp>0 Then RC522_Status=RC522_MI_NOTAGERR
    If RC522_Command=RC522_PCD_TRANSCEIVE Then
      RC522_Address=RC522_Reg_FIFOLevelReg
      GoSub RC522_Read
      RC522_backLen=RC522_Value    'fifo data boyutu
      RC522_Address=RC522_Reg_ControlReg
      GoSub RC522_Read
      RC522_lastBits=RC522_Value & $07 'son bit değerine bak 7 ile neden and işlemi yaptık?
      RC522_bitLen=RC522_backLen * 8
      If RC522_lastBits<>0 Then
        RC522_bitLen=RC522_bitLen - 8 + RC522_lastBits  'bu işlem neden yapıldı?
      EndIf
      lcdout $fe,1,"bolum 4 tocard"
      pause 500
      If n=0 Then n=1
      If n>RC522_MaxLen Then n=RC522_MaxLen
      i=0
      While i<n  'n 0 ve 1 değer alacak.
        RC522_Address=RC522_Reg_FIFODataReg
        GoSub RC522_Read
        RC522_backData[i]=RC522_Value 'burada fifodatareg den 2 veri alınıyor.
        i= i + 1
      Wend
    EndIf
  Else
    RC522_Status=RC522_MI_ERR
  EndIf
Return

' Must have RC522_RequestMode set
RC522_Request:
 lcdout $fe,1,"bolum 1 rq gir"
 pause 500
  RC522_Status=0
  RC522_Address=RC522_Reg_BitFramingReg
  RC522_Value=$07
  GoSub RC522_Write
  RC522_Command=RC522_PCD_TRANSCEIVE
  RC522_sendData[0]=RC522_RequestMode
  RC522_sendLen=1
  GoSub RC522_ToCard
  If RC522_bitLen<>$10 Then RC522_Status=RC522_MI_ERR
  If RC522_Status<>RC522_MI_OK Then RC522_Status=RC522_MI_ERR
   lcdout $fe,1,"bolum 1 rq cik"
   pause 500
Return

' Must have RC522_AnticollLevel set
RC522_Anticoll:
  RC522_backLen =0
  serNumCheck=0
  RC522_Address=RC522_Reg_BitFramingReg
  RC522_Value=0
  GoSub RC522_Write
  RC522_sendData[0]=RC522_Level
  RC522_sendData[1]=$20
  RC522_sendLen=2
  RC522_Command=RC522_PCD_TRANSCEIVE
  GoSub RC522_ToCard
  If RC522_Status=RC522_MI_OK Then
    i =0 
        'RsOut "backlen: ", Hex RC522_backLen, 13,10
    If RC522_backLen=5 Then  'kart seri numara kontrolü
      While i<4
         serNumCheck=serNumCheck ^ RC522_backData[i]
         i= i+1
      Wend
      If serNumCheck<>RC522_backData[i] Then RC522_Status=RC522_MI_ERR
    Else
      RC522_Status=RC522_MI_ERR
    EndIf
  EndIf
  lcdout $fe,1,"bolum 2 anticoll"
  pause 520
Return

' Must have the RC522_sendData and RC522_sendLen variables populated.  CRC saved at end of send buffer.
RC522_CalculateCRC:
  RC522_Address=RC522_Reg_DivIrqReg
  RC522_BitMask=$04
  GoSub RC522_ClearBitMask
  RC522_Address=RC522_Reg_FIFOLevelReg
  RC522_BitMask=$80
  GoSub RC522_SetBitMask
  i=0
  While i<RC522_sendLen
    RC522_Address=RC522_Reg_FIFODataReg
    RC522_Value=RC522_sendData[i]
    GoSub RC522_Write
    i= i+1
  Wend
  RC522_Address=RC522_Reg_CommandReg
  RC522_Value=RC522_PCD_CALCCRC
  GoSub RC522_Write
  i=$FF
  CRCWait:
    RC522_Address=RC522_Reg_DivIrqReg
    GoSub RC522_Read
    i= i -1
    If RC522_Value.2=1 Then GoTo CRCFound
  If i>0 Then GoTo CRCWait  
  CRCFound:
  RC522_Address=RC522_Reg_CRCResultRegL
  GoSub RC522_Read
  RC522_sendData[RC522_sendLen]=RC522_Value
  rc522_sendlen= RC522_sendLen+1
  RC522_Address=RC522_Reg_CRCResultRegM
  GoSub RC522_Read
  RC522_sendData[RC522_sendLen]=RC522_Value
  RC522_sendLen = RC522_sendLen +1
  lcdout $fe,1,"sd slen"
  pause 500
Return

' RC522_backData must contain the 4 byte UID
RC522_SelectTag:
  RC522_sendData[0]=RC522_Level
  RC522_sendData[1]=$70
  i=0
  n=2
  While i<5
    RC522_Temp=RC522_backData[i]
    RC522_sendData[n]=RC522_Temp
    i= i+1
    n= n+1
  Wend
  RC522_sendLen=7
  GoSub RC522_CalculateCRC
  RC522_Command=RC522_PCD_TRANSCEIVE
  GoSub RC522_ToCard
Return

' Must set RC522_BlockAddress before calling
RC522_ReadSector:
  RC522_sendData[0]=RC522_PICC_READ
  RC522_sendData[1]=RC522_BlockAddress
  RC522_sendLen=2
  GoSub RC522_CalculateCRC
  RC522_Command=RC522_PCD_TRANSCEIVE
  GoSub RC522_ToCard
Return

RC522_Init:
  GoSub RC522_Reset
  RC522_Address=RC522_Reg_TModeReg 
  RC522_Value=$8D
  GoSub RC522_Write
  RC522_Address=RC522_Reg_TPrescalerReg
  RC522_Value=$3E
  GoSub RC522_Write
  RC522_Address=RC522_Reg_TReloadRegL
  RC522_Value=30
  GoSub RC522_Write
  RC522_Address=RC522_Reg_TReloadRegH
  RC522_Value=0
  GoSub RC522_Write
  RC522_Address=RC522_Reg_TxAutoReg
  RC522_Value=$40
  GoSub RC522_Write
  RC522_Address=RC522_Reg_ModeReg
  RC522_Value=$3D
  GoSub RC522_Write
  RC522_Address=RC522_Reg_RFCfgReg
  RC522_Value=($07<<4)
  GoSub RC522_Write
  GoSub RC522_AntennaOn
Return

RC522_Reset:
  RC522_Address=RC522_Reg_CommandReg
  RC522_Value=RC522_PCD_RESETPHASE
  GoSub RC522_Write
Return

RC522_AntennaOn:
  RC522_Address=RC522_Reg_TxControlReg
  GoSub RC522_Read
  If RC522_Value.0=0 Or RC522_Value.1=0 Then
      RC522_BitMask=3
      GoSub RC522_SetBitMask
  EndIf
Return

RC522_AntennaOff: 
  RC522_Address=RC522_Reg_TxControlReg
  RC522_BitMask=3
  GoSub RC522_ClearBitMask
Return

RC522_SetBitMask:
  RC522_Value=0
  GoSub RC522_Read
  RC522_Value=RC522_Value | RC522_BitMask
  GoSub RC522_Write
  Return

RC522_ClearBitMask:
  RC522_Value=0
  GoSub RC522_Read
  RC522_Value=RC522_Value & (~RC522_BitMask)
  GoSub RC522_Write
Return

RC522_Write:
  RC522_Temp=RC522_Address << 1
 ' RC522_Temp=RC522_Temp & $7E
shiftout mosi,sck,1,[rc522_temp]
pause 1
shiftin miso,sck,0,[rc522_value]
pause 1
Return

RC522_Read:

  RC522_Temp=RC522_Address << 1
 ' RC522_Temp=RC522_Temp & $7E
  RC522_Temp=RC522_Temp | $80
shiftout mosi,sck,1,[rc522_temp]
pause 1
shiftin miso,sck,0,[rc522_value]
pause 1
Return
Hocam denediğim kodlar bunlar. Kart okuma yapmadı. Pbp'de yazdım. İncelemeniz mümkün mü?
Sizde daha sade bir anlatımı olan kodunuz varsa beklerim. Şimdiden teşekkür ederim.
cyber_cemati@yahoo.com

MrDarK

Selamlar,

Pbp dilini bilmiyorum. Mevcuttaki library kodlardan pbp'a transfer edebilirsiniz. NFC ve Mifare standartlarından eksik birşey yapamazsınız çünkü okumak istediğiniz kart mifare protokolüne sabitlenmiş. Yani alıcı ve vericiyi siz tasarlamıyorsunuz. Önceki mesajlarımda söylediğim gibi herhangi bir işlemi atlayarak çalışmasını bekleyemezsiniz.
Picproje Eğitim Gönüllüleri ~ MrDarK

cyber_cemati

Hocam bir de ilk baştaki gönderinizde detaylı anlatımın olduğunu söylediğiniz, linkini verdiğiniz library vardı. O linkte sorun var sanırım. Yenilemeniz mümkün mü? İnşaAllah başarabilirim.

ahuramazda

Alıntı yapılan: Mucit23 - 15 Mart 2019, 12:01:38Birşey sormak istiyorum. MFRC522_Halt() fonksiyonu ile kart ile haberleşmemizin bittiğini söylüyoruz. Bu durumda yeni haberleşme için modül'ün kartın ayrılmasını beklemesi gerekmiyormu? Şuanki durumda kart modül üzerinde olduğu sürece sürekli okuma veya yazma yapılıyor. Bunu manuel kendim çözebilirim ama sanki Modülde öyle bir özellik vardı.

merhaba,
modülle çalışmaya yeni başladım, elimdeki kartların UID'sini okuyorum şimdilik. sizin de yukarıda belirtmiş olduğunuz durumla karşı karşıyayım. kartı okuyucudan ayırmadığımda sürekli okuma yapıyor. sürekli değil de 1 defa okuma yapabilmesi için nasıl bir yöntem izlediniz?