Pic Basic I2C haberleşme ID okuyamama

Başlatan umberto, 25 Aralık 2012, 14:41:40

umberto

Selamlar

16f877 ile basit bir sensör ile haberleşmeye çalışıyorum. Fakat basic ile I2C protokolunu daha önce kullanmamıştım.
İlk olarak Device ID (0X0B) adresini okumaya çalışıyorum fakat bana bir bilgi gelmiyor, normalde 0xCB gelmesi lazım.

Bu aşamayı geçemediğim için sonraki adımları malesef gerçekleyemedim. sonraki aşamalarda ise

Configuration register 0x03, TCRIT (0x08, 0x09), THIGH (0X04, 0X05), TLOW(0x06, 0x07) okumam gerekiyor.

Pic Basic de I2C protokolunde , ilk olarak Device ID okumak için yapmam gereken nedir ?

Saygılarımla

ete

Benim bildiğim kadarı ile Basicde Device ID okuma protokolü yoktur. Bu işlem için kullandığınız alet her ne ise onun Data sheet'ine bakmanız gerekiyor.
Örnek vereyim. Her cihazın bir kendi ID numarası vardır. Bu numara ve adres kullanılarak ilgili bilgiye ulaşmanız gerekir.
Ancak her ne hikmetse siz zaten ID okumaya kalkıyorsunuz işin bu kısmını anlamadım doğrusu.
I2C bir standart haberleşme protokolüdür. Aynı data ve CLk hattına birden fazla alet bağlanarak onların ID numaraları üzerinden istediğinizle haberleşirsiniz. Örneğin bir epromun ID numarası $A0 olabilir, bir sıcaklık sensörünün $B7 olabilir. Bunlar aynı hatta bağlanırlar. Siz $A0 Id yi kullanıp $00 nolu adresi okuduğunuz zaman epromun ilgili adresini okumuş olursunuz. Ama $B7 yi kullanırsanız bu seferde sensörü okumuş olursunuz. Bu nedenle ID yi okumaya çalışmayın. Bence o ID yi kullanın.

Ne yazıkki kullandığınız sensörle ilgili hiç bir bilgi vermemişsiniz. Verseydiniz neyin nerede olduğuna bakabilirdim.
Toparlarsak. I2CREAD DataPin,ClockPin,Control,{Address,}[Var{,Var...}]{,Label} şeklindeki komut formatında,
Control kısmına ID numarasını koyacaksınız. Adres kısmına okumak istediğiniz adres numarasını ve değişken kısmınada okuyacağınız bilginin yerleşeceği değişken adını yazacaksınız.
I2C de Data ve Clk hatlarına pullup direnci bağlanması gerekir bunlarıda unutmayın.

Ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

umberto

#2
Selamlar

Ete Cevap için çok teşekkür ederim.

Kullanmaya çalıştığım bir sensör


Datasheetinin son sayfasında okuma protokolu bu şekilde anlatıldığı için bu yolu takip ediyordum.

ete

Data sheet'e bakınca Aletin içinde ayrıca bir ID numarası olduğunu gördüm.

$0B adresinde bulunan ID numarasını okumak için aşağıdaki komutu kullan,
I2Cread dta,clk,%10010001,$0B,[VERI]

Doğru okuma için Entegre üzerinde bulunan A0 ve A1 pinlerinide GND ye bağlaman gerekiyor.
Aslında %10010001 bilgisinde yer alan ilk bit "1" değeri R/W biti olup okumada bu bit 1 olmalıdır. Ancak basic bunu otomatik hallediyor sanırım. Ben yinede garanti olsun diye oraya 1 koydum.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com