Autor Tema: Iniciando con glcd 128x64  (Leído 85477 veces)

0 Usuarios y 6 Visitantes están viendo este tema.

Desconectado nahumof

  • PIC10
  • *
  • Mensajes: 24
Re: Iniciando con glcd 128x64
« Respuesta #90 en: 14 de Junio de 2010, 15:33:12 »
hola AKENA

bueno ya pude er datos de la memoria SPI por hardware, creo que es mas sencillo, no se si sea mejor pero ahora tengo un desface en la imagen, y no se por que, la rutina para imprimir el byte es la que he estado utilizando, lo unico que me queda es que este leyendo alrevez los datos??? alguna ayudadita.

esta es la imagen que se ve desfazada

este es el codigo que imprime la imagen:
Código: [Seleccionar]
// FUncion para leer imagen de la memoria eeprom 24LC256 y dubujar en la GLCD
void glcd_imagen(int16 adress)
 {
  char i,j,d;     
  signed char k;
  for( i = 0 ; i < 64 ; i ++ )           //desplaza en y
   {
    for( j = 0 ; j < 16 ; j ++)         //para hacer los 1024 bits de la imagen
     {   
     d = read_ext_eeprom(adress++);
     d=~d;  //pasa la imagen a positivo
      for(k=0;k<8;k++)               //for para 8bits   
       {     
        if( bit_test(d ,k ))  //si en la posicion de 0xij para 7-k hay pixel
           glcd_pixel( j*8+(7-k),i, ON );  //coloca un pixel en x,y,color                           
       }
    }
  }
}
NO SE POR QUE LA MUEVE!!!!! :5]

bueno saludos y desde ya gracias. :-/

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Iniciando con glcd 128x64
« Respuesta #91 en: 14 de Junio de 2010, 21:52:05 »
Puede que sea un problema de libreria que en vez de leer el estado del LCD (Ocupado), lo cambia por un retardo.

Asi que envia más lento los datos , aumenta el delay de la libreria del GLCD o modifica dicha libreria para leer el estado del GLCD.

A mi me pasaba eso , no se pintaba bien la imagen , se recorria un poco y algunos pixeles no eran pintados.


Desconectado nahumof

  • PIC10
  • *
  • Mensajes: 24
Re: Iniciando con glcd 128x64
« Respuesta #92 en: 14 de Junio de 2010, 22:40:40 »
hola gracias por contestar.
la verdad es que pense eso y baje el osc a 4MHZ agregue delays entre la escritura y lectura de la eeprom, agregue retrazos en el glcd y en la velocidad de cambio de imagen. pero no creo que sea el glcd por que estaba trabajando con SPI por software osea bit por bit y no tenia problemas, pero al usar el spi_write(x); y spi_read(x); no grafica, al revisar las variables usadas el dato esta incorrecto , no corresponde a lo guardado en la memoria... no se a que se debe eso. la verdad es que ya me desespere, tengo desde en la mañana con eso. y na. :(

gracias.

Desconectado nahumof

  • PIC10
  • *
  • Mensajes: 24
Re: Iniciando con glcd 128x64
« Respuesta #93 en: 15 de Junio de 2010, 01:02:04 »
yupiiiiiii :-/ :-/ :-/
despues de mucho brincar con los delays y esas cosas resultase que no configure SPI_XMIT_L_TO_H TODO TODO ESTABA BIEN!!! al colocarlo me desplazo la imagen a la derecha pero ya la imprimio y despues de buscar la desplazo por que estaba leyendo de la memoria el registro de estado status=spi_read(0x05); al comentarlo se borro la imagen pero por que no quite al final de mi instruccion el return status y como que se hizo bolas el micro. borre todo y quedo asi!!!

espero a alguien le sirva

 se ven claros los buses

salio de este post
modos SPI

 :)gracias akena :mrgreen:

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Iniciando con glcd 128x64
« Respuesta #94 en: 15 de Junio de 2010, 04:26:33 »
Que bueno lo has resulto ^^ y ahora con spi  8)

Saludos!

Desconectado nahumof

  • PIC10
  • *
  • Mensajes: 24
Re: Iniciando con glcd 128x64
« Respuesta #95 en: 16 de Agosto de 2010, 20:52:27 »
hola akena nuevamente yo :oops:jejeje pues nada que pase de isis a laimplementacion apenas estoy con pruebas con el micro, pero resulta que inteligentemente se me ocurrio acomodar los pines del LCD sin la mas minima consideracion, jajaja por necesidades, asi que tengo pines del puerto C, D y E para controlar el GLCD y en el p... que me meti. bueno al fin modifique la libreria de HDM64GS12.c hehice algunos arreglos para que funcionara, y funciona ahora bien mis problemas son los siguientes:
 1.-resultase que es muuuuuy lento el cambio de imagen tengo un cristal de 20M y es lento...la pregunta es hay una manera diferente de separar los bits de un byte.
Código: [Seleccionar]
void glcd_writeByte(int1 side, BYTE data)
{
 int i;
   if(side)                   // Choose which side to write to
      output_high(GLCD_CS2);
   else
      output_high(GLCD_CS1);
   output_low(GLCD_RW);        // Set for writing
   //output_d(data);                // salida de datos para el GLCD
   for(i=0;i<=7;++i)               //substituto de informacion saliente
    {                                     //muuuuchomas lento  
     switch(i){
      case 0:
            if(bit_test(data,0))
            {output_high(PIN_E2);}
            else
             output_low(PIN_E2);
             break;
      case 1:
             if(bit_test(data,1))
             {output_high(PIN_E1);}  
             else
             output_low(PIN_E1);
             break;
      case 2:
             if(bit_test(data,2))
             {output_high(PIN_D2);}  
             else
             output_low(PIN_D2);
             break;
      case 3:
             if(bit_test(data,3))
             {output_high(PIN_D3);}  
             else
             output_low(PIN_D3);
             break;
      case 4:
             if(bit_test(data,4))
             {output_high(PIN_C6);}  
             else
             output_low(PIN_C6);
             break;
      case 5:
             if(bit_test(data,5))
             {output_high(PIN_D4);}  
             else
             output_low(PIN_D4);
             break;
      case 6:
             if(bit_test(data,6))
             {output_high(PIN_D5);}  
             else
             output_low(PIN_D5);
             break;
      case 7:
             if(bit_test(data,7))
             {output_high(PIN_D6);}  
             else
             output_low(PIN_D6);
             break;
           }  
       }
   output_high(GLCD_E);       // Pulse the enable pin
   delay_cycles(5);
   output_low(GLCD_E);
   output_low(GLCD_CS1);      // Reset the chip select lines
   output_low(GLCD_CS2);
}
estaba pensando en una string con bits...tambien modifique la lectura del puerto
Código: [Seleccionar]
BYTE glcd_readByte(int1 side)
{
   BYTE data;                 // Stores the data read from the LC
   output_high(GLCD_RW);      // Set for reading

   if(side)                   // Choose which side to write to
      output_high(GLCD_CS2);
   else
      output_high(GLCD_CS1);

   delay_cycles(1);
   output_high(GLCD_E);       // Pulse the enable pin
   //delay_cycles(4);
   // data = input_d();          // Get the data from the display's output register
[color=red][font=Verdana][u][u]   //substituto para saber la posicion del byte en el glcd
   shift_right(&data,1,input(PIN_E2));
   shift_right(&data,1,input(PIN_E1));
   shift_right(&data,1,input(PIN_D2));
   shift_right(&data,1,input(PIN_D3));
   shift_right(&data,1,input(PIN_C6));
   shift_right(&data,1,input(PIN_D4));
   shift_right(&data,1,input(PIN_D5));
   shift_right(&data,1,input(PIN_D6));[/u][/u][/font][/color]
  output_low(GLCD_E);
   output_low(GLCD_CS1);      // Reset the chip select lines
   output_low(GLCD_CS2);
   return data;               // Return the read data
}
cualquier sugerencia es bienvenida!!!!

2.-ocupo activar el HSPLL para manejar el USB y todo a full speed (48M)y cuando pongo el fuse HSPLL distorciona lo que se ve.la pregunta seria lograste manejar el GLCD a mas de 32M
imagen con HS y clk=20mHZ

imagen con HSPLL y clk=48mHZ


cualquier ayuda me vendria vien, voy a probar lo que mencionas de incrementar los tiempos del glcd_e pero quiero saber si lo pudiste manejar a esa velocidad y con que libreria lo lograste..

saludos y gracias desde ya :)
  
« Última modificación: 16 de Agosto de 2010, 20:56:57 por nahumof »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Iniciando con glcd 128x64
« Respuesta #96 en: 16 de Agosto de 2010, 21:32:41 »
Puede que te convenga utilizar output_bit( PIN_B0,bit_test (Data,0)); en lugar de los if. En el caso de leer no se me ocurre otra cosa. Igualmente trabajar     leyendo y re-escribiendo la memoria del GLCD se hace lento. Fijate en el siguiente proyecto, yo utilice este metodo con disponibilidad de puertos y también se nota cuando re-dibuja.

En cambio cuando se utiliza un buffer interno para realizar los cambios y despues volcar todo de una al display cambia bastante:



Saludos!

No contesto mensajes privados, las consultas en el foro

Desconectado nahumof

  • PIC10
  • *
  • Mensajes: 24
Re: Iniciando con glcd 128x64
« Respuesta #97 en: 16 de Agosto de 2010, 21:50:02 »
bueno perdon me contesto yo, agregue las secuencias nop como las usas...no habia checado eso...con un poco menos de tiempo y en menos lugares, y corre a con el HSPLL y el clk a 48mHZ sin pixeles perdidos ni errores, ahun que haciendo los calculos tarda aprox 36ms en colocar un frame lo que nos da aproximadamente unos miserables 27FPS :( estoy en lo correcto?

Desconectado nahumof

  • PIC10
  • *
  • Mensajes: 24
Re: Iniciando con glcd 128x64
« Respuesta #98 en: 16 de Agosto de 2010, 21:53:52 »
ok suky gracias probando... este perdon la ignorancia pero por buffer te refieres al fast lcd...no lo pude hacer jalar bien en proteus y no lo he probado.

deja prueba to anterior respuesta.
gracias :mrgreen:

Desconectado nahumof

  • PIC10
  • *
  • Mensajes: 24
Re: Iniciando con glcd 128x64
« Respuesta #99 en: 16 de Agosto de 2010, 22:18:02 »
genial :-/ :-/ :-/
funciona, no se si me ahorre 3 pesosjajaja pero es mas simple, gracias suky no conocia el output_bit.
mil gracias.
no creo que haya una forma mas simple de leer...cual libreria utilizas para el glcd suky?

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Iniciando con glcd 128x64
« Respuesta #100 en: 16 de Agosto de 2010, 22:43:49 »
ok suky gracias probando... este perdon la ignorancia pero por buffer te refieres al fast lcd...no lo pude hacer jalar bien en proteus y no lo he probado.

deja prueba to anterior respuesta.
gracias :mrgreen:

mmm... Si, en CCS se habilita con FAST_LCD. La forma de trabajarlos es por ejemplo:

Código: [Seleccionar]
GLCD_linea(0,0,127,63); // Carga la linea en el Buffer
glcd_update();// Vuelca el Buffer en el GLCD.

Cuando trabajas de esta manera, modificas toda la pantalla, pero que en realidad se modifica el buffer y despues actualizas.
genial :-/ :-/ :-/
funciona, no se si me ahorre 3 pesosjajaja pero es mas simple, gracias suky no conocia el output_bit.
mil gracias.
no creo que haya una forma mas simple de leer...cual libreria utilizas para el glcd suky?


De nada. Los dos proyectos usan compilador distinto, pero las librerías son basadas en las de CCS con algunas modificaciones.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Iniciando con glcd 128x64
« Respuesta #101 en: 17 de Agosto de 2010, 02:54:01 »
Con los nops se resuelve los pixeles invasores xD

El problema es que esa libreria de CCS no lee el busy flag y hace pausa.por eso lo de los pixeles.Lo estaba arreglando pero me dio pereza xD.Solo hice las funciones del bmp,bmpxy y eeprom.

No use fast GLCD por que ocupa 1KB de ram

Cuando uso memoria externa creo un buffer de 128B(como uso una eeprom i2c es lento max 1MHZ) con una spi seria mas rapido.
Se trbaja mas rapido con el buffer que leer byte por byte.
----------------------------------------------------


Desconectado nahumof

  • PIC10
  • *
  • Mensajes: 24
Re: Iniciando con glcd 128x64
« Respuesta #102 en: 18 de Agosto de 2010, 14:55:27 »
suky y akena gracias por el apoyo :mrgreen: no se que haria sin ustedes :D
suky probando le del buffer haber si se incrementa la velocidad de respuesta del glcd:)

akena no entendi cuando usas memoria externa pones un buffer externo?? que no lo asigna la libreria de ccs por default??? bueno leyendo...

tengo una dudilla ayer me puse a ver como programar mi memoria SPI y lei que el pickit podia asi que construi uno ya que yo uso el U60 de ccs que no programa eeproms, ya armado checando no puedo meterle mi imagen bin que habia creado...dice que solo acepta HEX...tengo que programar con otra cosa el bin, o convierto a hex mi bin??
sugerencias??

gracias desde ya.

perdon la ignorancia si programa bin...corregido
« Última modificación: 18 de Agosto de 2010, 15:00:43 por nahumof »

Desconectado herc206

  • PIC10
  • *
  • Mensajes: 3
Re: Iniciando con glcd 128x64
« Respuesta #103 en: 27 de Agosto de 2010, 12:11:19 »

Hola amigos, quisiera iniciar mi pregunta primero felicitando por el desarrollo de este tema se ve que es una pasión y han logrado buenos resultados, tal ves esta pregunta les parezca redundante pero soy un poco ignorante con las memorias eeprom además que soy nuevo en el mundo de pic estoy usando un pic16f877a realizando una programa bastante grande, en donde la memoria del microcontrolador se agoto lo que me ha hecho recurrir a buscar info para poder grabar las imágenes y de ser posible las fuentes de letra en una eeprom para poder liberara la memoria del micro, pero no se como generara el archivo .bin para grabarlas en la eeprom, entre otras cosas estoy intentando descargar la librerías graficas de microchip pero los enlaces que existen me generan un error que dice que, los archivos fueron removidos del servidor, quisiera me ayuden con un enlace para poder descargar estos archivos, y además si me podrían ayudar con la resolución de este problema.

Estoy manejando una glcd con el controlador ks0108, un pic 16f877a, una eeprom

saludos a todos
HERC206

Desconectado herc206

  • PIC10
  • *
  • Mensajes: 3
Re: Iniciando con glcd 128x64
« Respuesta #104 en: 27 de Agosto de 2010, 20:23:03 »
  Bueno despues de tanta busqueda he logrado encontrar la herramienta para convertir a .bin tanto las fuentes como las imagenes es la misma de microchip ahora el problema que se me presento es que no puedo leer las fuentes desde la eeprom el codigo que estoy usando es:

Device = 16F877A   
XTAL = 20
Cls
DelayMS 100   
Dim asdf As Byte                             
Declare LCD_TYPE 1           : DelayMS 10
Declare LCD_RWPIN  PORTD.2   : DelayMS 10  ;PORTB.5     
Declare LCD_CS1PIN PORTD.7   : DelayMS 10  ;PORTB.2
Declare LCD_CS2PIN PORTD.6   : DelayMS 10  ;PORTB.3
LCD_DTPORT = PORTB           : DelayMS 10
LCD_RSPIN  = PORTD.1         : DelayMS 10        ;PORTB.4
LCD_ENPIN  = PORTD.3         : DelayMS 10 ;PORTB.6
Declare GLCD_CS_INVERT On    : DelayMS 10
Declare INTERNAL_FONT OFF     : DelayMS 10

;;GLCD_EXTERNAL_PRINT = PPRINT : DelayMS 10
Declare FONT_ADDR 0
 
Declare SDA_PIN PORTE.2
Declare SCL_PIN PORTE.1



;;;;;;;;;;;          ESTADO DE LOS PUERTOS     ;;;;;;;;;;;;;;;;
ALL_DIGITAL true
TRISA = 255 : TRISB = 0 : TRISC = 255 : TRISD = 0 : TRISE = %111
PORTA = 0   : PORTB = 0 : PORTC = 0   : PORTD = 0 : PORTE = 1
PORTD.5 = 1 : PORTD.0 = 1 
''''''''''''''''''''''''
   

Cls


DelayMS 50

       Print At 25,35," Loja - Ecuador  "
       Print At 41, 2,"Desarrollando Tecnologia  "     
       Print At 55, 2,"Desde Loja Para el Mundo " 
 

debo recalcar que estoy programando en lenguaje Basic PROTON, quisiera que me ayuden con este problema por el momento si lee la memoria solo que me presenta simbolos raros lo que no ocurre cuando genero texto con una fuente interna el mensaje me sale sin problema en la glcd porfavor necesito ayuda
gracias
saludos a todos




 

anything