traedamatic
15.01.2006, 21:36
Hallo Leute,
ich habs jetzt geschaft ein gutes Board zubasteln (noch nicht ganz fertig!) Aber immerhin ist auch ein Servo schon dran, bloß jetzt hab ich Probleme beim programmieren:
Mein Servo bewegt sich nur ein kleines Stück und dann gar nicht mehr! ich möchte aber das er von Anfang bis Ende fährt! Bestimmt hab ich nur was Kleines vergessen, aber ich finde es einfach nicht!
also hier ist mal der 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();
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 = (255-puls);
TIMSK = (1<<TOIE2);
for(;;)
{
}
}
SIGNAL(SIG_OVERFLOW2)
{
if(zaehler == 0)
{
PORTD &= ~(0<<PD7);
TCNT2 = (255-puls);
zaehler++;
//PORTB = (0<<PB0);
}
else if ( (zaehler > 0 ) && (zaehler < 20 ) )
{
TCNT2 = (255-puls);
zaehler++;
}
else
{
TCNT2 = (255-puls);
zaehler = 0;
PORTD |= (1<<PD7);
}
}
Danke für eure hilfe!
matic
ich habs jetzt geschaft ein gutes Board zubasteln (noch nicht ganz fertig!) Aber immerhin ist auch ein Servo schon dran, bloß jetzt hab ich Probleme beim programmieren:
Mein Servo bewegt sich nur ein kleines Stück und dann gar nicht mehr! ich möchte aber das er von Anfang bis Ende fährt! Bestimmt hab ich nur was Kleines vergessen, aber ich finde es einfach nicht!
also hier ist mal der 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();
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 = (255-puls);
TIMSK = (1<<TOIE2);
for(;;)
{
}
}
SIGNAL(SIG_OVERFLOW2)
{
if(zaehler == 0)
{
PORTD &= ~(0<<PD7);
TCNT2 = (255-puls);
zaehler++;
//PORTB = (0<<PB0);
}
else if ( (zaehler > 0 ) && (zaehler < 20 ) )
{
TCNT2 = (255-puls);
zaehler++;
}
else
{
TCNT2 = (255-puls);
zaehler = 0;
PORTD |= (1<<PD7);
}
}
Danke für eure hilfe!
matic