Hola a todos.
Por favor ayudenme si no hago esto voy a reprobar.
Tengo el siguiente programa que sirve para controlar la intencidad luminosa con un PWM, simulado en el proteus me da todo bien, pero fisicamente no me sale como en la simulación.
Cuando uso
setup_adc( ADC_CLOCK_INTERNAL ); la salida de tatos que se muestran en el LCD es muy rapida y oscila mucho ¿como puedo cambiar la velocidad de refresco?
#include <16F877a.h>
#device adc=10
#include <stdlib.h>
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP
#use delay(clock=4000000)
#use standard_io(A)
#include <lcd.c>
long valor=0;
const long escala=1023;
const float v_max=5.01;
void lectura_datos(void);
void modo_pwm(void);
void main(void){
lcd_init();
//lcd_gotoxy(1,1);
set_tris_a(0xFF); //puerto A como entratada
setup_adc_ports( ALL_ANALOG ); //seleccion de entradas analogicas
setup_adc( ADC_CLOCK_INTERNAL ); //habilita conversor
set_adc_channel( 0 ); //seleccion de canal
setup_ccp1(CCP_PWM); //configuracion de ccp1 en modo pwm
setup_timer_2(T2_DIV_BY_16,255,16); //definiendo el periodo del pwm
set_pwm1_duty(0);
for(;
{ ///bucle...
lectura_datos(); //llamada a la funcion lectura de datos
modo_pwm(); //llamada a la funcion de pwm
delay_ms(100); //cada 200ms realiza una lectura del conversor y muestra los nuevos datos por la lcd
} ///...infinito
}
void lectura_datos(void){
float tension;
float resolucion=.0050;
float result;
float temperatura;
valor = read_adc();
delay_us(10);
tension = ((valor * v_max) / escala);
result=(tension/resolucion * .73925);
temperatura=(result/10);
printf( lcd_putc, "\f %2.2f G Cent.",temperatura);
delay_ms(1000000);
}
void modo_pwm(){
set_pwm1_duty(valor);
}