Autor Tema: escribir medida analogica con glcd_text57()  (Leído 10157 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
escribir medida analogica con glcd_text57()
« en: 01 de Noviembre de 2010, 07:59:08 »

Hola, estoy con mis primeros pasos en una pantalla GLCD, y de momento quiero poner una simple lectura del PIN_A0. Pongo una tension constante de 3 voltios ( por ejemplo) en dicho pin, y quiero que salga por pantalla la medición.

Con LCD's de dos lineas no he tenido problemas, pero con GLCD si. Primero, al usar esta función, he de combertir la lectura ( que la tengo como float) a char. La conversión es correcta, pero ya pasa que la lectura deberia ser no float, sino int16. Pongo float porque la función  de conversión no me deja trabajat con int16 ( mas bien en los parametros no sale nada para int16).

He dicho que la conversion es correcta, porque en efecto puede mostar por pantalla. Pero el valor de tension me sale 0 voltios siempre.

Si pongo solo que lea ( read_adc() ) me sale 153, que es el valor hex. Para hacer una correcta lectura, hago lo siguiente :

tension=5*read_adc()/1024;

Pero la lectura no consigo que me salga correcta

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: escribir medida analogica con glcd_text57()
« Respuesta #1 en: 01 de Noviembre de 2010, 08:26:29 »
Hola PICYO, parece que tienes configurada la resolución del adc a 8 bits y en tu código la estás interpretando como si fuese de 10 bits.  Si está a 8 bits y con una alimentación de 3V en el pin entonces:
 
tension=5*read_adc()/256; te daría 2.98 V con un valor en read_adc() de 153.

Saludos!

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: escribir medida analogica con glcd_text57()
« Respuesta #2 en: 01 de Noviembre de 2010, 08:27:59 »
perdon he olvidado el codigo :
Código: C
  1. // programa aprendizaje graphical LCD
  2. #include <18f4550.h>
  3.  
  4.  
  5. #use delay(clock=40000000)
  6. #include <HDM64GS12.c>
  7. #include <GRAPHICS.c>
  8. #include <math.h>
  9. #fuses HS,NOWDT, NOPROTECT
  10.  
  11. #byte CMON=0x0FB4  // configuracion  del puerto comparador, AN0 entrada analogica, y referencia interna
  12. #byte TRISA=0xF92
  13.  
  14.  
  15. #ifndef GLCD_WIDTH
  16. #define GLCD_WIDTH   128
  17. #endif
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24. void presentacion(void);
  25.  
  26. void main(){
  27.  
  28. float  tension;
  29. char Palabra_Tension[]="Tension: ";
  30. char TensionNumAtexto[4];
  31.  
  32. TRISA=0b11101011;
  33. CMON=0b00000110; // es como usar setup_comparator(A0_VR_A1_VR)
  34.  
  35.  
  36.  
  37. setup_adc_ports(ALL_ANALOG);
  38. setup_adc(ADC_CLOCK_INTERNAL);
  39. set_adc_channel(0);
  40. delay_us(10);
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  //presentacion();
  47.  //glcd_fillScreen(OFF);
  48.  
  49. while(true){
  50. SET_TRIS_A(0xFF);
  51.  
  52. tension=5*read_adc()/1024;
  53. //tension=read_adc();
  54. delay_us(10);
  55.  
  56. glcd_init(ON);
  57. glcd_text57(0,10,Palabra_Tension,1,1);
  58. sprintf(TensionNumAtexto,"%f",tension);// conversion de float  a caracter, ya que la funcion glcd_text75 no permite usar mas que caracteres
  59. glcd_text57(50,10,TensionNumAtexto,1,1);
  60. delay_ms(500);
  61.  
  62.  
  63.  
  64.  
  65.  
  66. }//while
  67.  
  68.  
  69.  
  70. }// main
  71.  
  72.  
  73.  
  74.  
  75.  
  76. //////////  cuerpo funciones //////////////////////////////////////////
  77. /////////////////////////////////////////////////////////////////////////
  78. void presentacion(){
  79. char fraseBienvenida[]="Bienvenido,";
  80. char Guindous[]="Guindous";
  81. int x;
  82. glcd_init(ON);
  83. glcd_text57(33,30,fraseBienvenida,1,1);
  84. glcd_rect(33, 50, 93, 55, NO, ON);//glcd_rect(x1, y1, x2, y2, fill, color
  85.    for (x=0;x<=60;x++){
  86.    glcd_rect(33, 50, 33+x, 55, NO, ON);//glcd_rect(x1, y1, x2, y2, fill, color)
  87.    delay_ms(5);
  88.    }
  89. glcd_fillScreen(OFF);
  90. glcd_text57(0,10,Guindous,3,1);
  91. delay_ms(1000);
  92. }

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: escribir medida analogica con glcd_text57()
« Respuesta #3 en: 01 de Noviembre de 2010, 08:33:37 »
Hola bmb!
Si, haciendo ese calculo con 256 salen practicamente los 3 voltios que meto. pero Al poner la linea:

tension=5*read_adc()/256;

me salen de nuevo 0 voltios. Si hacemos el calculo nosotros, es correcto, pero en programa no sale bien. Creo que es un problema de compatibilidad de tipos, con la funcion fprintf y/o glcd_text57, ya que salen 0 voltios ( 0,0)

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: escribir medida analogica con glcd_text57()
« Respuesta #4 en: 01 de Noviembre de 2010, 09:33:48 »
Hola PICYO, si quieres trabajar el adc a 10 bits pones esta directiva: #device adc=10.  También veo que te faltan unos fuses importantes: NOLVP y NOPBADEN.  Tampoco deberías activar todas las entradas análogas, sino solamente las que vayas a usar, por ejemplo: setup_adc_ports(AN0|VSS_VDD);
Como lo que devuelve read_adc() es un valor entero de 10 bits, la variable tension la deberías configurar como: long tension;
Desafortunadamente no conozco el uso de las instrucciones para el GLCD, asi que no se si están bien, pero dando un poco de orden a lo que tienes y comentando algunas instrucciones que no les veo uso por ahora, te sugeriría:

Código: [Seleccionar]
#include <18F4550.h>
#device adc=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES BORV28                   //Brownout reset at 2.8V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES NOSTVREN                 //Stack full/underflow will not cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES NOIESO                   //Internal External Switch Over mode disabled
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled
#FUSES NOPBADEN                 //PORTB pins are configured as digital I/O on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOLPT1OSC                //Timer1 configured for higher power operation
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL1                     //No PLL PreScaler
#FUSES CPUDIV1                  //No System Clock Postscaler
#FUSES NOUSBDIV                 //USB clock source comes from primary oscillator
#FUSES NOVREGEN                 //USB voltage regulator disabled
#FUSES NOICPRT                  //ICPRT disabled

#use delay(clock=40000000)

#include <HDM64GS12.c>
#include <GRAPHICS.c>
#include <math.h>

// #byte CMON=0x0FB4  // configuracion  del puerto comparador, AN0 entrada analogica, y referencia interna
// #byte TRISA=0xF92

#ifndef GLCD_WIDTH
#define GLCD_WIDTH   128
#endif

void presentacion(void);

void main()
{
   long tension;
   char Palabra_Tension[]="Tension: ";
   char TensionNumAtexto[4];
   
   setup_adc_ports(AN0|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);   

//   TRISA=0b11101011;
//   CMON=0b00000110; // es como usar setup_comparator(A0_VR_A1_VR)

   set_adc_channel(0);
   delay_us(10);
   
   //presentacion();
   //glcd_fillScreen(OFF);
   
   while(true)
   {
      tension=5*read_adc()/1024;
//    tension=read_adc();
      delay_us(10);
      glcd_init(ON);
      glcd_text57(0,10,Palabra_Tension,1,1);
      sprintf(TensionNumAtexto,"%lu",tension);   // conversion de long  a caracter, ya que la funcion glcd_text75 no permite usar mas que caracteres
      glcd_text57(50,10,TensionNumAtexto,1,1);
      delay_ms(500);
   }
}

//////////  cuerpo funciones //////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
void presentacion()
{
   char fraseBienvenida[]="Bienvenido,";
   char Guindous[]="Guindous";
   int x;

   glcd_init(ON);

   glcd_text57(33,30,fraseBienvenida,1,1);
   glcd_rect(33, 50, 93, 55, NO, ON);  //glcd_rect(x1, y1, x2, y2, fill, color   
   for (x=0;x<=60;x++)
   {
      glcd_rect(33, 50, 33+x, 55, NO, ON);  //glcd_rect(x1, y1, x2, y2, fill, color)   
      delay_ms(5);   
   }
   glcd_fillScreen(OFF);
   glcd_text57(0,10,Guindous,3,1);
   delay_ms(1000);
}

Saludos!

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: escribir medida analogica con glcd_text57()
« Respuesta #5 en: 01 de Noviembre de 2010, 16:12:52 »
Hola!
Bueno he visto que el pic 18F4550 solo trabaja con 10 bits en la conversión. he cambiado tal como me has dicho y he visto una mejora : 2 voltios, pero no me escribe los 3. Creo que seria mejor trabajar con otra librería, porqué el hecho que para escribir no me deje mas que tratar por caracteres ( hacer la conversión a char de todo lo que quiera) es bastante incómodo. Con la librería lcd.h ( usualmente para displays de 2 lineas) ese problema no está. Probaré con esta librería, a ver. De todos modos, se ha de cargar la de glcd por los drivers, y para modo presentación ( es cómodo dibujar pixel a pixel, pero no escribir texto). Probaré esa alternativa a ver que tal. De todos modos, si alguien usa normalmente esta librería, que me diga si realmente vale la pena calentarse el cerebro o usar otra ( probare LCD.h)

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: escribir medida analogica con glcd_text57()
« Respuesta #6 en: 01 de Noviembre de 2010, 18:02:58 »
Estuve leyendo la librería del GLCD y no hay problema con eso.  En realidad el programa está funcionando bien y ahora veo por que la variable tension era inicialmente de tipo float.  Pásala de nuevo a float: float tension; y char TensionNumAtexto[10]; para que tenga capacidad de almacenar los decimales.  Luego cambias esta instrucción:
Código: [Seleccionar]
tension=5*read_adc()/1024; por esta:
Código: [Seleccionar]
tension=5.0*(float)read_adc()/1024.0;Lo anterior se llama 'type casting' y es para que toda la operación sea de tipo float.  Finalmente cambias esta instrucción:
Código: [Seleccionar]
sprintf(TensionNumAtexto,"%lu",tension);  por esta:
Código: [Seleccionar]
sprintf(TensionNumAtexto,"%f",tension);
Saludos!


Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: escribir medida analogica con glcd_text57()
« Respuesta #7 en: 02 de Noviembre de 2010, 14:18:35 »
Si, con int no se puede porqué ( al menos en CCS) int es una palabra de 8 bits ( lo mismo que int8...que no sé por qué existe esa variable), y el DAC es de 10 bits. Entonces traté de usar int16 ( la verdad, ví que lo usaba la gente y me pareció lógico). Pero esa dichosa función de conversión no se tragaba los int16, por eso puse float. Ahora bien, lo que has hecho es lo que me sonaba que debia hacer, porque hace unos dias vi por ahí esa función de Visual C++ ( o de C++) que es safe_cast<tipo>, pero no me acordaba como coñe se hacia esto en C :D. De todos modos, no tenía puesto ponerla ahí. creía que podría hacer la conversión a tensión, después de hacer el read(). Me ha gustado mucho así como lo has hecho tú, hacer la conversión de tipo y la lectura  en una misma acción. ¡ Grácias!

Ahora para jugar con el lcd, trataré de bajrme algún programa ( gratuito o demo, si los hay) que te convierte a mapa de caracteres, y te lo pasa a hexadecimal, para poder poner una pantalla de presentación digna ( o un cuadro de botones o o que sea). Ya lo subiré por aquí. Supongo que ya estará esto por este foro, pero ya que está este hilo abierto, pues aprobecho y lo pongo aquí también.
hasta luego!

Por cierto, si, la lectura es correcta, falla quizas en la precisión de 0,01, quizas sea por ( según he leido) al usar el temporizador interno, da alguna inestabilidad o inexactitud en los 2 bms ( he de leerlo mejor). Como solución algo "cutre" he puesto a la función una suma de 0,01... y ya está. Sólo fallará cuando la entrada sean 0 voltios, el LCD me mostrará 0.01, cuando sean 0 "reales" y 0.01 también "reales". Podría hacer una medición previa, y ver el número hexadecimal que saca el DAC. Desde ése número puedo saber si la medida real es 0 ó 0.01

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: escribir medida analogica con glcd_text57()
« Respuesta #8 en: 02 de Noviembre de 2010, 15:14:44 »
Por aqui por el foro creo que anda un programa de conversión que se llama GCLCD.  También en internet puedes encontrar varios gratuitos como por ejemplo el FastLCD.

La verdad yo no me preocuparía por un error de 0.01 Voltios, ya que 1/100 de voltio de error se puede ver por muchas razones, entre ellas que por ejemplo tu voltímetro tenga ese error, o que por la resolución del ADC no puedas conseguir más precisión (aunque en teoría con 10 bits y Vref de 5V si deberías tener una precisión de 1/100 de Voltio).

Saludos!

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: escribir medida analogica con glcd_text57()
« Respuesta #9 en: 02 de Noviembre de 2010, 15:27:47 »

Hola! Probaré esos programas, he encontrado uno peor no me deja hacer escala de grises ( demo), y estoy viendo cómo meter la matriz que me ha generado. pero probaré todos estos que me dices, a ver que tal van. Bueno, eso ya mañana, que el cuerpo después de un dia de curro y aqui un rato, me pide descanso :)
Mañana te digo que tal me va.
Hasta luego!

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: escribir medida analogica con glcd_text57()
« Respuesta #10 en: 02 de Noviembre de 2010, 17:59:51 »
Al usar alguno de estos programas te genera un archivo con unos valores hexadecimales.  Algunos de esos programas generan directamente un archivo .h para CCS y si no, lo más práctico poner los números generados en un archivo por ejemplo: dibujo.h asi:
Código: [Seleccionar]
CONST BYTE dibujo [8192] = {0x01,0x01,0x01,0x01,0x00,0x01,0x00, .........................0x01};El tamaño del array (en el ejemplo para pantalla de 128 x 64 = 8192) lo cambias de acuerdo al tamaño del array generado.  Después, en el programa donde van los includes pones uno asi: #include "dibujo.h" y luego dependiendo del tamaño de la pantalla puedes insertar un código más o menos así (ej. pantalla de 128 x 64):

Código: [Seleccionar]
  long pix = 0;
   int x, y;

   glcd_fillScreen(OFF);              // Borrar la pantalla

   for (y=0; y<64; y++)
   {
      for (x=0; x<128; x++)
      {
         glcd_pixel(x, y, dibujo[pix]);
         pix++;
      }
   }

Saludos!
« Última modificación: 02 de Noviembre de 2010, 23:10:21 por bmb »

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: escribir medida analogica con glcd_text57()
« Respuesta #11 en: 04 de Noviembre de 2010, 14:18:19 »

Hola!

Bueno respecto los programas, he encontrado solo 3, uno de ellos me saca funciones y todo, en un codigo C ( las funciones las borro y cambio la extensión a .h). Pero el programa al ser demo, no me deja ver nada... no se donde esta la demo... porque ni visualmente puedo ver nada, y la matriz está a cero.
Luego he visto un programa bastante majo, de MicroElectronica. Pero al dibujar ( hago el procdimiento que me dices) no se dibuja nada, sólo se ven puntitos. La culpa, e sque lo hacen en un string  de 1024 caracteres, no de 8192. Ahora si que estoy perdido...

Código: C
  1. // ------------------------------------------------------
  2. // GLCD Picture name: logo_guindous.bmp
  3. // GLCD Model: KS0108 128x64            
  4. // ------------------------------------------------------  
  5.  
  6. unsigned char const logo_guindous_bmp[1024] = {
  7.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  8.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  9.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,248,140,172, 68,172,  4,
  10.  172, 68,172,  4,172, 68,172,  4,172, 68,252,  0,  8,254,172, 24,
  11.  176, 96,192,192,136,128,128,  0,128,  0,  0,  0,  8,  0,  0,  0,
  12.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  13.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  14.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  15.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  16.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  17.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  7,126,100,106, 32,
  18.  170, 32, 42, 32, 42, 36, 42, 32,170, 96, 95,112,104,  0,  3, 14,
  19.  154,  8, 10,  8, 10, 12, 10,  9,139,  9, 11,  9, 11, 13,  7,  7,
  20.  131,  3,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  21.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  22.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  23.  128,  0,  0,  0,  8,240,144,144,240,  0,192,  0,200, 64, 64, 64,
  24.  128,120,192,192,120, 16,  0,192, 64, 64, 64,192,136,  0,  0,  0,
  25.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,254,170,  2,
  26.  171, 65,171,  1,171, 69,171,  1,171, 65,171,  1,255,  0,  0,  3,
  27.  255,193,171,  1,171, 69,171,  1,171, 65,171,  1,171, 69,171,255,
  28.  131,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  29.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  30.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  31.  128,  0,  0,192,232,231,224,224,224,224,231,224,239,228,228, 68,
  32.  128,  0,  1,143,200,128,  0,  7,133,  4,  5,  6,207,224,192,128,
  33.  128,  0,  0,224,232,224,  0,  0,128,  0,  0,  0,  8, 15, 14,  6,
  34.  130,  2,  2,  2, 10,  2,  2,  2,130,  2,  2,  2, 15,  6,  4,  0,
  35.  131,  1,  1,249,253,249,  1,  1,129,  1,  1,  1,137,193,193,193,
  36.  192,192,192,128,  8,  0,  0,  0,128,  0,128,128,  8,  0,  0,  0,
  37.  128,  0,  0,  0,136,128,  0,  0,128,128,128,128,136,128,128,128,
  38.  128,128,128,128,136,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  39.  128,  0,  0,255,255,255,  0,  0,128,  0,  0,  0,  8,  0,  0,128,
  40.  128,128,  0,225,233,225,  0,  0,128,  0,  0,  0,  8,225,225,225,
  41.  128,  0,  0,249,249,249,  0,  0,252,254,252,248,252, 30, 15,  7,
  42.  131,  3,  7, 15,254,252,224,  0,128,  0,240,248, 62, 30,  7,  7,
  43.    7,  7,  7,255,255,255,  0,  0,240,252,255, 31,  7,  3,  1,  1,
  44.    1,  1,  3,  7, 31,254,252,240,128,  0,255,255,  8,  0,  0,  0,
  45.  128,  0,  0,  0,255,255,  0,  0,191,127,243,225,201,129,129,129,
  46.  129,  1,  1,  3, 15,  7,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  47.  128,  0,  0,255,255,255,  7,  7,  7,  7,  7,  7,  7,  7,255,255,
  48.  255,  3,  1,255,255,255,  0,  0,128,  0,  0,  0,  8,255,255,255,
  49.  128,  0,  0,255,255,255,  0,  0,255,255,255,  1,  8,  0,  0,  0,
  50.  128,  0,  0,  0,255,255,255,  0,128,  0,255,255,  0,  0,  0,  0,
  51.    0,  0,  0,255,255,255,  0,  1,191,255,253,224,128,  0,  0,  0,
  52.    0,  0,  0,128,224,255,255, 63,128,  0,127,255,232,128,  0,  0,
  53.  128,  0,  0,192,255,255,  0,  0,128,  0,  0,  1,  9,  1,  1,  3,
  54.  131,  3,  7,255,254,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  55.  128,  0,  0,  3, 15,  7,  7,  7,135,  7,  7,  7, 15,  7,  7,  7,
  56.  131,  0,  0,  3, 15,  7,  7,  7,135,  7,  7,  7, 15,  7,  7,  3,
  57.  128,  0,  0,  7, 15,  3,  0,  0,131,  3,  3,  0,  8,  0,  0,  0,
  58.  128,  0,  0,  0, 15,  7,  7,  0,128,  0,  3,  7, 15,  6,  6,  6,
  59.  134,  6,  7,  7, 15,  7,  0,  0,128,  0,  3,  3, 15, 15, 14, 14,
  60.  142, 14, 15,  7, 11,  1,  0,  0,128,  0,  0,  1, 11,  7,  7,  6,
  61.  134,  6,  6,  7, 15,  0,  0,  0,128, 12, 12, 12, 12, 12, 12, 12,
  62.  140, 14, 15,  7, 11,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  63.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  64.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  65.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  66.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  67.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  68.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  69.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0,
  70.  128,  0,  0,  0,  8,  0,  0,  0,128,  0,  0,  0,  8,  0,  0,  0
  71. };

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: escribir medida analogica con glcd_text57()
« Respuesta #12 en: 04 de Noviembre de 2010, 19:38:52 »
Hola PICYO, dale una mirada a este enlace: http://www.todopic.com.ar/foros/index.php?topic=23122.msg196343#msg196343

Allí explican como puedes poner un archivo de imagen en el LCD gráfico y hay un enlace a un programa para esto.

Saludos!

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: escribir medida analogica con glcd_text57()
« Respuesta #13 en: 05 de Noviembre de 2010, 16:56:22 »
Hola bmb!
Si, vi ese enlace ayer, y ahora estaba con ello. Lo que no se si es a mi..pero los pantallazos que pega el autor hay algunos que no los veo, y hay menus que no me salen. El programa esta muy bien, pero estoy en ello...en el punto "pegar imagen" ya no me deja. en fin

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: escribir medida analogica con glcd_text57()
« Respuesta #14 en: 08 de Noviembre de 2010, 14:17:45 »
Hola bmb! La verdad, prefiero probar con este programa, como el resto de gente. Al final ya conseguí sacar el código, aunque he cambiado a int8 el tipo de variable ( siguiendo las indicaciones del otro hilo), y además he puesto una variable estilo :

const int8 variable[120][64]={};

Bueno paso el código creado, y modificado:
el main()
Código: C
  1. // programa aprendizaje graphical LCD
  2. #include <18f4550.h>
  3. #device adc=10
  4.  
  5. #use delay(clock=40000000)
  6. #include <HDM64GS12.c>
  7. #include <GRAPHICS.c>
  8. #include <math.h>
  9. #include <lcd.c>
  10. #include <NewBitmap.h>
  11. #fuses HS,NOWDT, NOPROTECT,NOPROTECT,NOLVP,NODEBUG
  12.  
  13.  
  14.  
  15. #ifndef GLCD_WIDTH
  16. #define GLCD_WIDTH   128
  17. #endif
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24. void presentacion(void);
  25.  
  26.  
  27. void main(){
  28.  
  29.  
  30.  
  31. float  tension;
  32. char Palabra_Tension[]="Tension: ";
  33. char TensionNumAtexto[7];
  34. long pix1 = 0,pix2=0;
  35. int x, y;
  36.  
  37. //TRISA=0b11101011;
  38. //CMON=0b00000110; // es como usar setup_comparator(A0_VR_A1_VR)
  39.  
  40.  
  41.  
  42. setup_adc_ports(AN0|VSS_VDD);
  43. setup_adc(ADC_CLOCK_INTERNAL);
  44. set_adc_channel(0);
  45.  
  46.  
  47. presentacion();
  48.  
  49. glcd_fillScreen(OFF);              // Borrar la pantalla
  50.  
  51. while(1){
  52. for (x=0; x<128; x++)
  53.    {
  54.  
  55.       for(y=0;y<64;y++){
  56.  
  57.          glcd_pixel(x, y,NewBitmap[pix1][pix2]);
  58.          pix1++;
  59.          pix2++;
  60.          delay_ms(1000);
  61.          }
  62.  
  63.    }
  64. }
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73. while(true){
  74. //SET_TRIS_A(0xFF);
  75. tension=(5.0*(float)read_adc()/1024.0);
  76. glcd_init(ON);
  77. glcd_text57(0,10,Palabra_Tension,1,1);
  78. sprintf(TensionNumAtexto,"%f",tension);// conversion   a caracter, ya que la funcion glcd_text75 no permite usar mas que caracteres
  79. glcd_text57(50,10,TensionNumAtexto,1,1);
  80. delay_ms(1000);
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90. }//while
  91.  
  92.  
  93.  
  94. }// main
  95.  
  96.  
  97.  
  98.  
  99.  
  100. //////////  cuerpo funciones //////////////////////////////////////////
  101. /////////////////////////////////////////////////////////////////////////
  102. void presentacion(){
  103. char fraseBienvenida[]="Bienvenido,";
  104. char Guindous[]="Guindous";
  105. int x;
  106. glcd_init(ON);
  107. glcd_text57(33,30,fraseBienvenida,1,1);
  108. glcd_rect(33, 50, 93, 55, NO, ON);//glcd_rect(x1, y1, x2, y2, fill, color
  109.    for (x=0;x<=60;x++){
  110.    glcd_rect(33, 50, 33+x, 55, NO, ON);//glcd_rect(x1, y1, x2, y2, fill, color)
  111.    delay_ms(5);
  112.    }
  113. glcd_fillScreen(OFF);
  114. glcd_text57(0,10,Guindous,3,1);
  115. delay_ms(1000);
  116. }

el archivo de la imagen :
Código: C
  1. /* Data generated with bitmap2LCD V1.8 (D)*/
  2. /* 08/11/2010 17:53:29 */
  3. /* Bitmap Source file : NewBitmap.bmp */
  4. /* Byte width format is 8 bit  */
  5.  
  6. //#include <avr/pgmspace.h>
  7.  
  8. const int8  NewBitmap [128][64] = {
  9.  
  10.  
  11.  
  12.  
  13.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  14.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  15.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  16.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  17.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x09
  18.  0xFF , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  19.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x02 , 0x3F
  20.  0xFF , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  21.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0x7F
  22.  0x7F , 0xFE , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  23.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0E , 0x7F
  24.  0x7F , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  25.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0E , 0x7F
  26.  0x7F , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  27.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1E , 0x7E
  28.  0x7F , 0xFF , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  29.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3C , 0xFE
  30.  0xFF , 0xFF , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  31.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3C , 0xFE
  32.  0xFF , 0xFF , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  33.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3C , 0xFC
  34.  0xFF , 0xFF , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  35.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3C , 0xFD
  36.  0xFF , 0xFF , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  37.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x79 , 0xF9
  38.  0xFF , 0xFF , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  39.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x79 , 0xF3
  40.  0xFF , 0xC3 , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  41.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7B , 0xF7
  42.  0xFF , 0xC3 , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  43.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFB , 0xE7
  44.  0xFF , 0xCB , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  45.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xF3 , 0xFF
  46.  0xFF , 0xCB , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  47.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xF3 , 0xFF
  48.  0xFF , 0xE3 , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  49.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xEF , 0xFF
  50.  0xFF , 0xFF , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  51.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xC1 , 0xFF
  52.  0xFF , 0xFF , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  53.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xFF
  54.  0xFF , 0xFF , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  55.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x23 , 0xFF
  56.  0xFF , 0xFF , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  57.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xC3 , 0xFC
  58.  0xFF , 0xFF , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  59.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0xC7 , 0xFF
  60.  0x1F , 0xFF , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  61.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0xC7 , 0xFF
  62.  0x07 , 0xFF , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  63.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x87 , 0xFF
  64.  0x01 , 0xFF , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  65.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0x8F , 0xFF
  66.  0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  67.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0x8F , 0xFF
  68.  0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  69.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0x8F , 0xFF
  70.  0xFF , 0xFF , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  71.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0x0F , 0xFF
  72.  0xFF , 0xFF , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  73.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0x1F , 0xFF
  74.  0xFF , 0xFF , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  75.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0x1F , 0xFF
  76.  0xFF , 0xFF , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  77.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0E , 0x1F , 0xFF
  78.  0xFF , 0xFF , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  79.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1E , 0x3F , 0xFF
  80.  0xFF , 0xFF , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  81.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1E , 0x3F , 0xFF
  82.  0xFF , 0xFF , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  83.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1C , 0x3F , 0xFF
  84.  0xFF , 0xFF , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  85.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3C , 0x37 , 0xFF
  86.  0xFF , 0xFE , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  87.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3E , 0x03 , 0xFF
  88.  0xFF , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  89.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x36 , 0x00 , 0x7F
  90.  0xFF , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  91.  0x00 , 0x00 , 0x00 , 0x1C , 0x00 , 0x2C , 0x00 , 0x3F
  92.  0xFF , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  93.  0x00 , 0x00 , 0x00 , 0x1E , 0x00 , 0x7C , 0x00 , 0x07
  94.  0xFF , 0xC0 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  95.  0x00 , 0x00 , 0x00 , 0x0F , 0x00 , 0xF8 , 0x00 , 0x07
  96.  0xFF , 0x01 , 0x08 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  97.  0x00 , 0x00 , 0x00 , 0x07 , 0x87 , 0xE0 , 0x00 , 0x01
  98.  0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  99.  0x00 , 0x00 , 0x00 , 0x03 , 0xFF , 0x80 , 0x00 , 0x00
  100.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  101.  0x00 , 0x00 , 0x00 , 0x01 , 0xFE , 0x00 , 0x00 , 0x00
  102.  0x0F , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  103.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  104.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  105.  0x00 , 0x0C , 0x0C , 0xC0 , 0x00 , 0x01 , 0xC0 , 0x00
  106.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  107.  0x3F , 0xCC , 0x0C , 0xC0 , 0x00 , 0x01 , 0xC0 , 0x00
  108.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  109.  0x3F , 0xCC , 0x0C , 0xC0 , 0x00 , 0x01 , 0xC0 , 0x00
  110.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  111.  0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x19 , 0xC0 , 0x00
  112.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  113.  0x30 , 0x00 , 0x00 , 0xCE , 0xF8 , 0x7D , 0xC3 , 0xE0
  114.  0x00 , 0x01 , 0xFA , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  115.  0x30 , 0x0C , 0x0C , 0xCF , 0xFC , 0xFF , 0xCF , 0xF0
  116.  0x60 , 0xC3 , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  117.  0x30 , 0x0C , 0x0C , 0xCF , 0x1C , 0xE3 , 0xCE , 0x38
  118.  0x60 , 0xC3 , 0x0C , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  119.  0x30 , 0x0C , 0x0C , 0xCE , 0x1C , 0xE1 , 0xDC , 0x18
  120.  0x60 , 0xC3 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  121.  0x3F , 0xCC , 0x0C , 0xCE , 0x1D , 0xC1 , 0xDC , 0x1C
  122.  0x60 , 0xC3 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  123.  0x3F , 0xCC , 0x0C , 0xCE , 0x1D , 0xC1 , 0xDC , 0x1C
  124.  0x60 , 0xC3 , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  125.  0x3F , 0xCC , 0x0C , 0xCE , 0x1D , 0xC1 , 0xDC , 0x1C
  126.  0x60 , 0xC1 , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  127.  0x30 , 0xCC , 0x0C , 0xCE , 0x1C , 0xC1 , 0xDC , 0x1C
  128.  0x60 , 0xC0 , 0x0E , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  129.  0x30 , 0xCC , 0x0C , 0xCE , 0x1C , 0xE3 , 0xCC , 0x38
  130.  0x31 , 0x80 , 0x0E , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  131.  0x30 , 0xCC , 0x0C , 0xCE , 0x1C , 0xF7 , 0xCF , 0x78
  132.  0x3F , 0x87 , 0x0C , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  133.  0x3F , 0xCF , 0xFC , 0xCE , 0x1C , 0x7D , 0xC7 , 0xF0
  134.  0x1F , 0x03 , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  135.  0x3F , 0xCF , 0xFC , 0xCE , 0x1C , 0x39 , 0xC3 , 0xC0
  136.  0x0E , 0x01 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  137.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  138.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  139.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
  140.  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00  0x00
  141. };
  142. /******************/
  143. /* 1024 Bytes */
  144. /* End of LCD Pattern  */
  145. /* Save table and see info file C:\Proyectos\GLCD\logos\NewBitmap.doc */

Bueno, cuando pongo la imágen, hay un bucle while infinito, que hace que no entre en el siguiente bucle. Lo he hecho a sabiendas, para que no dejase de ejecutar la imagen. Pero no funciona, sigo viéndolo todo en blanco...??¿?¿?
Ahjora ya si que es problema de programación, del main, supongo.
Da igual si lo pongo en un array de una dimensión ? Eso es algo que no entiendo por que se puede hacer de dos modos.