18f452 ile harici eeprom dan veri okuyamıyorum

Başlatan biteker, 04 Nisan 2005, 17:07:26

biteker

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

biteker

Arkadaşlar 18f452 ile eepromdan veri okuyan varmı peki aramızda?

taxxin2002

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

biteker

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


taxxin2002

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

psikokabus

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

taxxin2002

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

biteker

cevaplarınız için çok teşekkürler önerilerinizi deneyeceğim ve sonuçlarını bldireceğim

biteker

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