TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: aripod en 05 de Julio de 2011, 20:02:02

Título: Problemas LCDGeneric
Publicado por: aripod en 05 de Julio de 2011, 20:02:02
Estoy usando la libreria LCDGeneric hecha por Suky pero estoy teniendo problemas para inicializar el glcd.

El problema esta cuando llama la funcion vGLCDWriteInstruction desde vGLCDInit. Es como si no estuviera pasando los parametros de una funcion a la otra, ya que al momento de GLCD_PORT_DATA=Data; con el watch veo PORTD el cual esta en 0x00.
Por las dudas, pongo mi main:

Citar
#include <p18f452.h>
#include <delays.h>

#pragma config OSC = HS
#pragma config WDT = OFF

//Los include "propios" van despues de los FUSES.
#include "GLCDGeneric.h"

/*----------------DEFINE----------------*/

/*----------------DEFINE----------------*/


/*----------------PROTOTIPOS----------------*/

/*----------------PROTOTIPOS----------------*/



void main(void)
{
vGLCDInit(ON);
}



/*-----------------FUNCIONES----------------*/

/*-----------------FUNCIONES----------------*/
Título: Re: Problemas LCDGeneric
Publicado por: Suky en 05 de Julio de 2011, 20:55:23
Adjunta el proyecto por favor  ;-) Project/Packed in .Zip
Título: Re: Problemas LCDGeneric
Publicado por: aripod en 05 de Julio de 2011, 21:13:47
Adjuntado
Título: Re: Problemas LCDGeneric
Publicado por: Suky en 05 de Julio de 2011, 22:19:10
El problema está en que modificaste el *.lkr de forma errónea, le agregaste memoria que no posee el microcontrolador. Utilizando #define GLCD_USE_MODE_FAST comentado, no es necesario modificar el lkr, así que selecciona el lkr que se encuentra en ../MCC18/bin/LKR y compila de nuevo el microcontrolador, debería de funcionar.


Saludos!
Título: Re: Problemas LCDGeneric
Publicado por: aripod en 05 de Julio de 2011, 23:17:31
Compila perfecto, con el #define GLCD_USE_MODE_FAST comentado. Gracias por la ayuda!!
Mañana seguire aprendiendo el funcionamiento.....

Y si quiero usar el #define GLCD_USE_MODE_FAST, donde tengo que poner el SECTION    NAME=BUFFER_GLCD RAM=data?
Alguna guia para recomendar sobre linkers?

Título: Re: Problemas LCDGeneric
Publicado por: Suky en 06 de Julio de 2011, 00:35:39
Y si quiero usar el #define GLCD_USE_MODE_FAST, donde tengo que poner el SECTION    NAME=BUFFER_GLCD RAM=data?
Alguna guia para recomendar sobre linkers?

El problema está en que ese micro tiene poca memoria RAM, el buffer tiene que tener 1024 bytes y te quedas corto...

Tendrías que tomar estos 4 bancos de memoria:

DATABANK   NAME=gpr1       START=0x100             END=0x1FF
DATABANK   NAME=gpr2       START=0x200             END=0x2FF
DATABANK   NAME=gpr3       START=0x300             END=0x3FF
DATABANK   NAME=gpr4       START=0x400             END=0x4FF

y reemplazarlo por unos solo:

DATABANK   NAME=data       START=0x100             END=0x4FF


Saludos!
Título: Re: Problemas LCDGeneric
Publicado por: aripod en 06 de Julio de 2011, 14:31:08
Mas claro imposible....anda perfecto.
Ahora estoy con el 18f452, pero en un par de semanas voy a empezar a usar el 24FJ256GB110. Mande a hacer unas placas para pasar de smp a "dip" para poder probar en una protoboard...asi que ahi voy a poder usar el #define GLCD_USE_MODE_FAST ya que ese pic tiene 16Kb de RAM, pero para eso molestare cuando tenga la placa en mis manos.

Ahora la molestia viene por el lado de incorporar a la libreria GLCDGeneric la funcion para imprimir texto, que esta en DriverGLCD.
Copie de una libreria a otra y ademas incorpore Fuentes_Imagenes.c al proyecto y en mi main.c #include "Fuentes_Imagenes.c".

Entonces ahora llamo a la funcion cuando quiero vGLCD_Texto(1,1, "Texto", ARIAL,1 , ON);. Por supuesto que estoy teniendo errores, en este caso "Error - symbol 'ARIAL' has multiple definitions.".
Otra cosa que no se si esta bien, es en los parametros de la funcion puedo poner "Texto" o tiene que estar el texto en un vector o puedo escribir ahi lo que quiero mostrar?
Título: Re: Problemas LCDGeneric
Publicado por: Suky en 06 de Julio de 2011, 14:47:03
Tenes que llamar al archivo con #include "Fuentes_Imagenes.c", pero no agregarlo a proyecto. Luego en el main o graficos.h podes colocar:

extern rom char COMIC[];
extern rom char ARIAL[];

entonces sabe que existen tales variables en otro modulo.


Luego tenes vGLCD_Texto(..) que acepta escribir "Texto" y vGLCD_TextoRAM(...) que ahí si necesitas un vector.


Saludos!
Título: Re: Problemas LCDGeneric
Publicado por: aripod en 06 de Julio de 2011, 14:54:20
Gracias por la rapida respuesta!! Mas claro imposible...anda perfecto!

Ultima (por ahora :P). Para las imagenes habria que hacer lo mismo, verdad? Con que programa pasas de bmp a tabla en c de la imagen?
Título: Re: Problemas LCDGeneric
Publicado por: Suky en 06 de Julio de 2011, 15:10:57
 :z) Me hiciste una mezcla... Porque tienes que llamar a graficos.h como para tener la función vGLCD_Texto(...) y no lo veo. Después, intenté compilar el proyecto que tenia y me indica lo mismo  :shock: Me parece que es algo de la versión del compilador, te adjunto los archivos que utilizo ahora y que compila sin problemas...


Ultima (por ahora :P). Para las imagenes habria que hacer lo mismo, verdad? Con que programa pasas de bmp a tabla en c de la imagen?
Si lo mismo, ahora el programa para pasar el bmp a C quedo por la mitad, lo busco y te lo paso, pero tiene varios bugs!  :D


Saludos!

Título: Re: Problemas LCDGeneric
Publicado por: Suky en 06 de Julio de 2011, 15:20:19
Lo adjunto, pero da verguenza....  :D La imagen tiene que tener máximo 128x64 (24-bits o 1-bits), y si no muestra nada, marca y desmarca Blanco y Negro  :mrgreen: Está hecho en Visual Basic.Net 2008 me parece, y no tengo nada instalado (Pase a Visual C++  8)  :D ) como para arreglarlo  :tongue:


Saludos!
Título: Re: Problemas LCDGeneric
Publicado por: aripod en 07 de Julio de 2011, 19:56:33
Excelente el programa! Hay veces que no me carga la imagen....
Estoy viendo el Bitmap2LCD BASIC V1_9 a ver que tal...
Otra vez, mil gracias por la enorme ayuda!

pd: Es DEMASIADO sencillo lo que hice, pero en la GLCDGeneric agregue las funciones para imprimir texto (ambas) y para imprimir imagenes, si la quieres "actualizar" con gusto en modo de agradecimiento te la paso...ya que no se de que manera agradecerte por la ayuda!

pd2: En unos dias molestare de nuevo con el 24F:P
Título: Re: Problemas LCDGeneric
Publicado por: Suky en 07 de Julio de 2011, 20:33:15
En realidad yo separe entre el driver del GLCD y las funciones para gráficas, así es más fácil de portar cuando surja la necesidad...


Saludos!
Título: Re: Problemas LCDGeneric
Publicado por: aripod en 31 de Julio de 2011, 13:35:07
Vuelvo despues de mucho tiempo con malas noticias.
En proteus anda perfecto la libreria, pero cuando la baje al pic no anda.
Un amigo uso la del CCS y esa logro hacerla andar,,,comparando, linea por linea descubrimos que en la funcion vGLCDInit, la primera linea pones GLCD_PIN_RST en cero, y la del CCS la pone en UNO. De casualidad vi que en la funcion del la DriverGLCD hecha por suky, tambien en la funcion de inicializacion, la primera linea pone GLCD_RST en UNO.
Obviamente a esto, cambiamos la funcion del GLCDGeneric que ponga en UNO, pero obviamente no anduvo....ya que creemos que todos los reset estan invertidos?
Título: Re: Problemas LCDGeneric
Publicado por: Suky en 31 de Julio de 2011, 19:53:38
No, no es el problema. Si lees el datasheet del LCD al colocar RS en 1 quiere decir que enviaras Datos al LCD y no Comandos, y obviamente al inicializar un LCD le envías comandos. El problema puede ser la configuración de los delays, asegúrate que sean los correctos, también revisa la correcta disposición de los pines.


Saludos!
Título: Re: Problemas LCDGeneric
Publicado por: aripod en 01 de Agosto de 2011, 00:35:06
Efectivamente era problema de los delays!
Gracias de nuevo!
Título: Re: Problemas LCDGeneric
Publicado por: jmvc_sc en 04 de Noviembre de 2011, 16:14:02
Hola,Suky
Estoy tratando de compilar el ejemplo Librería GLCD 128×64, uso pic18f4550 (#include p18f4550.h) y tambien modificado los pines y me sale un error

Error - section 'BUFFER_GLCD' can not fit the section. Section 'BUFFER_GLCD' length=0x00000400

¿Tengo que modificar el archivo linker?

muchas gracias
Título: Re: Problemas LCDGeneric
Publicado por: Suky en 04 de Noviembre de 2011, 17:13:48
Si, debes crear una sección de 1024 bytes, pero solo si quieres usar el modo fast. Sino, con comentar  #define use_modo_fast en el *.h es suficiente. Aquí un video:

http://www.micros-designs.com.ar/images/GLCD%20en%20C18_controller.swf

Saludos!
Título: Re: Problemas LCDGeneric
Publicado por: jmvc_sc en 04 de Noviembre de 2011, 18:09:21
Disculpa la molestia pero sigo sin poder compilar, comente //#define use_modo_fast y me sale

Error - section 'BUFFER_GLCD' can not fit the section. Section 'BUFFER_GLCD' length=0x00000400

Tendra que ver el pic que estoy utilizando?
en el 18f4550.lkr veo

DATABANK   NAME=usb4       START=0x400          END=0x4FF   //esa sección la utiliza par usb no estoy seguro, eso creo

pero como dices al comentar esa parte debería compilar.

adjunto project

gracias.
Título: Re: Problemas LCDGeneric
Publicado por: Rikr09 en 25 de Febrero de 2012, 00:24:03
Buenas, tambièn tengo problemas con la LCDGeneric de Suky (de antemano gracias por dicha libreria)

Estoy usando un PIC24F32KA304 y he adaptado dicha libreria para el uso de éste con la explorer 16 de Microchip. El problema que tengo es que solo se muestran caracteres hasta la mitad de la LCD, es decir, ya sea de la primera linea o la segunda, solo llegan a ocupar de cada una de éstas hasta la 8tava posición, si intento escribir en el eje 'x' numero 9, 10, 11, 12 etc... de la primera linea no aparece lo que imprimo; siendo de que forma análoga sucede lo mismo en la segunda linea. 

Agradeceria que por favor me ayuden con esto. Gracias.
Título: Re: Problemas LCDGeneric
Publicado por: Suky en 25 de Febrero de 2012, 07:52:31
Buenas, tambièn tengo problemas con la LCDGeneric de Suky (de antemano gracias por dicha libreria)

Estoy usando un PIC24F32KA304 y he adaptado dicha libreria para el uso de éste con la explorer 16 de Microchip. El problema que tengo es que solo se muestran caracteres hasta la mitad de la LCD, es decir, ya sea de la primera linea o la segunda, solo llegan a ocupar de cada una de éstas hasta la 8tava posición, si intento escribir en el eje 'x' numero 9, 10, 11, 12 etc... de la primera linea no aparece lo que imprimo; siendo de que forma análoga sucede lo mismo en la segunda linea. 

Agradeceria que por favor me ayuden con esto. Gracias.

Que controlador utiliza el LCD?  :?
Título: Re: Problemas LCDGeneric
Publicado por: Rikr09 en 25 de Febrero de 2012, 11:27:44
Buenas, tambièn tengo problemas con la LCDGeneric de Suky (de antemano gracias por dicha libreria)

Estoy usando un PIC24F32KA304 y he adaptado dicha libreria para el uso de éste con la explorer 16 de Microchip. El problema que tengo es que solo se muestran caracteres hasta la mitad de la LCD, es decir, ya sea de la primera linea o la segunda, solo llegan a ocupar de cada una de éstas hasta la 8tava posición, si intento escribir en el eje 'x' numero 9, 10, 11, 12 etc... de la primera linea no aparece lo que imprimo; siendo de que forma análoga sucede lo mismo en la segunda linea. 

Agradeceria que por favor me ayuden con esto. Gracias.

Que controlador utiliza el LCD?  :?
Gracias Suky por la atención prestada.

El controlador de la LCD de la explorer 16 es según la hoja de datos el SAMSUMG KS0032. L a referencia del LCD es Tianma TM162JCAWG1.

Qued atento a tu respuesta. Gracias-
Título: Re: Problemas LCDGeneric
Publicado por: Suky en 25 de Febrero de 2012, 11:44:06
Bueno, seguramente ese es el problema, la librería es para LCD con controlador Hitachi o similar. Vas a tener que buscar el datasheet y ver la diferencia, o viendo el código de alguna librería para ese LCD.


Saludos!
Título: Re: Problemas LCDGeneric
Publicado por: Rikr09 en 25 de Febrero de 2012, 13:05:52
Bueno, seguramente ese es el problema, la librería es para LCD con controlador Hitachi o similar. Vas a tener que buscar el datasheet y ver la diferencia, o viendo el código de alguna librería para ese LCD.


Saludos!
Gracias Suky por la atención.

Buscando mas informacion del LCD de la explorer he encontrado lo siguiente en una hja de datos de la misma "The LCD on the Explorer-16 Development Boards is a Tianma TM162JCAWG1, 16 characters by 2 rows  display using a Hitachi HD44780U Compatible Controller/Driver (Samsung KS0032)."

Lo que no termino de comprender es por qué si muestra datos tanto en la primera linea como en la segunda, mas no despues de la mitad de cada una. Esto me da a entender que quizás sea una configuración a nivel de comando de la LCD, pero ya he probado con varias configuraciones y nada. Te aclaro que estoy usando un bus de 4 bits y con los registros de control sin necesidad de registros de desplazamientos.


De nuevo Gracias por la ayuda!!
Título: Re: Problemas LCDGeneric
Publicado por: Suky en 25 de Febrero de 2012, 16:29:33
Entonces según lo que comentas sería compatible  :tongue: Es raro el problema que presenta, por eso pensaba que podría ser por el controlador, alguna dirección distinta a implementar... Generalmente si la configuración es errónea o falla, puede que quede trabajando una sola linea, pero desde la posición 0 hasta la 16 (visible), no había leído que solo llegara hasta la 7. Si uno envía caracteres al LCD es el propio controlador que va incrementando la dirección de la posición internamente  :undecided: Con otra librería ha funcionado correctamente?
Título: Re: Problemas LCDGeneric
Publicado por: Rikr09 en 26 de Febrero de 2012, 17:18:10
 
Saludos Suky

En realidad no he encontrado otra libreia diferente a la tuya, he visto uno que otro ejemplo pero opte por usar la tuya y no me equivoque al pensar en que seria bastante funcional  :) . El unico problema que tengo es ese que te comente. Podrias recondarme alguna diferente o que consejo me das respecto a la tuya? Ya he probado con dos explorer mas, y pasa lo mismo. Lo unico que he encontrado es un ejemplo que hacen con un dsPIC 33F...

Te agradeceria que me siguieras orientando al respecto. Quedo atento a tu respuesta.

Gracias!!!
Título: Re: Problemas LCDGeneric
Publicado por: Suky en 26 de Febrero de 2012, 19:37:47
Para C30, no ni idea cual puede ser, a mi me ha funcionado en 2x16 y 4x20  :mrgreen:
Título: Re: Problemas LCDGeneric
Publicado por: Rikr09 en 27 de Febrero de 2012, 18:28:19
Para C30, no ni idea cual puede ser, a mi me ha funcionado en 2x16 y 4x20  :mrgreen:
Suky Saludos

He optado por conectar una LCD tambien de 2x16 al modulo LCD3 de la Explorer 16. No me ha dado pantalla pero el problema que tenia ha desaparecido de la LCD de la explorer, es decir, ya me muestra los caracteres en la pantalla por completo. Hasta el momento no se que podria ser.

Asi mismo, tengo una duda respecto a la siguiente funcion:
Código: [Seleccionar]
void vPuts_LCD(UINT8 *buffer){

    while(*buffer != '\0')    {
        vWriteLCD(*buffer++,LCD_DATA);
    }
}

Hasta donde veo, permite el envio de cadenas de caracteres, si es asi, como lo hago? Te agredeceria que me ayudaras con un ejemplo, osea como hago para enviar dicha cadena.


Nuevamente agradeciendote tu pronta atencion y dedicacion

Título: Re: Problemas LCDGeneric
Publicado por: Suky en 27 de Febrero de 2012, 22:30:45
Se podría hacer:

Código: C
  1. char Buffer[10];
  2.  
  3. strcpy(Buffer,"Hola!");
  4. vPuts_LCD(Buffer);


También se puede agregar en C30:

Código: C
  1. void vPutsr_LCD(const UINT8 *buffer){
  2.  
  3.     while(*buffer != '\0')    {
  4.         vWriteLCD(*buffer++,LCD_DATA);
  5.     }
  6. }

y llamarla:

Código: C
  1. vPutsr_LCD("Hola!!");


Saludos!
Título: Re: Problemas LCDGeneric
Publicado por: Rikr09 en 28 de Febrero de 2012, 09:53:01
Se podría hacer:

Código: C
  1. char Buffer[10];
  2.  
  3. strcpy(Buffer,"Hola!");
  4. vPuts_LCD(Buffer);


También se puede agregar en C30:

Código: C
  1. void vPutsr_LCD(const UINT8 *buffer){
  2.  
  3.     while(*buffer != '\0')    {
  4.         vWriteLCD(*buffer++,LCD_DATA);
  5.     }
  6. }

y llamarla:

Código: C
  1. vPutsr_LCD("Hola!!");


Saludos!

Excelente Suky, perfecto!!!

Gracias nuevamente!!!
Título: Re: Problemas LCDGeneric
Publicado por: Rikr09 en 29 de Febrero de 2012, 17:09:11
Se podría hacer:

Código: C
  1. char Buffer[10];
  2.  
  3. strcpy(Buffer,"Hola!");
  4. vPuts_LCD(Buffer);


También se puede agregar en C30:

Código: C
  1. void vPutsr_LCD(const UINT8 *buffer){
  2.  
  3.     while(*buffer != '\0')    {
  4.         vWriteLCD(*buffer++,LCD_DATA);
  5.     }
  6. }

y llamarla:

Código: C
  1. vPutsr_LCD("Hola!!");


Saludos!

Excelente Suky, perfecto!!!

Gracias nuevamente!!!
Saludos Suky

Ya solucioné mi problema, tan solo tenia que deshabilitar el #define para el uso del RW, teniendo en cuenta que ya tenia deshabilitado la opcion para el uso por tres pines con registros de desplazamiento.


Nuevamente Gracias por esta libreria, me ha sido de bastante utilidad!!   :-/