Librerias para gameduino 2
Gameduino 2 (y FT80x):
http://excamera.com/files/Gameduino2.zip
Libreria en desarrollo para gameduino 2, con soporte para FT8xx: GitHub - jamesbowman/gd2-lib: Gameduino 2/3/3X library sources
Ajuste de la libreria GD2
Me centraré en los pasos para modificar la libreria GD2 y dejarla a punto para cualquier tipo de pantalla FT80x. Con el FT813 tendré que invertir mucho mas tiempo...
Luego de descargar el zip, hay que limpiar un poco el directorio, ya que prácticamente "estamos entrando a una parte del taller de James"
Ubicamos la libreria en la carpeta correspondiente para que se active en el IDE de arduino:
Estas son las lineas que se encuentran en el archivo GD2.ccp original
#define SD_PIN 9 // pin used for the microSD enable signal
#define BOARD_FTDI_80x 0
#define BOARD_GAMEDUINO23 1
#define BOARD_EVITA_0 2
#define BOARD BOARD_GAMEDUINO23 // board, from above
#define STORAGE 1 // Want SD storage?
#define CALIBRATION 1 // Want touchscreen?
// FTDI boards do not have storage
#if (BOARD == BOARD_FTDI_80x)
#undef STORAGE
#define STORAGE 0
#endif
Ésta es la versión personalizada para ajustarse al shield de Riverdi para arduino (pantallas FT80x y FT81x), con soporte para lector micro SD externo
#define SD_PIN 5 //5--->SD-Riverdi shield, 9--->para gameduino 2
#define BOARD_FTDI_80x 0
#define BOARD_GAMEDUINO23 1
#define PROTO 0 //0-->FT843, FT80x; 1--> MEGA, UNO, gameduino 2
#define BOARD_EVITA_0 2
#define BOARD 0 // board, from above
#define STORAGE 1 // Want SD storage?
#define CALIBRATION 1 // Want touchscreen?
// FTDI boards do not have storage
#if (BOARD == BOARD_FTDI_80x)
#undef STORAGE
#define STORAGE 1
#endif
La instrucción PROTO en GD2
PROTO, definida en la linea siguiente:
#define PROTO 0
Permite controlar la disposición de la tabla de colores, orientación de pixeles y orientación del panel táctil de las pantallas FT80x. El gameduino 2 tiene una disposición "invertida", respecto al diseño original de FTDI, la razón posiblemente se deba al ángulo de visión de la pantalla del shield gameduino 2.
En la libreria nueva (GD2), esa linea ha sido suprimida, es importante rescatarla, ya que resulta mucho mas fácil manipular el cableado, con la orientación que tiene el gameduino 2, que con la disposición que tiene de fábrica el FT80x.
En el archivo GD2.ccp original, las lineas en las que debemos insertar la instrucción están dispuestas de esta forma:
#if (BOARD == BOARD_FTDI_80x)
GDTR.wr(REG_PCLK_POL, 1);
GDTR.wr(REG_PCLK, 5);
#endif
GDTR.wr(REG_PWM_DUTY, 0);
GDTR.wr(REG_GPIO_DIR, 0x83);
GDTR.wr(REG_GPIO, GDTR.rd(REG_GPIO) | 0x80);
#if (BOARD == BOARD_GAMEDUINO23)
ConfigRam cr;
byte v8[128] = {0};
cr.read(v8);
if ((v8[1] == 0xff) && (v8[2] == 0x01)) {
options &= ~(GD_TRIM | GD_CALIBRATE);
if (v8[3] & 2) {
GDTR.__end();
GDTR.hostcmd(0x44); // switch to external crystal
GDTR.resume();
}
copyram(v8 + 4, 124);
finish();
} else {
GDTR.wr(REG_PCLK_POL, 1);
GDTR.wr(REG_PCLK, 5);
GDTR.wr(REG_ROTATE, 1);
GDTR.wr(REG_SWIZZLE, 3);
}
#endif
La secuencia de instrucciones que permite modificar la rotación de colores, panel táctil y pixeles en las pantallas FT80x queda así:
#if (BOARD == BOARD_FTDI_80x)
GDTR.wr(REG_PCLK_POL, 1);
GDTR.wr(REG_PCLK, 5);
// Avoid inverted colours on alternative-FT800 boards
#if PROTO == 1
GDTR.wr(REG_ROTATE, 1);
GDTR.wr(REG_SWIZZLE, 3);
#endif
GDTR.wr(REG_ROTATE, 1);
// Avoid inverted colours on alternative-FT800 boards
#endif
GDTR.wr(REG_PWM_DUTY, 0);
GDTR.wr(REG_GPIO_DIR, 0x83);
GDTR.wr(REG_GPIO, GDTR.rd(REG_GPIO) | 0x80);
#if (BOARD == BOARD_GAMEDUINO23)
ConfigRam cr;
byte v8[128] = {0};
cr.read(v8);
if ((v8[1] == 0xff) && (v8[2] == 0x01)) {
options &= ~(GD_TRIM | GD_CALIBRATE);
if (v8[3] & 2) {
GDTR.__end();
GDTR.hostcmd(0x44); // switch to external crystal
GDTR.resume();
}
copyram(v8 + 4, 124);
finish();
} else {
GDTR.wr(REG_PCLK_POL, 1);
GDTR.wr(REG_PCLK, 5);
// Avoid inverted colours on alternative-FT800 boards
#if PROTO == 1
GDTR.wr(REG_ROTATE, 1);
GDTR.wr(REG_SWIZZLE, 3);
#endif
GDTR.wr(REG_ROTATE, 1);
// Avoid inverted colours on alternative-FT800 boards
}
#endif