lunes, 7 de marzo de 2011

PWM por medio de PIC (con Manzanitas y Peras)

Bueno les traigo el programa para la practica de opto, controlar un motor por medio de PWM, que a su vez es controlado por una fotoresistencia, yo se que su maestro de pics les deja practicas mas perronas que esta y por eso lo quieren hacer con el 555, pero de todos modos si no quieren complicarse la vida tanto hago este post con  la info que mi “maestros” internet y el libro de picc me han enseñado.

No entrare mucho en detalles sobre el tema deduciendo que ya saben que es un PWM, ademas el video creo yo esta bastante claro y enseguida del mismo les dejo el programa que yo hice, de todos modos cualquier pregunta mañana en la mañana pueden decirmela y con gusto les ayudare… le doy paso al maestro xD

 


Programa

//****************************************************************************
// Control de un motor por PWM con una fotorresistencia
//Materia: Optoelectronica
//Andres Eduardo Sabas Jimenez
//02/03/2011
//------------------------------------------------------------------------------
// El motor aumentara o disminuira su velocidad dependiendo del aumento
// o disminucion de la resistencia en la fotorresistencia
//*****************************************************************************
#include <pwm.h>


void main()
{

   setup_adc_ports(ALL_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   //setup_pp(PMP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_1,124,1); //Configura el timer 2 para tener un PWM de 20KHz
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_ccp1(CCP_PWM);//Configuramos el CCP1 para funcionar como PWM
   set_pwm1_duty(0);
   set_adc_channel(0); //Seleccionamos el canal cero del ADC
  
   //Declaracion de Variables
  
   long duty;
  
   //Codigo
  
   while(1)
   {
   duty=read_adc()/2; //Mandamos la lectura del ADC a la variable duty y la dividimos entre dos,
                      // ya que el maximo del duty es 400 para el 100% del PWM
   delay_us(20);      // Retardo de 20us para la lectura del ADC
   set_pwm1_duty(duty); // Ajustamos el PWM con el ciclo de trabajo que nos da el ADC
   }
}

------------------------------------------------------------------------------
Espero ver mas microcrontoladores, que 555 en la practica

Nos vemos mañana