Werbung
Habe noch übersehen, dass VDD eher an Rot vom Servo gehört und GND an Braun!
Gruß
Dirk
So, hab jetzt mal alles so gemacht, wies hoffentlich gehört:
Kompiliert einwandfrei durch. Nur wenn ich das hex File auf den RP6 spiele, passiert mit dem Servo nichts...Code:#include "../m32servolib/RP6ControlServoLib.h" uint16_t pos = 0; int main(void) { initRP6Control(); initLCD(); showScreenLCD("################", "################"); mSleep(1500); showScreenLCD("<<RP6 Control>>", "<<LC2 - DISPLAY>>"); mSleep(2500); showScreenLCD(" Servo - Test 1 ", " Version 1.00 "); mSleep(2500); clearLCD(); setLEDs(0b111111); mSleep(500); setLEDs(0b000000); initSERVO(SERVO3 | SERVO4); startStopwatch2(); while(true) { if (getStopwatch2() > 48) { servo1_position = pos; servo2_position = pos; setCursorPosLCD(0, 0); writeStringLCD_P("Servopos.: "); writeIntegerLCD(pos, DEC); writeStringLCD_P(" "); pos++; if (pos > RIGHT_TOUCH) {pos = 0;} setStopwatch2(0); } task_SERVO(); mSleep(3); } return 0; }
Beim LCD Display läuft alles durch: "Servopos: 1,2,3,4... usw". Doch der Servo bewegt sich keinen Millimeter.
Wie vorher erwähnt, hängt er auf ADC3, rot auf + und braun auf ground.
Was übersehe ich?
Danke für die Hilfen!
Die Lib kann 8 Servos an PC2 bis PC7 und PD5, PD6 ansteuern. ADC3 ist nicht vorgesehen.Nur wenn ich das hex File auf den RP6 spiele, passiert mit dem Servo nichts...
Wenn du doch ADC3 für SERVO1 nehmen willst:
1. Änderungen in der RP6ControlServoLib.h:
a) Im Abschnitt // Servo ports:
Die 2 Zeilen:
#define SERVO1_PULSE_ON (PORTC |= IO_PC2) // PC2
#define SERVO1_PULSE_OFF (PORTC &= ~IO_PC2)
... auskommentieren oder löschen.
b) Dafür einfügen:
#define SERVO1_PULSE_ON (PORTA |= ADC3) // PA3
#define SERVO1_PULSE_OFF (PORTA &= ~ADC3)
2. Änderungen in der RP6ControlServoLib.c:
a) In der Funktion initSERVO() die Zeile:
if (servos & SERVO1) {DDRC |= IO_PC2; PORTC &= ~IO_PC2;}
... auskommentieren oder löschen.
b) Stattdessen einfügen:
if (servos & SERVO1) {DDRA |= ADC3; PORTA &= ~ADC3;}
Du kannst dann dein Servo als SERVO1 ansteuern, also die Initialisierung sieht so aus:
initSERVO(SERVO1);
... und die Positionsänderungen erfolgen mit der Variable: servo1_position (in deiner Demo ist das schon so!)
Gruß
Dirk
Soweit ich weiß sind die PD5 und PD6 Pins auf den IO/Ports.
Das heißt ich schließe das orange Kabel (Datenkabel) des Servos an PD5 oder PD6 an.
Rot verbinde ich mit +
und braun mit GRND
Wenn ich das Script dann ausführe, bewegt sich der Servo, weil PD5 bzw. PD6 angeschlossen ist.
Stimmt das so?
Danke..
Ja, genau.Das heißt ich schließe das orange Kabel (Datenkabel) des Servos an PD5 oder PD6 an. Rot verbinde ich mit + und braun mit GRND
Ja, stimmt so. In der Lib wären das die Servos SERVO7 bzw. SERVO8.Wenn ich das Script dann ausführe, bewegt sich der Servo, weil PD5 bzw. PD6 angeschlossen ist. Stimmt das so?
In der Demo müßtest du dann das Servo initialisieren mit:
initSERVO(SERVO7); // PD5
... oder ...
initSERVO(SERVO8 ); // PD6
In der Demo must du anstelle von servo1_position und/oder servo2_position einsetzen:
servo7_position und/oder servo8_position (je nachdem, ob dein Servo an PD5 oder PD6 hängt).
Gruß
Dirk
So habs jetzt mal mit dieser Änderung am ADC3 probiert - jedoch wieder ohne Erfolg![]()
Der Servo bewegt sich 0!
Wenn das Script sonst ja bei allen funktioniert, muss es wohl an den Servos liegen...?
Nein muss es nicht.. vielleicht ist z.B. der Port PD5 kaputt? Aber das ist Rätselraten so lange du nicht das Vorgehen beherzigst wie beschrieben...
Edit: ...gelesen...
Mag ja sein das Dir das nicht so zugänglich ist mit der Elektronik aber dazu sind wir ja da zu helfen. Aber dazu gehört eben auch Geduld und Ruhe beim arbeiten. Also mess erst mal dein PD5 .. ohne abrutschen bitte...
Sind Sie auch ambivalent?
Lesezeichen