Just finished assembling a small code and still cannot work with the eeprom
this is the code i used :
Code:
'****************************************************************
'****************************************************************
SSPCON.5 = 0 ; Disable SSP Module
TXSTA.5 = 0 ; Disable AUSART Tx
RCSTA.7 = 0 ; Disable Serial Port
OSCCON = %01111110 'Internal RC w/ I/Os
INTCON=0
PIE1 = 0
'PIE2 = 0
PIR1 = 0 'off
CMCON= 7 'COMPARATOR OFF
CVRCON= 0 'Vref Off
CCP1CON= 0
T1CON= 0
'T2CON = %00000100
osctune=0
'*****************************************************************************
'DEFINEs
'*****************************************************************************
@ DEVICE INTRC_OSC
@ DEVICE MCLR_OFF
@ DEVICE PROTECT_OFF
DEFINE osc 8
@ DEVICE CPD_OFF
@ DEVICE LVP_OFF
@ DEVICE BOD_OFF
@ DEVICE PWRT_OFF
@ DEVICE WDT_OFF
'*****************************************************************************
'*****************************************************************************
'ADC parameters
ADCON1 =%10000000 'right justify
ANSEL =%00000001 'PORTA.0 ANALOG
ADCON0 =%11000001
'*****************************************************************************
INCLUDE "modedefs.bas"
'settings for serial comm
DEFINE debug_reg PORTB
DEFINE debug_bit 7
DEFINE debug_baud 9600
DEFINE debug_mode 1
'*****************************************************************************
'I/O's
PORTA=0
PORTB=0
TRISA=%00000001 'PORTA.0 AS INPUT
TRISB=%00000111 'SDA,SCL AND BUT1 AS INPUTS
'*****************************************************************************
'PINS
A0 var PORTA.0
a1 var PORTA.1
A2 var PORTA.2
A3 var PORTA.3
A4 var PORTA.4
MCLR var PORTA.5
a6 var PORTA.6
a7 var PORTA.7
SDA var PORTB.0 'I2C DATA PIN
SCL var PORTB.1 'I2C CLOCK PIN
but1 var PORTB.2 'BUTTON FOR LOOP
b3 var PORTB.3
B4 var PORTB.4
B5 var PORTB.5
B6 var PORTB.6
out var PORTB.7
'*****************************************************************************
' variables
mem var byte
ADDR var word
m1 var word
m2 var word
CTW VAR WORD
'*****************************************************************************
CTW=$A0
m1=0
m2=0
'*****************************************************************************
start:
I2CREAD SDA,SCL,CTW,$1,[m1]
pause 10
debug " value IN EEPROM address 1 = ",dec m1,13,10
I2CREAD SDA,SCL,CTW,$10,[m2]
pause 10
debug " value IN EEPROM address 10 = ",dec m2,13,10
I2CWRITE SDA,SCL,CTW,$1,[5]
PAUSE 10
debug " WROTE 5 at address 1 = ",13,10
I2CWRITE SDA,SCL,CTW,$10,[6]
PAUSE 10
debug " WROTE 6 at address 10 = ",13,10
loop:
if but1=1 then
goto start
else
goto loop
endif
end
The value returned for both addresses is 257
Just as a note, with the first code ( showned in post #4 ) the returned value was always 8 ( for any address ) and 0 when removing the pullups.
EDIT:
Changed the lines:
I2CWRITE SDA,SCL,CTW,$1,[5]
to
ADDR=$1
I2CWRITE SDA,SCL,CTW,ADDR,[5]
( as seen in Melanie's post about I2C )
http://www.picbasic.co.uk/forum/showthread.php?t=587
but the return value is the same
Bookmarks