Hola soy nuevo aqui , quiero hacer modulacion por ancho de pulso para variar la velocidad de un motor de 12v con este codigo pero en el proteus como que no varia la velocidad y se prende y apaga cada cierto tiempo
#include <16f877A.h> // Utilizamos el PIC 16F877A
#device adc=10 // Usa resolución de 10 bits
#use delay(clock=4M) // Cristal a utilizar
#fuses XT,NOWDT,NOPROTECT
#define lcd_rs_pin pin_D0
#define lcd_rw_pin pin_D1
#define lcd_enable_pin pin_D2
#define lcd_data4 pin_D4
#define lcd_data5 pin_D5
#define lcd_data6 pin_D6
#define lcd_data7 pin_D7
#include <lcd.c>
#use standard_io (B)
#use standard_io (D)
void main (void)
{
float th,tl,medicion,porcentaje;
lcd_init(); // Inicia LCD
lcd_putc(" Control de velocidad\n"); // Saca texto
lcd_putc(" de un motor DC"); // Saca texto
delay_ms(2000);
lcd_putc("\f"); // Limpia pantalla
lcd_putc("Duty\n"); // Saca texto
lcd_putc("= "); // Saca texto
lcd_gotoxy(14,2); // Acomoda cursor LCD
lcd_putc("%");
while (1)
{
// lcd_gotoxy(8,2); // Acomoda cursor LCD
// lcd_putc(" "); // Limpia ese sector de pantalla
//lcd_gotoxy(8,2); // Acomoda cursor LCD
//********************************************************//
setup_adc (adc_clock_internal);
setup_adc_ports (all_analog);
set_adc_channel (0); // Elige canal a medir RA0
delay_us (20);
medicion=read_adc (); // Hace conversión AD
setup_adc (adc_off); // Apaga ADC
th=medicion*(0.01953125);
tl=20-th;
porcentaje=th*(5);
output_high(pin_B0);
delay_ms(th);
output_low(pin_B0);
delay_ms(tl);
// Pasa binario a °C
//**********************************************************//
// printf(lcd_putc,"%02.1f",porcentaje); // xx.x
}
}
Como ven uso periodo total de 20ms y el alto depende del adc
no entiendo cual es el error me podrian decir