|
|
View previous topic :: View next topic |
Author |
Message |
Bieli Guest
|
16F874A and 24C64 problem with writting 1800-1FFF |
Posted: Sun Jun 15, 2003 4:46 am |
|
|
PCM 3.091
16F874 + Atmel 24C64
I can't write data between address 1800-1FFF. On lower addresses 0000-17FF it work fine but higher not. Read function work, I can read data on this area, but I can't change it. I second 24C64 chip and it has this same.
#include <16f874a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#define I2C_SDA PIN_C4
#define I2C_SCL PIN_C3
#use i2c(master,sda=I2C_SDA, scl=I2C_SCL)
#include <input.c>
void init_ext_eeprom() {
output_float(I2C_SCL);
output_float(I2C_SDA);
}
void write_ext_eeprom(long int address, byte data)
{
i2c_start();
i2c_write(0xa2);
i2c_write(address>>8);
i2c_write(address);
i2c_write(data);
i2c_stop();
delay_ms(10);
}
byte read_ext_eeprom(long int address)
{
byte data;
i2c_start();
i2c_write(0xa2);
i2c_write(address>>8);
i2c_write(address);
i2c_start();
i2c_write(0xa3);
data=i2c_read(0);
i2c_stop();
return(data);
}
main()
{byte value,cmd;
long address;
init_ext_eeprom();
while(1)
{ do
{ printf("\r\nRead or Write: ");
cmd=getc();
cmd=toupper(cmd);
putc(cmd);
} while ( (cmd!='R') && (cmd!='W') );
printf("\n\rLocation: ");
address = gethex();
address = (address<<8)+gethex();
if(cmd=='R')
printf("\r\nValue: \%X\r\n",READ_EXT_EEPROM( address ) );
if(cmd=='W')
{ printf("\r\nNew value: ");
value = gethex();
printf("\n\r");
WRITE_EXT_EEPROM( address, value );
}
}
}
Bieli
___________________________
This message was ported from CCS's old forum
Original Post ID: 144515255 |
|
|
Tomi Guest
|
Re: 16F874A and 24C64 problem with writting 1800-1FFF |
Posted: Sun Jun 15, 2003 8:55 am |
|
|
I didn't use 24C64 in the last two years but as I remember this chip has a "block write protect" feature and the default page is somewhere in the upper address space. Check the datasheet.
:=PCM 3.091
:=16F874 + Atmel 24C64
:=I can't write data between address 1800-1FFF. On lower addresses 0000-17FF it work fine but higher not. Read function work, I can read data on this area, but I can't change it. I second 24C64 chip and it has this same.
:=
:=
:=#include <16f874a.h>
:=#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
:=#use delay(clock=4000000)
:=#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
:=
:=#define I2C_SDA PIN_C4
:=#define I2C_SCL PIN_C3
:=
:=#use i2c(master,sda=I2C_SDA, scl=I2C_SCL)
:=
:=#include <input.c>
:=
:=void init_ext_eeprom() {
:= output_float(I2C_SCL);
:= output_float(I2C_SDA);
:=}
:=
:=
:=void write_ext_eeprom(long int address, byte data)
:={
:= i2c_start();
:= i2c_write(0xa2);
:= i2c_write(address>>8);
:= i2c_write(address);
:= i2c_write(data);
:= i2c_stop();
:= delay_ms(10);
:=}
:=
:=
:=byte read_ext_eeprom(long int address)
:={
:= byte data;
:= i2c_start();
:= i2c_write(0xa2);
:= i2c_write(address>>8);
:= i2c_write(address);
:= i2c_start();
:= i2c_write(0xa3);
:= data=i2c_read(0);
:= i2c_stop();
:= return(data);
:=}
:=
:=main()
:={byte value,cmd;
:=long address;
:=
:=
:= init_ext_eeprom();
:=
:=while(1)
:={ do
:= { printf("\r\nRead or Write: ");
:= cmd=getc();
:= cmd=toupper(cmd);
:= putc(cmd);
:= } while ( (cmd!='R') && (cmd!='W') );
:=
:= printf("\n\rLocation: ");
:=
:= address = gethex();
:= address = (address<<8)+gethex();
:= if(cmd=='R')
:= printf("\r\nValue: \%X\r\n",READ_EXT_EEPROM( address ) );
:=
:= if(cmd=='W')
:= { printf("\r\nNew value: ");
:= value = gethex();
:= printf("\n\r");
:= WRITE_EXT_EEPROM( address, value );
:= }
:=}
:=}
:=
:=
:=Bieli
___________________________
This message was ported from CCS's old forum
Original Post ID: 144515258 |
|
|
Felix Althaus
Joined: 09 Sep 2003 Posts: 67 Location: Winterthur, Switzerland
|
Re: 16F874A and 24C64 problem with writting 1800-1FFF |
Posted: Sun Jun 15, 2003 9:22 am |
|
|
Hello
From the datasheet:
WRITE PROTECT (WP): The write protect input, when tied to GND, allows normal write operations. When WP is tied high to VCC, all write operations to the upper quandrant (8/16K bits) of memory are inhibited. If left unconnected, WP is internally pulled down to GND.
mfg
Felix
___________________________
This message was ported from CCS's old forum
Original Post ID: 144515259 |
|
|
|
|
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
|