Autor Tema: LCD y 18F4550 usando mcc18  (Leído 5301 veces)

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

Desconectado mgrassi

  • PIC10
  • *
  • Mensajes: 3
LCD y 18F4550 usando mcc18
« en: 21 de Julio de 2006, 17:49:27 »
Hola todos,
 
En vista de que todo el mundo parece preferir el C sobre el Assembler para los PICs 18Fxxxx he decidido encarar una aplicación de práctica sobre un 18F4550 usando el mcc18.
Como primera aproximación (después de haber hecho blinkear un par de leds como para asegurarme de que el programador, el micro y mi placa prototipo funcionan, encaré un LCD de 20x4 (Wintek, HD44780 compatible) que ya había hecho funcionar sin demasiados problemas en mis viejos 16Fxx (en assembler, claro).
 
El tema es que, luego de muchas pruebas, no he conseguido configurar correctamente el display. Por cada caracter que mando escribe dos, pero de basura. Sospecho que no recibe bien el comando que lo configura para 4 líneas y por eso entiende que recibe dos caracteres. Según creo, en el modo de 4 bits, el micro descompone cada byte en dos y manda 1/2 byte cada vez. Parece que el display toma cada mitad como un caracter completo y por eso escribe 2.
 
Estoy usando la xlcd.h tal como viene, ya que conecté 4 líneas del LCD al nibble más bajo [0,3] del PORTB y RS, RW y E tal como las define la rutina. Así que lo único que tendría que definir en mi programa son los retardos, de acuerdo al cristal (20 Mhz) que estoy usando, cosa que hice, calculando como dice el manual (probé con 20 Mhz y con 48Mhz, por las dudas).
 
Mi pregunta concreta es: ¿cómo debo recomplilar las rutinas XLCD y como debo incluirlas para que el compilador tome las nuevas definiciones? ¿Basta con agregar xlcd.h al proyecto en MPLAB (y correr Build All, obvio) o hay que hacer algo más?
 
Si eso lo estoy haciendo bien, como creo ¿a alguien se le ocurre cuál puede ser el problema? ¿Alguna experiencia similar?
 
Gracias y saludos,

--
Miguel

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: LCD y 18F4550 usando mcc18
« Respuesta #1 en: 21 de Julio de 2006, 23:40:25 »
Hola todos,
 
En vista de que todo el mundo parece preferir el C sobre el Assembler para los PICs 18Fxxxx he decidido encarar una aplicación de práctica sobre un 18F4550 usando el mcc18.
Como primera aproximación (después de haber hecho blinkear un par de leds como para asegurarme de que el programador, el micro y mi placa prototipo funcionan, encaré un LCD de 20x4 (Wintek, HD44780 compatible) que ya había hecho funcionar sin demasiados problemas en mis viejos 16Fxx (en assembler, claro).
 
El tema es que, luego de muchas pruebas, no he conseguido configurar correctamente el display. Por cada caracter que mando escribe dos, pero de basura. Sospecho que no recibe bien el comando que lo configura para 4 líneas y por eso entiende que recibe dos caracteres. Según creo, en el modo de 4 bits, el micro descompone cada byte en dos y manda 1/2 byte cada vez. Parece que el display toma cada mitad como un caracter completo y por eso escribe 2.
 
Estoy usando la xlcd.h tal como viene, ya que conecté 4 líneas del LCD al nibble más bajo [0,3] del PORTB y RS, RW y E tal como las define la rutina. Así que lo único que tendría que definir en mi programa son los retardos, de acuerdo al cristal (20 Mhz) que estoy usando, cosa que hice, calculando como dice el manual (probé con 20 Mhz y con 48Mhz, por las dudas).
 
Mi pregunta concreta es: ¿cómo debo recomplilar las rutinas XLCD y como debo incluirlas para que el compilador tome las nuevas definiciones? ¿Basta con agregar xlcd.h al proyecto en MPLAB (y correr Build All, obvio) o hay que hacer algo más?
 
Si eso lo estoy haciendo bien, como creo ¿a alguien se le ocurre cuál puede ser el problema? ¿Alguna experiencia similar?
 
Gracias y saludos,

--
Miguel

Hola, antes que nada me parece buena opción.

No he usado la libería en cuestión pero sí te puedo tirar algún dato en general del C18.

1) Agregar un .h a tu proyecto no hará que el compilador la compile (valga la redundancia), lo que si lo hace es la directiva "include" en algún lado de tu código.

2) Te sugiero hagas una copia del archivo xlcd.h al subdirectorio de tu proyecto.

3) El include hazlo con las comillas --> include "xlcd.h"  , esto hace que el compilador busque en el directorio del proyecto.  Si usas los simbolos <> buscará en la ubicación por defecto de la libreria ya compilada (gralmente c:\mcc18\lib).  Lo que debes hacer es compilar los código fuente de la librería, varios archivos .c que debes incluir en tu proyecto (ahora si,  mediante la opción ADD del proyecto y no con el include). 
Ubicadas gralmente en c:\mcc18\src\traditional\pmc\xlcd\ ó c:\mcc18\src\extended\pmc\xlcd\  si usas el modo extendido del microcontrolador.

4) Leyendo la libería en cuestión (en realidad es solo la declaración de las funciones) veo que debes redefinir los pines y sobre todo el modo de memoria que estes usando (near -> small o far -> large)

Debieras poder compilar todo, ya habiendo hecho las funciones de delay que te pide.


Si sigues teniendo problemas, me pondré más en detalle o bien sube tu proyecto completo en formato .zip


Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado mgrassi

  • PIC10
  • *
  • Mensajes: 3
Re: LCD y 18F4550 usando mcc18
« Respuesta #2 en: 25 de Julio de 2006, 16:46:07 »
Gracias Mauricio.

Esta noche cuando vuelva a casa voy a probar. El include de xlcd lo hice pero con <> y no con comillas. De cualquier modo, lo que sí hice fue compilar el .h con el botón derecho del mouse, en la ventana de proyecto, pero ahora ya no estoy seguro de nada después de tantas pruebas sucesivas tocando el hardware, los bits de opciones, etc.

La reasignación de los pines no me afecta puesto que usé todas las opciones de default de xlcd.h. El único tema serían las funciones de delay.

Por último, cuál es la diferencia práctica entre el modo extendido y el normal y cómo se establece el modo deseado?

Agradezco tu respuesta y ofrecimiento. Si tengo problemas volveré sobre el tema. Si puedo darte una mano en algo, quedo a tus órdenes.

Miguel

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: LCD y 18F4550 usando mcc18
« Respuesta #3 en: 27 de Julio de 2006, 16:35:52 »
Hola mgrassi, he vuelto

Gracias Mauricio.

Esta noche cuando vuelva a casa voy a probar. El include de xlcd lo hice pero con <> y no con comillas. De cualquier modo, lo que sí hice fue compilar el .h con el botón derecho del mouse, en la ventana de proyecto, pero ahora ya no estoy seguro de nada después de tantas pruebas sucesivas tocando el hardware, los bits de opciones, etc.

Seguramente cuando lo reveas, descubriras 'cositas'.  Mi consejo y el de los muchachos de microchip y del foro de Microchip es que siempre copies las librerias a tu proyecto y ahí las edites a tu gusto.  Así te evitas de que si te equivocas en algo, ese error se propague para todos tus firmware (aunque en realidad el compilador usa las librerias .lib) cuando los quieras recompilar.


La reasignación de los pines no me afecta puesto que usé todas las opciones de default de xlcd.h. El único tema serían las funciones de delay.

Bien, sería bueno darle un buen delay sobre todo el del arranque.


Por último, cuál es la diferencia práctica entre el modo extendido y el normal y cómo se establece el modo deseado?
Según Microchip las optimizaciones son a nivel de un código generado más pequeño y no te sugieren activarlo si no lo vas a usar.  Además algunas cosas no se pueden activar usando el modo extendido (fíjate en el manual).

En lo particular nunca he tenido que recurrir a su uso, hasta ahora mis firmware han entrado en sus respectivos pics :) .  De todas formas, si quieres experimentar en las opciones del proyecto y más en especifico del compilador, tienes una casilla para activar el "extended mode".


Espero te sirva de utilidad.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado mgrassi

  • PIC10
  • *
  • Mensajes: 3
Re: LCD y 18F4550 usando mcc18
« Respuesta #4 en: 28 de Julio de 2006, 15:35:53 »
Aquí estoy de nuevo. He vuelto a compilar copiando XLCD.h en el directorio del proyecto y haciendo el include con comillas. Le cambié el nombre, para asegurarme que se incluya ésta y no la otra, pero sigo sin poder controlar correctamente el display.

Ahora sospecho tanto de los bits de configuración como del hardware. En cuanto a lo primero, noto que WinPic800 no parece respetar exactamente las opciones que he seleccionado en el MPLAB. Igual, hay algunas que no entiendo, así que voy a volver sobre el datasheet del PIC, a ver si me empapo un poco más. De cualquier modo, me parece que las únicas relevantes para este caso tan simple son las del Oscilador, WDT, LVP y PBADEN  ¿o me equivoco? ¿Cuál es la forma más segura de setear lo que no se usa? Mando aquí un jpg con el último seteo de los bits en el compilkador y como los toma el WinPic. Si llego a determinar algo, lo comentaré aquí.

En cuanto al hardware, estoy rediseñando la plaqueta porque la que armé, me resulta sospechosa en algunas cosas (es la que está en http://www.create.ucsb.edu/~dano/CUI/#Sec2). Por ejemplo, cuando inicio el sistema encendiéndolo, no siempre arranca con el mismo comportamiento del display. Cuando reseteo con el botón de reset, también se comporta raro y no siempre igual. Voy a diseñar una nueva plaqueta con un esquema más sencillo aún, a ver que pasa. Pareciera que algún capacitor queda cargado o algo así. Muy raro...

Como siempre, aguardo y valora cualquier sugerencia o comentario que pueda ser útil.

Gracias,

Miguel