Hallo

Je nach Servotyp liegt die Mitte des Drehbereichs bei Impulslängen von ca. 1ms bis 1,5ms Dauer (ms bedeutet Millisekunden oder 1/1000 Sekunde). Der Impuls sollte alle 20ms wiederholt werden.

In der orginalen asuro-Library von der CD dauert ein Sleep(1) genau 1/72000 Sekunde, Sleep(72) dauert entsprechend eine 1ms. (Bei den neueren Libs wird ein 36kHz-Timer verwendet, deshalb dauert hier Sleep(36) eine Millisekunde.) Für 20ms Impulswiederholung müßte man Sleep(20*72-Impulslänge) warten. Da Sleep() aber einen 8bit-Parameter benötigt, muss man die Impulspause auf mehrere Aufrufe von Sleep verteilen. 20*72 wären 1440 Sleep(1)-Aufrufe, davon muss man noch die Impulsdauer abziehen und den Rest auf 255er Sleep()-Aufrufe verteilen:

Code:
#include "asuro.h"

#define libversion 72 // 72kHz oder 36kHz Library

int Impulspause;
char Servoimpuls = libversion; // 72 (oder 36) für eine Millisekunde (Servomitte?)

int main(void)
{
	Init();
	while(1)
	{
		BackLED(OFF,ON); // Impulsstart
		Sleep(Servoimpuls);
		BackLED(OFF,OFF); // Impulsende

		Impulspause=libversion*20-Servoimpuls; // Anfang Pause; Dauer berechnen
		while(Impulspause > 255) // 255er-Schritte
		{
			Sleep(255);
			Impulspause -= 255;
		}
		Sleep(Impulspause); // Restpause
	}
	return(0);
}
(ungetestet)

Gruß

mic