Guía de Usuario USBasp V3.0| HeTPro
PORTB|=_BV(PB3);
PORTB&=~(_BV(PB3));
PORTB|=_BV(PB4);
PORTB&=~(_BV(PB4));
PORTB|=_BV(PB5);
PORTB&=~(_BV(PB5));
PORTB|=_BV(PB6);
PORTB&=~(_BV(PB6));
En esta parte de código se repite 6 veces lo mismo, una por servomotor, analizando el
código, activa el solo el pin que se necesita del puerto B y entra a un ciclo for el cual
solo tiene la instrucción dentro de el de esperar un micro segundo, pero el for va
desde cero hasta el valor de sX por lo tanto, es igual a un retardo de sX
microsegundos, después se desactiva ese bit del puerto, lo que generara un pulso, y
hace lo mismo para los 6 pines del PB1 al PB6. En tiempo esto se vería como, que se
genera un pulso de s1 us por el pin 1 y se desactiva, instantáneamente se genera otro
pulso de s2 us, después otro de s3 us y así hasta que se termina el pulso s6.
bajo=10000-(s1+s2+s3+s4+s4+s5);
}
}
Por lo tanto la el tiempo de los 6 pulsos es la suma de s1 a s6, en este caso el servo
simulado trabaja con pulsos cada 10 milisegundos por lo tanto cada 10 milisegundos
tiene que recibir un pulso, entonces para calcular el tiempo de espera para que inicie
el siguiente pulso tomamos 10 000 us que es igual a 10 ms y le restamos la suma de
las sX, y ese seria nuestro tiempo en bajo, después realizamos un retardo que dure lo
que la variable bajo. El programa se cicla y los servomotores siguen activos
respondiendo al valor y al selector de cambio.
for (i = 0; i <= s3; i++)
{_delay_us(1);}
for (i = 0; i <= s4; i++)
{_delay_us(1);}
for (i = 0; i <= s5; i++)
{_delay_us(1);}
for (i = 0; i <= s6; i++)
{_delay_us(1);}
for (i = 0; i <= bajo; i++)
{_delay_us(1);}
66