Hi Picnick,
mein Quartz ist 16Mhz
Es muss doch PORTB = (0<<PB0); heißen da ich ja das Servosignal löschen will!
mein aktueller Code:
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);
TCNT0 = (255-puls);
zaehler++;
}
else if ( (zaehler > 0 ) && (zaehler < 20 ) )
{
TCNT0 = (255-puls);
zaehler++;
}
else
{
TCNT0 = (255-puls);
zaehler = 0;
PORTB = (1<<PB0);
}
}
funktioniert immer noch net!
Gruß Michi
Lesezeichen