Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

I2CREAD sorunu

Başlatan crypto, 18 Mayıs 2004, 23:53:09

crypto

Selam arkadaşlar.

Ben 877+24c64 piccart a picbasic te program yüklüyorum. Pic programıyla eeproma yazma işinde sorun yok, fakat okutma yaparken (eeprom un SDA ve SCL uçları açık kollektor bağlı) veriler hatalı alınıyor. SCL ucunu hallettim fakat okuma yaptırırken eeprom un SDA ucundan birtürlü  1 (+5 V) bilgisi alamıyorum. Pic kartlar için yapılmış loaderler var. Onların asm lerini de inceledim fakat bir çıkar yol bulamadım. Bu işi picbasic te nasıl yapabileceğim hakkında yardımlarınızı bekliyorum.

DEFINE I2C_SCLOUT 1  ' SCL nin açık kollektor sorunu bununla halloluyor
                                  'Fakat SDA için bişey bulamadım :(

I2CWRITE SDA,SCL,$A0,ADDR,[var]
I2CREAD SDA,SCL,$A0,ADDR,[var]

Komutları bu şekilde yapıyorum.

Veli B.

Open kollektör için SDA VE SCL  yi 4.7 k gibi bir dirençle pull-up yapmayı denedin mi?

crypto

piccard kullandığım için öyle bir şansım yok :(

Logan

Aynı olay benimde başıma gelmişti.Fakat ben 24LC256 kullanıyordum ve hemen hemen 20000'den fazla register kullanmıştım.Sorun çıkaran registerlerin tipini tanıtırken yanlarına hangi adrese atanmaları gerektiğini yazdım ve sorun çözüldü. :)
İmza.

crypto

@Logan

Tam olarak ne demek istediğini anlayamadım.
Değişken tiplerinden sözediyorsan, ben veriyi BYTE, adresi de WORD olarak tanımladım. Yazmada bir sorun yaşamıyorum. Sadece okumada SDA dan 1 (+5 V) seviyesi alamıyorum. Öyle olunca da veri hep -00- okunuyor.

Eeprom açık kollektör olduğu için + seviye çıkışı vermiyor. Kullandığım smartcard (piccard) olmayıpta kendi yaptığım olsa, SDA ve SCL ye 4K7 direnç üzerinden + seviyeyi taşıyabilirim. Fakat dediğim gibi, hazır piccard kullanıyorum ve bunu yapma şansım yok.

Bazı pic ten eeproma loaderler var. Acaba onlar nasıl çalışıyor?

Bir bileni bekleyeceğiz mecburen :(

ete

Şayet eeprom B portuna bağlı ise dahili pull up ları açarsın olur biter. Değilse başka yolu yok.

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

crypto

@ete
SDA=RB4
SCL=RB5

Dahili pull-up tan kastın nedir, biraz açıklar mısın?

Nasıl yapacağım dediğini?

ete

Pull up dirençlerini enable yapmak için Option_Registerinin 7. bitini 0 (sıfır) yapacaksın.
Basic Kullanıyor ise programın başına;
OPTION_REG.7=0 yazarsan yeterli olur.

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

axanc

selam...

aynı entegreden bugün ben de aldım, ama bu mesajları daha bugün gördüm... senin kullanmış olduğun kodlar bunlar :

I2CWRITE SDA,SCL,$A0,ADDR,[var]
I2CREAD SDA,SCL,$A0,ADDR,[var]

yalnız bu kodlarda bulunan $A0 yanlış, bugün lab'da denedim o değerin $A2 olması gerekiyor... ayrıca ADDR değişkeninin WORD tipinde olması gerekiyor... entegre 16 bitlik adresleme kullanıyor.. başka bi ayar yapmaya gerek yok... 2^16=65536 yapıyor... yani 64kb'lık bir hafizaya sahip güzel br entegre.. :) ...

entegrenin bütün belleğine rastgele sayılar yazdırmak..
    addr var word
     temp var byte
for addr = $ffff to $0000 step -1
     random temp
     i2cwrite sda, scl, $a2, addr, temp
next addr
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

crypto

@ete
Teşekkür ederim. Dediğin gibi yaptım ve sorun kalmadı. :D

@axanc
Senin dediğin $A0 eeprom un control byte ı. O değer eeprom un E0,E1,E2 uçlarının bağlı olduğu + veya - seviyeye göre değişir. Piccard ta bu uçlar eksiye bağlı olduğu için $A0 vermek gerekiyor.  Eğer o uçlara artı bağlı olsaydı $AE olurdu.

axanc

selam..

@crypto,
ben de mesajı yazdıktan sonra datasheet'i indirip okudum.. dediğin gibiymiş, öğrendim... sağolasın... :)
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

cozturk

Ben de yeni anladım.
:D tabii yaa aynı EEpromdan 10 tanenin clk ve datası paralel bağlı. veriler kime gidecek veya hangi ICden okunacak buradan belli oluyor. :lol: Bir tane IC varsa bunun adresinin sıfır yapılması çok doğal.

demirkan1

selam arkadaşlar,
16f628 ile 24c256 yazdırabiliyorum ancak okuyamıyorum acaba programı
hatalımı yazdım (pbp2.44 kullanıyorum) bana yardımcı olabilirmisiniz.
yazdıgım program aşagıda veriyorum
saygılar.

ADRS   VAR   WORD
DAT   VAR   BYTE
B1   VAR   BYTE
KONTROL CON   %10100000

   ADRS=0
   DAT="A"
   I2CWRITE PORTA.0, PORTA.1, KONTROL, ADRS, [DAT]   
   PAUSE   10
   
   ADRS=0
   I2CREAD   PORTA.0, PORTA.1, KONTROL, ADRS, [B1]
   
   IF B1="A" THEN CH_A
   
   HIGH PORTB.0
   END

crypto

Alıntı yapılan: "katana"Open kollektör için SDA VE SCL  yi 4.7 k gibi bir dirençle pull-up yapmayı denedin mi?

Yukarıdaki alıntıyı bir oku.

demirkan1

SDA ve SCL ayaklarında 10k direnç ile + bağlı ve yukardakileride uyguladım yinede okuyamıyorum