selam arkadaşlar aşağıdaki kod ile 16f877 ile 24lc16b den veri okuyabiliyorken 18f452 ile okuyamıyorum eepromun sda ve scl bacaklarını 10k lık direnç ile pull-up da yaptım. cevaplarınız için şimdiden teşekkürler
define osc 4
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 9600
DEFINE HSER_CLROERR 1
trisc=%10011000
DPIN VAR PORTc.4
CPIN var PORTc.3
B0 var BYTE
B1 var byte
For B0 = 0 To 15
I2CWRITE DPIN,CPIN,$A0,B0,[B0]
Pause 10
Next B0
loop: For B0 = 0 To 15
I2CREAD DPIN,CPIN,$A0,B0,[B1]
pause 10
hSerout ["veri : ",#B1,13,10]
Next B0
Goto loop
18f452 için sigorta ayarları
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H
__CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
__CONFIG _CONFIG4L, _LVP_OFF_4L
Arkadaşlar 18f452 ile eepromdan veri okuyan varmı peki aramızda?
programa başlamadan önce
DEFINE OSC 20 'KRISTAL FREKANSI
ADCON1=7 'ANALOG INPUT KULLANMIYORSAN
DEFINE I2C_INTERNAL 1 SERİ EEPRON SETUP
W1 VAR BYTE
W2 VAR WORD
SERI VAR PORTB.5 'SERI EEPROM HABERLEŞME UCU
CLOCK VAR PORTE.2 'SERI EEPROM SAAT SİNYALİ
W2=5000 'DİYELİM
'YAZARKEN
I2CWRITE SERI,CLOCK,$A0,2,[w2]: PAUSE 10 '24C256GİBİ SERİ BİR EEPROM KULLANIYORSAN W2 WORD OLARAK TANITILDIGI İÇİN YAZIM İŞLEMİ DE WORD OLARAK YAPILIR YANİ 65565 EKADAR W2 BYTE OLARAK TANITSAYDIN MAX 255 YAZABİLİRDİN
'okurken örnegin
I2CREAD SERI,CLOCK,$A0,1,[w1] 'OKURKENDE W1 E AKTARACAGIN DEGİŞKENİN WORD VEYA BYTE OLMASI ÇOK ÖNEMLİ
OKURKEN GEREKMİYOR AMA YAZIM İŞLEMİNDEN SONRA KESİNLİKLE 10 MİLİSANİYE BEKLEMELİSİN
sevgili taxxin2002,
hem senin verdiğin codu hemde aşağıdaki gibi düzenleyip simule ettim proteustan ama geriye hep 16 değeri dönüyor sorunu bir türlü bulamadım
Define LCD_DREG PORTD
Define LCD_DBIT 4
Define LCD_RSREG PORTE
Define LCD_RSBIT 0
Define LCD_EREG PORTE
Define LCD_EBIT 1
SCL var PORTC.3
SDA var PORTC.4
trisc=%10011000
Low PORTE.2
Pause 100
DEFINE OSC 20 'KRISTAL FREKANSI
ADCON1=7 'ANALOG INPUT KULLANMIYORSAN
DEFINE I2C_INTERNAL 1 'SERİ EEPRON SETUP
define i2c_slow 1
W1 VAR BYTE
W2 VAR byte
SERI VAR PORTc.4 'SERI EEPROM HABERLEŞME UCU
CLOCK VAR PORTc.3 'SERI EEPROM SAAT SİNYALİ
W2=5 'DİYELİM
'YAZARKEN
I2CWRITE SERI,CLOCK,$A0,2,[w2]: PAUSE 10
'okurken örnegin
I2CREAD SERI,CLOCK,$A0,2,[w1]: pause 10 'OKURKENDE W1 E AKTARACAGIN DEGİŞKENİN WORD VEYA BYTE OLMASI ÇOK ÖNEMLİ
Lcdout $fe,1,#w1
end
(http://www.tuanaweb.com/i2c.jpg)
biteker arkadaşım bu denemeyi sadece proteus ta mı yaptın yoksa pratikte uyguladın mı proteus bazen saçmalayabiliyor ben bu komutları bir pozisyon kontrol cihazının programında kullanıyorum ve problemsiz çalışıyor yanlız geçen hafta picbasici 2.45 e update ettim (18f4620 programlamak için ) epic wini de update etmek zorunda kaldım yeni versiyon epic te problem oldu 18f452 yi eski versiyon epicle programlayınca problem olmuyor yeni versiyon problemli
B0 ı sıfırdan 14 e kadar yazip denedin mi hiç niye oldugunu bilmiyorum ama art arda 15 ten fazla veri yazarsan EEprom kac veri yazdıgını gonderiyor yada yazdıgından fazla veri okumak istersen
HABERLES1:
CHRSTOP=0
SERIN PORTA.4,T9600,1500,HATA,CHAR1,CHAR2,CHAR3,CHAR4 'PROGRAM NO SU ALINIYOR
PROGNO=(1000*CHAR1)+(100*CHAR2)+(10*CHAR3)+CHAR4 'PROGRAM SIRA NO - 4 BASAMAK 4 (WORD)
'------------------------------------------------------------------------------------
SERIN PORTA.4,T9600,1500,HATA,CHAR5,CHAR6,CHAR7,CHAR8,CHAR9
UZUNLUKOTO=(10000*CHAR5)+(1000*CHAR6)+(100*CHAR7)+(10*CHAR8)+CHAR9 'UZUNLUK - 5 BASAMAK 5 (WORD)
I2CWRITE SERI,CLOCK,$A0,6000+(58*PROGNO),[UZUNLUKOTO]: PAUSE 7
'okuturkende
I2CWRITE SERI,CLOCK,$A0,6000+(58*PROGNO),[UZUNLUKOTO]
kullandıgım programdan kısa bir alıntı yaptım umarım işine yarar kullandıgım pic 18f452 osc frekansı 32mhz
cevaplarınız için çok teşekkürler önerilerinizi deneyeceğim ve sonuçlarını bldireceğim
cevap veren tüm arkadaşlara teşekkür ederek başlamak istiyorum
sorunu çözdüm arkadaşlar ilk önce 18f452 nin kararsız çalıştığını gördüm devamlı resetlenip bilgisayara anlamsız veriler gönderiyordu bunu pic in voltaj girişlerine 1uf lik kondansator takarak çözdüm daha sonra ise i2cwrite dan sonra pause 10 değil pause 40 yaptım (40mhz de çalıştığım için) ve sorun çözüldü umarım başka arkadaşların da başına bu sorun gelirse buradaki cevaplardan faydalanırlar
tekrar teşekkürler