void GLCD_pintaBYTE(int8 x,int8 y,int8 dato)
{
int8 a;
for(a=0;a<=7;++a){
if(bit_test(dato,a))glcd_punto(x,y+a,1);
}
} El glcd tambien tiene un limite de transferencia, para evitar esto lo mejor que haces es utilizar la ram como si fuese la memoria de la glcd, ahi la modificas a tu gusto, y cada X tiempo actualizas la glcd con el contenido de la ram del pic, asi te evitas de tener que leer los bits de la glcd, editarlo y luego escribirlo.+1
El glcd tambien tiene un limite de transferencia, para evitar esto lo mejor que haces es utilizar la ram como si fuese la memoria de la glcd, ahi la modificas a tu gusto, y cada X tiempo actualizas la glcd con el contenido de la ram del pic, asi te evitas de tener que leer los bits de la glcd, editarlo y luego escribirlo.
La velocidad del micro no importa, el glcd tiene una velocidad bastante inferior, por lo cual por muchos mhz que pongas en el pic el glcd hara de cuello de botella. El principal problema de usar el sistema de lectura/modificacion/escritura es que es mas lento que usar la ram como si fuese la memoria del glcd, este metodo solo escribiria, por lo cual te ahorrarias la lectura.
Por ahi hay librerias que usan este metodo, tendrias que buscarlas porque en CCS no estoy muy puesto. Pero seria algo asi:
char glcd[1024];
ahora utilizas el array glcd editandolo a tu gusto, como si fuese la memoria del GLCD: glcd[0]=0b010110; te puedes hacer tus funciones para hacer letras, lineas, cuadrados... ahora escribes todo el array en la glcd, para esto nose que funcion tendrias en CCS
Está noche probare a ver que tal funciona, gracias Suky... Por cierto, como pretendo cargar alguna imagen desde una eeprom ya sea eterna o la interna del pic crees que sería más producente usar el mode glcdfast?
Siempre que se pretenda dibujar, limpiar, mostrar algo en el glcd en modo fast, la librería glcdgeneric se encargará de volcar y actualizar?
void GLCD_pintaByte(int8 x, int8 y,int8 dato_entrada,int8 tipo)
{
BYTE dato;
int1 lado = GLCD_lado_CS1; // Lado en que voy a dibujar.
if(x > 63) // Veo si cae del otro lado
{ x -= 64;
lado = GLCD_lado_CS2;}
output_low(GLCD_DI); // Modo instruccion
bit_clear(x,7); // Limpio bit MSB...
bit_set(x,6); // ...y pongo el bit 6 en 1
GLCD_enviaBYTE(lado, x); //Envio la dirección de la coordenada X
// Calculo en que pagina de las 8 cae...
GLCD_enviaBYTE(lado, (y/8 & 0xBF) | 0xB8);
output_high(GLCD_DI); // ...y paso a Modo datos
//Se necesitan dos lecturas para que devuelva el dato en la nueva direccion
GLCD_leeBYTE(lado);
dato = GLCD_leeBYTE(lado);
if(tipo==0)dato = dato_entrada;
if(tipo==1)dato = dato | dato_entrada;
output_low(GLCD_DI); // Modo instruccion
GLCD_enviaBYTE(lado, x); // Fijo el lado a escribir,
output_high(GLCD_DI); // pongo en Modo Datos y....
GLCD_enviaBYTE(lado, dato); // dibujo el pixel
}
void glcd_imagen (int x,int8 x_lim,int8 y,int8 y_lim,int screen,int8 tipo){
int8 j,o,x2;
long w=0;
--y_lim;
x2=x;
for(j=y;j<=y_lim+y;++j){
o=j*8;
do{
if(screen==1) glcd_pintabyte(x2,o,logotipo[w],tipo);
if(screen==2) glcd_pintaByte(x2,o,bateria[w],tipo);
if(screen==3) glcd_pintaByte(x2,o,valores_guardados[w],tipo);
if(screen==4) glcd_pintaByte(x2,o,ajustes_screen[w],tipo);
if(screen==5) glcd_pintaByte(x2,o,fecha_hora[w],tipo);
if(screen==6) glcd_pintaByte(x2,o,dos_puntos[w],tipo);
if(screen==7) glcd_pintaByte(x2,o,guion[w],tipo);
if(screen==8) glcd_pintaByte(x2,o,luz[w],tipo);
++x2;
++w;
}while(x2<x_lim+x);
x2=x;
}
}
#define logo 1
const int8 logotipo[746]={
0x18,0x1C,0x1C,0x1C,0x1C,0x1C,0xFC,0xFC,0xFC,0x1C,0x1C,0x1C,0x18,0x18,0x18,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x70,0x78,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,
0x1C,0x38,0x78,0xF0,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,
0xFC,0xF8,0xE0,0xF0,0x78,0x38,0x1C,0x1C,0x1C,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0x70,0x38,0x18,0x1C,0x1C,0x1C,0x1C,0x38,0x78,0xF0,0xE0,0x80,0x00,
0x00,0x00,0x80,0xE0,0xF0,0xF8,0x38,0x3C,0x1C,0x1C,0x1C,0x3C,0x78,0xF8,0xF0,0xC0,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFF,
0x1F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,
0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03,0x00,
0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0,
0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xF0,0xFF,0x7F,0x1F,0x00,0x00,0x00,0x1F,0x7F,
0xFF,0xE0,0xC0,0x80,0x80,0x80,0x80,0xC0,0xE0,0xFF,0x7F,0x1F,0x00,0x00,0x00,0x00,
0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x07,0x1F,0x7F,0xF8,0xE0,0xE0,0xC0,
0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xE0,0xF0,0x7C,0x3F,0x0F,0x07,0x00,0x00,
0x00,0x00,0xC0,0xC7,0x0F,0x0D,0x0C,0x0C,0x9C,0xF8,0xF0,0x00,0x00,0xFF,0xFF,0x00,
0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x03,0x03,0x01,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,
0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,
0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x03,0x03,0x03,0x03,0x01,0x01,0x06,0x06,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xC0,0x30,0x08,0x04,0x04,0x04,0x0C,0x00,0x00,0xC0,0x20,0x20,0x20,0xC0,0x00,
0x00,0xE0,0x40,0x20,0xE0,0x40,0x20,0xC0,0x00,0x00,0xE0,0x20,0x20,0x20,0xC0,0x00,
0x00,0x80,0x40,0x20,0x20,0xE0,0x00,0x00,0xE0,0x40,0x20,0x20,0xC0,0x00,0x60,0x80,
0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x84,0x84,0x44,0x38,
0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00,0x00,0x08,0xFC,0x00,0x00,0x00,0x00,
0x08,0x04,0x84,0x84,0x44,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x08,
0x08,0x08,0x08,0x04,0x00,0x00,0x07,0x08,0x08,0x08,0x07,0x00,0x00,0x0F,0x00,0x00,
0x0F,0x00,0x00,0x0F,0x00,0x00,0xFF,0x08,0x08,0x08,0x07,0x00,0x00,0x07,0x08,0x08,
0x08,0x07,0x08,0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x00,0xC1,0x36,0x0E,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x09,0x08,0x08,0x08,0x08,0x00,0x00,0x03,0x04,
0x08,0x08,0x04,0x03,0x00,0x00,0x08,0x0F,0x08,0x00,0x00,0x00,0x0E,0x09,0x08,0x08,
0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};