18F452, 40 Mhz de 24lc256 ya byte byte nasıl yazarız.İstediğim herhangi bir adrese istediğim byte nasıl yazarım.
bu şekilde olmuyor
hbstart
hbusout $A0,epromadres,[veri]
hbstop
protonda 18f452 yi donanımsal olrak ı2c haberleşmesi için ayarlamak gereklimi yoksa direk komutu girsek yeterlimi.
Birde aşşağıdaki örnekte page page yazıyor.ama tekbir adrese tek bir byte yazamıyorum.Bulduğum örnek kod
Symbol I2C_WRITE_EEPROM = %10100000 ;I2C EEPROM write command
Symbol BYTESPERPAGE = 32 ;number of bytes per page in a
Symbol TOTALPAGES = 8192 / BYTESPERPAGE ;number of pages within the EEPROM
Dim BYTECOUNT As Byte
Dim ADDRESS As Word
Dim PAGECOUNT As Word
Test:
GoSub ClearEEPROM
Stop
ClearEEPROM:
ADDRESS = $0000 ;start clearing from EEPROM addres $0000
PAGECOUNT = TOTALPAGES ;get number of pages to write into PAGECOUNT
While PAGECOUNT > 0 ;while there are pages to clear...
HBStart ;generate an I2C START condition
HBusOut I2C_WRITE_EEPROM ;we want to start an I2C WRITE operation
HBusOut ADDRESS / $100 ;load up the the high byte of the address
HBusOut ADDRESS // $100 ;followed by the low byte
BYTECOUNT = BYTESPERPAGE ;get number of bytes per page into BYTECOUNT
While BYTECOUNT > 0 ;loop on this block of bytes...
HBusOut $FF ;transfer a zero to the EEPROM
Dec BYTECOUNT
Print At 1,1,HEX4 ADDRESS," ",HEX2 BYTECOUNT," ",HEX2 PAGECOUNT ;decrement the count of bytes to clear
Wend ;...do for all bytes
HBStop ;end the write with an I2C STOP operation
ADDRESS = ADDRESS + BYTESPERPAGE ;advance the page address and then...
Dec PAGECOUNT ;decrement the count of pages to clear
DelayMS 5 ;stall while the paged write finishes up
Wend ;...do for all pages
Return
burda dediğim gibi page page yazım yapıyor.Yada benim 24lc256 ya yazabilmek için önden göndermem gereken A0 dan başka bir komut daha varmı?Hata 24lc256dan mı kaynaklanıyor.
Sonuçları Isıs de deniyorum 7.2 SP0
proton un help ine bak komutlar için komut örnekleride var, proton/samples da 5-6 tane I2C örneği var ayrıca fontları eeprom a yüklemek için proton/samples/proteus da ext_font var yine I2c örneği
SYMBOL SDA = PORTC.3
SYMBOL SCL = PORTC.4
tanımlaman yeterli
Yani hardware i2c kullanırkende tanımlama yapmak gerekiyortmu.Tanımlama yapmadanda page olarak yazıyor.
SYMBOL SDA = PORTC.3
SYMBOL SCL = PORTC.4
olmuyor.
Zaten şöyle bir durum var bu tanımlamayı yapmasamda epromun ilk 0x8 adresine yazıyor.Sonra 0x80 ne adlıyor.sonra canı isterse geri gelip yazıyor.Yukardaki örnekse page page belirtilen adrese yazıyor.protonda donanımsal ı2c tek adrese veri yazmak için kullnılamıyormu?
Konu tarihi eski ama bir sonuca bağlanmamış.
18f452 40Hz de 24lc64 ile donanımsal I2C ile haberleştirmek istiyorum 30 dakikadır arıyorum. Fakat elle tutulur bir bilgi bulamadım :( aramaya devam o zaman
18f452 için picbasic te şu tanımlamaları yapmıştım.sorunsuz çalıştı.
Define OSC 20 '20 mhz kristal kullanımı
DEFINE I2C_SLOW 1 'HARICI EEPROM TANIMLAMASI
I2C_SDA var PortC.4 'EEPROM PIN TANIMLAMASI
I2C_SCL var PortC.3
EEPROMYAZ:
i2cwrite I2C_SDA, I2C_SCL,$A0, Adres, [Veri]
pause 5
return
eeprom yazmada datashetinde belirtilen sürekadar bekleme yapılması gerekiyor.eeprom yazma hızına bağlı bir süre bu.bekleme yapılmadan bir döngü içinde veri yazılırsa sıralı adres biçiminde yazma işlemi olmuyor.umarım kodlar işinize yarar.kolay gelsin
Alıntı yapılan: Ruzgarbey - 20 Eylül 2010, 11:45:42
18f452 için picbasic te şu tanımlamaları yapmıştım.sorunsuz çalıştı.
Define OSC 20 '20 mhz kristal kullanımı
DEFINE I2C_SLOW 1 'HARICI EEPROM TANIMLAMASI
I2C_SDA var PortC.4 'EEPROM PIN TANIMLAMASI
I2C_SCL var PortC.3
EEPROMYAZ:
i2cwrite I2C_SDA, I2C_SCL,$A0, Adres, [Veri]
pause 5
return
eeprom yazmada datashetinde belirtilen sürekadar bekleme yapılması gerekiyor.eeprom yazma hızına bağlı bir süre bu.bekleme yapılmadan bir döngü içinde veri yazılırsa sıralı adres biçiminde yazma işlemi olmuyor.umarım kodlar işinize yarar.kolay gelsin
bu kod hangi eeprom için acaba ?
I2C_SDA var PortC.4 'EEPROM PIN TANIMLAMASI
I2C_SCL var PortC.3
Hocam bu şekilde tanımlarsak yazılımsal olarak I2C kullanmış oluyoruz onda sorun yok. Daha önce bir çok sefer kullandım. Fakat şimdi donanımsal olarak I2C modülünü kullanmak istiyorum.
Bunun için başlangıçta sanırım 4-5 register (msspcon vs) ayarlamam gerekiyor. Bu akşam sırf bunun için çalışacağım
Alıntı yapılan: Maxim - 20 Eylül 2010, 15:16:09
Alıntı yapılan: Ruzgarbey - 20 Eylül 2010, 11:45:42
18f452 için picbasic te şu tanımlamaları yapmıştım.sorunsuz çalıştı.
Define OSC 20 '20 mhz kristal kullanımı
DEFINE I2C_SLOW 1 'HARICI EEPROM TANIMLAMASI
I2C_SDA var PortC.4 'EEPROM PIN TANIMLAMASI
I2C_SCL var PortC.3
EEPROMYAZ:
i2cwrite I2C_SDA, I2C_SCL,$A0, Adres, [Veri]
pause 5
return
eeprom yazmada datashetinde belirtilen sürekadar bekleme yapılması gerekiyor.eeprom yazma hızına bağlı bir süre bu.bekleme yapılmadan bir döngü içinde veri yazılırsa sıralı adres biçiminde yazma işlemi olmuyor.umarım kodlar işinize yarar.kolay gelsin
bu kod hangi eeprom için acaba ?
Bu Kodu 24lc64 için yazmıştım.