Hi Leutz,
ich da ein Problem mit der Servoansteuerung!
Folgenden Quelltext verwende ich:
Code:
#include <avr/io.h> 
#include <avr/signal.h> 
#include <avr/interrupt.h> 
#include <inttypes.h> 
#include <math.h> 

volatile unsigned char servowert;
volatile unsigned char puls;
volatile unsigned char zaehler;

int set_servo(volatile uint8_t pos)
	{
	servowert = (pos/180) + 1;
	}
	
int main(void)
	{
	zaehler = 0;
	sei();
	DDRB = (1<<PB0);
	PORTB = (1<<PB0);
	//Timer0 übernimmt die Highphase
	//muss 1ms sein also 25 Takte bei einem Prescaler von 64
	puls = 25;
	TCCR0 = (1<<CS01)|(1<<CS00);
	TCNT0 = (255-puls);
	for(;;)
	{
	}
	}
	
SIGNAL(SIG_OVERFLOW0)
	{
	if(zaehler == 0)
	    {
		PORTB = (0<<PB0);
		
		zaehler++;
		}
	else if(0 < zaehler < 20)
		{
		zaehler++;
		}
    else
        {
        zaehler = 0;
		PORTB = (1<<PB0);
        }
	}
die Funktion set_servo hat damit noch nichts zu!
Folgendes macht das Programm:
-> Timer0 mit Prescaler64
-> 25 Takte ergeben 1ms
-> zuerst ist PortB0 an
-> nach der 1ms wird PortB0 ausgeschaltet
-> danach wird zaehler immer erhöht bis 20 ist dann wird PortB0 wieder eingeschaltet!
ein Servo braucht doch erst 1ms high und dann 19ms low und dann wieder 1ms high.....usw!
Sobald ich den µC resette fährt der Servo ein Stück weiter bleibt dort dann aber stehen!
Könnt ihr mir da weiterhelfen? Was ist an dem Code falsch?
Gruß Michi