Pregunta

Tengo una pantalla LCD HD44780, y he estado usando la Biblioteca LiquidCrystal provista con el paquete de desarrollo Arduino. Sin embargo, no es confiable. Noté algunos problemas con él, y en lugar de ser controlado por interrupción, solo duerme mientras el desarrollador piense que el chip debería tardar en ejecutar la operación.

A partir de las hojas de especificaciones, el indicador BUSY se establecerá mientras se está ejecutando, lo que significa que se puede controlar la interrupción.

¿Alguien sabe de una biblioteca que realmente hace esto, y requiere que todos los 8 bits estén conectados o puedo mantenerlo en 4 pines?

¿Fue útil?

Solución

No creo que necesites una interrupción para esto. Mirando LiquidCrystal.cpp en la distribución Arduino, solo necesita cambiar el código LiquidCrystal :: write4bits , LiquidCrystal :: write8bits y LiquidCrystal :: pulseEnable . Los dos primeros métodos deberían comenzar monitoreando la línea ocupada (BD7) antes de escribir datos, y el último se modificaría para eliminar la pausa de 100us.

Creo que la razón por la que esto no se hizo en el código predeterminado es que muchos usuarios de estas pantallas LCD simplemente conectan R / W a tierra para que la pantalla siempre esté en modo de escritura, lo que hace imposible leer la señal OCUPADA. Sin embargo, esto se pasa a la biblioteca estableciendo _rw_pin en -1, por lo que el pulso y el código de escritura pueden usar condicionalmente el pin r / w como una forma de detectar ocupado como una optimización de velocidad.

Otros consejos

Es posible usar 8 bits en tres pines; solo necesitas un registro de turno. Estoy usando un HEF4094BP de mouser.com (el envío costará más que el chip real)

el diagrama de cableado y las modificaciones de código para el registro de desplazamiento están aquí: http: // www. arduino.cc/playground/Code/LCD3wires

Hace algún tiempo modifiqué la lib LiquidCrystal para admitir la bandera ocupada. Tenga en cuenta que la operación real impulsada por interrupción no es posible: para cada lectura debe alternar la línea de navegación E dos veces. Por lo tanto, deberá sondear la bandera de ocupado.

Luego hice algunos puntos de referencia y encontré que sondear la bandera de ocupado es más lento que esperar la mayoría de los comandos. (La excepción son los comandos 'clear' y 'home'). La razón fue que cambiar entre el modo de lectura y el modo de escritura requiere pasos adicionales como 8 llamadas adicionales a digitaWrite y 8 llamadas adicionales a pinMode . Incluso con Arduinos de 16MHz, esto es más lento que esperar solo 100 µs.

Después de eso, escribí una biblioteca que manipula los registros de pines directamente y en modo masivo, los 8 pines con un acceso de registro. Después de eso, estuve en el estadio para obtener algún beneficio mediante encuestas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top