Write to an external EE chip with Higher addresses and 32bit

Coding and general discussion relating to the compiler

Moderators: David Barker, Jerry Messina

Post Reply
CHRISHODDYSON
Registered User
Registered User
Posts: 9
Joined: Tue Jul 03, 2007 8:55 pm
Location: SOUTHAFRICA

Write to an external EE chip with Higher addresses and 32bit

Post by CHRISHODDYSON » Fri Aug 12, 2016 6:10 am

/* Is there something wrong with my code I am writing to chip 5 staring at address 60005 to 60008 to update a 32 bit number on a 24LC512, sometimes it works and sometimes it does not do i need longer delays between writes , i am not sure*/

Device = 18F4685
Clock = 25

Config
CP0 = ON,
CP1 = ON,
CP2 = ON,
CP3 = ON,
WDT = OFF


Include "utils.bas"
Include "I2C.bas"
Include "EEPROM.bas"




dim x as longword
dim y as longword
dim button as portb.0

Sub EEPROM_Write(Data As Byte, Memory_Address As Word)
I2C.Start // Write data to
I2C.WriteByte(EEPROM_Control) // the external EEPROM
I2C.WriteByte(Memory_Address.Byte1) //
I2C.WriteByte(Memory_Address.Byte0) //
I2C.WriteByte(Data) //
I2C.Stop //
DelayMS(30) // Small delay
End Sub // between writes
//------------------------------------------------------------------------------------
Function EEPROM_Read(Memory_Address As Word) As Byte

I2C.Start // Read data from
I2C.WriteByte(EEPROM_Control) // the external EEPROM
I2C.WriteByte(Memory_Address.Byte1) //
I2C.WriteByte(Memory_Address.Byte0) //
I2C.Restart //
I2C.WriteByte(EEPROM_Control + 1) //
Result = I2C.ReadByte(I2C_NOT_ACKNOWLEDGE) // Store the functions
I2C.Stop

DelayMS(2) // result
End Function


sub update_y()

I2C.Initialize()
I2C.Initialize(I2C_100_KHZ, I2C_SLEW_OFF)

EEPROM_Address = %101
EEPROM_Family = %1010
EEPROM_Control = (EEPROM_Family << 4) Or (EEPROM_Address << 1)
DelayMS(200)

x.byte0 = EEPROM_Read(60005)
x.byte1 = EEPROM_Read(60006)
x.byte2 = EEPROM_Read(60007)
x.byte3 = EEPROM_Read(60008)

y = x + 10


EEPROM_Write(y.byte0,60005)
EEPROM_Write(y.byte1,60006)
EEPROM_Write(y.byte2,60007)
EEPROM_Write(y.byte3,60008)


end sub

main:

if button = 0 then

update_y()

endif





goto main
CHRISO

Jerry Messina
Swordfish Developer
Posts: 1469
Joined: Fri Jan 30, 2009 6:27 pm
Location: US

Re: Write to an external EE chip with Higher addresses and 3

Post by Jerry Messina » Fri Aug 12, 2016 9:22 am

You shouldn't need longer delays than what you have there, that's for sure.

As a matter of fact, the byte/page write time for the LC512 is 5ms max, so you should be able to change the 'DelayMS(30)' call in EEPROM_Write to 'DelayMS(5)'.

EEPROM_Read shouldn't need anything but possibly the smallest of delays, say 'DelayUS(5)' just to make sure you meet the 4.7us Bus Free time.

Is the WP pin connected to GND? Bypass caps on VDD & GND? Pullups on SCL & SDA?

CHRISHODDYSON
Registered User
Registered User
Posts: 9
Joined: Tue Jul 03, 2007 8:55 pm
Location: SOUTHAFRICA

Re: Write to an external EE chip with Higher addresses and 3

Post by CHRISHODDYSON » Tue Aug 16, 2016 6:05 am

wp is floating, this would make sence
CHRISO

Post Reply