Guía de Usuario USBasp V3.0| HeTPro
#include <AVR/io.h>
#include <util/delay.h>
int i,servo,posicion,s1=900,s2=900,s3=900,s4=900,s5=900,s6=900,bajo;
int main(void){
DDRC=0x00;
DDRD=0x00;
DDRB=0xFF;
while (1){
Se inicia con las librerías y se declaran las variables, como se puede ver las variables
s1 a s6 se inicializan con un valor, el puerto B se declara como salida y los puertos C y
D como entradas.
switch (PINC){
case 1:
s1=(4*PIND)+500; break;
case 2:
s2=(4*PIND)+500; break;
case 3:
s3=(4*PIND)+500; break;
case 4:
s4=(4*PIND)+500; break;
case 5:
s5=(4*PIND)+500; break;
case 6:
s6=(4*PIND)+500; break;
}
En este caso se lee el puerto C y se le asigna el valor la variable seleccionada a
cambiar de s1... s6, notemos que se ajusta la magnitud del valor multiplicándolo por 4
y se le suma un offset de 500, esto con el motivo de que el valor en sX es de micro
segundos por lo tanto los servos funcionan con un rango de pulsos, cada 20 ms, un
pulso de "x" ms, en este caso la "x" vale de 500 a 2500 micro segundos (dependiendo
del servo) es por eso que se ajusta de esa manera.
PORTB|=_BV(PB1);
PORTB&=~(_BV(PB1));
PORTB|=_BV(PB2);
PORTB&=~(_BV(PB2));
for (i = 0; i <= s1; i++)
{_delay_us(1);}
for (i = 0; i <= s2; i++)
{_delay_us(1);}
65