Bienvenido a los foros de FT81x Manía. Te invitamos a regístrate totalmente gratis. Disfruta de tu experiencia con un grandes amigos y Staff.

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Thread Contributor: RndMnkIIIIntroducción

#1
1
Better response on post Introducción
Bienvenidos a esta serie de artículos que he iniciado a modo de introducción a los gráficos diseñados por computadora. Voy a adoptar un enfoque práctico utilizando para ello las pantallas FT81x con microcontroladores STM32. En sucesivas entregas iré explicando ciertos conceptos clave en los gráficos diseñados por computadora junto con ejemplos con código arduino para el core STM32GENERIC y la librería GD2UB (Port de la GD2 a las plataforma STM32). Además se irán añadiendo librerías de código en C/C++ de cosecha propia o de terceros para dar soporte a los ejemplos.
Como requisitos exigidos, tener cierto dominio de la programación en C (saber manejar arrays, punteros y estructuras de datos) y conocimientos matemáticos de trigonometría básica principalmente, siendo recomendable manejar conceptos del algebra matricial (vectores, matrices,  producto vectorial,...)  que ya veréis que no es muy complicado.
Empezare por describir un poco las famosas pantallas con chip FT81x. Se trata de una familia de chips basados en el EVE2 del fabricante FTDI. Se trata de un controlador gráfico que incluye el controlador gráfico de una pantalla LCD TFT, controlador táctil resistivo o capacitativo (según la versión) y reproducción de audio digital de un sólo canal y un sintetizar de audio para sonidos básicos, todo ello controlado a través de una interfaz SPI. Además incluye 1Mbyte de memoria RAM para almacenar recursos gráficos y datos de audio, como se puede ver a continuación en el gráfico.

[Image: FT81XBlockDiagram.png]
Esquema general chip FT81X

Lo novedoso de este chip gráfico y lo que lo diferencia del resto es que en vez de dibujar explícitamente los pixeles de la pantalla para dibujar un circulo o texto es que incluye una serie de comandos para hacer esto y más cosas. Básicamente para dibujar una pantalla, enviamos una lista de comandos por SPI al chip FT81x y este se encarga de dibujar la pantalla de acuerdo con lo especificado en dicha lista. Además esto no consume parte de la memoria gráfica ya que dispone de un área de memoria (RAM_DL) específica para comandos de 32bits de 8Kbytes que permite almacenar hasta 2048 comandos. Para que os hagáis una idea el chip gráfico procesa esta lista por cada linea que dibuja de la pantalla (480 lineas) y en la mayoría de los casos manteniendo una tasa de refresco de pantalla de 60 ciclos. Otro dato digno de mención es el soporte hardware para la descompresión de imagenes jpg in situ, esto quiere decir básicamente que puedes cargar los datos de una imagen jpg sin descomprimir en la memoria gráfica y el archivo lo descomprime sobre la marcha en el momento de dibujarlo sin requerir memoria adicional para descomprimirlo (si el jpg comprimido ocupa 64Kbytes por ejemplo, esa es la cantidad de memoria gráfica que vas a necesitar para almacenarlo).
En teoría tiene función para reproducir videos AVI que utilicen el codec Motion JPEG, aunque con un pequeño truco podemos emular esta funcionalidad usando unicamente archivos jpg sueltos a modo de fotogramas. Estos chips gráficos admiten interfaces quad/spi (spi con 4 lineas de datos) que permite aumentar la tasa de transferencia de datos entre chip gráfico y microcontrolador, aunque en la práctica requiere soporte hardware tanto de la pantalla como del microcontrolador, por lo que lo normal es usar el spi usual (Clk,Mosi,Miso,Cs).

También se pueden realizar mediante hardware operaciones de escalado y rotación de los bitmaps que se carguen en la memoria gráfica.
Las coordenadas de pantalla tienen su origen en la esquina superior izquierda y admiten valores enteros de pixel o fraccionales con una precisión de 1/8 de pixel ya que admite dibujado de primitivas con antialiasing. Para esto ultimo usa valores decimales de precisión fija por lo que es necewario multiplicar por 16
para obtener el valor de pixel deseado (ver gráfico). La resolución de pantalla normalmente será de 800x480 pixeles (el área visible).

?mage
Coordenadas utilizando valores enteros de pixel

?mage
Coordenadas utilizando valores fraccionales  de 1/8 de pixel

El comando más basico de dibujo es el  punto. Permite utilizar dos comandos diferentes:
  •  GD.Vertexii(x, y)  que utiliza valores enteros de pixel, siendo x e y las coordenadas horizontal y vertical respectivamente.
  • GD.Vertex2f(x * 16, y * 16)  que utiliza valores fraccional de 1/8 de pixel, siendo x e y las coordenadas horizontal y vertical respectivamente.
Antes de dibujar nada es preciso indicar que se va a borrar la pantalla con el comando GD.Clear() y, después  indicar que se va a proceder a dibujar primitivas de tipo punto con GD.Begin(POINTS), a continuación se dibujan los puntos con GD.Vertex2ii ó GD.Vertex2f y finalmente  indicar al chip que actualice la lista de comandos a dibujar con GD.swap().

Os pongo un pequeño sketch Arduino de ejemplo para dibujar varios puntos:
//Incluimos la librería que maneja el chip FT81X, descargar de aquí:
// https://github.com/FT81xMania/GD2UB
#include <GD2UB.h>

void setup()
{
 GD.begin(); //Inicializamos el controlador grafico
}

void loop()
{
 GD.Clear(); //borramos la pantalla
 GD.Begin(POINTS); //indicamos que a continuacion vamos a dibujar coordenas de puntos
 GD.Vertex2ii(220, 100); //Dibuja un punto con coordenadas enteras en posición x=220, y=100
 GD.Vertex2f(260.5 * 16, 170.125 * 16); //Dibuja otro punto con coordenadas fraccionales x=260.5, y=170.125 
 GD.swap(); //se activa la lista de comandos para dibujarlos en la pantalla
}
<<<RndMnkIII>>>
rndmnkiii@gmail.com
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)