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.
Powered by vBulletin® Version 4.1.7 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.