Dónde aplicar el retardo manual en el LCD de caracteres

0

Fui a enlace en un intento por descubrir cómo hacer que un módulo LCD funcione con los tiempos más cortos. Si bien el sitio ayuda con la inicialización de la pantalla LCD, siento que no me está ayudando lo suficiente.

Varias fuentes indican que, para cada comando de LCD o datos procesados, hay un retraso de aproximadamente 40uS a 1.7mS antes de que se complete el comando.

El sitio web menciona que podría sondear el indicador de ocupado en la pantalla LCD pero que sería un retraso demasiado prolongado (se menciona bajo el encabezado de carga de la CPU en el sitio).

Entonces, lo que quiero hacer es crear una demora fija en el software para que el software continúe funcionando incluso si la pantalla LCD se desconecta del circuito durante la operación.

La pregunta es, ¿dónde implemento exactamente el largo retraso de microsegundos en el código?

¿Inserto el retardo después de configurar habilitar alto (donde está el signo de interrogación verde) o inserto el retardo después de configurar habilitar bajo (donde está el signo de interrogación azul)?

Creo que es lo último, pero quiero asegurarme.

    
pregunta Mike

2 respuestas

0

Debe mirar la hoja de datos del módulo LCD, no una aplicación típica.

En cualquier lugar, la hoja de datos dice que debe cumplir con un tiempo de retraso mínimo que necesita para asegurarse de cumplir con ese retraso. Para el ejemplo del diagrama de tiempo que proporciona, parece que la habilitación debe ser alta para al menos 450ns y su período debe ser al menos 1000ns. También debe asegurarse de cumplir con los tiempos de espera de configuración y para R / S, RW y DATA. Dependiendo de la rapidez con la que su procesador pueda alternar una línea GPIO, es posible que necesite varios retrasos breves en el software.

    
respondido por el Elliot Alderson
0

Como necesita demoras de milisegundos para la parte "azul" que es la línea de habilitación de LCD, configure algunos temporizadores a largo plazo haciendo esto:

  1. Configure un reloj de tiempo real (RTC) de 1 KHZ con un temporizador de hardware de repuesto. La resolución es de 1 mS. Crea una interrupción (ISR) cada mS para actualizar los temporizadores que esté ejecutando o desee ejecutar.

  2. Configure un segundo temporizador de hardware (cuenta atrás) controlado por 2 bytes. El byte 'A' es el tiempo que desea demorar, que se carga en el temporizador de demora cuando realiza una llamada. También establece un indicador de control en un byte de estado 'B' que inicia y detiene el temporizador. Salir de ISR cuando haya terminado. El ISR de RTC debe hacer lo menos posible para mantener los temporizadores y los bytes de estado, luego salir para que el programa principal pueda ejecutarse entre interrupciones. Ya que estamos usando solo bytes, el retraso máximo es de 256 milisegundos, un poco más de 1/4 de segundo.

  3. Son actualizados por el ISR que se ejecuta a una velocidad de 1 KHZ. Comprueba los bytes de estado de todos los temporizadores a largo plazo, los preajusta por primera vez y establece un indicador de "ajuste preestablecido hecho" en el byte de estado. Si ya lo ha programado, verifique si el conteo es cero, por lo que establece el indicador 'hecho' para ese temporizador y borra el byte 'retraso'. Salir de ISR cuando haya terminado.

  4. Si el temporizador se está ejecutando y no = cero, se reduce en 1 y el indicador de "ocupado" se establece en "1" para que el programa principal (MPU) sepa que tiene que mantener un determinado pin en un Estado alto o bajo. Salir de ISR cuando haya terminado.

  5. Sinceramente, estos LCD son muy lentos. Reservé algunos pines MPU solo para la pantalla de 40 caracteres por 4 líneas. Creé pines adicionales para RD, WR, CS, ALE, puerto de datos de 8 bits solo para el LCD y pisé los pines de control del LCD para obtener lo que quería. Estaba usando una MPU PIC17C756 con 64 pines, así que tenía mucho para tener un bus de datos "rápido" y un bus LCD dedicado. Fue muy lento.

Todavía tengo el código del ensamblador que escribí en 2001 para ese dispositivo de prueba pero es 13,000 líneas de código. El controlador de LCD consumió 3.000 líneas de código más casi 1 KB de RAM. Creé 3 capas para el LCD, así que tuve una capa de fondo fija, una capa con datos variables y una capa superior para el puntero y los mensajes de advertencia. Otras 3,000 líneas de mensajes "enlatados" terminaron mi código.

Imprimiré parte del código en mi respuesta, pero no sé qué partes podrían ayudarlo.

    
respondido por el Sparky256

Lea otras preguntas en las etiquetas