TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: LEDER en 17 de Agosto de 2015, 18:34:22
-
:-/ :) Hola tengo un pequeño problema con mi proyecto estuve tratando de hacer que a través de un LCD se me muestre el voltaje de una batería y el porcentaje de carga que tiene el inversor bn asta allí todo bien me muestra el voltaje de la batería y el porcentaje de carga pero tengo un pequeño problema para mostrar el signo de porcentaje (%) después de la medición aquí les dejo mi código para que me ayuden :-/
#include <16F877A.h> //pic usado
#device ADC=10 //ADC = de 1024 bits
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOPUT //No Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage
#FUSES NOWRT //Program memory not write protected
#FUSES PUT
#FUSES BROWNOUT
#use delay(clock=4000000) //fracuensia del cristal 20MHz
#include <lcd.c> //Archivo para el manejo de LCD
#define use_portb_lcd TRUE //uso de puerto D para el LCD
int16 carg; //variable CARG
float p; //variable P
int16 volt; //variable VOLT
float b; //variable B
float c; //variable C para monitoreo independiente del votage para la proteccion por bateria baja
void main(){ //apertura de programa
OUTPUT_HIGH(PIN_B0); //salida alta por el pin B0 para mantener apagado el inversor al conectarlo
setup_port_A(all_analog); //todas las entradas analogicas
setup_adc(adc_clock_internal); //configura el converso
delay_ms(10); //tiempo de retardo por seguridad
printf(lcd_putc,"\fSISTEM SEARCH"); //inicialisasion
delay_ms(5000); //evita que el lcd espabile
while (TRUE){ //bucle
if(c>=53){ //para que el inversor no ensienda asta que la bateria no este cargada
output_low(PIN_B3);} //salida baja para cortra arestar la salida alta por bateria baja para encender el inversor
if(c<=44){ //para apagar el inversor por bateria baja
output_high(PIN_B3);} //salida alta por el pin b3 para apagar el inversor
if(p>=99){ //lectura de la variable P y condision a prosesar
output_high(PIN_B4);} //salida alta por el pin B3 si se cumple la condision de la variable P
if(p<=98){ //por seguridad
output_low(pin_b4);} //salida baja por el pin b4 por seguridad
delay_ms(100); //para que se estabilice
lcd_init(); //iniciacion de lcd
set_adc_channel(1); //Seleccionamos el canal'1' para hacer la lectura del valor analogico
delay_ms(1); //para que se estabilice
volt = read_adc(); //Hacemos la lectura del canal seleccionado anteriormente (canal'1')
delay_ms(1); //para que se estabilice
b=(float)(volt*60/1000); //variable B
c=(float)(volt*60/1000); //variable C
lcd_gotoxy(1,1); //muestra la lectura de voltaje en las lineas (1,2) del LCD
printf(lcd_putc, "\b VOLTAJE = %3.1fV", b); //muestra de la lectura de la variable C en el LCD
delay_ms(1000); //para que se estabilice
set_adc_channel(0); //Seleccionamos el canal'0' para hacer la lectura del valor analogico
delay_ms(1); //para que se estabilice
carg = read_adc(); //Hacemos la lectura del canal seleccionado anteriormente (canal'0')
delay_ms(1); //para que se estabilice
p=(float)(carg*0.979/10.000); //variable P
lcd_gotoxy(2,2); //muestra la lectura de voltaje en las lineas (10,2) del LCD
printf(lcd_putc, "\bCARGA =3.0%f",p); //muestra de la lectura de la variable P en el LCD
delay_ms(1000); //para evitar que el LCD parpadee
lcd_gotoxy(13,2); //muestra el signo % en la fila 2 linea 14
printf(lcd_putc, ""); //comando para la muestra del %
if(input(pin_b2)==1){ //lectura de si se presiono el botos si o no para el buzer y prender o apagar el inversor
output_high(pin_b5); //salida alta por el pin b5 para hacer sonar el buzer
delay_ms(1000); //tiempo de retardo del buzer sonando
delay_ms(1000); //por seguridad
output_low(pin_b5); //salida baja por el pin b5 para hacer que el buzer deje de sonar
delay_ms(1000); //por seguridad
delay_ms(1000); //por seguridad
output_toggle(PIN_B0); //para encender o apagar el inversor segun como estaba
delay_ms(1000);} //por seguridad
else if(input(pin_b2)==0){ //por seguridad
output_low(pin_b5); //por seguridad
delay_ms(1000); //por seguridad
delay_ms(1000);}}} //por seguridad
-
Lo puedes hacer asi:
int var= 67;
void main()
{
lcd_init();
printf(lcd_putc,"%u%%",var); // con dos signos %%
while(true);
}
Saludos
-
Hola ! aprovecho para preguntarles como se hace para mostrar un cuadrado negro y luego otro y luego otro
para que parezca el efecto de carga
-
Para que puedas realizar lo que deseas; debes crear caracteres no definidos en la lcd, para ello revisa aqui (http://www.todopic.com.ar/foros/index.php?topic=14774.0).
Para que sepas como crearlos.
Saludos
-
o con lcd_putc(0xFF); ?
http://3.bp.blogspot.com/_fPM2Mmzdjhc/TU3R8w_KaOI/AAAAAAAAAfs/WvDoGqdcePs/s1600/LCDcaract1.gif
-
A claro si es un solo cuadro negro de las mismas dimensiones como dice killerjc, tambien sirve.
Ahora bien si te quieres ponerte creativo y hacer figuras o unas barras que vaya creciendo horizontal o verticalmente, deberas crear los caracteres, como te indique en el enlace de arriba. :mrgreen:
Saludos
-
buenisimo gracias ! :mrgreen: