juergen009
29.03.2018, 10:56
Hallo liebe Experten,
Denke auch über den Bau eines Hexapoden nach. Habe auch schon mal ein einzelnes Bein gebaut, um die Ansteuerung mit PWM zu verstehen.
Mein Equipment:
Arduino Due
Servoboard SD21
2 Labornetzgeräte
Multimeter
Servos Graupner C5077 (nur zum ausprobieren, später will ich gute Servos nehmen)
div. ...
Zunächst habe ich die 3 Servos mit PWM angesteuert, um erstmal einen Einstieg zu haben.
Jetzt soll das Ganze mit I2C passieren und da tun sich bei mir Verständnisprobleme auf..
Die Adresse des SD21 habe ich ausgelesen = 0x61
Wie werden nun die einzelnen Servo - Adressen gefunden?
Die Adresse für Servo 1 habe ich (Roland war so freundlich und hat mir ein Stückchen Code gegeben)
#define SERVO 0x3F // Address of first servo
Das funktioniert auch, der Servo bewegt sich, allerdings funktioniert die Einstellung der Drehgeschwindigkeit nicht.
Egal was ich einstelle, der Servo bewegt sich immer mit gleicher Geschwindigkeit.
Der komplette Code
#include <Wire.h>
#define ADDRESS 0x61 // The address of the SD21
#define SERVO 0x3F // Address of first servo
void setup(){
Wire.begin();
}
void loop(){
Wire.beginTransmission(ADDRESS);
Wire.write(SERVO);
Wire.write(100); // Send a value of xxx to 255 to servo 1
Wire.endTransmission();
delay(1000);
Wire.beginTransmission(ADDRESS);
Wire.write(SERVO);
Wire.write(2000);
Wire.endTransmission();
delay(1000);
Wire.beginTransmission(ADDRESS);
Wire.write(SERVO);
Wire.write((byte)0); // Values of 0 being sent using writ have to be masked as a byte to stop them being misinterperted as NULL this is a bug with arduino 1
Wire.endTransmission();
delay(1000);
Wire.beginTransmission(ADDRESS);
Wire.write(SERVO);
Wire.write(128); // send a value of 128 to servo 1
Wire.endTransmission();
delay(1000);
}
Habe ich es richtig verstanden, zwischen jeder
Wire.beginTransmission
und
Wire.endTransmission();
vergehen 20 ms ?
Danke für Eure Hilfe
Jürgen
Denke auch über den Bau eines Hexapoden nach. Habe auch schon mal ein einzelnes Bein gebaut, um die Ansteuerung mit PWM zu verstehen.
Mein Equipment:
Arduino Due
Servoboard SD21
2 Labornetzgeräte
Multimeter
Servos Graupner C5077 (nur zum ausprobieren, später will ich gute Servos nehmen)
div. ...
Zunächst habe ich die 3 Servos mit PWM angesteuert, um erstmal einen Einstieg zu haben.
Jetzt soll das Ganze mit I2C passieren und da tun sich bei mir Verständnisprobleme auf..
Die Adresse des SD21 habe ich ausgelesen = 0x61
Wie werden nun die einzelnen Servo - Adressen gefunden?
Die Adresse für Servo 1 habe ich (Roland war so freundlich und hat mir ein Stückchen Code gegeben)
#define SERVO 0x3F // Address of first servo
Das funktioniert auch, der Servo bewegt sich, allerdings funktioniert die Einstellung der Drehgeschwindigkeit nicht.
Egal was ich einstelle, der Servo bewegt sich immer mit gleicher Geschwindigkeit.
Der komplette Code
#include <Wire.h>
#define ADDRESS 0x61 // The address of the SD21
#define SERVO 0x3F // Address of first servo
void setup(){
Wire.begin();
}
void loop(){
Wire.beginTransmission(ADDRESS);
Wire.write(SERVO);
Wire.write(100); // Send a value of xxx to 255 to servo 1
Wire.endTransmission();
delay(1000);
Wire.beginTransmission(ADDRESS);
Wire.write(SERVO);
Wire.write(2000);
Wire.endTransmission();
delay(1000);
Wire.beginTransmission(ADDRESS);
Wire.write(SERVO);
Wire.write((byte)0); // Values of 0 being sent using writ have to be masked as a byte to stop them being misinterperted as NULL this is a bug with arduino 1
Wire.endTransmission();
delay(1000);
Wire.beginTransmission(ADDRESS);
Wire.write(SERVO);
Wire.write(128); // send a value of 128 to servo 1
Wire.endTransmission();
delay(1000);
}
Habe ich es richtig verstanden, zwischen jeder
Wire.beginTransmission
und
Wire.endTransmission();
vergehen 20 ms ?
Danke für Eure Hilfe
Jürgen