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

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

muhittin_kaplan


justice_for_all

SPI pinlerinden 3.3v mu çıkış alıyorsunuz hocam siz?
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

muhittin_kaplan

hocam kit 3.3 v. ben stm32f4discovery (stm32f407vgt6) kullanıyorum. RC522 nin beslemesini discodan alıyorum. ölçtüm 2.9v. ama spi pinlerini kontrol etmedim.

justice_for_all

internetten bakıyorum 5 volt beslenen kartlara direkt olarak bağlamışlar SPI pinlerini ama data sheet te max 3.3 v diyor .Ya ben yalnış bakıyorum yada internette yapanlar yalnış bağlıyorlar.iyice kafam karıştı
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

selcukozb

#19
Merhaba,

Ben de STM32F103 ile MFRC522 yi konuşturmak için epey uğraşıp uğraşmış, sonuda becermiştim. Ancak neler yaptığımı hatırlamam lazım. 1.5 ay geçmesine rağmen çabuk unutuluyor. Hemen önerebileceğim şey, önce MFRC nin registerlerine herhangi bir byte yazıp geri okuyup karşılaştırmak olacak. Bu şekilde öncelikle SPI haberleşmenin gerçekleşip gerçekleşmediği, herhangi bir HW sorunu olup olmadığını anlayabilirsiniz. Ben bir osiloskop ile sinyalleri gözleyerek sorunu çözebilmiştim. Ama çözdüğüm esas sorun ne idi hatırlamam lazım. Hatırlayınca onu da yazarım. Şimdi hatırladığım kadarı şu: SPI SPOL/SPI_CPHA ayarları ile ve MISO Pininin PullUp modunda olmasına dikkat etmek gerekiyor. Ayrıca Read komutu gönderildikten sonra NSS telinde kesinti olmamalı, yani 16 bitlik ya da 32 bitlik paketler ile çalışılması gerekiyordu. Her byte dan sonra NSS on/off olursa sorun çıkıyor. Kritik birkaç kodu aşağıda veriyorum.

   /* Configure SPI1 pins: NSS, SCK, MISO and MOSI */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
   GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_IPU;   //  MISO Pini Input Pull Up modunda
   GPIO_Init(GPIOA, &GPIO_InitStructure);


    /*   SD_CS -> PC5   */      
   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

   /* SPI1 configuration */
   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
   SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
   SPI_InitStructure.SPI_CRCPolynomial = 7;
   SPI_Init(SPI1, &SPI_InitStructure);

/****************************************************************************************
* Function Name:Read_MFRC522
* Description: Read a byte from MFRC522 data register
* Input Parameters: addr - register address
* Returns: a byte of data read from MFRC522
****************************************************************************************/
unsigned char Read_MFRC522( unsigned char addr)
{  unsigned char readByte;
   unsigned int dat = 0;

   MFRC522_CSL();          // NSS (PC5) set to low to select chip

  dat=((((addr << 1) & 0x7E) | 0x80) << 8 ) | 0x00;
   // issue read command for 8 bit data to be read
   readByte=SPI_MFRC522_ReadWrite(dat);  // SPI1 e "addr" ile gelen adresi A1..6 da gönderiyoruz MSB=1 (read, 8 bit de 0, SPI_MFRC522_ReadWrite --> SPI1_ReadWrite)
  MFRC522_CSH();          //NSS (PC5) set to high to unselect chip

   return readByte;
}

Selçuk

mustafa_cmbz

#20


Şayet bu modülden kullanılıyorsanız bu kart benim anladığım sadece spı ile çalışıyor.

Neden diyecek olursanız datasheetinde:



yukarıdaki resimdeki gibi haberleşme protokolünün  seçiminin nasıl yapılacağından bahsediyor.

fakat modül üzerinde 1 ve 32 uçları yanı I2c ve AEA uçlarını ölçtüğümde

AE = 32 = VCC
I2c= 1  = GND

Bağlı olduğu gözüküyor.

Bundan dolayı bu mavi kartı alanlar haberleşme türünü değiştiremiyor kart sadece spı olarak kullanılabiliyor.

yanlışmıyım ?


justice_for_all

aynen hocam o hazır kit sadece spi için kullanılır.Farklı bağlantı yapılacaksa pinleri değiştirmeniz gerek.neden jumper ile yapmamışlarsa çok saçma olmuş.Aslında SPI ideal olan en hızlısı olduğu için öyle yapmış olabilirler.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

x-nomek

NFC telefonla okuduğun bilgiyi bluetooth üzerinden veya internet üzerinden çalışan bir sisteme gönderirsen yapabilirsin tabi, ama bana çok da mantıklı gelmiyor neden NFC'li telefon kullanıyorsun. Al bir okuyucu sabit kalsın :)

direk iletişime geçemez mi ? internet ve bluetooth olmaz :D

MrDarK

Alıntı yapılan: x-nomek - 13 Ekim 2014, 13:06:01
direk iletişime geçemez mi ? internet ve bluetooth olmaz :D

Android de HID device yapmayı araştır o zaman :)
Picproje Eğitim Gönüllüleri ~ MrDarK

mustafa_cmbz

#24

modüllü mecburen SPI olarak kullanacağız.

Peki bu SPI olarak kullanırken data ve clk ucunun yanında birde enb ucu olması gerekmıyor mu ?

Peki bu enb ucu hangisi ?





datasheetinde ki MISO MOSI  uçlarının karşılığına baktığım biri giriş biri çıkış diyor fakat hangisi olacak karar bilemedim.

Birde aynı şekilde RQ diye bir ucu var..



Bu ucun ne işe yaradığına baktığımda ise :



karşılığında ise kesme isteği çıkışı vs. gibi bir manya geliyor.Donanım yapısında sadece output olduğunu görüyorum.Benim anladığım ya led gibi birşey bağlayacağız yada tam emin değilim ama modül çıkışa data okudum yada okuyamadım gibi bir onayı aktarmak için mi kullanılıyor acaba ?


Kısacası spı olarak kullanım için örnek bir şema paylaşma imkanınız varmı acaba ?



justice_for_all

#25
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

MrDarK



Hocam daha önce mutlaka spi kullanmışsınızdır. SPI'da aktif olarak 4 pin gereklidir. NSS, CLK , MOSI, MISO

Şablondaki gösterime göre ; NSS (CS'de diyebilirsin) SDA pinine denk geliyor.
CLK gösterime göre ; SCK,  D5 pinine denk geliyor.
MOSI ; D6
MISO ; D7

Bu pinler minimum haberleşme pinleri , diğer IRQ gibi pinler modülden interrupt almak için kullanılıyor.
Picproje Eğitim Gönüllüleri ~ MrDarK

mustafa_cmbz

hocam daha önce MCP3553 ve 74hc595ler ile uygulama yaptım fakat hazır örnekler üzerinden protokolleri dallandırmadan budaklandırmadan çalıştım.

Ve onlardan aklımda kalan sadece 3 pin ile haberleşme yapıldığı.

Şimdi nasıl oluyorda

SDA - CS
SCK - CLOCK

MISO
MOSI

Uçları olmak üzere toplamda 4 pin ile bu haberleşme yapılıyor?

CS - ve CLOCK ucunu biliyorum fakat bunun yanında birda data ucu olması gerekmiyor mu bunun karşısında ise modülde 2 tane uç var biri input biri output diyor.


Protonda

SHİN ve SHOUT komutlarını kullanırken

Shout DTA, CLK, MsbFirst, [verı]

olarak kullanmıyormuyuz ?

Burada kafam iyice karıştı.Pek fazla üzerinde durduğum ve kullandığım bir haberleşme değil ve belkide farklı bir türü olabilir..


Bu konuda beni aydınlatabilirmisiniz ?





justice_for_all

#28
Hocam sizin dediğiniz I2C ten data pini var hem giriş oluyor hem çıkış.SPI da ise giriş ve çıkış pinleri ayrı

MISO (master input/ Slave output)

MOSI (master output/ Slave input)    pinlerini açıklarsak   

MCU (master ) -------------- RFID (Slave)

MOSI -------------- MOSI  (master çıkışımız Slave data giriş)
MISO -------------- MISO  (master girişimiz Slave data Çıkış pinine)


NSS pini Slave seçmeye yarıyor.SPI bus ile bikaç cihaz haberleşebilir.Cihazlar karısmasın diye Her cihazı seçmek için MCU dan bir pin çıkarılır.

Bu cihazda cihazı seşmek için NSS pini normalde high seviyesinde iken Low seviyesine çekilir ve data gönderdiğiniz müddetce low seviyesinde kalır.


http://www.protonbasic.co.uk/showthread.php/52737-MCP3201-12-BIT-ADC-from-microchip?highlight=mcp3201
                                     
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

mustafa_cmbz

hocam şunu bana şematik ve görsel olarak çizerek anlatabilirmisin.Kafam karıştıkça karışıyor.

MISO ve MOSI pinleri rx tx uçları gibi düşünülmüyormu ?

şayet böyle ise programdan şöyle yapmamız gerekiyor ozm.


PİC DATA BEKLERKEN:

Shin RC522_MISO, RC522_CLK, MsbPre, [DATTA] ' Shift in msb-first, pre-clock.



PİC DATA GÖNDERİRKEN:

ShOUT RC522_MOSI, RC522_CLK, MsbPre, [DATTA] ' Shift in msb-first, pre-clock.




Böyle olacağını tahmin ediyorum.Yanlışmıyım ? Tabi bu örneklerde cs pinini katmadım.Zaten nerede nasıl kullanıldığı belli.