yourmomOS
- 10th July 2006, 02:06
Im using a 16f628 and a 24LC512 i2c eeprom. Im pretty sure I have the eeprom wired up correctly as per the datasheet. I put in some labels to jump to incase the i2cwrite or read didnt work, I never get to them so Im assuming I am writing correctly, When I read, I get weird junk. I cant figure it out, someone please look at the code below and tell me what is wrong!
'set OSC freq
Define OSC 20
' Set receive register to receiver enabled
DEFINE HSER_RCSTA 90h
' Set transmit register to transmitter enabled
DEFINE HSER_TXSTA 20h
' Set baud rate
DEFINE HSER_BAUD 9600
'clear flag automatically when serial hardware buffer overflows
DEFINE HSER_CLROERR 1
CMCON = 7 'Turn off comparator
dpin var PORTA.0 'eeprom data pin
cpin var PORTA.1 'eeprom clock pin
eaddress var word 'eeprom address
temp var byte
MAIN:
HSEROUT ["Working", 10, 13]
temp = 40
eaddress = 0
i2cwrite dpin, cpin, $A0, eaddress, [temp], DIDNTWRITE
pause 200
temp = 41
eaddress = 1
i2cwrite dpin, cpin, $A0, eaddress, [temp], DIDNTWRITE
pause 200
temp = 42
eaddress = 2
i2cwrite dpin, cpin, $A0, eaddress, [temp], DIDNTWRITE
pause 200
temp = 43
eaddress = 3
i2cwrite dpin, cpin, $A0, eaddress, [temp], DIDNTWRITE
pause 200
hserout ["done writing to eeprom", 10, 13]
eaddress = 0
i2cread dpin, cpin, $A0, eaddress, [temp], DIDNTREAD
pause 200
hserout [temp]
eaddress = 1
i2cread dpin, cpin, $A0, eaddress, [temp], DIDNTREAD
pause 200
hserout [temp]
eaddress = 2
i2cread dpin, cpin, $A0, eaddress, [temp], DIDNTREAD
pause 200
hserout [temp]
eaddress = 3
i2cread dpin, cpin, $A0, eaddress, [temp], DIDNTREAD
pause 200
hserout [temp]
hserout ["done reading", 10, 13]
pause 2000
goto main
DIDNTWRITE:
HSEROUT ["WRITE DIDNT HAPPEN"]
PAUSE 1000
GOTO MAIN
DIDNTREAD:
HSEROUT ["DIDNT READ"]
PAUSE 1000
GOTO MAIN
'set OSC freq
Define OSC 20
' Set receive register to receiver enabled
DEFINE HSER_RCSTA 90h
' Set transmit register to transmitter enabled
DEFINE HSER_TXSTA 20h
' Set baud rate
DEFINE HSER_BAUD 9600
'clear flag automatically when serial hardware buffer overflows
DEFINE HSER_CLROERR 1
CMCON = 7 'Turn off comparator
dpin var PORTA.0 'eeprom data pin
cpin var PORTA.1 'eeprom clock pin
eaddress var word 'eeprom address
temp var byte
MAIN:
HSEROUT ["Working", 10, 13]
temp = 40
eaddress = 0
i2cwrite dpin, cpin, $A0, eaddress, [temp], DIDNTWRITE
pause 200
temp = 41
eaddress = 1
i2cwrite dpin, cpin, $A0, eaddress, [temp], DIDNTWRITE
pause 200
temp = 42
eaddress = 2
i2cwrite dpin, cpin, $A0, eaddress, [temp], DIDNTWRITE
pause 200
temp = 43
eaddress = 3
i2cwrite dpin, cpin, $A0, eaddress, [temp], DIDNTWRITE
pause 200
hserout ["done writing to eeprom", 10, 13]
eaddress = 0
i2cread dpin, cpin, $A0, eaddress, [temp], DIDNTREAD
pause 200
hserout [temp]
eaddress = 1
i2cread dpin, cpin, $A0, eaddress, [temp], DIDNTREAD
pause 200
hserout [temp]
eaddress = 2
i2cread dpin, cpin, $A0, eaddress, [temp], DIDNTREAD
pause 200
hserout [temp]
eaddress = 3
i2cread dpin, cpin, $A0, eaddress, [temp], DIDNTREAD
pause 200
hserout [temp]
hserout ["done reading", 10, 13]
pause 2000
goto main
DIDNTWRITE:
HSEROUT ["WRITE DIDNT HAPPEN"]
PAUSE 1000
GOTO MAIN
DIDNTREAD:
HSEROUT ["DIDNT READ"]
PAUSE 1000
GOTO MAIN