Gracias micro_cadaver por responder,
La EEPROM que uso es la 24AA1025. Por hardware la tengo direccionada a 4 (11) y los valores que pretendo leer los he gravado previamente y son palabras de 8 bits cada uno. El programador que uso es el GTB-USB[plus] y el programo con el Compilador CCS v4.065.
En principio el código es muy sencillo. Leo bloques de 12 bytes de la EEPROM y los envio por rs-232. El led es solo indicación para saber si algo va o no.
Aquí está el código que ha quedado al final despues de múltiples pruebas.
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay(clock=48000000) //Cristal de 12 mhz
#use i2c(master, sda=PIN_B0, scl=PIN_B1)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#use fast_io(A)
#use fast_io(C)
int16 contador=0x0000;
int const address_EEPROMR=0b10100111; // Direccion I2C de EEPROM (para lectura)
int const address_EEPROMW=0b10100110; // Direccion I2C de EEPROM (para escritura)
int const ddeeeprom=32; // Delay Default EEPROM
void i2cr(int16 i2cdev); // lectura I2C
void i2cr(int16 i2cdev){
int8 r=0x00;
i2c_start();
i2c_write(address_EEPROMW);
i2c_write(i2cdev>>8) ;
i2c_write(i2cdev);
i2c_start();
i2c_write(address_EEPROMR);
for (i=0;i<12;i++)
{
r = i2c_read();
tSERVO[i]=r;
}
i2c_stop();
delay_ms(ddeeeprom);
}
int1 led=0;
void main() {
delay_ms(300);
set_tris_a(0b00000000);
set_tris_c(0b00000100);
output_a(0b00000000);
output_c(0x00);
do {
output_low(PIN_A0);
delay_ms(500);
while(!input(PIN_C2)); //Espero un pulsador para empezar
output_high(PIN_A0); //Enciendo un led para indicar que funciona
do{
delay_ms(500);
i2cr(contador); //Leo EEPROM
if (contador>1200) contador=0x0000; //Actualizo direccion de lectura
else contador=contador+12;
for(i=0;i<12;i++)
{
putc(tServo[i]); //Envio lo leido al 2º Pic
}
if(led) //Hago parpadear un led para saber que funciona
{
output_low(PIN_A0);
led=0;
}
else
{
output_high(PIN_A0);
led=1;
}
} while (TRUE);
} while (TRUE);
}
Gracias