/*

basic pwm on a atmega32

*/

#define OUTPUT 1

#include<avr/io.h>

void pwm_init();

int main (void) {

   DDRB = 0xFF;      // port B output
   DDRD = 0xFF;      // port D output

   pwm_init();
   
   OCR0 = 77;   // this commes out on pin 4  (PB3)
   OCR2 = 168;  // this commes out on pin 21 (PD7)

}

void pwm_init() {
  // clear pwm levels
  OCR0 = 0; 
  OCR2 = 0;
  
  // set up WGM, clock, and mode for timer 0
  TCCR0 = 0 << FOC0  | 
          1 << WGM00 | /* fast pwm */
          1 << COM01 | /* not inverted */
          0 << COM00 |
          1 << WGM01 | /* fast pwm */
          0 << CS02  | /* no prescale */
          0 << CS01  |
          1 << CS00  ;
  
  // set up WGM, clock, and mode for timer 2
  TCCR2 = 0 << FOC2  | 
          1 << WGM20 |
          1 << COM21 |
          0 << COM20 |
          1 << WGM21 |
          0 << CS22  |
          0 << CS21  |
          1 << CS20  ;
  
 }

