|
This really isnt a new drawing machine. It is a replacement of the simstick in dm1 with a dt107 and an atmel Mega8. This is my first crack at the avr servo driving.
/*$Revision: 1.3 $
timings
The idea here is that the maximum pulse is about 2ms.
if we map the timings so that 255=2ms then the usable
servo pulse is between
*/
#include <io.h>
#include <interrupt.h>
#include <signal.h>
#define NSERVOS 3
uint_8 servodelay[NSERVOS+1]; /* max of 8 */
uint_8 currentservo=0;
uint_8 servoport=0;
uint_8 servoportmask=0x07;
uint_8 skipbeat=10-(NSERVOS/2);
SIGNAL(SIG_OVERFLOW0) /* signal handler for tcnt0 overflow interrupt */
{
if (currentservo==NSERVOS) {
if (!(--skipbeat)) {
skipbeat=10-(NSERVOS/2);
servoport=1;
currentservo=0;
outp(servodelay[currentservo],TCNT0);
outp(servoport,PORTB);
}
} else {
servoport<<1;
currentservo++;
outp(servodelay[currentservo],TCNT0);
}
}
int main(void)
{
outp(0xff,DDRB); /* use all pins on PortB for output */
outp((1<<TOIE0), TIMSK); /* enable TCNT0 overflow */
outp(0, TCNT0); /* reset TCNT0 */
outp(5, TCCR0); /* count with cpu clock/1024 */
led = 1; /* init variable representing the LED state */
sei(); /* enable interrupts */
for (;;) {} /* loop forever */
}
|
One Response to “Drawing Machine #11”
Leave a Reply