Estimados, he vuelto vuelto al ruedo con esto de los pics, estoy avanzando de a poco con el tema del lenguaje C.
He estado utilizando la libreria 2464.c (memoria i2c) que viene en el PICC. Compile simule y funciono... pero tengo dudas con el ACK,
......
void write_ext_eeprom(long int address, BYTE data)
{
short int status;
i2c_start(); //Inicializa la transmisión
i2c_write(0xa0); //Escribe la palabra de control (dirección 0h + 0 para escritura)
i2c_write((address>>8)&0x1f);//Parte alta de la dirección a escribir en la eeprom. 0001 1111
i2c_write(address); //Parte baja de la dirección a escribir en la eeprom.
i2c_write(data); //Dato a escribir aca empiezan las dudas

-----------------------------------------------
i2c_stop(); //Finalización de la transmisión.
i2c_start(); //Reinicio
para que es necesario un stop y nuevamente un start? como hago para leer el bit ACK con la funcion de escritura?
status=i2c_write(0xa0); //Lectura del bit ACK, para evitar escrituras incorrectas
while(status==1) //Si es 1 esperar a que responda el esclavo
{
i2c_start();
status=i2c_write(0xa0);
}
i2c_stop();
}
-------------------------------------------------------------------------
BYTE read_ext_eeprom(long int address) {
BYTE data;
i2c_start(); //Inicializa la transmisión
i2c_write(0xa0); //Escribe la palabra de control (dirección 0h + 0 para escritura)
i2c_write((address>>8)&0x1f);//Parte alta de la dirección a escribir en la eeprom.
i2c_write(address); //Parte baja de la dirección a escribir en la eeprom.
i2c_start(); //Reinicio
i2c_write(0xa1); //Escribe la palabra de control (dirección 0h + 1 para lectura)
data=i2c_read(0); //lectura del dato
i2c_stop(); //Finalización de la transmisión.
return(data);
}
.........
disculpen las molestias y desde ya muchas gracias!