TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Burzredion en 19 de Abril de 2008, 16:49:46
-
Holas,
estoy utilizando un GLCD de 128x64 para un proyecto, quiero poner una imagen de un logo, estuve siguiendo el ejemplo que puso el amigo monopic en este tema (http://www.todopic.com.ar/foros/index.php?topic=18198.0), pero la imagen q obtengo me sale con una línea en mitad de la pantalla. La imagen la generé con el programita G.T.P_.
El código q estoy probando es el siguiente:
#include <18F452.h>
#device adc=8
#use delay(clock=4000000)
#include "glcd.c"
#include "math.h"
#use standard_io(B)
#use standard_io(C)
#use standard_io(D)
//Logo
//*************************************************************************
BYTE CONST datanet0 [255]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x7F,0x0F,0x0F,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0x0F,0x1F,0x7F,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x07,0x00,0xE0,0xFC,0xFF,
0xFF,0x7F,0x0F,0x03,0xC1,0xF0,0xFF,0xFF,0xFF,0x7F,0x3F,
0x0F,0x9F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x9F,0x1F,0x3F,0xFF,0xFF,0xFF,0xF1,0xE1,0x83,0x0F,0x1F,
0xFF,0xFF,0xFF,0xF0,0x80,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF
};
BYTE CONST datanet1 [255]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,
0x00,0x00,0xFC,0xFF,0xFF,0x7F,0x07,0x00,0x00,0xFC,0xFF,
0xFF,0x3F,0x07,0x00,0x80,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,
0x7F,0x3F,0x1F,0x1F,0x1F,0x1F,0x03,0x03,0x03,0xF3,0xFF,
0xFF,0x3F,0x1F,0x1F,0x1F,0x1F,0x1F,0x3F,0x7F,0xFF,0x1F,
0x0F,0x07,0x07,0x07,0x1F,0xFF,0xFF,0x7F,0x3F,0x1F,0x1F,
0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0x1F,0x1F,0x1F,0x3F,0x3F,
0x1F,0x1F,0x1F,0x3F,0x3F,0xFF,0xFF,0x3F,0x3F,0x1F,0x1F,
0x1F,0x1F,0x3F,0x7F,0xFF,0x3F,0x0F,0x07,0x07,0x07,0x3F,
0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x01,
0x1F,0xFF,0xFF,0xFF,0xF0,0x00,0x01,0x1F,0xFF,0xFF,0xFF,
0xE0,0x00,0x01,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,
0xFF,0xC0,0x00,0x00,0x08,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xC1,0x80,0x00,0x00,0x1E,
0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0x07,0x03,0x03,0x31,
0x31,0x00,0x00,0x00,0xE0,0xFF,0xFE,0x00,0x00,0x00,0x1E,
0x1E,0xFF,0x8F,0x07,0x03,0x03,0x31,0x31,0x00,0x00,0x00,
0xFF,0xFF,0x00,0x00,0x00,0xF8,0xFE,0xFE,0x00,0x00,0x00,
0x00,0xFF,0xC0,0x00,0x00,0x00,0x1B,0x3B,0x18,0x18,0xF8,
0xFF,0xFE,0x00,0x00,0x00,0x00,0x1E,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x1E,0x00,0x80,0xFF,0xFF,0xFF,
0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
0xFF,0xFF,0xFF
};
BYTE CONST datanet2 [255]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xF0,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
0x1F,0xFF,0xFF,0xFF,0xFC,0xE0,0xC0,0x03,0x0F,0x3F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFE,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFE,0xFE,0x7E,0xBE,0xBF,0xBF,0xBF,0xBF,0xBE,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBE,0xBE,0xBF,0xBF,0xBF,0xBF,
0xBE,0xBE,0xBE,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBE,
0xBE,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x0F,0x01,
0xE0,0xF8,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xC0,0xFE,0xFF,
0xFF,0xFF,0x0F,0x00,0x80,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF0,
0x80,0x03,0x0F,0x7F,0xFF,0xFF,0xFC,0xF0,0xC1,0x07,0x9F,
0xFF,0xFF,0xFF,0xFE,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x1F,0x0F,0x4F,0x0F,0x1F,0xFF,0x0F,
0xAF,0x8F,0xFF,0x1F,0x0F,0xCF,0xFF,0x0F,0x0F,0x7B,0x0D,
0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0x8F,
0x87,0xE0,0xF8,0xFE,0xFF,0xFF,0x7F,0x0F,0x03,0xE0,0xF0,
0xFF,0xFF,0xFF,0xFF
};
BYTE CONST datanet3 [255]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF0,0xE0,0xE1,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xE0,0xDF,0xBF,0xBF,0xBF,0xBF,0xBF,0xB0,
0xB0,0xBE,0xBE,0xBF,0xBF,0xBE,0xBE,0xBE,0xBF,0xBE,0xBE,
0xBF,0xBF,0xBE,0xBE,0xBE,0xBE,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xDF,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xF1,0xF0,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF
};
BYTE CONST datanet4 [4]={
0xFF,0xFF,0xFF,0xFF
};
//*************************************************************************
void main()
{
glcd_init(ON); //inicio de glcd
glcd_fillScreen(OFF); //limpieza de pantalla glcd
while(TRUE)
{
glcd_pixel(0,0,off) ;
for (a=1;a<=63;a++){glcd_writeByte(GLCD_CS1,datanet0[a]);}
glcd_pixel(64,0,off) ;
for (a=65;a<=128;a++){glcd_writeByte(GLCD_CS2,datanet0[a]);}
glcd_pixel(0,8,off) ;
for (a=129;a<=191;a++){glcd_writeByte(GLCD_CS1,datanet0[a]);}
glcd_pixel(64,8,off) ;
for (a=193;a<=254;a++){glcd_writeByte(GLCD_CS2,datanet0[a]);}
glcd_writeByte(GLCD_CS2,tanque20[0]);
//muestra toda la linea 1
glcd_pixel(0,16,off) ;
for (a=2;a<=64;a++){glcd_writeByte(GLCD_CS1,datanet1[a]);}
glcd_pixel(64,16,off) ;
for (a=66;a<=128;a++){glcd_writeByte(GLCD_CS2,datanet1[a]);}
glcd_pixel(0,24,off) ;
for (a=130;a<=192;a++){glcd_writeByte(GLCD_CS1,datanet1[a]);}
glcd_pixel(64,24,off) ;
for (a=194;a<=254;a++){glcd_writeByte(GLCD_CS2,tanque21[a]);}
glcd_writeByte(GLCD_CS2,datanet1[0]);
glcd_writeByte(GLCD_CS2,datanet2[1]);
//muestra toda la linea 2
glcd_pixel(0,32,off) ;
for (a=3;a<=65;a++){glcd_writeByte(GLCD_CS1,datanet2[a]);}
glcd_pixel(64,32,off) ;
for (a=67;a<=129;a++){glcd_writeByte(GLCD_CS2,datanet2[a]);}
glcd_pixel(0,40,off) ;
for (a=131;a<=193;a++){glcd_writeByte(GLCD_CS1,datanet2[a]);}
glcd_pixel(64,40,off) ;
for (a=195;a<=254;a++){glcd_writeByte(GLCD_CS2,datanet2[a]);}
glcd_writeByte(GLCD_CS2,datanet3[0]);
glcd_writeByte(GLCD_CS2,datanet3[1]);
glcd_writeByte(GLCD_CS2,datanet3[2]);
//muestra toda la linea 3
glcd_pixel(0,48,off) ;
for (a=4;a<=66;a++){glcd_writeByte(GLCD_CS1,datanet3[a]);}
glcd_pixel(64,48,off) ;
for (a=68;a<=130;a++){glcd_writeByte(GLCD_CS2,datanet3[a]);}
glcd_pixel(0,56,off) ;
for (a=132;a<=194;a++){glcd_writeByte(GLCD_CS1,datanet3[a]);}
glcd_pixel(64,56,off) ;
for (a=196;a<=254;a++){glcd_writeByte(GLCD_CS2,datanet3[a]);}
for (a=0;a<=3;a++){glcd_writeByte(GLCD_CS2,datanet4[a]);}
}
}
a que puede deberse q aparezca dicha línea¿? Respecto al código, ¿por qué hay algunos puntos q no se toman en cuenta? es decir, todas las líneas no deberían tener esta sintaxis:
glcd_pixel(0,0,off) ;
for (a=0;a<=63;a++){glcd_writeByte(GLCD_CS1,datanet0[a]);}
glcd_pixel(64,0,off) ;
for (a=64;a<=127;a++){glcd_writeByte(GLCD_CS2,datanet0[a]);}
glcd_pixel(0,8,off) ;
for (a=128;a<=191;a++){glcd_writeByte(GLCD_CS1,datanet0[a]);}
glcd_pixel(64,8,off) ;
for (a=192;a<=254;a++){glcd_writeByte(GLCD_CS2,datanet0[a]);}
Probé de esa forma pero el logo me sale movido :(
Alguna sugerencia?
-
Bueno, he modificado el código de esta manera:
//muestra toda la linea 0
glcd_pixel(0,0,off) ;
for (a=1;a<=63;a++){glcd_writeByte(GLCD_CS1,datanet0[a]);}
glcd_pixel(64,0,off) ;
for (a=64;a<=127;a++){glcd_writeByte(GLCD_CS2,datanet0[a]);}
glcd_pixel(0,8,off) ;
for (a=128;a<=190;a++){glcd_writeByte(GLCD_CS1,datanet0[a]);}
glcd_pixel(64,8,off) ;
for (a=191;a<=254;a++){glcd_writeByte(GLCD_CS2,datanet0[a]);}
//muestra toda la linea 1
glcd_pixel(0,16,off) ;
for (a=1;a<=63;a++){glcd_writeByte(GLCD_CS1,datanet1[a]);}
glcd_pixel(64,16,off) ;
for (a=64;a<=127;a++){glcd_writeByte(GLCD_CS2,datanet1[a]);}
glcd_pixel(0,24,off) ;
for (a=128;a<=190;a++){glcd_writeByte(GLCD_CS1,datanet1[a]);}
glcd_pixel(64,24,off) ;
for (a=191;a<=254;a++){glcd_writeByte(GLCD_CS2,datanet1[a]);}
//muestra toda la linea 2
glcd_pixel(0,32,off) ;
for (a=1;a<=63;a++){glcd_writeByte(GLCD_CS1,datanet2[a]);}
glcd_pixel(64,32,off) ;
for (a=64;a<=127;a++){glcd_writeByte(GLCD_CS2,datanet2[a]);}
glcd_pixel(0,40,off) ;
for (a=128;a<=190;a++){glcd_writeByte(GLCD_CS1,datanet2[a]);}
glcd_pixel(64,40,off) ;
for (a=191;a<=254;a++){glcd_writeByte(GLCD_CS2,datanet2[a]);}
//muestra toda la linea 3
glcd_pixel(0,48,off) ;
for (a=1;a<=63;a++){glcd_writeByte(GLCD_CS1,datanet3[a]);}
glcd_pixel(64,48,off) ;
for (a=64;a<=127;a++){glcd_writeByte(GLCD_CS2,datanet3[a]);}
glcd_pixel(0,56,off) ;
for (a=128;a<=190;a++){glcd_writeByte(GLCD_CS1,datanet3[a]);}
glcd_pixel(64,56,off) ;
for (a=191;a<=254;a++){glcd_writeByte(GLCD_CS2,datanet3[a]);}
glcd_pixel(0,64,off) ;
for (a=1;a<=3;a++){glcd_writeByte(GLCD_CS1,datanet4[a]);}
por algún motivo aparece una línea clara q es como si dividiera la pantalla en 2, el GLCD_CS1 y el GLCD_CS2, por lo menos no se ve tan mal ahora.
Respecto al código me refería a los for :
for (a=1;a<=63;a++)
for (a=64;a<=127;a++)
for (a=128;a<=190;a++)
for (a=191;a<=254;a++)
Alguien q tenga más experiencia con los GLCD podría explicar si esto es normal, o estoy obviando algo, o quizás estoy dando mal las coordenadas.
Agradeceré cualquier comentario.
-
Hola Burzredion,
Has visto este post?
http://www.todopic.com.ar/foros/index.php?topic=15750.msg100839#msg100839
A ver si te sirve de ayuda.
Un saludo desde Alicante.
-
Hola Azicuetano,
ya había visto ese post, pero no lo había probado :roll:, estuve intentando hacerlo con la sintaxis q usa monopic, voy a probar con tu sintaxis, claro que el tamaño de la constante es diferente al que men genera el software, supongo que debo tomarlo de 64 en 64 bytes.
Otra consulta, ¿cómo manejo los textos generados por el G.T.P._? la librería glcd.c tiene una función para visualizar textos, glcd_text57(), pero quiero usar otro tipo de letra, según veo, cada caracter es de 5bytes en dicha librería, pero las que me genera el G.T.P._ son variables, dependiendo del tamaño, un caracter puede contener 10, 12, etc bytes. Por ejemplo:
STATIC CONST UNSIGNED INT8 Times_New_Roma8 []={
0x08,0x0E,0x00,0xC4,0x00,0xC7,0xE0,0xC5,0x18,0xC1,0xE0,0xC5,
0x00,0xC7,0x00,0xC4,0x00,0xC0
}; //Para la letra A
Entonces como es de más de 5bytes usé el método q vengo usando para hacer las gráficas:
glcd_pixel(0,0,off) ;
for (a=0;a<=6;a++){glcd_writeByte(GLCD_CS1,Times_New_Roma8[a]);}
glcd_pixel(0,0,off) ;
for (a=7;a<=13;a++){glcd_writeByte(GLCD_CS1,Times_New_Roma8[a]);}
glcd_pixel(0,0,off) ;
for (a=14;a<=17;a++){glcd_writeByte(GLCD_CS1,Times_New_Roma8[a]);}
y no obtengo la letra A :( voy a probar haciéndolo con tu sintaxis haber que resultados obtengo, es un dolor de cabeza usar estas librerías, pero no me daré por vencido.
gracias por responder mi consulta.