SM125 RFID reader ile ilgilenenler

Başlatan canbulut, 03 Temmuz 2011, 14:49:26

canbulut

sa. arkadaslar
elimde sm125 rfid modülü var.uart ve ı2c ile haberleşiyor...fakat bir ilerleme kaydedemedim.bu modülü kullanmış benzerini kullanmış arkadaslar varsa bana yardımcı olabilirlermi?

salih_arel

bende de aynı sorun var bi çözüm bulabildin mi acaba?

diot


salih_arel

ya benimkinin sonmicronun sm125 adında bir modülü fakat i2c ile haberleştiremiyorum daha doğrusu bundan önce hiç i2c kullanmadım. datashhetini biraz inceledim fakat fazla bişey anladığım  söylenemez. slave adresi 0x41 olarak verilmiş fakat ben okunan kart bilgisini hangi registerdan alıcağımı bilmiyorum? bir yol gösterebilirmisiniz.

http://www.sonmicro.com/trx/downloads/125/ds_SM125_V30.pdf

diot

I2C yi boş verin sanırım üstünde seri port(uart) da var. Bunu kullanın. Daha basit kullanması. vermiş olduğunuz dökümanın 19. sayfadan itibaren seri port ile ilgili okuma yazma komutları var. Seri porttan arabirimi uydurup önce pc ye bağlayın ve hyper terminal ile okuma yazma mantığını cözmeye çalışın. sonra microcontroller ile okur yazarsınız. zaten örnekleri 22-23-24-25 sayfalarda var.

salih_arel

Biliyorum daha kolay fakat benim bitirme projemde i2c kullanmamda gerekiyor hocam bunu kesinlikle istiyor :'( bu yüzden i2c üstünde bu kadar ısrarcı davranıyorum. dökümandan okuduğum kadarıyla (sayfa 39) ilk önce 8 byte frame yollamam gerekiyor. daha sonra bana bir bilgi gelmesi gerekiyor kart okuyucudan. 3ncü  olarak dready pini logic 1 seviyesine çıkıyor bunun gözlemem gerekiyor sanırım. 4ncü olarakta 0x52 registerından bunu okumam gerekiyor anladığım kadarıyla. benim sorunum bunları kod olarak birleştiremiyorum. yani ben ilk önce

i2c_start();
         i2c_write(0x41);
         i2c_write(0x10);
         i2c_write(0x03);
         i2c_write(0x02);
         i2c_write(0x00);
         i2c_write(0x00);
         i2c_write(0x00);
         i2c_write(0x00);
         i2c_write(0x15);
         i2c_stop();

diye bir komut yollamam gerekiyor sanırım.

2nci olarak 0x6B diye bir bilgi gelmesini beklemem gerekiyor.
3ncü olarak dready pininin 1 olması gerekiyor ve daha sonra 0x52 registerından okunan bilgiyi çekmem gerek sanırım. Ama ben kartı okuyucuya yaklaştırdığımda direk olarak dready pini 1 oluyor zaten. Direk olarak

i2c_start();
i2c_read(0x52);

gibi bişey yapsam olurmu acaba??

diot

#6
tam emin değilim fakat. dready pinini bekleyeceksin dready aktif olduğunda kart yaklaştırılmış demektir.daha sonra 52 (R) komutu yollayacaksın. okuma yapacağını belirteceksin. daha sonra sana 5 bytlık kart bilgisi geri döenecek.

52 register değil CHR(0x52) decimal 82 yani R harfi. 53 yollamakla okutacam demek istiyorsun.

salih_arel

peki kart bilgisini nasıl okıyıcam.belirli bir adres belirticem mi.Yani

i2c_start();
i2c_write(0x41);
i2c_write(0x52);
i2c_start();
i2c_write(0x41);/bu adresi bir artırmam gerekiyormu?
data=i2c_read(??)//hangi adresten okuma yapıcam yada parantez içlerini boşmu bırakıcam
i2c_stop();

diot

45 ile 48 sayfalarda gerekli kodlar var. Önce burayı bir incele. önce okunacak bloğu yazman sonrada bu blogu okuman gerek.

salih_arel

peki ben bu kodlardan kendime bir kütüphane oluşturamam mı?

diot

tabi kafana nasıl yatıyorsa ona göre düzenle. Zaten ilk segmentte ilk 5 bayt kart seri nosu olarak geliyor.

salih_arel

kafama bazı şeyler oturdu fakat hala i2c ile nasıl bilgi yolluyacağımı bilmiyorum. Elinde örnek bir kod olan yokmu?

emosamca

Alıntı yapılan: salih_arel - 05 Eylül 2012, 12:48:48
peki kart bilgisini nasıl okıyıcam.belirli bir adres belirticem mi.Yani

i2c_start();
i2c_write(0x41);
i2c_write(0x52);
i2c_start();
i2c_write(0x41);/bu adresi bir artırmam gerekiyormu?
data=i2c_read(??)//hangi adresten okuma yapıcam yada parantez içlerini boşmu bırakıcam
i2c_stop();

I2C de adres olarak okuma yapacaksan adresin son biti 1, yazma yapacaksan 0 olacak. Bundan dolayı arttırmam gerekir dediğin satırı değiştirmeyceksin. i2c_write(0x41); dediğin ilk satırı 0x40 yapacaksın. Çünkü burada pic I2C cihazına şu adresi okumak istiyorum diye veri yazıyor.

salih_arel

YAlnız arka taraftaki kodları inceledim. hem okumak hemde yazmak için aynı slave adresini kullanıyor.

arm-beginner

sonmikro'nun SM125 modülünü bende almışdım. Yanlış hatırlamiyorsam 10 adet.
Şimdi kimbilir hangi çekmecenin içinde kaç mm toz üzerinde birikmişdir.

Bu modül UART üzerinden düzgün çalışıyor.
Ama i2c beni çıldırtma noktasına getirdi. Pes ettim ve kendi modülümü kendim tasarladım. Asıl fiyat olarak çok uygun; ve UART üzerinden sorunsuz çalışıyor. Ama i2c üzerinden sık sık kilitlenince, risk almak istemedim.
Sonuçda bir sorun olunca, müşteriye "ama o benim modül değilki" diyemesin.