Autor Tema: No puedo imprimir en el lcd una cadena de caracteres  (Leído 7699 veces)

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

Desconectado vinnymoy

  • PIC10
  • *
  • Mensajes: 15
No puedo imprimir en el lcd una cadena de caracteres
« en: 20 de Marzo de 2011, 19:43:55 »
Estoy usando un PIC16f877A y resulta que dependiendo de en qué valor se encuentra un valor del adc en el A3 me tiene que salir un mensaje por el lcd.

Es decir: Si en el A3 tengo 120 (ya convertido con el ADC) tiene que mostrar algo, y si está 250 otra cosa.

Simplemente no funk... Y ya le he dado las vueltas y las vueltas y la verdad no encuentro el error...

Código: [Seleccionar]
#include "C:\Users\Vinicio\Documents\Micho\Cajita mágica\Programa.h"
#include <LCD.C>
#include <string.h>

float tiempo, tadc;
unsigned int madc, band, band1;
char mensaje[];

void mensajelcd(unsigned int band);


//!#int_RB
//!void  RB_isr(void)
//!{
//!
//!}
//!


void main()
{

   port_b_pullups(TRUE);
   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_16,255,1);
   setup_ccp1(CCP_PWM);
   set_pwm1_duty(0);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   lcd_init();
   enable_interrupts(INT_RB);
   enable_interrupts(GLOBAL);
   
   // TODO: USER CODE!!

   
   while(true)
   {
   set_adc_channel(0);
   tadc= read_adc();
   tiempo= tadc*7.84;
   delay_us(100);
   
   set_adc_channel(3);
   madc= read_adc();
   
   if(madc>=0 && madc<=25)         band=0;   
   if(madc>=26 && madc<=50)        band=1;   
   if(madc>=51 && madc<=75)        band=2;   
   if(madc>=76 && madc<=100)       band=3;   
   if(madc>=101 && madc<=125)      band=4;   
   if(madc>=126 && madc<=150)      band=5;   
   if(madc>=151 && madc<=175)      band=6;   
   if(madc>=176 && madc<=200)      band=7;   
   if(madc>=201 && madc<=225)      band=8;   
   if(madc>=226 && madc<=255)      band=9;   
   if(madc<0 && madc>255)          band=10;
   
   mensajelcd(band);
  // if(band1=!band) lcd_putc('\f');
   band1=band;
   }
}


void mensajelcd(unsigned int band)
{
   unsigned int i;
   
   switch (band) {
      case 0   : mensaje= "PRUEBA 0"; break;
      case 1   : mensaje= "PRUEBA 1";  break;
      case 2   : mensaje= "PRUEBA 2";  break;
      case 3   : mensaje= "PRUEBA 3";  break;
      case 4   : mensaje= "PRUEBA 4";  break;
      case 5   : mensaje= "PRUEBA 5";  break;
      case 6   : mensaje= "PRUEBA 6";  break;
      case 7   : mensaje= "PRUEBA 7";  break;
      case 8   : mensaje= "PRUEBA 8";  break;
      case 9   : mensaje= "PRUEBA 9";  break;
      default  : mensaje= "INDEFINIDO";     break;
   }
   
   printf(lcd_putc,"%s", mensaje); //AQUI NO ME IMPRIME NADA.
 
   delay_us(tiempo);
   lcd_gotoxy(1,1);
   
}

Desconectado korpaztk

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 202
Re: No puedo imprimir en el lcd una cadena de caracteres
« Respuesta #1 en: 20 de Marzo de 2011, 21:54:43 »
yo para imprimir un caracter en el lcd utilizo lcd_putc();
con que programa estas haciendo tu codigo?
podrias adjuntar la simulacion en proteus?

   
Código: [Seleccionar]
printf(lcd_putc,"%s", mensaje);
yo lo escribiria asi:


Código: [Seleccionar]
lcd_putc("%C", mensaje);
pero seria interesante que adjuntes un archivo proteus para probar.

Saludos

Korpaz.
Técnico Electronico.

El Papel Es Mi Mejor Psicologo

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: No puedo imprimir en el lcd una cadena de caracteres
« Respuesta #2 en: 20 de Marzo de 2011, 23:38:10 »
pero seria interesante que adjuntes un archivo proteus para probar.

Hola, como dice korpaztk, sería de mucha ayuda que postearas no solo tu circuito para ver donde estás conectando el LCD, sino también el contenido del archivo Programa.h para ver los fuses.

Esta forma de mostrar una cadena en el LCD es correcta:
Citar
printf(lcd_putc,"%s", mensaje);

Con %c es para mostrar un solo caracter.  Claro que se podría usar con un bucle for para que imprima cada caracter de la variable.

De todos modos antes de seguir especulando lo primero sería ver en el circuito en donde tienes conectado el LCD.

Saludos!

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: No puedo imprimir en el lcd una cadena de caracteres
« Respuesta #3 en: 21 de Marzo de 2011, 16:03:34 »
que compilador usas? en tu programa no hace falta el include del pic?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: No puedo imprimir en el lcd una cadena de caracteres
« Respuesta #4 en: 21 de Marzo de 2011, 20:41:48 »
que compilador usas? en tu programa no hace falta el include del pic?

Hola jhozate, el código que muestra vinnymoy parece estar escrito para CCS C.  Si es así, el include del PIC debe estar en el archivo Programa.h que es una de las cosas que le estoy pidiendo que nos muestre.

Saludos!
« Última modificación: 21 de Marzo de 2011, 20:44:47 por bmb »

Desconectado vinnymoy

  • PIC10
  • *
  • Mensajes: 15
Re: No puedo imprimir en el lcd una cadena de caracteres
« Respuesta #5 en: 22 de Marzo de 2011, 02:50:15 »
Amigos pues les cuento que el problema no era del compliador CCS C, ni del lcd, ni de printf, sino de una característica de c que un amigo en otro foro me explicó así:

Citar
Con un tipo int -pero tambien, char, float, double y similares- se puede inicializar una variable de dicho tipo.
Código:
int a = 5;


y también se puede modificar su valor:
Código:
a = 3;


Una cadena de caracteres sólo la puedes inicializar con una cadena literal. Nunca modificar.

Código:
char mensaje[] = "PRUEBA 0";


Si lo que quieres es modificar una cadena tienes que modificar carácter por carácter o usar la función strcpy() de la librería string.


ese código ya compilaría bien en el caso de que inicializaras:

Código:
char mensaje[] = "PRUEBA 0";
printf("%s", mensaje);


Ahora bien, si este sólo es una simplicicación de lo que quieres hacer. Te doy el trozo de código usando strcpy().

Código:
char mensaje[16];
strcpy( mensaje, "PRUEBA 0");
printf("%s", mensaje);


googleando pudes encontrar muchas referencias sobre la librería string de C i la función strcpy().


Así que mañana lo pruebo y si es que funk les cuento!!! Porque la verdad esto sí resulto nuevo para mí...

Desconectado vinnymoy

  • PIC10
  • *
  • Mensajes: 15
Re: No puedo imprimir en el lcd una cadena de caracteres
« Respuesta #6 en: 22 de Marzo de 2011, 13:55:37 »
Pues sí... eso mismo era... funcionó perfectamente!!!

Queda confirmado que con las cadenas de caracteres obligatoriamente se tiene que utilizar funciones especiales para manipularlas.

Ahora la pregunta.... como hago para que se corran las letras en el lcd a lo largo del tiempo:

Pantalla del lcD:

PRUEBA 1
RUEBA 1 P
UEBA 1 PR
EBA 1 PRU

Y asi???

Alguna idea???

Desconectado korpaztk

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 202
Re: No puedo imprimir en el lcd una cadena de caracteres
« Respuesta #7 en: 22 de Marzo de 2011, 14:08:25 »
en el foro hay mucha info sobre eso...

rapidamente se me viene a los ejemplos que hizo vszener

http://www.todopic.com.ar/foros/index.php?topic=4530.0

el numero 27 habla sobre mover texto en lcd, pero creo que hay otros ejemplos.

Saludos.-
Korpaz.
Técnico Electronico.

El Papel Es Mi Mejor Psicologo


 

anything