////////////////////////////////////////////////////////////////////////////////
//
//
//
CONTROL VELOCIDAD MOTOR DC CON PIC
//
//
//
//
(c) RobotyPic 2012
//
//
//
////////////////////////////////////////////////////////////////////////////////
#include <16f887.h>
#device adc=8
//Archivo para control del pic 16f876a
//Configuracin conversor AD a 8 bits
#fuses XT,NOWDT
#use delay(clock=4000000)
//frecuencia de reloj 4 MHz
#byte trisb=0x86
#byte portb=0x06
#byte trisc=0x87
#byte portc=0x07
//Configuracin puerto b control lcd
#include <lcd.c>
//archivo para control del lcd
/***************** Definicin de las variables globales ***********************/
int1 cambio=0;
int16 lectura_AD;
//Control del cambio
//Referencia de velocidad
/********************** Prototipos de las funciones ***************************/
void main (void);
void ccp2_int (void);
//funcin principal
//funcin por interrupcin
/******************************************************************************/
/******************* FUNCIN GENERACIN MODULACIONES PWM
**********************/
#int_ccp2
void ccp2_int(){
if(++cambio==1){
//Conmutacin estado salida CCP2
setup_ccp2(CCP_COMPARE_CLR_ON_MATCH); //Modo comparacin, conmutacin salida a 0
ccp_2=lectura_AD;
//carga del ccp2 con valor semiperiodo alto
else{
setup_ccp2(CCP_COMPARE_SET_ON_MATCH); //Modo comparacin, conmutacin salida a 1
ccp_2=255-lectura_AD;
//Carga del ccp2 con valor semiperiodo bajo
}
set_timer1(0);
//Reinicio del temporizador para comparacin
/******************************************************************************/
/******************** FUNCIN PRINCIPAL ***************************************/
void main(){
float velocidad;
//Porcentaje velocidad
trisc=0x00;
//Puerto C como salida de datos
port_b_pullups(TRUE);
//Habilitacin resistencias pullups puerto b
lcd_init();
//Inicializacin del lcd
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); //Configuracin Timer para comparacin
setup_ccp2(CCP_COMPARE_SET_ON_MATCH);
setup_adc_ports(ALL_ANALOG);
//Modo comparacin, conmutacin salida a 1
//Canal de entrada analgico AN0
setup_adc(ADC_CLOCK_INTERNAL);
//Fuente de reloj RC para conversor AD
enable_interrupts(int_ccp2);
//habilitacin interrupcin por comparacin
enable_interrupts(GLOBAL);
//Habilitacin de toda las interrupciones
while (true){
set_adc_channel(0);
delay_us(20);
lectura_AD=read_adc();
velocidad=(lectura_AD);
//Habiliatacin lectura AD
//Estabilizacin
//Lectura canal analgico
//Clculo % de velocidad
lcd_init();
printf(lcd_putc, "\fVelocidad = %3.0f%%", velocidad);
}
}