Hola de nuevo, ahora tengo otro problema con el simulador ISIS y eeproms externos.
Estoy teniendo problemas en estas rutinas:
------------------------------------------------------------------------
int i;
for(i=0;i<60;i++)
{
write_ext_eeprom(i, byte_b);
delay_ms(10);
}
------------------------------------------------------------------------
y en otro lado:
------------------------------------------------------------------------
for(i=0;i<60;i++)
{
byte_b=read_ext_eeprom (i);
delay_ms(10);
}
------------------------------------------------------------------------
Simulo esto en proteus y el problema es que a veces escribe bien y otras veces como que lo saltea.
Por ejemplo pongo una eeprom nueva, grabo 240 bytes con 0, escribió todo bien menos 4 o 5 datos dejandome el valor 0xFF. Tambien cuando lee a veces lee un 0xFF.
Estoy trabajando con un 16f877a a 4mhz (a 10mhz me salen 600 errores en el simulador) eeprom 24c08 y 24c32 en Protus 7.8 y CCS.
El error que se repite es
[I2CMEM TIMING] Repeated start time setup violated..... min setup time is 600ns.
Esto venia en CCS
void init_ext_eeprom() {
output_float(EEPROM_SCL);
output_float(EEPROM_SDA);
}
BOOLEAN ext_eeprom_ready() {
int1 ack;
i2c_start(); // If the write command is acknowledged,
ack = i2c_write(0xa0); // then the device is ready.
i2c_stop();
return !ack;
}
void write_ext_eeprom(long int address, BYTE data) {
while(!ext_eeprom_ready());
i2c_start();
i2c_write((0xa0|(BYTE)(address>>7))&0xfe);
i2c_write(address);
i2c_write(data);
i2c_stop();
}
----------------------------------------
Puse resistencias de 4k7 y también con 10k es en data y clock, tambien con eeproms de 100khz y 400khz y de diferentes capacidad. No probé si funciona en placa todavía.
Mi pregunta es, sera problema del simulador? Porque cuando escribe y lee la eeprom externa la cpu (1 core del i5) se pone al 85%.
Gracias.