Autor Tema: subo pequeña libreria para LCD en Hitech C  (Leído 19763 veces)

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

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #15 en: 29 de Marzo de 2011, 09:32:16 »
angelgris, eres la .... (caña): :-/

has acertado...

he probado a sacar esta porcion al main del programa y funciona:

Código: [Seleccionar]
//PRESENTA EN PANTALLA
FRECUENCIA = (COUNT * 243);
itoa(TEXT,FRECUENCIA,10);
GotoxyLcd (5,2);
WriteStrLcd(TEXT);
__delay_ms(200);
//FIN PRESENTA EN PANTALLA

de esta manera me presenta los datos.

ahora que lo que quiero es la frecuencia, pero no me sale la frecuencia....

es hora de ver que formula estoy usando....


por cierto, si en vez de un int, quisiera un float, es igual, porque en el manual me lio porque no habla de convertir, sino de dirrecion de donde convierte...

saludos


PD:  estaria bien hacer un hilo de hitech, como hacen de otros hilos para empezar paso a paso y anotar estas cosas como lo de  no poneer cierto codigo en las rutinas de interrupcion...


Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #16 en: 29 de Marzo de 2011, 09:39:07 »
  Acá dejo un pequeño ejemplo de como activo unas flag en la interrupción del CCP y luego la proceso en el main para mostrar la frecuencia....

  En este ejemplo hago uso de la función ftoa para convertir la frecuencia, pero en una prueba anterior hacía uso de itoa, fijense que incluso sigue estando en el código sólo que la línea está comentada.

Código: C
  1. #include <htc.h>
  2. #include <stdlib.h>
  3. #include "Def16f87xa.h"  // acá hay algunas definiciones para el pic hechas por mi
  4.  
  5. #define PIC_CLK         10000000
  6. #define _XTAL_FREQ      10000000
  7. #include "delayhd.h"
  8.  
  9. #define LcdDataPort             PORTB
  10. #define LcdControlPort  PORTB
  11. #define LcdD4                   4
  12. #define LcdRSBit                0
  13. #define LcdENBit                1
  14. #define LcdRWBit                2
  15. #include "SuperLcd.c"
  16.  
  17. bit captura;
  18. unsigned int Periodo;
  19. unsigned int ValorCcp1;
  20. unsigned int ValorAnterior;
  21.  
  22. char texto[7];
  23. float Frecuencia;
  24.  
  25. void interrupt isr(void)
  26. {
  27.   static char veces;
  28.  
  29.   ValorCcp1 = get_ccpr1();
  30.   veces++;
  31.   if (veces == 2)
  32.   {
  33.     captura = 1;
  34.     veces = 0;
  35.   }
  36.   else
  37.     ValorAnterior = ValorCcp1;
  38.   CCP1IF = 0;
  39. }
  40.  
  41.  
  42. void main(void)
  43. {
  44.   char * texto;
  45.   int * seba;
  46.  
  47.   TRISA = 0;
  48.   TRISB = 0b00001000;
  49.   setup_comparator (NC_NC_NC_NC);             // esta en las definiciones mias es para deshabilitar los comparadores
  50.   setup_timer1 (T1_INTERNAL | T1_DIV_1);    // configuro el timer1
  51.   setup_ccp1 (CCP_CAPTURE_RE);                 // configuro el CCP1
  52.   InitLcd();
  53.   CCP1IF = 0;
  54.   enable_interrupt (INT_CCP1);                  // habilito interrupcion CCP            CCP1IE = 1
  55.   enable_interrupt (GLOBAL);                     // habilito interrupciones globales   GIE = 1
  56.   while (1)
  57.   {
  58.     if (captura == 1)
  59.     {
  60.       disable_interrupt (INT_CCP1);   // deshabilito interrupcion CCP1     CCP1IE = 0
  61.       ClearLcd();
  62.       Periodo = ValorCcp1 - ValorAnterior;
  63.       GotoxyLcd (1,2);      
  64.       Frecuencia = (float) (2.5e6/Periodo);
  65.       //itoa (texto,Frecuencia,10);
  66.       texto = ftoa (Frecuencia, seba);
  67.       WriteStrLcd (texto);
  68.       WriteStrLcd (" Hz");
  69.       captura = 0;
  70.       CCP1IF = 0;                                                    // borro el flag de la interrupcion del CCP
  71.       enable_interrupt (INT_CCP1);                          // habilito interrupcion CCP            CCP1IE = 1
  72.     }
  73.   }
  74. }

  justo estaba escribiendo esto cuando entro tu respuesta.... tal vez te sirva para tu nueva pregunta

  En cuanto a no poner cierto código en la rutina de interrupción es valedero para cualquier lenguaje y cualquier compilador. Siempre la idea es que la interrupción dure el menor tiempo posible.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #17 en: 30 de Marzo de 2011, 11:42:24 »
Como podria hacerse para representar caracteres definidos en la cg ram con esta librería ?

Saludos.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #18 en: 30 de Marzo de 2011, 12:57:34 »
Por ejemplo:

Código: C
  1. char const CharactersCGRAM[64]={0,0,0,0,0,0,0,0x1F,
  2.                                                         0,0,0,0,0,0,0x1F,0x1F,
  3.                                                         0,0,0,0,0,0x1F,0x1F,0x1F,
  4.                                                         0,0,0,0,0x1F,0x1F,0x1F,0x1F,
  5.                                                         0,0,0,0x1F,0x1F,0x1F,0x1F,0x1F,
  6.                                                         0,0,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
  7.                                                         0,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
  8.                                                         0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F};
  9.  
  10. // Guarda en la CGRAM el caracter en el banco seleccionado.-
  11. // <Caracter> es la dirección de la primer fila del caracter a enviar.-
  12. void vLcdWriteCgram(unsigned char Bank,char Character){
  13.         unsigned char AddressBank,i;
  14.  
  15.         AddressBank=0x40 + 0x08*Bank;
  16.         WriteByteLcd(AddressBank,0);
  17.         // Cargamos los 8 registros.-
  18.         for(i=0;i<8;i++){
  19.                 WriteByteLcd(CharactersCGRAM[Character + i],1);
  20.         }
  21.         WriteByteLcd(0x80,0); // Se da por terminada la escritura.-
  22. }
  23.  
  24. // Incializa Memoria CGRAM.-
  25. void vLcdInitCgram(void){
  26.         unsigned char j;
  27.        
  28.         for(j=0;j<8;j++){
  29.                 vLcdWriteCgram(j,j*8);  
  30.         }
  31. }

Y para escribir el caracter:

Código: C
  1. WriteCharLcd(0);
  2. ...
  3. WriteCharLcd(7);

Yo lo uso de esa manera para esta librería: http://www.micros-designs.com.ar/libreria-generica-en-c-control-lcd/ Solo le cambié los nombre a las funciones llamadas  ;-)


Saludos!
« Última modificación: 30 de Marzo de 2011, 12:59:47 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #19 en: 30 de Marzo de 2011, 20:11:52 »

Y para escribir el caracter:

Código: C
  1. WriteCharLcd(0);
  2. ...
  3. WriteCharLcd(7);

Yo lo uso de esa manera para esta librería: http://www.micros-designs.com.ar/libreria-generica-en-c-control-lcd/ Solo le cambié los nombre a las funciones llamadas  ;-)


Saludos!

¿ Y como se utiliza tu libreria ? Con cualquier función que use (vGotoxyLCD, vInitLCD,...) me dá el mismo error:

Código: [Seleccionar]
Error   [1098] E:\.....; 351. conflicting declarations for variable "_vGotoxyLCD"
Error   [1098] E:\.....; 139. conflicting declarations for variable "_vInitLCD"
......
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #20 en: 30 de Marzo de 2011, 21:07:59 »
¿Tenes el archivo GenericTypeDefs.h? Por el momento no tengo instalado Hi-Tech como ver que es lo que ha pasado  :? Usa la de AngelGris que funciona muy bien  ;-)

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

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #21 en: 31 de Marzo de 2011, 09:31:01 »
AGELGRIS:

estoy estudiando tu ejemplo (que tengo que ir despacito) ;-)....

ya te contare si no entiendo algo o si lo termino cogiendo.

lo de hacer la libreria con caracter propio esta bien, habrá que probar en un segundo paso.

Tambien me atrevo a aventurar upregunta para el futuro:

¿es factible manejar una lcd grafica con hitech, en el caso de que si es igual que para una de 2x16, y que es mejor mirar una que funcione a 5v o a 3v, porque cada vez hacemos mas cositas a 3v, pero a lo mejor hoy por hoy mejor a 5v ¿no?. ¿habra que dejar el hitech o nos quedamos con el.

yO MANEJE UNA CON mIKROBASIC Y ERA CHUPAO PERO con el hitech, me veo perdiendo mucho el tiempo para realizar cosillas. Por contra con el mikrobasic hacia las cosas mas rapido, pero no te entras con profundidad....


saludos

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #22 en: 31 de Marzo de 2011, 10:13:06 »
Tambien me atrevo a aventurar upregunta para el futuro:

¿es factible manejar una lcd grafica con hitech, en el caso de que si es igual que para una de 2x16, y que es mejor mirar una que funcione a 5v o a 3v, porque cada vez hacemos mas cositas a 3v, pero a lo mejor hoy por hoy mejor a 5v ¿no?. ¿habra que dejar el hitech o nos quedamos con el.

Con cualquier lenguaje eres capaz de manejar cualquier dispositivo, tendrá sus distintas dificultades. Eso si, el control de un LCD Gráfico no se parece en nada a un LCD de caracteres, en el gráfico se trabaja pixel por pixel. Después con el tema de las diferentes tensiones hay C.I. que son adaptadores de niveles bi-direccionales, eso no es un problema.


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

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #23 en: 31 de Marzo de 2011, 12:12:45 »
Tambien me atrevo a aventurar upregunta para el futuro:

¿es factible manejar una lcd grafica con hitech, en el caso de que si es igual que para una de 2x16, y que es mejor mirar una que funcione a 5v o a 3v, porque cada vez hacemos mas cositas a 3v, pero a lo mejor hoy por hoy mejor a 5v ¿no?. ¿habra que dejar el hitech o nos quedamos con el.

Con cualquier lenguaje eres capaz de manejar cualquier dispositivo, tendrá sus distintas dificultades. Eso si, el control de un LCD Gráfico no se parece en nada a un LCD de caracteres, en el gráfico se trabaja pixel por pixel. Después con el tema de las diferentes tensiones hay C.I. que son adaptadores de niveles bi-direccionales, eso no es un problema.


Saludos!


ok, te refieres a usar los convertidores de dc-dc ¿no?....

por otro lado, claro veo que c18 y pic18 hablan de librerias, etc, cosa que en mikroc tambien tiene, pero desde que empece con hitech es todo a mano, y la verdad que tela, no se si sera buena opcion pasarme a un  pic18 o pic24, pero es que el pc16f1937 es muy completito....


un salukdo y mil gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #24 en: 31 de Marzo de 2011, 12:49:44 »
Tambien me atrevo a aventurar upregunta para el futuro:

¿es factible manejar una lcd grafica con hitech, en el caso de que si es igual que para una de 2x16, y que es mejor mirar una que funcione a 5v o a 3v, porque cada vez hacemos mas cositas a 3v, pero a lo mejor hoy por hoy mejor a 5v ¿no?. ¿habra que dejar el hitech o nos quedamos con el.

Con cualquier lenguaje eres capaz de manejar cualquier dispositivo, tendrá sus distintas dificultades. Eso si, el control de un LCD Gráfico no se parece en nada a un LCD de caracteres, en el gráfico se trabaja pixel por pixel. Después con el tema de las diferentes tensiones hay C.I. que son adaptadores de niveles bi-direccionales, eso no es un problema.


Saludos!

ok, te refieres a usar los convertidores de dc-dc ¿no?....


No, adaptadores de nivel. Por ejemplo:

http://focus.ti.com/logic/docs/translationresults.tsp?sectionId=458&voltageIn=3.3&searchDirection=2&voltageOut=5.0#voltintf


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

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #25 en: 31 de Marzo de 2011, 18:31:33 »
Estoy probando la libreria de AngelGris con un display de 4x20, y no funciona correctamente.

El codigo es este:

Código: [Seleccionar]
#include <htc.h>
#include <stdlib.h>
#include "pic1687x.h"

#define _XTAL_FREQ 10000000 // Cristal 10MHz
#define LcdControlPort PORTB // Uso el puerto A para los bits de control
#define LcdRWBit 0 // El bit 0 del puerto A para RW
#define LcdRSBit 1 // El bit 0 del puerto A para RS
#define LcdENBit 2 // El bit 0 del puerto A para EN
#define LcdDataPort  PORTB // Uso el puerto B para los datos
#define LcdD4 4 // Solo utilizar para protocolo de 4 Bits

#include "SuperLcd.C" // Incluimos nuestra libreria

void main(void)
{
  const char * pantalla = "Mundo";

  InitLcd();
  GotoxyLcd (1,1);
  WriteStrLcd ("Hola"); // escribe en la primer linea la palabra Hola
  GotoxyLcd (1,4);
  WriteStrLcd (pantalla); // escribe en la segunda linea la palabra apuntada por la variable pantalla
  while(1);
}

Gracias por todo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #26 en: 31 de Marzo de 2011, 18:44:36 »
Estoy probando la libreria de AngelGris con un display de 4x20, y no funciona correctamente.

El codigo es este:



Bueno, lo acabo de resolver, mirando la libreria de Suky en la función de AngelGris estaban erroneas las direcciones de la Ram, para la linea 3 tenia 0x10 y para la 4 0x50, cuando debe de ser 0x14 y 0x54.

PD: Por cierto, el main en hitech ¿es un bucle infinito? si no pongo el bucle while(1); al final, la información en el LCD parpadea.

Saludos.
« Última modificación: 31 de Marzo de 2011, 18:53:14 por micro_pepe »
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #27 en: 31 de Marzo de 2011, 20:26:34 »
  Mira vos, que cosa extraña. Yo me basé en un datasheet del Winstar WH1604A para sacar las direcciones de memoria. Adjunto una captura del datasheet donde se especifican las direcciones. ¿O tal vez serán diferentes entre un de 16x4 y uno de 20x4?

De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #28 en: 01 de Abril de 2011, 02:04:26 »
ademas:

si lo has resuelto, bien, pero en la defiion de puertos, dices que usas el port A para el control y el B para datos (en los comentarios), pero realmente veo que usas el PortB en ambos casos y no me queda claro que se pueda usar el mismo puerto...


un saludo

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: subo pequeña libreria para LCD en Hitech C
« Respuesta #29 en: 01 de Abril de 2011, 09:52:43 »
ademas:

si lo has resuelto, bien, pero en la defiion de puertos, dices que usas el port A para el control y el B para datos (en los comentarios), pero realmente veo que usas el PortB en ambos casos y no me queda claro que se pueda usar el mismo puerto...


un saludo

  Sí LAFUMAT, se puede usar tranquilamente el mismo puerto para control y para datos. Obviamente teniendo la precaución de no querer utilizar los mismos bits para data que para control.
  En el ejemplo que muestra micro_pepe está perfecto ya que utiliza el nibble bajo para el control y el nibble alto para los datos.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything