Microcontroller › AVR › Servo Program Using TIMER0 › /* Here is the actual Working
April 2, 2013 at 6:08 pm
#9422
BhanuKiran Chaluvadi
Participant
/* Here is the actual Working Progam, Controlling Servo Using TIMER0 . SO that we can use Timer1 for other Purpose */
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
volatile uint8_t tot_overflow;
void timer0_init()
{
TCCR0 |= (1<<WGM01) | (1<<WGM00) | (1<<CS02) ; // Fast PWM CTC mode, Prescaling of 256
TCNT0 = 0 ;
OCR0 = 249;
TIMSK |= (1<<OCIE0) ;
sei();
}
ISR (TIMER0_COMP_vect)
{
tot_overflow++;
if(tot_overflow==5)
{
PORTA |= (1<<PA0) | (1<<PA1) | (1<<PA2) ;
tot_overflow=0;
}
}
int main (void)
{
DDRA |= (1<<PA0) | (1<<PA1) | (1<<PA2) ;
timer0_init();
tot_overflow=0;
while(1)
{
if (TCNT0>=15 && TCNT0<=145 && tot_overflow==0)
{
if (TCNT0 >= 23 && bit_is_set(PORTA, PINA0) ) PORTA &= ~(1<<PINA0);
if (TCNT0 >= 78 && bit_is_set(PORTA, PINA1) ) PORTA &= ~(1<<PINA1);
if (TCNT0 >= 133 && bit_is_set(PORTA, PINA2) ) PORTA &= ~(1<<PINA2);
}
}
}