Autor Tema: I2C SAA1064  (Leído 3995 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
I2C SAA1064
« en: 24 de Noviembre de 2003, 13:16:00 »
Llevo más de una hora intentando simular en PROTEUS un programa en C para este dispositivo I2C SAA1064 que es un controlador de displays y no hay manera.

El programa físicamente funciona, lo he comprobado.

El caso que el PROTEUS trae un ejemplo que sí funciona (compilador utilizado el de HITECH).

Cucaracha creo recordar que últimamente tocaste uno de estos. ¿Has probado alguno con PROTEUS?

Dejo el circuito y el programa C, por si alguien quiere pegarle un vistazo y averigua porqué no funciona. Estan aquí: http://miarroba.com/foros/ver.php?foroid=132139&temaid=1243885

Un saludo

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: I2C SAA1064
« Respuesta #1 en: 24 de Noviembre de 2003, 16:54:00 »
Todavía no los he usado. Estoy a la espera de el resto de componentes de una placa para montarla entera y ponerme a programarla todo de golpe. Me peleé con el reloj DS1678, que también es I2C, y una vez dominado uno el resto es más o menos igual. Por eso no le metí mano.

Tu problema (olvido) tiene fácil solución. Coloca las resistencia de pull-up en el bus I2C. Con eso funciona. Tiene que salir 0123 no?

Saludos!
Saludos desde Huelva (ESPAÑA)

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: I2C SAA1064
« Respuesta #2 en: 25 de Noviembre de 2003, 13:17:00 »
Gracias Cucaracha, solucionado.

Sabes (o alguién sabe) de donde conseguir más dispositivos I2C para PROTEUS.

Tengo: el SAA1064, el PCF8583 y el I2CSPY

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: I2C SAA1064
« Respuesta #3 en: 09 de Enero de 2004, 09:02:00 »
Una cosa de tu código puesto en el almacén para este dispositivo. Tienes seleccionado como Fast a I2C. Pues bien deberás borrar eso (o cambiarlo por low).
Si lo dejas así tendrás que respetar los tiempos.
Te lo digo porque esta mañana lo probé yo y con fast no funciona correcto.

Otra cosa... Los bits C1, osea los de blanked/not blanked para que leches sirven!!. Funciona igual pongas un 1 o un 0.
Esto que cuento montado físicamente.

En Proteus, no funciona el SAA1064 para dos 7-seg. Tiene un funcionamiento erroneo. Para 4 7-seg si. Al menos para probar..



Bueno, espero que os sirva...


Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: I2C SAA1064
« Respuesta #4 en: 09 de Enero de 2004, 10:21:00 »
Pués sí me dejé el SLOW, pero como soy como Santo Tomás: ¡si no lo veo no lo creo!, se me ha ocurrido probarlo físicamente con SLOW, con FAST y sin ninguno de los dos y en los tres casos ha funcionado bien. ¿?... a tí según comentas no.

Respecto a lo del PROTEUS también vengo de comprobar si con dos displays de 7 segmentos no funciona y sí lo hace. (versión SP5). He probado los displays que vienen 2 juntitos no por separado.

Un saludete

PD. No sé cuales son los bits C1

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: I2C SAA1064
« Respuesta #5 en: 10 de Enero de 2004, 05:40:00 »
Lo siento, quizás debí decir "Mi experiencia ha sido..." y no lo de "tienes que cambiear...". Lo siento.

Bueno, pues te cuento lo que me ha ocurrido a mí. Es cierto que a veces funcionaba en modo fast, pero al intentar hacer un test de los displays no se encendían. Por contra, cuando borré lo de fast (osea, en modo slow por defecto), si que funciona correctamente. Entre otras cosas porque los tiempos de escritura y eso siempre van a estar dentro del rango aun en el peor de los casos.
Lo del test se hace poniendo a 1 el bit C3 del byte de control (a eso me refería con C1 también). Prueba con el test en Fast.

En cuanto al proteus te explico el fallo que tiene. Más bien, lo que difiere con la realidad.
Tu has colocado uno de esos displays que traen dos y los vas multiplexando. Bien. Cuando se quiere conectar dos displays al SAA1064 va cada uno a un "puerto" (uno a P1-P8 y el otro a P9-16). Mira el montaje que viene en el data. Por lo que no hay que multiplexar ni nada de eso.
Supongo que tu en proteus tienes conectados esos dos (el módulo) a la salida de un "puerto" y entonces te funcionará, pero no como debe.
Fíjate en tu ejemplo de 4 displays. Tu pones en el código:
    i2c_start();
    i2c_write(0b01110110); // Dirección (Escritura)
    i2c_write(0b00000000); // Instrucción
    i2c_write(0b01000111); // Control
    i2c_write(disp[0]);  ESTO SERIA PARA EL DISPLAY 1
    i2c_write(disp[1]);  ESTO SERIA PARA EL 2
    i2c_write(disp[2]);  PARA EL 3
    i2c_write(disp[3]);  PARA EL 4
    i2c_stop();
Bien, pues si te fijas si haces esto físicamente te va a mostrar 0213 tal y como tú lo tienes montado. Es decir, por P1-P8 salen el display 1 y el 3 (1+3) y por P9-P16 el display 2 y el 4 (2+4).
Pues ahí es donde está el fallo. Si te fijas, lo que tu escribes para el display 2 (i2c_write(disp[1]);  ESTO SERIA PARA EL 2) lo saca por P1-P8 en lugar de por P9-P16 que es por donde debería.
Ese es el fallo.

Buenooooo, ya dejo de escribir...


Saludos y un abrazo!
Saludos desde Huelva (ESPAÑA)

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: I2C SAA1064
« Respuesta #6 en: 10 de Enero de 2004, 14:12:00 »
Creo que estas confundido. Dices que por P1-P8 salen los displays 1 y 3 y por P9-P16 los displays 2 y 4. Creo que no es así.

Me parece que es:

- Inicialmente y simultáneamente por P1-P8 sale el display 1 y por P9-P16 el display 3 (MX1=1)

- Tras un intervalo de tiempo aparece simultáneamente por P1-P8 el display 2 y por P9-P16 el display 4 (MX2=1)

En el montaje de PROTEUS que hice inicialmente se mostrarían simultáneamente los números 0 (display1) y 2 (display 3) y luego los números 1 (display 2) y 3 (display 4)

Como te comenté tanto físicamente como en PROTEUS va bien tanto con 4 displays como con 2.

Un saludo

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: I2C SAA1064
« Respuesta #7 en: 10 de Enero de 2004, 16:35:00 »
Si cierto, para cuatro displays es como dices. Pero para dos... va uno por salida, y por tanto en Proteus lo toma siempre como el modelo de 4, osea que escribe lo que corresponde para el dos lo que corresponde al tres, que en este caso no se usa. Si quieres te pongo la simulación que se ve mejor las cosas. Mejor la pongo y listo:

http://miarroba.com/foros/ver.php?foroid=256746&temaid=1324457

Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: I2C SAA1064
« Respuesta #8 en: 11 de Enero de 2004, 00:26:00 »
No puedo abrir el fichero, abandoné la 6.3

De todas formas he abierto tu fuente y pones dis[1] y dis[2] y debiera de ser dis[0] y dis[1] ¿No será esto lo que te ha confundido?

Te mando la simulación simultánea con 4 y con 2 displays:

http://miarroba.com/foros/ver.php?foroid=256746&temaid=1324457&msgid=10245017

Un saludo

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: I2C SAA1064
« Respuesta #9 en: 11 de Enero de 2004, 05:01:00 »
Vale, esa es la cosa. Abre el data y mira el montaje para dos displays. Como verás no se parece en nada a lo que tienes tu montado. Entre otras cosas las lineas MX1 y MX2 no se usan, ya que no hay nada que multiplexar.
Lo de dis[0], dis[1], dis[2]... son sólo números de una tabla. Precisamente por eso puse dis[1] (osea 1) para mostrar en el display 1 y dis[2] para mostrar en el display 2. Para que se notara mejor. Como si hubiera puesto dis[9] en el display 1...

Además en tu código pones en el registro de control como C0=1, osea que tomas el modo dinámico, que es cuando usas 4 displays. Con dos displays se debe poner C0=0, osea modo estático.

Lo vuelto a hacer para la versión 6,2 sp5, que creo será la que tienes. Prueba ahora.
http://miarroba.com/foros/ver.php?foroid=256746&temaid=1324457&msgid=10237814#10237814

Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: I2C SAA1064
« Respuesta #10 en: 11 de Enero de 2004, 12:59:00 »
Vale Cucaracha, que dificil es entenderse por ordenador.

- La única combinación de los bits de control que va bien (aunque con intermitencia) con el PROTEUS es la c0=c1=c2=1, para otras va mal.

- Por ejemplo para c0=1,c1=0,c2=0 deberían estar todos apagados y estan todos encendidos.

- Para c0=0,c1=*,c2=* debiera aparecer un 0 y un 1 y aparecen un 0 y un 2

- etc

Un saludo

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: I2C SAA1064
« Respuesta #11 en: 11 de Enero de 2004, 16:07:00 »
Pues mira, eso que comentas que deberían de estar conectado pues... si que funciona. O lo hace más o menos bien.
En la realidad, yo probé a poner blanked y luego no no blanked y la verdad que no se nota cambio. Con ambos permanecen encendidos.
Por eso pregunté lo del bit C1, no entiendo para que sirve pues...

Y lo de que te aparece un 0 y un 2 a eso es a lo que me refería. Cuando usas la configuarción de dos displays no funciona. En el segundo el proteus muestra lo que escribes en la posición de mamoria del tres. Osea, mal.

Por fin no entendimos!!jeje Si que es difícil.

Saludos y un abrazo!!

Saludos desde Huelva (ESPAÑA)