PİC+I2C

Başlatan dombilik, 29 Nisan 2004, 18:49:45

dombilik

Ustalarım öncelikle kolay gelsin..
PİCBASİC ile 16f84 yada f877 ile örneğin 24LC01B nasıl veri gönderip ve sonra nasıl okutabilirim..elimdeki kaynak kitaplardan pek bir şey anlayamadım.Bu konu hakkında prototip bir devre ve pic basic ile yazılmış küçücük bir yazılım dahi bana yön verebilir.yardımlarınızı bekliyor hayırlı işler diliyorum.
ALLAH NE MURADINIZ VARSA VERSİN.... ;)
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

aster

bu konuya örnek boardmaker başlığında verildi
ip ucu:bm kırraAak@

dombilik

forumda hemen hemen her yere baktım ama ipin ucunuda kaçırmış olabilirim :D
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

aster

https://www.picproje.org/index.php/topic,178&postdays=0&postorder=asc&start=135
buranın ilerisini gerisini iyice oku  :idea:
:oops:
pardon, özür o 93 serisiydi yalnış bilgi vermişim
kimse yanlişımı görmedimi ?

cozturk

Konuyla doğrudan alakası olmasa da "her imalatçının" ihtiyacı
olabilecek stand alone EEprom kopyalayıcı


ete

Arkadaşım,

Daha önce bir projem için 16F628 Kullanmış ve Harici eproma kayıt yazıp okumutum. Ben Pic Basic Pro kullanıyorum.
Komutlar şu şekilde

DPIN    VAR     PORTB.3
CPIN    VAR     PORTB.2

  okuma:
    I2CREAD DPIN,CPIN,$A0,0,[SAYI]:PAUSE 10
   Yazma:
   I2CWRITE DPIN,CPIN,$A0,0,[SAYI]:PAUSE 5:PAUSE 5
 
  Burada Eprom data bacağı PortB.3 de ve Clock bacağı ise PortB.2 de bağlı olacaktır.

Bu bacakların 4k7 direnç ile +5V a pull up yapılması gereklidir.

Bundan sonrasını çözersin umarım. Komut sonundaki pause lar kesinlikle gereklidir.

ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

byka

16f84 ve 24cxx yazma okuma asm ile





LIST P=16F84
	INCLUDE "P16F84.inc"
	TITLE " 24Cxx Programlama PIC ile"
	
		
;Sabitlerin Tanımlanması

EEPROM	EQU 1CH
ADDR		EQU 1DH
DATAI		EQU 1EH
DATAO		EQU 1FH
TXBUF		EQU 20H
RXBUF		EQU 21H
COUNT		EQU 22H
DEL		EQU 23H
SEL 		EQU 24H

DI		EQU 7 
DO		EQU 6
SDA		EQU 1
SCL		EQU 0
;PortA.0--------->Serial Clock----------24Cxx's Pin:6
;PortA.1<-------->Serial Data-----------24Cxx's Pin:5
;PortB LED Çıkışları


	__CONFIG _WDT_OFF & _XT_OSC & _CP_OFF


;====================================================
;========= Yazılımın Başlangıcı======================

	ORG 000H
	GOTO START

START
	CALL PORT_INIT
MAIN
	MOVLW 00H			;Eeprom Yazma Adresi
	MOVWF ADDR
	MOVLW 23H			;Eeprom 'a Yazılacak Veri
	MOVWF DATAO
	CALL WRITE_EEPROM
	MOVLW .100
	CALL DELAY_NMS
	MOVLW 00H			;Eeprom Okuma Adresi
	MOVWF ADDR
	CALL READ_EEPROM
	MOVF DATAI,W
	MOVWF PORTB			;Eeprom dan okunan veri portb ye atılır...
	MOVLW .100
	CALL DELAY_NMS
DONE
	GOTO DONE



;========================================================
;================= Port Init ============================

PORT_INIT
	CLRF PORTA
	CLRF PORTB
;
	BSF STATUS, RP0		;page1 select
	CLRF TRISA
	CLRF TRISB
	BCF STATUS, RP0		;page0 select
;
	CLRF PORTB
	RETURN


;=============================================================
;======== eeprom haberleşme bolumu=========================

WRITE_EEPROM
	CALL BSTART
;
	MOVLW B'10100000'
	MOVWF TXBUF
	CALL TX
;
	MOVF ADDR,W
	MOVWF TXBUF
	CALL TX
;
	MOVF DATAO,W
	MOVWF TXBUF
	CALL TX
;
	CALL BSTOP
;
	RETURN


READ_EEPROM
	CALL BSTART
;
	MOVLW B'10100000'
	MOVWF TXBUF
	CALL TX
;
	MOVF ADDR,W
	MOVWF TXBUF
	CALL TX
;
	CALL BSTART
;
	MOVLW B'10100001'
	MOVWF TXBUF
	CALL TX
;
	CALL RX
;
	CALL BSTOP
;
	RETURN

BSTART
	BSF PORTA,SDA
	BSF STATUS, RP0		
	MOVLW 00H
	MOVWF TRISA
	BCF STATUS, RP0	
;
	BCF PORTA,SCL
	NOP
	BSF PORTA,SCL
	NOP
	NOP
	NOP
	NOP
	NOP
	BCF PORTA,SDA
	NOP
	NOP
	NOP
	NOP
	NOP
	BCF PORTA,SCL
	NOP	
	NOP
	RETURN
		
BSTOP
	BSF STATUS, RP0		
	MOVLW 00H
	MOVWF TRISA
	BCF STATUS, RP0	
;
	BCF PORTA,SDA
	NOP
	NOP
	NOP
	BSF PORTA,SCL
	NOP
	NOP
	NOP
	BSF PORTA,SDA
	NOP
	NOP
	BCF PORTA,SCL
	NOP
	NOP
	NOP
	RETURN


BITOUT
	BSF STATUS, RP0		
	MOVLW 00H
	MOVWF TRISA
	BCF STATUS, RP0	
;
	BTFSS EEPROM,DO
	GOTO BITLOW
	BSF PORTA,SDA
	GOTO CLK_OUT
BITLOW
	BCF PORTA,SDA
CLK_OUT
	BSF PORTA,SCL
	NOP
	NOP
	NOP
	NOP
	BCF PORTA,SCL
	NOP
	RETURN

BITIN
	BSF EEPROM,DI
;
	BSF STATUS,RP0
	MOVLW 02H
	MOVWF TRISA
	BCF STATUS, RP0	
;
	BSF PORTA,SCL
	NOP
	NOP
	NOP
	NOP
	NOP
	BTFSS PORTA,SDA
	BCF EEPROM,DI
	BCF PORTA,SCL
	RETURN

TX
	MOVLW .8
	MOVWF COUNT
TXLP
	BCF EEPROM,DO
	BTFSC TXBUF,7
	BSF EEPROM,DO
	CALL BITOUT
	RLF TXBUF,F
	DECFSZ COUNT,F
	GOTO TXLP
	CALL BITIN
	RETURN

RX
	CLRF DATAI
	MOVLW .8
	MOVWF COUNT
	BCF STATUS,0
RXLP
	RLF DATAI,F
	CALL BITIN
	BTFSC EEPROM,DI
	BSF DATAI,0
	DECFSZ COUNT,F
	GOTO RXLP
	BSF EEPROM,DO
	CALL BITOUT
	RETURN


DELAY_NMS
	MOVWF DEL
OUTTER_MS
	MOVLW .110
	MOVWF SEL
INNER_MS
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ SEL,F
	GOTO INNER_MS
	DECFSZ DEL,F
	GOTO OUTTER_MS
	RETURN


END
DWIN LCD Satış Türkiye email:info@kamantek.com  web:http://www.kamantek.com/shop/index.php

byka

16f84 ve 24cxx picbasic pro ile




' 24Cxx Yazma Okuma
' LCD registerleri Tanımlama

        Include "MODEDEFS.BAS"  

Define  LCD_DREG        PORTB  
Define  LCD_DBIT        4
Define  LCD_RSREG       PORTB
Define  LCD_RSBIT       0
Define  LCD_EREG        PORTB
Define  LCD_EBIT        1
Define  LCD_LINES       2
Define  LCD_BITS        4

'pins
sclk        var     PORTC.0
sdat        var     PORTC.1
addr        var     byte
veri        var     byte
cont        con     %10100000



Main:
    addr=$01
    veri=$23
	I2CWRITE sdat,sclk,cont,addr,[veri] 
    veri=0
    I2CREAD sdat,sclk,cont,addr,[veri]       
    Lcdout $fe,1
    Lcdout hex2 veri
done:
@   sleep
    goto done
DWIN LCD Satış Türkiye email:info@kamantek.com  web:http://www.kamantek.com/shop/index.php

dombilik

Çok teşekkürler usta arkadaşlar...
sayenizde başardım.....
bir dahaki problemde görüşmek üzere :D
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

cozturk

Demek ki problem olmazsa uğramayacaksın ha! :lol:  :lol:  :lol:  :lol:  :lol:

ASPExpert

Bir süredir I²C Protokolünün Specification dökümanlarını okuyor ve denemelerimde "BAŞALIRI" olmaya çalışıyordum.

Sevgili byka kardeşimin basit örneği beni okadar mutlu etti ve işlerimi okadar kolaylaştırdıki. Sağolsun...

Ben bu forumu seviyorum ya..    :D
Gerçek ilerleme ilerici olmaktan degil, ilerliyor olmaktan meydana gelir... --------------------------------------- http://www.aspexpert.cjb.net http://blogs.wwwcoder.com/aspexpert

byka

bende cok seviyorum :P
DWIN LCD Satış Türkiye email:info@kamantek.com  web:http://www.kamantek.com/shop/index.php

dombilik

Arkadaşlar gerçi bu sorunu forumdaki iki arkadaşa özel olarak sordum cevap bekliyorum ama...birde buraya yazmak istedim..
Çünkü birilerinin de bu bilgiye ihtiyacı olabilir diye düşündüm..SAYGILARIMLA..

DEFINE I2C_SCLOUT 1
DEFINE I2C_SCL PORTC,3
DEFINE I2C_SDA PORTC,4
ADDR VAR BYTE
deger VAR BYTE
deger2 VAR BYTE
I2CREAD PORTC.4,PORTC.3,$a0,ADDR,[deger]
I2CWRITE PORTC.4,PORTC.3,$a0,ADDR,[deger2]
PAUSE 10

şeklindeki yazılımla tek ı2c(24lc01) ye yazıp okuyabiliyoruz fakat 24c32 kullandıgımızı farz edersek;
24lc01 lerde adres seçim bitleri yok fakat c32 de var
forum da yazılanlardan yola çıkarak yazılımdaki $a0 ın chip select çalıştıgı anlaşılıyor (1,2ve 3.bitler)
c32 de A0,A1,A2 uçlarını f877 de portc nin 5,6,7.bitlerine bagladım yukarıda ki program parçasında $a0 ın 1,2,3.bitlerini portc nin 5,6,7.bitlerine eşitleyerek mi adres seçimini yapıcaz?

eger bana 2 adet 24c32(yada 64 yada 512 ) yi f877 ile adresleyebileceğim okuyup yazabileceğim örnek bir yazılım önerirseniz memnun olurum.sanırım bu ip ucu ile 8 adete kadar ı2c bağlanabilecek...
teşekkür eder işlerinizde başarılar dilerim.
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

dombilik

İmdi aşağıdaki yazılım ile üçüne ayrı ayrı ulaştım...darısı sekizinin başına..
yinede yazılarınızı bekliyorum..hepimize kolay gelsin.



DEFINE I2C_SCLOUT 1
DEFINE I2C_SCL PORTC,3
DEFINE I2C_SDA PORTC,4
OKU VAR BYTE
YAZ VAR BYTE
ADDR VAR WORD
CHIP VAR BYTE
'***************************************************************
TRISD=%11111111
TRISE=%00000000
'***************************************************************
BASLA:
CHIP=%10100010
PORTE=%0000010'PORTE DEGERİNİ 1-2-4 YAPARAK ÜÇ ADET I2C YE OKUNUP YAZILDI
YAZ=$4'GİRİLEN DATA
ADDR=1
CALL YAZMACHIP1
CALL OKUMACHIP1
CALL LCD
END
'I2C UYGULAMASI ALTRUTİNLERİ BURADA BASLAR
'OKUMA ALTRUTİNİ
OKUMACHIP1:
I2CREAD PORTC.4,PORTC.3,CHIP,ADDR,[OKU]
RETURN
'YAZMA ALTRUTİNİ
YAZMACHIP1:
I2CWRITE PORTC.4,PORTC.3,CHIP,ADDR,[YAZ]
PAUSE 10
RETURN
LCD:
LCDOUT $FE,1,"KAYIT DEGERI=",#YAZ
LCDOUT $FE,$C0,"OKUNAN DEGER=",#OKU
LCDOUT $FE,$D4,"PORTE=",#PORTE
RETURN
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

555

Noldu hocam 8liyi yaptın mı. Bizlerden esirgemezsin herhalde :)