Hola compañeros, llevo mucho tiempo registrado y leyendo el foro pero nunca he podido aportar nada.
Desde hace unos meses hacia hoy vengo estudiando por cuenta propia la programacion de micros para aplicaciones industriales (baja-media frecuencia).
El caso es que uno de los ejemplos que queria estudiar era el manejo de una EEPROM Externa, pero no consigo nada.
He revisado algunos programas escritos por internet, he visitado muchiiisimas paginas en busca de errores que tengan otros usuarios y no hay manera...
Mi programacion es muy sencilla, esta hecha con mikroC, y ademas casi identica a la que trae escrita el programa CCS. Una vez compilado lo simulo con ISIS Proteus.
OS copio la programacion a continuacion:
void main()
{
TRISB = 0;
PORTB = 0;
while (1)
{
I2C1_Init(100000); // Inicializacion a 100 kHz
I2C1_Start(); // Bit de inicio de I2C
I2C1_Wr(0xA0); // Byte de Control de Escritura 1010 XXX 0
I2C1_Wr(0x01); // Direccion del Byte
I2C1_Wr(0xAA); // Dato a Escribir
I2C1_Stop(); // Bit de parada
Delay_ms(100); // Retardo de 100 ms
// Acceso Aleatorio
I2C1_Start(); // Bit de Inicio de I2C
I2C1_Wr(0xA0); // Byte de Control de Escritura 1010 XXX 0
I2C1_Wr(0x01); // Direccion del Byte
I2C1_Repeated_Start(); // Repite la Señal de Inicio de I2C
I2C1_Wr(0xA1); // Byte de Control de Lectura 1010 XXX 1
PORTB = I2C1_Rd(0); // Read the data (NO acknowledge)
I2C1_Stop();
}
}
El datasheet de la EEPROM 24C01 es el siguiente:
http://ww1.microchip.com/downloads/en/devicedoc/21711c.pdfComo microcontrolador uso el 16887.
El PROBLEMA es que nunca obtengo el resultado que escribo.
Si programo con 100kHz obtengo como resultado el Byte de Control.
Si programo con 400kHz obtengo 0xFF.
En definitiva, algo falla pero no se el que. He revisado y leido el datasheet varias veces y los datos se envian tal y como pide la EEPROM.
En fin, espero vuestra ayuda. Os adjunto fichero RAR con programacion (tiene un nombre tonto porque empezo como una simple prueba) y el fichero de ISIS.
Muchas Gracias por vuestras respuestas!
PD: como reloj del microcontrolador uso un cristal de 8MHz externo junto con 2 condensadores de 22pF