Memoria de imagen en microcontrolador [en espera]

1

Estoy tratando de especificar un microcontrolador para una tarea muy simple. Todo lo que hace es mostrar una imagen en el arranque (que probablemente será en blanco y negro).

La pantalla en sí tiene una profundidad de color de 240 * 240 y 12 bits, lo que significa que tendría una memoria total de (240 * 240 * 12) / (8 * 1024) = 84 KB. Esto me parece bastante alto. ¿No debería estar calculando para el peor de los casos? ¿Algunas técnicas de compresión entran en juego aquí?

Tendré que dejar algo de espacio libre para un gestor de arranque, etc., lo que creo que tomaría un poco de espacio también.

En qué parte del micro se guardará esta imagen antes de enviarla a través de SPI a la pantalla LCD.

EDITAR:

En el peor de los casos, podría ser una imagen en blanco y negro sin escala de grises. Lo que alivia el problema un poco.

Pero cualquier cosa con color, ¿hay material de lectura para ver aproximadamente la cantidad de memoria que necesito para la pantalla?

Anteriormente, estaba pensando en animaciones con múltiples imágenes, pero con mis limitaciones de costos, la memoria parece ser una prima y, por lo tanto, esto está fuera de discusión.

Finalmente, ¿es generalmente más barato encontrar un micro del tamaño correcto o un micro realmente barato con memoria externa (EEPROM?)

    
pregunta Hassan Nasir

2 respuestas

1

¿Permítame ser precipitado y predecir que realmente está intentando usar un ST7789? controlador basado en pantalla / LCD (ya que Ebay está repleto de LCD 240 * 240 baratos basados en este controlador).

Si esto es cierto, lo primero que hay que entender es que el controlador LCD tiene un búfer de marco de RAM para almacenar la imagen, por lo que es posible que no tenga que suministrar tanta RAM / EEProm para el almacenamiento de imágenes como podría pensar. Las hojas de datos de ST7789 están aquí en Crystalfontz.

  1. Si está tratando con fotos y similares, deberá poder almacenar las imágenes en formato comprimido o sin comprimir. Si los almacena comprimidos para guardar el almacenamiento, necesita al menos un búfer parcial para descomprimirlos antes de enviarlos a la pantalla. La compresión previa en la resolución de la pantalla reducirá significativamente el almacenamiento requerido, pero debe definir tanto la resolución como la compresión (imagen / línea por línea) que desea utilizar.

  2. Si está tratando con imágenes basadas en sprites (para animación) o alfanuméricos, solo necesita almacenamiento para el contenido base y puede volver a dibujar, mover y rotar a su pantalla.

  3. Si está tratando con patrones que se crean mediante programación, casi no necesita memoria de almacenamiento y solo un búfer parcial para escribir en la pantalla.

Si su MCU está conectada a la red, puede ser posible enviar solo búferes no comprimidos parciales a la MCU y transferirlos inmediatamente a la pantalla. p.ej. un flujo UDP - > búfer - > monitor. Esto puede funcionar muy bien para la conectividad de IP a 100 Mbps en una MCU decente.

Si desea ver los efectos de la compresión con pérdida en las imágenes que tiene, puede utilizar un servicio en línea como OptimiZilla para mostrar los efectos. en el tamaño de almacenamiento. Por ejemplo, una imagen JPEG típica de 240 * 240 puede comprimir desde 26kb (típico de la web) hasta solo 2.1kb y seguir siendo bastante viable.

    
respondido por el Jack Creasey
1

Su enfoque es correcto si desea que sea lo más genérico posible. Si no sabe nada sobre la imagen que alguien desea cargar, debe asumir el peor de los casos. La compresión de la imagen tampoco puede salvarte, porque teóricamente es imposible comprimir cada imagen.

Para todo lo demás tienes que establecer límites. Por ejemplo, puedes decidir que estás bien con una imagen gris, en cuyo caso solo necesitas 4 bits por píxel. Puede decidir permitir solo imágenes JPEG grandes de 16 kiB con un conjunto fijo de parámetros compatibles. JPEG no es tan pesado, y fue diseñado para ser relativamente fácil de implementar por los microcontroladores. Existen buenas herramientas externas que pueden reducir las imágenes a un tamaño de archivo determinado. Para una menor compresión y complejidad, decida un formato diferente, tal vez GIF o PNG. Por supuesto, esto requiere más espacio para la descompresión.

De nuevo, la memoria flash de I²C y SPI es barata y pequeña.

    
respondido por el pipe

Lea otras preguntas en las etiquetas