Autor Tema: IMPOSIBLE -> Lectura EEPROM Externa - mikroC - ISIS Proteus  (Leído 4793 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Porel

  • PIC10
  • *
  • Mensajes: 4
IMPOSIBLE -> Lectura EEPROM Externa - mikroC - ISIS Proteus
« en: 13 de Febrero de 2011, 13:47:33 »
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:

Citar
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.pdf

Como 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
« Última modificación: 13 de Febrero de 2011, 14:10:03 por Porel »

Desconectado Porel

  • PIC10
  • *
  • Mensajes: 4
Re: IMPOSIBLE -> Lectura EEPROM Externa - mikroC - ISIS Proteus
« Respuesta #1 en: 14 de Febrero de 2011, 20:42:29 »
No os olvideis de mi porfa que aun no he conseguido que ISIS funcione con ninguna de las 5000 pruebas que he hecho...

Una ayudita porfa!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: IMPOSIBLE -> Lectura EEPROM Externa - mikroC - ISIS Proteus
« Respuesta #2 en: 14 de Febrero de 2011, 23:54:04 »
No os olvideis de mi porfa que aun no he conseguido que ISIS funcione con ninguna de las 5000 pruebas que he hecho...

Una ayudita porfa!

  Como sabrás sobre las líneas SCL y SDA deben ir resistencias de pull-up. Para que Proteus simule bien debes utilizar el tipo de resistencia pullup y no otro tipo de resistencia.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Porel

  • PIC10
  • *
  • Mensajes: 4
Re: IMPOSIBLE -> Lectura EEPROM Externa - mikroC - ISIS Proteus
« Respuesta #3 en: 15 de Febrero de 2011, 15:23:25 »
  Como sabrás sobre las líneas SCL y SDA deben ir resistencias de pull-up. Para que Proteus simule bien debes utilizar el tipo de resistencia pullup y no otro tipo de resistencia.

AngelGris te estoy agradecidiiiiisimo!!!! El programa ISIS lo estoy empezando a usar porque aunque desarollo con el EasyPIC6, siempre es mas facil hacerlo con el ordenador (sobre todo cuando hay que programar 5000 veces antes de darse cuenta del fallo...).

No tenia ni idea de que las resistencias tenian que ser por obligacion PULL-UPS... ha sido cambiarlas y funcionar!!! Que decepcion de 2 dias perdidos por una cosa tan tonta.

¿Por que ISIS hace una diferenciacion tan extraña? Yo habia puesto 2 resistencias de 10k a POWER, no entiendo la diferencia...

Por cierto, abusando de tu amabilidad, ¿sabrias porque el PIC ignora el cristal externo que le puse? Es decir, en la configuracion del propio PIC le dije que trabajase a 8MHz (en la config del ISIS) y en el hex le dije que usase un cristal HS. ¿por que funciona tambien bien sin ponerle el cristal externo?

Muchisimas Gracias po tu ayuda, me has sacado de ese enfado que tenia con las EEPROM!!
Un Saludo!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: IMPOSIBLE -> Lectura EEPROM Externa - mikroC - ISIS Proteus
« Respuesta #4 en: 15 de Febrero de 2011, 15:34:48 »
  Como sabrás sobre las líneas SCL y SDA deben ir resistencias de pull-up. Para que Proteus simule bien debes utilizar el tipo de resistencia pullup y no otro tipo de resistencia.

AngelGris te estoy agradecidiiiiisimo!!!! El programa ISIS lo estoy empezando a usar porque aunque desarollo con el EasyPIC6, siempre es mas facil hacerlo con el ordenador (sobre todo cuando hay que programar 5000 veces antes de darse cuenta del fallo...).

No tenia ni idea de que las resistencias tenian que ser por obligacion PULL-UPS... ha sido cambiarlas y funcionar!!! Que decepcion de 2 dias perdidos por una cosa tan tonta.

¿Por que ISIS hace una diferenciacion tan extraña? Yo habia puesto 2 resistencias de 10k a POWER, no entiendo la diferencia...

Por cierto, abusando de tu amabilidad, ¿sabrias porque el PIC ignora el cristal externo que le puse? Es decir, en la configuracion del propio PIC le dije que trabajase a 8MHz (en la config del ISIS) y en el hex le dije que usase un cristal HS. ¿por que funciona tambien bien sin ponerle el cristal externo?

Muchisimas Gracias po tu ayuda, me has sacado de ese enfado que tenia con las EEPROM!!
Un Saludo!

  El problema de las resistencias no se si será un bug del ISIS o es a propósito para no tener que simular una parte analógica en un lugar que no lo requiere.
  Respecto del cristal sí está hecho así adrede para no tener que simular toda la etapa de la oscilación ya que consumiría muchos recursos.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Porel

  • PIC10
  • *
  • Mensajes: 4
Re: IMPOSIBLE -> Lectura EEPROM Externa - mikroC - ISIS Proteus
« Respuesta #5 en: 15 de Febrero de 2011, 17:06:25 »
  El problema de las resistencias no se si será un bug del ISIS o es a propósito para no tener que simular una parte analógica en un lugar que no lo requiere.
  Respecto del cristal sí está hecho así adrede para no tener que simular toda la etapa de la oscilación ya que consumiría muchos recursos.

Jo!! Hombre, tiene toda la logica del mundo, pero realmente para el que empieza a usar ISIS, son demasiados truquitos.

Te agradezco muchisimo tu ayuda, espero que con el tiempo sea yo quien pueda ayudar.

Muchisimas GRacias!!!

PD: ya he simulado varias eeprom en esta hora, incluso algunas un poquitin mas complicadas y todas funcionan perfectas, se acabaron mis comederos de cabeza!!


 

anything