TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pic_877a en 16 de Febrero de 2020, 14:12:08
-
hola amigos del foro cordial saludo
bueno les comento que he diseñado un codigo en ccs para un vultimetro de 0 a 50V usando pic 16f88, adjunto el codigo
#include <16f88.h>
#device adc=10//Resolucion del ADC
#use delay (clock=4M)
#include <lcd.c>
#fuses NOWDT,INTRC,NOMCLR,NOLVP,CPD,WRT,PROTECT
///////////////////////////////////////////////////
//Programa Principal//
//////////////////////////////////////////////////
void main()
{
unsigned long valor=0;//Declaracion de variables
float voltaje; //Variable que contendra el resultado
///////////////////////////////////////////////////////////////////////////////////////
//Se habilita el A/D y se declara el PORT a usar//
///////////////////////////////////////////////////////////////////////////////////////
setup_adc( ADC_CLOCK_INTERNAL );
setup_adc_ports(sAN0);
set_adc_channel(0);
//////////////////////////////////////////////
//Se inicia la LCD//
//////////////////////////////////////////////
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("Iniciando.....");
delay_ms(2000);
lcd_putc("\f" ) ;
lcd_gotoxy(4,1);
lcd_putc("VOLTIMETRO");
do//Bucle
{
delay_ms(100);
valor = read_adc();
voltaje = (float)valor*0.004882812*10.44 ;
lcd_gotoxy(5,2);
printf(lcd_putc,"%g V",voltaje);
}while(true);
}
pero al visualizar en el lcd 16x2 NO se visualiza el mensaje Iniciando..... adjunto la imagen, y espero me puedan ayudar y ver por que NO se esta visualizando lo deseado gracias :(
jose
-
Hola creo que debe definir los pin de la lcd, en tu caso me parece que puede ser asi:
#include <16f88.h>
#device adc=10//Resolucion del ADC
#use delay (clock=4M)
#fuses NOWDT,INTRC,NOMCLR,NOLVP,CPD,WRT,PROTECT
#define LCD_ENABLE_PIN PIN_B2
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#include <lcd.c>
-
amigo gracias por la ayuda, ya me funciono y si me falto declarar los bits, ahora tengo un problema con el divisor de voltaje, en la salida de la tengo un voltaje maximo de 51.4Vdc, y en el lcd me registra 52.15Vdc.
se que la falla esta en el divisor de voltaje cierto amigo? :?
-
Buenas, para tener un mejor ajuste en tu divisor resistivo podrias poner un preset para que lo puedas ajustar bien, por otro lado lo que estas haciendo lo vas a realizar fisico? como estas tomando lo valores vas a ter varaciones en la medicion que lo vas a tener reflejado en el LCD , te combien tomar varias muestras y promediar.
Saludos
-
acabo de arreglar el divisor de voltaje con resistencias 2.2M en serie, adjunto imagen amigos.
-
Hola, lee en la hoja de datos del microcontrolador y chequea la impedancia de entrada del ADC. Pero seguramente es muy inferior que 2M2.
Yo utilizaría entre el divisor resistivo y la entrada del ADC, un op-amp en modo seguidor con ganancia 1, ya que éste se caracteriza por tener alta impedancia de entrada y baja impedancia de salida. Además de proteger dicho ADC, por cualquier despiste en la tensión de entrada.
-
....
ahora tengo un problema con el divisor de voltaje, en la salida de la tengo un voltaje maximo de 51.4Vdc, y en el lcd me registra 52.15Vdc.
se que la falla esta en el divisor de voltaje cierto amigo? :?
La falla está en usar un divisor x4 con una tensión de entrada de 51.4V ---> 51.4/4=12.85v --> te está conduciendo el zener.
En el otro circuito, para un circuito real, 2M2 es una resistencia demasiado alta y además para valores cercanos a 5V se te va a derivar corriente por el zener de 5.1V. Además, mientras las resistencias del divisor no sean muy bajas no lo necesitás porque actúan los diodos de protección de la entrada.
-
bueno amigos, ya arregle el divisor de tension, y elimine el zener, modifique la ecuación en el código
adjunto la imagen
y gracias por la ayuda ;-)
jose