Ich habs schon mehrere stunden an dem code gearbeitet aber immer wieder gibt es probleme!
Ich habs auch schon mit dem probiert:
Code:
/*******************************************************************************
* 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
' -----------------------------------------------------------------------------
aber auch da gibt es probleme mit kommentaren....
keine ahnung was ich noch machen soll...
ich werd einfach auf jeden fall noch probieren...
Lesezeichen