pic basic I2C yardım

Başlatan homer380, 23 Ağustos 2012, 19:26:42

homer380

pic basic ile basınc ölcumu yapmak istiyorum bunun için de elimde HP01-JK basınc sensörü var. bu sensör I2C ile haberleşme yapıyor.

bu sekilde haberlesecem fakat I2Cwrite komutu bunun icin uygun olmuyor. owout  ile nasıl olacak ? proteus da bu sekilde uygun bir islem yapamadım. yardımlarınızı bekliyorum.

Mucit23

I2C ile haberleştiğini söylüyorsun OWout komutuyla nasıl haberleşeceksin. Birbirleriyle uzaktan yakından ilgisi yok..




homer380

okuduğum yazılardan cıkartığım sonuc.(hatalı olabilir caresizlik) neyse işin aslı ben verileri (resimdeki ) uygun bir sekilde göndermem gerekiyor. bunu nasıl yapabilirim? hangi komutla veriyi dış ordamı uygun bir sekilde aktarabilirim?


homer380

hocam picbasic büyük kısmını ETE hocanın hazırladığı derslerden öğrendim. resimdeki gibi haberleşme yapmam gerekiyor hatta picbasic bu konuda yetersiz olduğunu düşündüm pic c ye calısmaya başladım sırf bu yüzden; ama pic basic bırakamıyorum. (kolayıma geliyor.) komutları yazınca pic basicde resimdeki gibi haberleşme olmadı bu konuda sıkıntım var.

halilgalic

her derleyicinin kendine göre avantaj ve dezavantajları vardır senin yapacağın uygulamada I2C protokolü basıc de sıkıntısız çalışıyor bende pbp devam et

ete

Böyle havadan sanal ortam tartışmasını açıkçası hiç sevmiyorum.
Doğru tartışma önce şema sonra program üzerinden yapılır. Burada her ikiside yer almıyor. Üstelik sensör adı bile verilmemiş.
Şema olsa I2C hattına pullup dirençleri bağlanmışmı gorebilirdik. Ya bağlanmamış ise!
Program olsa haberlesme bacaklari uygun şekilde ayarlanmışmı, komutlar dogru kullanılmışmı, cihaz numarası doğru verilmişmi görebilirdik.
Sensor ismi verilmiş olsa inceler özel bir durum varmı anlayabilirdik.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

homer380

Ete hocam sensör adını verdiydim hp01-jk kendi datasheet pull-up direnci bağlanmıyor göstermis.
http://www.hoperf.com/upload/sensor/HP01-JK.pdf datasheet adresi.
devre seması


haberlesme icin cihaz numarası vermemisler. ama hp03-jk basınc sensöründe var. datasheet deki devrenin aynısını yaptım ama calısmadı. kendi icindeki eeprom AT24C02 EEPROM. kodları kendi bilgisayarımda olmadığım için gönderemeyecem. en kısa zaman da kodlarıda eklerim.

ete

Yazdığın kodları görmeden bir cevap yazmak istemedim ama anlaşılan cevabın gecikecek gibi gözüküyor.
Data sheet'e bakarsan (adına data sheet denilebilirse), cihaz adresi $EE olarak gözüküyor. Bu yazma adresi olup okumada adres $EF olmaktadır.
ADres değerleri word cinsinden verilmesi gerekiyor. Verilen timing diagram haberleşme ayarlaması için yeterli gözüküyor. Pratikte ne gibi sorun çıkar bilemiyorum.
Takip edilecek yol şöyle olmalı;
I2CWRITE Dta,CLK,$EE,$255,[%11110000]
pause 38
I2CWRITE Dta,CLK,$EE,$253,[%11101111]
I2CREAD DTa,CLK,$EF,0,[VeriB,VeriA]

Benzer şekilde sıcaklık okumasınıda yapabilirsin.
Ete


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

Kazım

#9
Alıntı yapılan: homer380 - 23 Ağustos 2012, 21:52:43

Ete hocam sensör adını verdiydim hp01-jk kendi datasheet pull-up direnci bağlanmıyor göstermis.


I2C haberleşme protokoulu Pull-UP direnci olmadan çalışmaz.Çünkü MCU 'lar bus hattını sadece LOW Sürebilir.Hattın Tekrar Hİgh olması için Pull-Up Direncine ihtiyaç vardır.( Drive LOW - Flow High ) .Bunu I2C mantığını anlaman için yazdım.

Gelelim kullandığın sensör şemasında  olmamasına.İç yapısı itibarı ile hattı kendisi high 'e çekiyor herhalde. Kızacaksınız belki ama Basic 'i bırak ( Basic ile Başlamış biri olarak ) Hi-tech C 'ye geç.Bu gibi protokolleri öğrenmek zorunda kalacağından Harflerle belirtilen bitleri set etmen sonra Low'a geçmesini beklemen , Start ve Stop bitlerini setlemeden önce hattın IDLE modunu geçmesini beklemen gerekir Falan .... Bunun böyle olduğunu Öğrenmen BASİC kullandığın sürece hiç mümkün olmayacak....ANCI bir dili öğrendikten sonra yapman gereken tek şey sadece Kullandığın MCU ve Peripheral Device 'nin Datasheetlerini Karışttırmaktır.------ I2CWrite komutunun nasıl kullanıldığını öğrenmek için çaba harcama.Harcasanda dediğim gibi I2C 'nin mantığını öğrenmiş olmayacaksın


Örne   |s|AAAAAAR|A|Msb|A|Lsb|A|DDDDD|NACK|P| Bunların ne olduğunu anladığını sanmıyorum

Oysa yapman gereken Mcu datasheetini açıp Önce SEN=1 yapıp bitin 0 'a sürülmesini bekle ve Buffer 'a Pheripheral aygıtın adresini  ve R/W yükle Sonra A bitinin Lowa Çekilmesini bekle diye gidiyor işte..

Anlaman gereken bu.Sonra aygıt ayırmaksızın İstedğin aygıtı al kullan

ETE Hocama da saygılarımı sunarım.Kendisin örnek projeleriyle başladım bende Üzerimde emeği büyük.Sonra Hitech C ye geçtim.

Belli bir protokolü BASİC 'le nasıl yaparım çabası yerine - İşi aslına - Mantığına Uygun yapmak daha doğru diye düşünüp bu kararı verdim.Hocamın da dediği bu konuda Timing 'ler de çok önemlidir.Master - multimaster - slave olaylarında -  basic mantığıyla işin içinden çıkmak daha karmaşık geliyor artık


homer380

gidişat o yönde sanırım pic c'ye gececem. Hi-techle hemen hemen aynı gibi geldi bana.

Kazım

#11
Alıntı yapılan: homer380 - 24 Ağustos 2012, 16:11:55
gidişat o yönde sanırım pic c'ye gececem. Hi-techle hemen hemen aynı gibi geldi bana.

Hitech - C ye .Geçiş Karmaşık geliyor başta fakat sonra işin aslında ne olduğunu gördüğün zamanda ne header 'a ne source file ne harici kaynak dosyalara ihtiyacın kalıyor.Daha önce yazdığım gibi datasheetlerle çalışacaksın.Ancak biraz İngilizce bilmen şart zaten bu konularda.bilmesende gayret et hem İngilizceni Geliştirmiş olursun.Sen bilirsin Kardeş ama aksi halde seni ileri noktalarda göremiyorum.Yanlış anlama ne olur.Yapıcı eleşitirdiğimin farkında ol.

Aslında yukarıdaki mesajda I2C protokulunu açıklarmsınız yazsa idin.Kısaca aklına oturacak kadar yazardım.Ancak Basic ile başladığın için ( Kendimden yola çıkarak ).PIC lerin REGISTER 'larıyla çalışmayı bilmediğini düşünüyorum.

ANSI C'ye Geçmen gerektiğinde diğer MCU lara geçiş dönemini çok rahatlatacak.