¿Cómo puedo controlar varios servomotores utilizando 2 temporizadores en un ATmega16? He buscado "servo bit banging" pero ninguna publicación coherente lo explica completamente. Encontré un código pero no lo entiendo completamente.
#include<avr/io.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "util.h"
#include "std_typed.h"
volatile u8 X, lowCount, highCount, arrCount = 0;
u8 array[180]={0};
void main( void)
{
DDRD = 0xff;
PORTD = 0b11111111;
//DDRA = 0xff;
// Set no prescaler for both t- and t2
TCCR0 = (0<<CS02) |(0<<CS01) | (1<<CS00) ;
TCCR2 = (0<<CS22) |(0<<CS21) | (1<<CS20) ;
// for the first time only let the interrupts start
TCNT0 = 0xd4;
TCNT2 = 0xf4;
SET_BIT(TIMSK, TOIE0);
SET_BIT(TIMSK, TOIE2);
// Enable Global Interrrupt
sei();
while(1)
{
}
}
ISR( TIMER2_OVF_vect)
{
TCNT2 = 0xd4;
if(highCount<45)
{
X = 0xff;
highCount++;
}
else if( arrCount<180)
{
X = array[arrCount];
arrCount++;
}
else if(lowCount< 1591)
{
X = 0;
lowCount++;
}
else
{
X, lowCount, highCount, arrCount = 0;
}
//PORTA ^=0b10000000;
}
ISR( TIMER0_OVF_vect)
{
TCNT0 = 0xd4;
PORTD = X;
//PORTA ^=0b00000001;
}
Cualquier enlace o explicación sería genial.