Arriba esta el programa para controlar la velocidad de un motor CC dependiendo del estado de 8 interruptores. Aqui os dejo el siguiente que he hecho, que es tambien para controlar la velocidad de un motor CC, pero esta vez con un potenciometro.
Ya se que es muy basico y tal, pero si a alguien le interesa, pos ahi lo tiene...
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
///// /////
///// Hacer un programa que varie la velocidad de un motor de CC dependiendo /////
///// del estado de un potenciometro. Emplear el conversor A/D y el PWM. /////
///// /////
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
#include "C:SJD2OSCARPIC C 7 ADC2ADC02.h" //fuses y frecuencia de reloj
#include <lcd_picdem.c> //libreria del LCD
void main() //PROGRAMA PRINCIPAL
{
unsigned int i = 0x00;
float const c = 5.0/256.0; //constante para la conversion A/D
float final;
set_TRIS_C(11111011); //RC2 salida
SETUP_CCP1(CCP_PWM); //CCP1 como PWM
SET_TIMER2(0xAA); //cargo 0xAA en el timer 2
SETUP_TIMER_2(T2_DIV_BY_4,0xF0,1);
RA0_ANALOG;
setup_ADC(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_us(50);
do
{
i = read_adc(); //lee el valor del potenciometro
final = i*c; //pasa el valor a un rango de 0 a 5
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"Valor: %u",i); //muestro la lectura 0-256
lcd_gotoxy(1,2);
printf(lcd_putc,"%fV",final); //muestro la lectura 0-5
SET_PWM1_DUTY(i); //cargo el valor 0-256 al PWM
delay_ms(100);
}while(true);
}
El archivo ADC02.h
#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)