#include <16F88.h>
#FUSES HS,NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,CCPB0,NOFCMEN,NOIESO
#use delay(clock=8M)
#use rs232(uart1,baud=9600)
#USE FAST_IO(A)
#USE FAST_IO(B)
///////////////////////////////////////////////////////////
// Control PWM duty Motor DC mediante Potenciometro ADC //
///////////////////////////////////////////////////////////
/// Tarjeta ///
#define Boton_1 PIN_B3
#define Led_1 PIN_B1
///
/////////////////////////////////////////////////////////
// Potenciometro conectado en A0 //
// - Salida PWM por B0 //
// //
// //
/////////////////////////////////////////////////////////
//#zero_ram
int16 ADC_pot;
int8 duty,x,mem;
void main(){
output_a(0); //Latch puertos
output_b(0b00100000); //Latch puertos
set_tris_a(0b00000001); //Config Puertos ADC0=A0
set_tris_b(0b00000100); // PWM por B0,TX=B5,RX=B2
//------------- Config ADC -----------------//
setup_adc_ports(sAN0|VSS_VDD); //A0 entrada analoga
setup_adc(ADC_CLOCK_DIV_16);
set_adc_channel( 0 );
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//------------------------------------------//
//----- Configuracion PWM --------------------- //
SETUP_CCP1(CCP_PWM); // Seleccionamos PWM
SETUP_TIMER_2(T2_DIV_BY_1, 254,1); // Frecuencia = KHz
SET_PWM1_DUTY(0); // DUty cycle =
//------------------------------------------------
for(x=0;x<4;x++){
output_toggle(Led_1);
delay_ms(100);
}
////////////// Programa ////////////////////////
while(1){
for(x=0;x<255;x++){
adc_pot+=read_adc();
delay_us(20);
}//for
output_low(Led_1);
adc_pot=adc_pot>>8;
duty=adc_pot;
SET_PWM1_DUTY(duty);
if(duty
!=MEM
){printf("Duty = %u \r ",duty
); mem=duty;
output_high(Led_1);
delay_ms(20);
output_low(Led_1);
}//if
adc_pot=0;
}//endwhile
}// en main