Autor Tema: Problema con LCD y ASCII (Solucionado)  (Leído 3228 veces)

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

Desconectado sokoloko

  • PIC12
  • **
  • Mensajes: 77
Problema con LCD y ASCII (Solucionado)
« en: 27 de Mayo de 2011, 20:08:57 »
Hola a todos!!!

A ver que llevo tres horas con un programita y no soy capaz de dar con la solucion....

Simplemente quiero mostrar en el LCD en valor de la entrada analogica (entre 0 y 1023)....pero solo consigo codigo ASCII.... :x

 
Código: [Seleccionar]
#include <16f88.h>            //pic a utilizar          
#fuses NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#FUSES INTRC_IO
#use delay (clock=8000000)         //Fosc=8Mhz

#byte port_A = 0x05  
#byte port_B = 0x06
#define use_portb_lcd TRUE         //definir portb lcd
#include<flex_lcd.c>                  //libreria manejo lcd
  
//long map(long x,long in_min,long in_max,long out_min,long out_max);

int16 POT; //VALOR POTENCIOMETRO

void main(void){


   lcd_init();         //inicializa lcd
   set_adc_channel(0);
   setup_adc_ports(sAN0|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);


  
  while(TRUE){    
  
        POT = read_adc();

//POT=map(POT,0,1023,1000,2000);

   lcd_gotoxy(1,1);
  lcd_putc(POT);  //Esto no me funciona pues solo imprime ASCII
lcd_gotoxy(1,2);
//printf(lcd_putc, POT);  //Esto tampoco va
//printf(lcd_putc, "%d", POT); //Ni esto
delay_ms(500);

}
}


Muchas gracias
« Última modificación: 30 de Mayo de 2011, 05:18:44 por sokoloko »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema con LCD y ASCII
« Respuesta #1 en: 27 de Mayo de 2011, 20:40:08 »
Hola.

prueba con:
Código: [Seleccionar]
printf(lcd_putc,"%lu",POT)
Saludos
El papel lo aguanta todo

Desconectado sokoloko

  • PIC12
  • **
  • Mensajes: 77
Re: Problema con LCD y ASCII
« Respuesta #2 en: 28 de Mayo de 2011, 07:00:55 »
Muchas gracias MLO!!!!    :-/

Funciono a la perfeccion. Pero ahora tengo un problema similar con un long int,

Código: [Seleccionar]
//defino dicha variable
long int SERVO; //VALOR salida
//mapeo el valor de esa variable entre 1000 y 2000
SERVO=map(POT,0,255,1000,2000);
// y luego en el main tengo
printf(lcd_putc,"Gra=%03lu%c  V=%04li",GRADOS,0xdf,SERVO);

He probado con %li con %lu y siempre me hace lo mismo, entre 1000y 1255 me funciona, pero si el valor aumenta me vuelve ciclicamente a 1000.

Algun consejo??

Adjunto el codigo el hex y la simulacion en proteus con el LCD por si puede ayudar.

Gracias

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema con LCD y ASCII
« Respuesta #3 en: 28 de Mayo de 2011, 10:10:05 »
Hola.

No se para que sera %li .... y si pruebas sin hacer el mapeo ... para que es ese mapeo?

Saludos
El papel lo aguanta todo

Desconectado sokoloko

  • PIC12
  • **
  • Mensajes: 77
Re: Problema con LCD y ASCII
« Respuesta #4 en: 28 de Mayo de 2011, 17:49:31 »
Hola,

El tema del %li es para mostrar long integer, eso lo muestra bien, si no lo mapeo, no tengo problema, pues valores de 0 a 255 me los muestra bien.

El mapeo, lo q quiero hacer, es que en funcion de la entrada analogica, mueva un servo. Y como la salida del servo es entre 1000 y 2000 us, el tema del mapeo es una funcion que me adapta segun la entrada de 0-255 a una salida proporcional entre 1000 y 2000.

Te pongo una referencia de dicha funcion aunq sea para arduino:

Funcion Map

El problema es cuando los valores pasan de 1200 y pico.

Gracias.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con LCD y ASCII
« Respuesta #5 en: 28 de Mayo de 2011, 18:20:19 »
Long int? CCS no implementa eso, por lo menos según la ayuda:


short              int1
 
char               unsigned int8
 
int                  int8
 
long               int16
 
long long        int32
 
float               float32
 

Coloca alguno de eso para asegurarte, y usa lu.

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

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema con LCD y ASCII
« Respuesta #6 en: 28 de Mayo de 2011, 18:58:16 »
Hola.

Como dice Suky, esa opción de %li no existe en el CCS, si la escribes te generará un error. El problema es entonces con la función en particular .... revisa bien como lo hace para que no haya errores.

Saludos
El papel lo aguanta todo

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema con LCD y ASCII
« Respuesta #7 en: 28 de Mayo de 2011, 20:51:11 »
Hola sokoloko, en CCS long int y long son la misma cosa, asignación de variables enteras de 16 bits, aunque la opción %li seguramente te va a mostrar un error como ya te habían indicado.  Posiblemente lo que te está causando el problema es que estás trabajando la conversión ADC en 8 bits (por defecto).  Para trabajar a 10 bits, debes poner al comienzo #device adc=10.  El encabezado podría quedar asi:

Código: C
  1. #include <16f88.h>            //pic a utilizar
  2. #device adc=10          
  3. #fuses NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
  4. #FUSES INTRC_IO
  5. #use delay (clock=8000000)         //Fosc=8Mhz

Saludos!

Desconectado sokoloko

  • PIC12
  • **
  • Mensajes: 77
Re: Problema con LCD y ASCII
« Respuesta #8 en: 30 de Mayo de 2011, 05:17:28 »
Muchas gracias a todos por la ayuda!!!!  :-/ :-/ :-/

Ya esta funcionando, gracias a vuestros consejos, lo he cambiado con %lu y con long, y va perfecto.

Tambien modifique los fusibles y funciona de lujo.

Muchas gracias de nuevo!!!


 

anything