Hi,
Danke für deine Antwort! Aber auch wenn ich was in die For-Schleife schreibe passiert nix anderes! Hab den Code mal bisschen umgeschrieben! Vielleicht hast du ja noch ein paar Ideen!
Code:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <math.h>
#include <avr/delay.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<<PB1) | (0<<PB0);
DDRD |= (1<<PD7);
PORTD |= (1<<PD7);
//Timer0 übernimmt die Highphase
//muss 1ms sein also 25 Takte bei einem Prescaler von 64
puls = 25;
TCCR2 = (1<<CS22) | (1<<WGM21) |(1<<COM21) |(1<<COM20);
TCNT2 = 6;
TIMSK = (1<<TOIE2);
while(1) {
PORTB = 0xFD;
_delay_ms(100000);
PORTB = 0xFE;
_delay_ms(100000);
}
}
SIGNAL(SIG_OVERFLOW2)
{
switch(zaehler) {
case 0:
// case 1: das da aktivieren für 2 mS Servo
PORTD |= (1<<PD7);
zaehler++;
break;
case 2:
//PORTD &= ~(0<<PD7);
PORTD &= ~(1<<PD7);
zaehler++;
break;
case 20:
zaehler = 0;
PORTD |= (1<<PD7);
break;
case 21:
zaehler = 0;
PORTD &= ~(1<<PD7);
break;
TCNT2 = 6;
}
}
gruß matic
Lesezeichen