CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

Problem with PIC16f877 and 24lc256

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Greg-
Guest







Problem with PIC16f877 and 24lc256
PostPosted: Wed Dec 24, 2003 6:15 pm     Reply with quote

Hi,
I have connected my pic16f877 to a 24lc256 eeprom memory chip, i have used port e 0 and 1 for the SCL and SDA lines. I have compiled and loaded the EX_EXTEE.C example from the examples directory. when i attempt to read from the eeprom chip it always returns "FF" even though the value at the address is not "FF", as i preloaded soem data onto it using my pic/eeprom programmer, does anyone have any ideas to what may be going wrong?
Also at 20mhz and 5 volts what values should i be using for the two pull up resistors, and just to check, what format should the address be entered for the EX_EXTEE.C file when it asks for the memory address to read/write from.
Thanks in advance,
Greg
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Dec 24, 2003 7:17 pm     Reply with quote

Quote:
At 20mhz and 5 volts what values should i be using for the two pull up resistors ?

This thread has a schematic which shows the resistor size
and the connections to the PIC.
http://www.ccsinfo.com/forum/viewtopic.php?t=17787
----------------------------
Quote:
What format should the address be entered for the EX_EXTEE.C file
when it asks for the memory address to read/write from ?


From looking at the file, it looks like you should do this to read a byte:
(Answers shown in bold)

Read or Write: R
Location: 0000
------------------------------
This assumes that you edited the EX_EXTEE.C file, to include the
proper driver file for the 24LC256. ie., the example file has this:
Code:
#include <2416.c>

But you should change it to this:
Code:
#include <24256.c>

---------------------------------------
And of course, if your programmer didn't really program the bytes
to some other value than 0xFF, then the EX_EXTEE.C program will
still read 0xFF. If it still doesn't work after doing all the changes
given above, then use the Write command of EX_EXTEE.C to write
a value such as 0x55 to address 0000, and then use the 'R' command
to read it back.
Mark



Joined: 07 Sep 2003
Posts: 2838
Location: Atlanta, GA

View user's profile Send private message Send e-mail

PostPosted: Wed Dec 24, 2003 7:31 pm     Reply with quote

Silly question, but did you change the following lines
Code:

#define EEPROM_SDA  PIN_B1
#define EEPROM_SCL  PIN_B0

to
Code:

#define EEPROM_SDA  PIN_E1
#define EEPROM_SCL  PIN_E0
Greg-
Guest







PostPosted: Wed Dec 24, 2003 7:52 pm     Reply with quote

Thanks for the replies!
Well yes, i changed the definitions to use E0 and E1 and also i tried the write command, and also i eddited the 2416.c file to say this:
Code:
#define EEPROM_SIZE 32768

instead of:
Code:
#define EEPROM_SIZE    2048

as i didnt seem to get the 24256.c in the driver directory. is that sufficient?
i used my programmer to read the data from the eeprom, and it shows up as having the data i have written to it previously(using the programmer), but it seems that the byte i try to write using the write command from EX_EXTEE.C doesnt seem to actually get written.
Mark



Joined: 07 Sep 2003
Posts: 2838
Location: Atlanta, GA

View user's profile Send private message Send e-mail

PostPosted: Wed Dec 24, 2003 8:08 pm     Reply with quote

Nope, the addressing is different for the 24lc256

24c16:
Code:

   i2c_write((0xa0|(byte)(address>>7))&0xfe);
   i2c_write(address);


24lc256:
Code:

   i2c_write(0xa0);
   i2c_write(address>>8);
   i2c_write(address);



Code:

void write_ext_eeprom(long address, int data)
{
  i2c_start();
  i2c_write(0xA0);
  i2c_write(address>>8);
  i2c_write(address);
  i2c_write(data);
  i2c_stop();
  i2c_start();
  // until the write is complete
  while(i2c_write(0xA0))
  {
    i2c_start();
  }
}

byte read_ext_eeprom(long address)
{
  int data;
  i2c_start();
  i2c_write(0xA0);
  i2c_write(address>>8);
  i2c_write(address);
  i2c_start();
  i2c_write(0xA1);
  data=i2c_read(0);
  i2c_stop();
  return(data);
}
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Dec 24, 2003 8:40 pm     Reply with quote

Quote:
I didn't seem to get the 24256.c in the driver directory

You should have told us that up front.

It's available here:
http://www.cc.puv.fi/~t0101190/projekti/source/original/Drivers/
Though, in the version that's posted on that page, there is one error.

It has an incorrect eeprom size:
#define EEPROM_SIZE 16384

You should change it to this:
#define EEPROM_SIZE 32768
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group