PDA

View Full Version : How to read write EEPROM on 12C671?



financecatalyst
- 27th February 2010, 12:04
Hello, I am having errors while compiling my code for reading and writing on EEPROM with my 12C671.
I tried using read, write, I2CREAD etc but there are errors always.
Can someone please guide me as to what I could do?
Thanks

Acetronics2
- 27th February 2010, 12:39
Hi,

You can find on firsts pages of the manual, $ MCU Specific issues : " ... those chips have I2C interfaced EEPROMS so, you have to use I2CRead and I2CWrite ... "

you'll find further infos either in the Pic Datasheet and in respective commands pages of PBP Manual.

Alain

PS: Will you show some code ???

financecatalyst
- 27th February 2010, 13:09
I did tried to do as per the manual, but seems to be missing something:
This is what I did:


DEFINE I2C_INTERNAL 1
EEPROM 0,[0,0,0,0]
read 0,gpio.0
read 1,gpio.1
read 2,gpio.4
read 4,gpio.5

Also tried the above 4 statements using 12CREAD but :(

Can you please add one example to read and one to write?
I went through the manual but it does not have an example on how to write statements for INTERNAL EEPROM.

Acetronics2
- 27th February 2010, 13:33
Can you please add one example to read and one to write?
I went through the manual but it does not have an example on how to write statements for INTERNAL EEPROM.

Straight from the SAMPLES folder of your compiler ...



' I2CREAD and I2WRITE Commands
'
' Write to the first 16 locations of internal I2C EEPROM
' Read first 16 locations back and send to serial out repeatedly
' Note: for PIC12CE67x MCU's

Include "modedefs.bas" ' Include serial modes

Define I2C_INTERNAL 1

ADCON1 = 7 ' Set ADC pins to digital operation

SO con 1 ' Define serial output pin
DPIN var GPIO.6 ' Data line to internal EEPROM
CPIN var GPIO.7 ' Clock line to internal EEPROM
B0 var byte
B1 var byte
B2 var byte

For B0 = 0 To 15 ' Loop 16 times
I2CWRITE DPIN,CPIN,$A0,B0,[B0] ' Write each location's address to itself
Pause 10 ' Delay 10ms after each write
Next B0

mainloop: For B0 = 0 To 15 step 2 ' Loop 8 times
I2CREAD DPIN,CPIN,$A0,B0,[B1,B2] ' Read 2 locations in a row
Serout SO,N2400,[#B1," ",#B2," "] ' Print 2 locations
Next B0

Serout SO,N2400,[10] ' Print linefeed

Goto mainloop


also available @ Melabs site in the support section ...

Alain

financecatalyst
- 27th February 2010, 13:39
Perfect, thank you so much. Hopefully it should solve my problem.

Will this read write operation be affected by DT-Interrupts in any way as they are also running in my code?

Thanks again

Acetronics2
- 27th February 2010, 13:48
my point of view is to disable interrupts before writing to EEPROM and re-enable after.

For DT Ints ... I do not remember exactly if there's a trick to do that automatically ... I think yes ( something like "DEFINE EEPROM_USED 1" ... may be ), but you'd much better verify on the relevant thread.

Alain

Charles Linquis
- 27th February 2010, 22:48
From the PBP 2.60 manual:



DEFINE WRITE_INT 1 ‘Disable/Enable INTs in WRITE



If you put this in your DEFINE block, it will turn off your INTs before the WRITE and enable them after the WRITE.

Note that if you include this DEFINE, it will always ENABLE ints when the write is finished, whether or not they were enabled when the WRITE was invoked.