TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: radioelf en 01 de Septiembre de 2007, 11:00:08
-
Hola, estoy teniendo problemas con la escritura de una EEPROM 24LC512 si utilizo el hardware del micro, (16F876a) y la verdad es que no se la razón,
si después de escribir leo la EEPROM si que me funciona utilizando el hardware...
#use i2c(master, Fast, sda=EEPROM_SDA, scl=EEPROM_SCL) // funciona correctamente
#use i2c(master, Fast, sda=EEPROM_SDA, scl=EEPROM_SCL,force_hw) // solo escribe una sola vez
do{
arg=buffer_RX;
write_ext_eeprom (i,buffer_RX ;
// valor = read_ext_eeprom(i); si leo si que funciona utilizando "force_hw"
}while(buffer_RX[++i]!=0x00);
supongo que la librería de CCS (24512.h ) funciona utilizando el harware del mico como gestionándolo por software. Gracias
-
Solucionado, dejé de utilizar la librería de CCS (24512.h ) y basándome en información encontrada en la red realicé esta:
////////////////////////////////////////////////////////////////////////////
//// Libreria para 24LC512 serial EEPROM I2C por hardware ////
//// ////
//// ////
//// escribir_24LC512(direccion, dato); Escribimos un byte ////
//// ////
//// data_read = leer_24LC512 (direccion); Leemos un byte ////
//// ////
////////////////////////////////////////////////////////////////////////////
#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3,force_hw)
#define direccion_24LC512 0xA0 // direccion de la memoria
void escribir_24LC512(int16 memAddress, int8 data);
int8 leer_(int16 memAddress);
void escribir_24LC512(int16 memAddress, int8 data)
{
i2c_start();
i2c_write(direccion_24LC512);
i2c_write(memAddress>>8);
i2c_write(memAddress);
i2c_write(data);
i2c_stop();
delay_ms(5);
}
int8 leer_24LC512(int16 memAddress)
{
int8 data_read=0;
i2c_start();
i2c_write(direccion_24LC512);
i2c_write(memAddress>>8);
i2c_write(memAddress);
i2c_start();
i2c_write((direccion_24LC512 |1)); // realizamos OR
data_read = i2c_read(0);
i2c_stop();
return data_read;
}