Donanımsal olarak eeproma nasıl yazarız?

Başlatan yuppi, 02 Nisan 2008, 16:24:34

yuppi

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

pcb

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

yuppi

Yani hardware i2c kullanırkende tanımlama yapmak gerekiyortmu.Tanımlama yapmadanda page olarak yazıyor.

yuppi

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?

zakbay

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
Tek dostum çalışmak...

Ruzgarbey

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
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

Maxim

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 ?

zakbay

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
Tek dostum çalışmak...

Ruzgarbey

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.
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK