Por que el televisor muestra las líneas de escaneo aleatoriamente?

Cuando desarrollé un proyecto de televisión, algo extraño me molestó durante varias semanas. El diseño del CRT (tubo de rayos catódicos) del televisor se basó en un microcontrolador 8051 TV de Philips que incluía OSD (menú en la pantalla) y función de calibrado en el chip. El software corría en mi emulador sin problemas. Por lo tanto, nuestro cliente decidió lanzar una producción piloto. El equipo de Calidad encontró algo raro durante el procedimiento de auditoría interna y me notificó con urgencia. Entre 12 televisores, alrededor de 5 televisores mostraban líneas de escaneo aleatorias después de encender. La ocurrencia del evento era imprevisible.

 

 

 

 

 

 

 

 

 

 

 

 

 

Una imagen se "visualiza o dibuja" en la pantalla de un televisor moviendo una señal eléctrica horizontalmente en la pantalla, una línea a la vez. La amplitud de esta señal en función del tiempo representa el brillo instantáneo en ese punto físico en la pantalla. Al final de cada línea, hay una parte de la forma de onda (intervalo de pestañeo horizontal) dice que el circuito de barrido en la pantalla para volver al borde izquierdo de la pantalla y, a continuación, iniciar el rastreo de la línea siguiente. Una vez la primera imagen es escaneada completamente, hay otra parte de la forma de onda (intervalo de pestañeo vertical, no se muestra) que le indica al circuito de barrido para volver a la parte superior de la pantalla y empezar a escanear el siguiente cuadro o imagen. Esta secuencia se repite periódicamente a una tasa lo suficientemente rápida para que las imágenes mostradas, parezcan en movimiento continuo.

 

En un televisor de tubos, la señal de vídeo normal es visible en la pantalla porque la tensión de la señal de vídeo es superior al nivel de referencia negro. Durante el intervalo de pestañeo, el voltaje de la señal de vídeo esta fijo al nivel de pestañeo, el cual es inferior al nivel de negro, de tal manera que la línea de retrazo es invisible durante este pestañeo horizontal o vertical.

 

Junto con nuestro cliente, pasé una semana tratando de averiguar la raíz del problema. Intentamos encontrar una relación entre la aparición del fenómeno con la temperatura en la sala de torturas (casi me congeló en esa enorme nevera), sin suerte. Intentamos realizar una depuración en el emulador pero el software estaba bien. Intentamos todo lo que pudimos, sin suerte.

 

Por último, el cliente midió la línea de barrido con un osciloscopio. Era evidente que el adicional OSD del microcontrolador estaba activado y la señal de vídeo final era superior al nivel de negro. Sin embargo, la señal de retrazo que aparecía en la pantalla no era una señal de vídeo válida sino una pero señal OSD. Así, había un error en el software. Pero ¿por qué este error nunca ocurría en el emulador? Entonces revisé las especificaciones del microcontrolador. El OSD relacionados con los registros se asignan en 8051 RAM externa (XDATA) el espacio. Estos registros se nombran como MMR, los registros de memoria mapeada. Durante el reinicio, todos los internos y los registros se reiniciará por defecto como valor 0x00, 8051 XDATA espacio es al azar, porque el estado interno de restablecimiento circuito no reset memoria externa. La especificación no lo menciona, porque es sentido común. He probado a resetear los registros en el procedimiento de arranque. El problema se resolvió. Me di cuenta de que esa era la causa. Debido a que el contenido era al azar después de que se reinicia el sistema, la incidencia era imprevisible. Por fin, el proyecto fue aprobado por el departamento de control de calidad.

 

Como las características integradas y el volumen de los registros están creciendo, más y más registros tienen que ser asignados a un espacio XDATA. Y estos registros contienen valores aleatorios después se reinicia el sistema. Los desarrolladores deben reiniciar explícitamente en la inicialización del sistema.

 

Después de este proyecto, he revisado todo el árbol del código fuente. Todos los registros y variables en XDATA explícitamente por escrito con cero o sus valores por defecto. A veces la escritura 8051 XDATA espacio es un proceso que consume tiempo. Como una manera alternativa, los desarrolladores pueden dejar como está, sin embargo, tienen que asegurarse de que la memoria aleatoria no influirá en el rendimiento del sistema.

 

No importa qué programa se use para la aplicación, C o ensamblador, siempre es una buena práctica declarar explícitamente sus registros y variables en XDATA como valores por defecto, en lugar de dejarlos a valores aleatorios.

modulo.c
// declare variables
static unsigned int XDATA var1;
static unsigned int XDATA var2 = 0x80;

 

// inicializacion de variables, las cuales deben ser llamadas desde un sistema de inicializacion
void module_init (void)
{
var1 = 0x00;
....
}

// funciones normales
void module_update(void)
{
var1 = 0x80;
var2 = 0x00;
}

Si algunos registros deben ser reiniciados cuando el sistema es prendido, un programa de arranque con código de inicialización debe usarse. Para un compilador de 8051 C (Keil), se debe abrir startup.a51 para adicionar código de ensamble para cumplir este requisito.

Nuevos

  • kaiku
  • proteo100
  • Jose Antonio De...
  • 666odio
  • macotilla

En línea

En este momento hay 0 usuarios y %count invitados en línea.
hit counter