Dirk
11.06.2009, 15:04
Hallo Leute,
die RP6 CCPRO M128 Karte hat ja schon 3 Servostecker an der Platinenecke, wo auch der Sockel fürs EEPROM sitzt. Da kann man 3 Servos direkt anstecken, sie sind dann mit PB5, PB6 und PB7 verbunden.
Mit der neuen CCPRO-IDE Version 2.0 ist das Ansteuern von Servos ganz einfach. Hier die Demos:
CCPRO BASIC:
/************************************************** *****************************
* RP6 C-Control PRO M128 Erweiterungsmodul
* ----------------------------------------------------------------------------
* RP6_Servo Demoprogramm 1 - CCPRO BASIC
* ----------------------------------------------------------------------------
* RP6_Servo: Ansteuerung von 3 Servos
* 3 Standard-Servos erforderlich
* Mega128: Servo-Ausgänge PB5, PB6, PB7 (PortB.5, .6, .7)
* Erforderliche Library: IntFunc_Lib.cc.
*
* Drei zusätzlich erforderliche Standard-Servos (z.B. CONRAD ES-030)
* werden in dieser Demo gleichzeitig angesteuert. Die Demo ist ausgelegt
* für die CCPRO-IDE ab Version 2.0.
* Auf dem LCD-Display wird in der 1. Zeile die Servo-Position und in der
* 2. Zeile die zugehörige Impulsdauer in Mikrosekunden (us) angezeigt.
*
* Hinweis:
* Für allgemeine Programmierhinweise zur CCPRO schauen Sie sich bitte die
* CCPRO Dokumentation und die zugehörigen Beispielprogramme an!
* Es sei auch nochmals darauf hingewiesen, dass die normalen Beispielprogramme
* für die CCPRO nur zum Teil direkt auf dem RP6-CCPRO Modul laufen.
* Die Anschlussbelegung ist natürlich komplett anders als auf dem
* C-Control Application Board. Auch die LCD Ansteuerung ist leicht anders,
* da hier noch zusätzliche LEDs mit an dem Schieberegister angeschlossen sind.
* --> Die C-Control Beispielprogramme müssen ein klein wenig angepasst
* werden bevor sie auf diesem Modul laufen können!
*
* ************************************************** ***************************
* Der Roboter bewegt sich in diesem Beispielprogramm NICHT und kann
* am Rechner angeschlossen bleiben!
************************************************** ****************************/
' WICHTIG: Immer die RP6CCLib mit einbinden:
#include "../../RP6CCLib/RP6CCLib.cbas"
' -----------------------------------------------------------------------------
' Defines:
' Servo Konstanten:
#define SERVO1 13 ' Servo an PB5
#define SERVO2 14 ' Servo an PB6
#define SERVO3 15 ' Servo an PB7
' Servo Bewegungsgrenzen 0,7..2,3ms (abhängig vom Servotyp):
#define LINKER_ANSCHLAG 700 ' Linker Anschlag (0,7ms)
#define RECHTER_ANSCHLAG (2300 - LINKER_ANSCHLAG) ' Rechter Anschlag (2,3ms)
#define MITTE_POSITION (RECHTER_ANSCHLAG / 2) ' Mitte-Position (1,5ms)
' Wenn man die Bewegungsgrenzen für ein bestimmtes Servo einstellen will,
' muss erst der linke Anschlag so eingestellt werden, dass das Servo bei
' servo_pos = 0 am linken Anschlag steht und nicht "brummt", d.h. gegen
' den Anschlag arbeitet. Die Werte für LINKER_ANSCHLAG werden zwischen
' 700 und 1000 (us) liegen.
' Danach muss mit servo_pos = RECHTER_ANSCHLAG die Stellung am rechten
' Anschlag gesucht werden, bei der das Servo ebenfalls nicht "brummt",
' indem der Wert "2300" in der Definition von RECHTER_ANSCHLAG geändert
' wird. Die Werte werden zwischen 2000 und 2300 (us) liegen.
' Nach dieser Einstellung kann man das Servo mit Werten (servo_pos) von
' 0 (= linker Anschlag) bis RECHTER_ANSCHLAG bewegen. Natürlich könnte
' man auch direkt die Werte für die Impulsdauer (us) benutzen. Der Vor-
' teil dieser Umrechnung auf Positionswerte besteht darin, dass man die
' Servogrenzen vorab gut einstellen kann.
' -----------------------------------------------------------------------------
' Variablen:
Dim servo_var(9) As Byte ' globale Variablendeklaration
Dim servo_pos, impulsdauer As Integer
Sub main()
' WICHTIG! Immer als erstes aufrufen:
RP6_CCPRO_Init() ' Auf Startsignal warten, LCD und andere Dinge initialisieren !
' ------------------------------------------------------
' Zwei Zeilen Text mit dem LCD anzeigen:
showScreenLCD("RP6 CCPRO M128", "RP6 Servo Demo 1")
' Zweimal piepsen:
beep(200, 300, 100) ' Format: beep (<tonhöhe>, <dauer>, <pause>)
beep(100, 100, 100)
' Text über serielle Schnittstelle ausgeben:
newline() ' Neue Zeile
println(" ________________________")
println(" \\| RP6 ROBOT SYSTEM |/")
println(" \\_-_-_-_-_-_-_-_-_-_/ ")
newline()
println(" Let's go! ")
newline()
' 2 Sekunden Pause:
AbsDelay(2000)
' ------------------------------------------------------
' Servo-Hauptprogramm:
clearLCD() ' Display löschen
' Initialisierung für 3 Servos, Periodendauer 20ms, Timer 3:
Servo_Init(3, 1, servo_var, 1)
servo_pos = 0
Do While True ' Endlosschleife
setCursorPosLCD(0, 0) ' Zeile 1
printLCD("Servo Pos.: ")
printIntegerLCD(servo_pos)
printLCD(" ")
impulsdauer = LINKER_ANSCHLAG + servo_pos
setCursorPosLCD(1, 0) ' Zeile 2
printLCD("Impuls[us]: ")
printIntegerLCD(impulsdauer)
printLCD(" ")
Servo_Set(SERVO1, impulsdauer)
Servo_Set(SERVO2, impulsdauer)
Servo_Set(SERVO3, impulsdauer)
If servo_pos = 0 Then
AbsDelay(1000)
Servo_Off()
AbsDelay(5000)
End If
servo_pos = servo_pos + 10 ' Nächste Position nach rechts
If servo_pos > RECHTER_ANSCHLAG Then
Servo_Off()
AbsDelay(6000)
servo_pos = 0 ' Servo Position: 0..RECHTER_ANSCHLAG
End If
AbsDelay(25)
End While
End Sub
' -----------------------------------------------------------------------------
' Alle drei Servos ausschalten:
Sub Servo_Off()
Servo_Set(SERVO1, 0)
Servo_Set(SERVO2, 0)
Servo_Set(SERVO3, 0)
End Sub
' -----------------------------------------------------------------------------
CompactC:
/************************************************** *****************************
* RP6 C-Control PRO M128 Erweiterungsmodul
* ----------------------------------------------------------------------------
* RP6_Servo Demoprogramm 1 - CompactC
* ----------------------------------------------------------------------------
* RP6_Servo: Ansteuerung von 3 Servos
* 3 Standard-Servos erforderlich
* Mega128: Servo-Ausgänge PB5, PB6, PB7 (PortB.5, .6, .7)
* Erforderliche Library: IntFunc_Lib.cc.
*
* Drei zusätzlich erforderliche Standard-Servos (z.B. CONRAD ES-030)
* werden in dieser Demo gleichzeitig angesteuert. Die Demo ist ausgelegt
* für die CCPRO-IDE ab Version 2.0.
* Auf dem LCD-Display wird in der 1. Zeile die Servo-Position und in der
* 2. Zeile die zugehörige Impulsdauer in Mikrosekunden (us) angezeigt.
*
* Hinweis:
* Für allgemeine Programmierhinweise zur CCPRO schauen Sie sich bitte die
* CCPRO Dokumentation und die zugehörigen Beispielprogramme an!
* Es sei auch nochmals darauf hingewiesen, dass die normalen Beispielprogramme
* für die CCPRO nur zum Teil direkt auf dem RP6-CCPRO Modul laufen.
* Die Anschlussbelegung ist natürlich komplett anders als auf dem
* C-Control Application Board. Auch die LCD Ansteuerung ist leicht anders,
* da hier noch zusätzliche LEDs mit an dem Schieberegister angeschlossen sind.
* --> Die C-Control Beispielprogramme müssen ein klein wenig angepasst
* werden bevor sie auf diesem Modul laufen können!
*
* ************************************************** ***************************
* Der Roboter bewegt sich in diesem Beispielprogramm NICHT und kann
* am Rechner angeschlossen bleiben!
************************************************** ****************************/
// WICHTIG: Immer die RP6CCLib mit einbinden:
#include "../../RP6CCLib/RP6CCLib.cc"
//------------------------------------------------------------------------------
// Defines:
// Servo Konstanten:
#define SERVO1 13 // Servo an PB5
#define SERVO2 14 // Servo an PB6
#define SERVO3 15 // Servo an PB7
// Servo Bewegungsgrenzen 0,7..2,3ms (abhängig vom Servotyp):
#define LINKER_ANSCHLAG 700 // Linker Anschlag (0,7ms)
#define RECHTER_ANSCHLAG (2300 - LINKER_ANSCHLAG) // Rechter Anschlag (2,3ms)
#define MITTE_POSITION (RECHTER_ANSCHLAG / 2) // Mitte-Position (1,5ms)
// Wenn man die Bewegungsgrenzen für ein bestimmtes Servo einstellen will,
// muss erst der linke Anschlag so eingestellt werden, dass das Servo bei
// servo_pos = 0 am linken Anschlag steht und nicht "brummt", d.h. gegen
// den Anschlag arbeitet. Die Werte für LINKER_ANSCHLAG werden zwischen
// 700 und 1000 (us) liegen.
// Danach muss mit servo_pos = RECHTER_ANSCHLAG die Stellung am rechten
// Anschlag gesucht werden, bei der das Servo ebenfalls nicht "brummt",
// indem der Wert "2300" in der Definition von RECHTER_ANSCHLAG geändert
// wird. Die Werte werden zwischen 2000 und 2300 (us) liegen.
// Nach dieser Einstellung kann man das Servo mit Werten (servo_pos) von
// 0 (= linker Anschlag) bis RECHTER_ANSCHLAG bewegen. Natürlich könnte
// man auch direkt die Werte für die Impulsdauer (us) benutzen. Der Vor-
// teil dieser Umrechnung auf Positionswerte besteht darin, dass man die
// Servogrenzen vorab gut einstellen kann.
//------------------------------------------------------------------------------
// Variablen:
byte servo_var[9]; // globale Variablendeklaration
unsigned int servo_pos, impulsdauer;
void main(void)
{
// WICHTIG! Immer als erstes aufrufen:
RP6_CCPRO_Init(); // Auf Startsignal warten, LCD und andere Dinge initialisieren !
// ------------------------------------------------------
// Zwei Zeilen Text mit dem LCD anzeigen:
showScreenLCD("RP6 CCPRO M128", "RP6 Servo Demo 1");
// Zweimal piepsen:
beep(200, 300, 100); // Format: beep (<tonhöhe>, <dauer>, <pause>)
beep(100, 100, 100);
// Text über serielle Schnittstelle ausgeben:
newline(); // Neue Zeile
println(" ________________________");
println(" \\| RP6 ROBOT SYSTEM |/");
println(" \\_-_-_-_-_-_-_-_-_-_/ ");
newline();
println(" Let's go! ");
newline();
// 2 Sekunden Pause:
AbsDelay(2000);
// ------------------------------------------------------
// Servo-Hauptprogramm:
clearLCD(); // Display löschen
// Initialisierung für 3 Servos, Periodendauer 20ms, Timer 3:
Servo_Init(3, 1, servo_var, 1);
servo_pos = 0;
while (1) // Endlosschleife
{
setCursorPosLCD(0, 0); // Zeile 1
printLCD("Servo Pos.: ");
printIntegerLCD(servo_pos);
printLCD(" ");
impulsdauer = LINKER_ANSCHLAG + servo_pos;
setCursorPosLCD(1, 0); // Zeile 2
printLCD("Impuls[us]: ");
printIntegerLCD(impulsdauer);
printLCD(" ");
Servo_Set(SERVO1, impulsdauer);
Servo_Set(SERVO2, impulsdauer);
Servo_Set(SERVO3, impulsdauer);
if (servo_pos == 0) {
AbsDelay(1000);
Servo_Off();
AbsDelay(5000);
}
servo_pos = servo_pos + 10; // Nächste Position nach rechts
if (servo_pos > RECHTER_ANSCHLAG) {
Servo_Off();
AbsDelay(6000);
servo_pos = 0; // Servo Position: 0..RECHTER_ANSCHLAG
}
AbsDelay(25);
}
}
//------------------------------------------------------------------------------
// Alle drei Servos ausschalten:
void Servo_Off(void)
{
Servo_Set(SERVO1, 0);
Servo_Set(SERVO2, 0);
Servo_Set(SERVO3, 0);
}
//------------------------------------------------------------------------------
Viel Spaß!
Gruß Dirk
die RP6 CCPRO M128 Karte hat ja schon 3 Servostecker an der Platinenecke, wo auch der Sockel fürs EEPROM sitzt. Da kann man 3 Servos direkt anstecken, sie sind dann mit PB5, PB6 und PB7 verbunden.
Mit der neuen CCPRO-IDE Version 2.0 ist das Ansteuern von Servos ganz einfach. Hier die Demos:
CCPRO BASIC:
/************************************************** *****************************
* RP6 C-Control PRO M128 Erweiterungsmodul
* ----------------------------------------------------------------------------
* RP6_Servo Demoprogramm 1 - CCPRO BASIC
* ----------------------------------------------------------------------------
* RP6_Servo: Ansteuerung von 3 Servos
* 3 Standard-Servos erforderlich
* Mega128: Servo-Ausgänge PB5, PB6, PB7 (PortB.5, .6, .7)
* Erforderliche Library: IntFunc_Lib.cc.
*
* Drei zusätzlich erforderliche Standard-Servos (z.B. CONRAD ES-030)
* werden in dieser Demo gleichzeitig angesteuert. Die Demo ist ausgelegt
* für die CCPRO-IDE ab Version 2.0.
* Auf dem LCD-Display wird in der 1. Zeile die Servo-Position und in der
* 2. Zeile die zugehörige Impulsdauer in Mikrosekunden (us) angezeigt.
*
* Hinweis:
* Für allgemeine Programmierhinweise zur CCPRO schauen Sie sich bitte die
* CCPRO Dokumentation und die zugehörigen Beispielprogramme an!
* Es sei auch nochmals darauf hingewiesen, dass die normalen Beispielprogramme
* für die CCPRO nur zum Teil direkt auf dem RP6-CCPRO Modul laufen.
* Die Anschlussbelegung ist natürlich komplett anders als auf dem
* C-Control Application Board. Auch die LCD Ansteuerung ist leicht anders,
* da hier noch zusätzliche LEDs mit an dem Schieberegister angeschlossen sind.
* --> Die C-Control Beispielprogramme müssen ein klein wenig angepasst
* werden bevor sie auf diesem Modul laufen können!
*
* ************************************************** ***************************
* Der Roboter bewegt sich in diesem Beispielprogramm NICHT und kann
* am Rechner angeschlossen bleiben!
************************************************** ****************************/
' WICHTIG: Immer die RP6CCLib mit einbinden:
#include "../../RP6CCLib/RP6CCLib.cbas"
' -----------------------------------------------------------------------------
' Defines:
' Servo Konstanten:
#define SERVO1 13 ' Servo an PB5
#define SERVO2 14 ' Servo an PB6
#define SERVO3 15 ' Servo an PB7
' Servo Bewegungsgrenzen 0,7..2,3ms (abhängig vom Servotyp):
#define LINKER_ANSCHLAG 700 ' Linker Anschlag (0,7ms)
#define RECHTER_ANSCHLAG (2300 - LINKER_ANSCHLAG) ' Rechter Anschlag (2,3ms)
#define MITTE_POSITION (RECHTER_ANSCHLAG / 2) ' Mitte-Position (1,5ms)
' Wenn man die Bewegungsgrenzen für ein bestimmtes Servo einstellen will,
' muss erst der linke Anschlag so eingestellt werden, dass das Servo bei
' servo_pos = 0 am linken Anschlag steht und nicht "brummt", d.h. gegen
' den Anschlag arbeitet. Die Werte für LINKER_ANSCHLAG werden zwischen
' 700 und 1000 (us) liegen.
' Danach muss mit servo_pos = RECHTER_ANSCHLAG die Stellung am rechten
' Anschlag gesucht werden, bei der das Servo ebenfalls nicht "brummt",
' indem der Wert "2300" in der Definition von RECHTER_ANSCHLAG geändert
' wird. Die Werte werden zwischen 2000 und 2300 (us) liegen.
' Nach dieser Einstellung kann man das Servo mit Werten (servo_pos) von
' 0 (= linker Anschlag) bis RECHTER_ANSCHLAG bewegen. Natürlich könnte
' man auch direkt die Werte für die Impulsdauer (us) benutzen. Der Vor-
' teil dieser Umrechnung auf Positionswerte besteht darin, dass man die
' Servogrenzen vorab gut einstellen kann.
' -----------------------------------------------------------------------------
' Variablen:
Dim servo_var(9) As Byte ' globale Variablendeklaration
Dim servo_pos, impulsdauer As Integer
Sub main()
' WICHTIG! Immer als erstes aufrufen:
RP6_CCPRO_Init() ' Auf Startsignal warten, LCD und andere Dinge initialisieren !
' ------------------------------------------------------
' Zwei Zeilen Text mit dem LCD anzeigen:
showScreenLCD("RP6 CCPRO M128", "RP6 Servo Demo 1")
' Zweimal piepsen:
beep(200, 300, 100) ' Format: beep (<tonhöhe>, <dauer>, <pause>)
beep(100, 100, 100)
' Text über serielle Schnittstelle ausgeben:
newline() ' Neue Zeile
println(" ________________________")
println(" \\| RP6 ROBOT SYSTEM |/")
println(" \\_-_-_-_-_-_-_-_-_-_/ ")
newline()
println(" Let's go! ")
newline()
' 2 Sekunden Pause:
AbsDelay(2000)
' ------------------------------------------------------
' Servo-Hauptprogramm:
clearLCD() ' Display löschen
' Initialisierung für 3 Servos, Periodendauer 20ms, Timer 3:
Servo_Init(3, 1, servo_var, 1)
servo_pos = 0
Do While True ' Endlosschleife
setCursorPosLCD(0, 0) ' Zeile 1
printLCD("Servo Pos.: ")
printIntegerLCD(servo_pos)
printLCD(" ")
impulsdauer = LINKER_ANSCHLAG + servo_pos
setCursorPosLCD(1, 0) ' Zeile 2
printLCD("Impuls[us]: ")
printIntegerLCD(impulsdauer)
printLCD(" ")
Servo_Set(SERVO1, impulsdauer)
Servo_Set(SERVO2, impulsdauer)
Servo_Set(SERVO3, impulsdauer)
If servo_pos = 0 Then
AbsDelay(1000)
Servo_Off()
AbsDelay(5000)
End If
servo_pos = servo_pos + 10 ' Nächste Position nach rechts
If servo_pos > RECHTER_ANSCHLAG Then
Servo_Off()
AbsDelay(6000)
servo_pos = 0 ' Servo Position: 0..RECHTER_ANSCHLAG
End If
AbsDelay(25)
End While
End Sub
' -----------------------------------------------------------------------------
' Alle drei Servos ausschalten:
Sub Servo_Off()
Servo_Set(SERVO1, 0)
Servo_Set(SERVO2, 0)
Servo_Set(SERVO3, 0)
End Sub
' -----------------------------------------------------------------------------
CompactC:
/************************************************** *****************************
* RP6 C-Control PRO M128 Erweiterungsmodul
* ----------------------------------------------------------------------------
* RP6_Servo Demoprogramm 1 - CompactC
* ----------------------------------------------------------------------------
* RP6_Servo: Ansteuerung von 3 Servos
* 3 Standard-Servos erforderlich
* Mega128: Servo-Ausgänge PB5, PB6, PB7 (PortB.5, .6, .7)
* Erforderliche Library: IntFunc_Lib.cc.
*
* Drei zusätzlich erforderliche Standard-Servos (z.B. CONRAD ES-030)
* werden in dieser Demo gleichzeitig angesteuert. Die Demo ist ausgelegt
* für die CCPRO-IDE ab Version 2.0.
* Auf dem LCD-Display wird in der 1. Zeile die Servo-Position und in der
* 2. Zeile die zugehörige Impulsdauer in Mikrosekunden (us) angezeigt.
*
* Hinweis:
* Für allgemeine Programmierhinweise zur CCPRO schauen Sie sich bitte die
* CCPRO Dokumentation und die zugehörigen Beispielprogramme an!
* Es sei auch nochmals darauf hingewiesen, dass die normalen Beispielprogramme
* für die CCPRO nur zum Teil direkt auf dem RP6-CCPRO Modul laufen.
* Die Anschlussbelegung ist natürlich komplett anders als auf dem
* C-Control Application Board. Auch die LCD Ansteuerung ist leicht anders,
* da hier noch zusätzliche LEDs mit an dem Schieberegister angeschlossen sind.
* --> Die C-Control Beispielprogramme müssen ein klein wenig angepasst
* werden bevor sie auf diesem Modul laufen können!
*
* ************************************************** ***************************
* Der Roboter bewegt sich in diesem Beispielprogramm NICHT und kann
* am Rechner angeschlossen bleiben!
************************************************** ****************************/
// WICHTIG: Immer die RP6CCLib mit einbinden:
#include "../../RP6CCLib/RP6CCLib.cc"
//------------------------------------------------------------------------------
// Defines:
// Servo Konstanten:
#define SERVO1 13 // Servo an PB5
#define SERVO2 14 // Servo an PB6
#define SERVO3 15 // Servo an PB7
// Servo Bewegungsgrenzen 0,7..2,3ms (abhängig vom Servotyp):
#define LINKER_ANSCHLAG 700 // Linker Anschlag (0,7ms)
#define RECHTER_ANSCHLAG (2300 - LINKER_ANSCHLAG) // Rechter Anschlag (2,3ms)
#define MITTE_POSITION (RECHTER_ANSCHLAG / 2) // Mitte-Position (1,5ms)
// Wenn man die Bewegungsgrenzen für ein bestimmtes Servo einstellen will,
// muss erst der linke Anschlag so eingestellt werden, dass das Servo bei
// servo_pos = 0 am linken Anschlag steht und nicht "brummt", d.h. gegen
// den Anschlag arbeitet. Die Werte für LINKER_ANSCHLAG werden zwischen
// 700 und 1000 (us) liegen.
// Danach muss mit servo_pos = RECHTER_ANSCHLAG die Stellung am rechten
// Anschlag gesucht werden, bei der das Servo ebenfalls nicht "brummt",
// indem der Wert "2300" in der Definition von RECHTER_ANSCHLAG geändert
// wird. Die Werte werden zwischen 2000 und 2300 (us) liegen.
// Nach dieser Einstellung kann man das Servo mit Werten (servo_pos) von
// 0 (= linker Anschlag) bis RECHTER_ANSCHLAG bewegen. Natürlich könnte
// man auch direkt die Werte für die Impulsdauer (us) benutzen. Der Vor-
// teil dieser Umrechnung auf Positionswerte besteht darin, dass man die
// Servogrenzen vorab gut einstellen kann.
//------------------------------------------------------------------------------
// Variablen:
byte servo_var[9]; // globale Variablendeklaration
unsigned int servo_pos, impulsdauer;
void main(void)
{
// WICHTIG! Immer als erstes aufrufen:
RP6_CCPRO_Init(); // Auf Startsignal warten, LCD und andere Dinge initialisieren !
// ------------------------------------------------------
// Zwei Zeilen Text mit dem LCD anzeigen:
showScreenLCD("RP6 CCPRO M128", "RP6 Servo Demo 1");
// Zweimal piepsen:
beep(200, 300, 100); // Format: beep (<tonhöhe>, <dauer>, <pause>)
beep(100, 100, 100);
// Text über serielle Schnittstelle ausgeben:
newline(); // Neue Zeile
println(" ________________________");
println(" \\| RP6 ROBOT SYSTEM |/");
println(" \\_-_-_-_-_-_-_-_-_-_/ ");
newline();
println(" Let's go! ");
newline();
// 2 Sekunden Pause:
AbsDelay(2000);
// ------------------------------------------------------
// Servo-Hauptprogramm:
clearLCD(); // Display löschen
// Initialisierung für 3 Servos, Periodendauer 20ms, Timer 3:
Servo_Init(3, 1, servo_var, 1);
servo_pos = 0;
while (1) // Endlosschleife
{
setCursorPosLCD(0, 0); // Zeile 1
printLCD("Servo Pos.: ");
printIntegerLCD(servo_pos);
printLCD(" ");
impulsdauer = LINKER_ANSCHLAG + servo_pos;
setCursorPosLCD(1, 0); // Zeile 2
printLCD("Impuls[us]: ");
printIntegerLCD(impulsdauer);
printLCD(" ");
Servo_Set(SERVO1, impulsdauer);
Servo_Set(SERVO2, impulsdauer);
Servo_Set(SERVO3, impulsdauer);
if (servo_pos == 0) {
AbsDelay(1000);
Servo_Off();
AbsDelay(5000);
}
servo_pos = servo_pos + 10; // Nächste Position nach rechts
if (servo_pos > RECHTER_ANSCHLAG) {
Servo_Off();
AbsDelay(6000);
servo_pos = 0; // Servo Position: 0..RECHTER_ANSCHLAG
}
AbsDelay(25);
}
}
//------------------------------------------------------------------------------
// Alle drei Servos ausschalten:
void Servo_Off(void)
{
Servo_Set(SERVO1, 0);
Servo_Set(SERVO2, 0);
Servo_Set(SERVO3, 0);
}
//------------------------------------------------------------------------------
Viel Spaß!
Gruß Dirk