Haberler:

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

Ana Menü

I2C OKUMA YAZMA

Başlatan M_B, 13 Nisan 2007, 11:21:49

M_B

merhaba arkadaslar I2CWRITE ve I2CREAD komutlarıyla 24c02 eeproma bılgı yazıp okuyup lcd ekranda gostermek ıstıyorum. Programı duzenledım
sımule ettıgımde yazdıgım degerle okudugum deger farklı nedenı ne olabılır nerde yanlıslık yapmıs olabılırım. Program asagıdadır.
PORTA=0
TRISB=%00000000   'PortB.0 giriş diğerleri çıkış yapıldı.
TRISA=%00000000   'A portu tamamı çıkış yapıldı.
'-----------------------------------------------------------------
@ DEVICE pic16F628                      'işlemci 16F628                                
@ DEVICE pic16F628, WDT_on              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
'---------------------------------------------------------------------
DEFINE LCD_DREG	PORTB	    'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT		4		'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG	PORTB	'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT	1		'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_RWREG   	PORTB
DEFINE LCD_RWBIT   	2
DEFINE LCD_EREG	PORTB	    'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT		3		'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS		4		'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES	2		'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------
CMCON=7                    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
OPTION_REG.7=1             'portB deki dahili PULL-UP lar iptal edildi.
'-------------------------------------------------------------------
SYMBOL CPIN=PortA.0       ' Clock pini
SYMBOL DPIN=PortA.1       ' Data pini

ADRS      VAR  byte
DEGER VAR BYTE
KONT	Con	%10100000		' Cihaz kodu



MAIN:
        ADRS=5
        GOSUB  YAZ
        pause 10
        GOSUB OKU
    
        GOSUB GOSTER
    END
            
GOSTER:   LCDOUT $FE,1, " OKUNAN " , #DEGER
          PAUSE 100
          RETURN

YAZ: 
        I2CWRITE DPIN,CPIN,KONT,ADRS,[2]
        Pause 10                		
        Return
      
OKU: 	
        I2CREAD DPIN, CPIN, KONT, ADRS, [DEGER]
        PAUSE 10
        RETURN


Lütfen Kodlarımızı Code Tag ları içine alalım
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

M_B

Arkadaslar bu konuda bilgilerinizi tecrubelerinizi soylersenız sevınecegım.
Tesekkurler
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Lütfi AYYILDIZ

wdt yi kapatmalısın. Ayrıca kullandığın kristal 8mhz den büyük ise
DEFINE I2C_ SLOW 1   komutunuda eklemen gerekir.

aslan_korhan

KONT değerini anlayamadım. Adres ile zaten cihaz kodunu belirtmiş olmuyormusun?
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.

Lütfi AYYILDIZ

KONT yani kontrol_kodu dahili eepromlarda kullanılması gerekir. Bu kod ile eepromun eleman seçme bitleri, ilave adres bilgileri, dahili flag,okuma-yazma gibi bilgileri belirlenir

M_B

KONT değeri Epromların kontrol kodu yazılması gerekıyor
24c01 den 24c65 e kadar olan epromlar ıcın $A0 yazılır.
Epromu tanıması ıcın.

I2CWRITE DataPin,ClockPin,Control,{Address,}
[Var{,Var...}]{,Label}

Datapin= SDA
Clockpin=SCL
Control= $A0 Eprom ıcın yazılması gerekıyor.
Adres= Adres kısmı  
[ ] ici ise benim  5 Adrese koyacagım deger
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

aslan_korhan

Kesin yapmışsındır ama SDA ve SCL uçlarından +5V'ye 4K7 veya 10K pullup direnci bağlaman gerekli birde...
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.

M_B

onu da yaptım ama olmadı
10K denedim yok 4,7K denedım yok.
Su an cozumu bulamadım.
Nerde yanlıs yaptım bılmıyorum.
Insallah kısa zaman da cozecem.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

mesmert

Basic bilmiyorum ama C göre yorum yapıyorum programında Osc frenkas değeri belirtilmemiş  bekleme zamanları ile ilgili sorun olabilir.

M_B

Herkese merhaba Arkadaslar
henuz sorunumu cozemedım.
Proteus dosya  Picbasıc dosyası hepsı ekte
ben sımule ederken hep yanlıs deger okuyor.
Bu konuda goruslernızı beklıyorum.
Tesekkurler

http://rapidshare.com/files/220472293/I2C.rar
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Gerok

@M_B  verdiğin dosyada hiç bir sorun yok denedim hatasız çalışiyor.
          kaydedilen değeri değiştirip tekrar denedim sorun yok.
Mum başka bir mumu yakmakla ışığından birşey kaybetmez...

M_B

Tesekkurler Gerok arkadasım
ama bende malesef farklı cıkıyor. yazdıgım degerle
proteusu bır kontrol edeyım o zaman.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

M_B

Arkadaslar Ete hocadan aldıgım yardım sayesınde ısım cozuldu.

yaptıgım ıslem ıse:
Define I2C_SCLOUT 1

SCL ucuna baglı olan dırencı sokunce calısıyor
sokmeyınce malesef calısmıyor.
Bilgilerinize
Saygılar
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet