• Viernes 8 de Noviembre de 2024, 22:55

Autor Tema:  pwm  (Leído 2007 veces)

omar8

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
pwm
« en: Jueves 31 de Julio de 2008, 19:55 »
0
ME GUSTARIA SABER SI ESTA BIEN EL CODIGO DE PWM:


#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908GP32.h> /* include peripheral declarations */

#define INCREMENT 0XAA; //valor de incremento del ancho del pulso

/*Cuando sucede el overflow del TIM, se complementa el valor del pin del canal,
debido a el bit TOV1 se colocó en 1.

interrupt 6 void TIM1_OV_ISR (void)
   {  
      static unsigned char i=0;
      static unsigned char sentido = 1;
      static unsigned int temp = 0;

      T1SC_TOF=0;


      if(sentido == 1)  //Va anchando el pulso hasta aprox el 100% de T
         {
           if (i < 60)
              {
                   temp +=INCREMENT;
                   T1CH0 = temp;
                   i++;
               }
              
           else sentido = 0;
         }
         
         
      if (sentido == 0) //va disminuyendo el ancho del pulso hasta T/60  
         {  
              if ( i > 1)
                 {
                    temp -= INCREMENT;
                    T1CH0 = temp;
                    i--;
                 }
              else
                  {
                  sentido = 1;
                  temp +=INCREMENT;
                  T1CH0 = temp;
                  i++;
                  }
           }
 }  
                 


/* Cuando sucede esta interrupción el pin del canal va a cero ya
que en el modo output capture se configuró así*/      
interrupt 4 void TIM_CH0_ISR (void)
   {
      T1SC0_CH0F=0; //INTERRUPCION ATENDIDA
      
   }
   

void main(void) {
 
  CONFIG1_COPD = 1;
  DisableInterrupts;
 
  //configuración de pin para salida
  PTD_PTD4=0;
  DDRD_DDRD4=1;
  PTD_PTD4=1;
 
  //Programacion de PWM
  T1SC=0X70;     // para generar 120Hz con Fclk=4.9152 MHz
  T1MOD=0x2800;  //T=1/120

  T1CH0=0x00AA;  //Valor inicial con T1 = T/60
  T1SC0 = 0X5A;  /*Coloca un cero en la salida cada vez que
                   el contador sea igual al valor en T1CH0 */
 
 
  T1SC_TSTOP=0;  //arranca conteo en módulo TIM
  EnableInterrupts;  
  //CONFIGURACION DE LA INTERRUPCION IRQ


  while(1){}
 
  }