privatestatic
14.10.2006, 16:42
Hallo Leute,
ich möchte 2 Servos mittels PWM im "Phase and Frequency Correct"-Modus ansteuern. Mit dem untenstehenden Programm funktioniert allerdings immer nur jeweils ein Servo. Wenn ich beide gleichzeitig aktiviere dann zuckeln sie nur sinnlos herum. Wie kann ich beide Servos gleichzeitig zum Laufen bringen?
MfG
Nico
#ifndef F_CPU
#define F_CPU 16000000
#endif
#include <avr/io.h>
#include <util/delay.h>
// Servoansteuerung
#define U_LIMIT 2000
#define L_LIMIT 1000
#define TOP 20000
#define SPEED(x) (L_LIMIT + ((( U_LIMIT - L_LIMIT ) / 255.0 )*x))
#define SETBIT(x,n) ((x)|=1L<<(n))
#define WAITMS(x) _delay_loop_2(((F_CPU * 0.001) / 4)*x) /**< 1 ms delay */
void init(void)
{
ICR1 = TOP; // ICR1 as TOP
SETBIT(DDRD,PIND4); // Port PD4 (OC1B) als Ausgang
SETBIT(DDRD,PIND5); // Port PD5 (OC1A) als Ausgang
SETBIT(TCCR1A,COM1A1); // OCR1A on
SETBIT(TCCR1A,COM1B1); // OCR1B on
SETBIT(TCCR1B,CS11); // Prescaler 8
SETBIT(TCCR1B,WGM13); // Phase and Frequency Correct PWM
//OCR1A = L_LIMIT + ((U_LIMIT-L_LIMIT)/2); // <-- Problem
OCR1B = L_LIMIT + ((U_LIMIT-L_LIMIT)/2);
}
int main(void)
{
unsigned char c;
init();
while(1)
{
for(c=0;c<=255;c++)
{
//OCR1A = SPEED(c); // <-- Problem
OCR1B = SPEED(c);
WAITMS(10);
}
}
}
ich möchte 2 Servos mittels PWM im "Phase and Frequency Correct"-Modus ansteuern. Mit dem untenstehenden Programm funktioniert allerdings immer nur jeweils ein Servo. Wenn ich beide gleichzeitig aktiviere dann zuckeln sie nur sinnlos herum. Wie kann ich beide Servos gleichzeitig zum Laufen bringen?
MfG
Nico
#ifndef F_CPU
#define F_CPU 16000000
#endif
#include <avr/io.h>
#include <util/delay.h>
// Servoansteuerung
#define U_LIMIT 2000
#define L_LIMIT 1000
#define TOP 20000
#define SPEED(x) (L_LIMIT + ((( U_LIMIT - L_LIMIT ) / 255.0 )*x))
#define SETBIT(x,n) ((x)|=1L<<(n))
#define WAITMS(x) _delay_loop_2(((F_CPU * 0.001) / 4)*x) /**< 1 ms delay */
void init(void)
{
ICR1 = TOP; // ICR1 as TOP
SETBIT(DDRD,PIND4); // Port PD4 (OC1B) als Ausgang
SETBIT(DDRD,PIND5); // Port PD5 (OC1A) als Ausgang
SETBIT(TCCR1A,COM1A1); // OCR1A on
SETBIT(TCCR1A,COM1B1); // OCR1B on
SETBIT(TCCR1B,CS11); // Prescaler 8
SETBIT(TCCR1B,WGM13); // Phase and Frequency Correct PWM
//OCR1A = L_LIMIT + ((U_LIMIT-L_LIMIT)/2); // <-- Problem
OCR1B = L_LIMIT + ((U_LIMIT-L_LIMIT)/2);
}
int main(void)
{
unsigned char c;
init();
while(1)
{
for(c=0;c<=255;c++)
{
//OCR1A = SPEED(c); // <-- Problem
OCR1B = SPEED(c);
WAITMS(10);
}
}
}