Hi hab an Weihnachten einen RP6 bekommen und jetzt wollt ich mal en Servo am ADC0 beim RP6 anschließen, aber was muss ich programmieren dass sich der Servo dann auch bewegt.
Druckbare Version
Hi hab an Weihnachten einen RP6 bekommen und jetzt wollt ich mal en Servo am ADC0 beim RP6 anschließen, aber was muss ich programmieren dass sich der Servo dann auch bewegt.
Hallo
Es gibt unzählige Möglichkeiten ein Servo anzusteuern. Eine kleine Auswahl:
https://www.roboternetz.de/phpBB2/ze...=338771#338771
Glückwunsch zum RP6 und willkommen im RN-Forum (das auch eine Suchfunktion hat).
Gruß
mic
ja schon aber gib mir mal en beispiel code den ich benutzen kann wenn den servo am ADC0 angeschlossen hab.
Bei dem link den du gepostet hast kam nur was wo ma des am XBUS anschließt.
und ich glaub da gibts dann auch en quellcode unterschied
Gruß Robin
Das hier kannst du auch für adc0 verwenden:
https://www.roboternetz.de/phpBB2/ze...ag.php?t=45180
Ein besseres Konzept als meine verwirrenden Versuche ;)
Also ganz ehrlich...
ich bekomm des nich hin
Mein RP6 ist grad eingemottet, ich kann's deshalb nicht testen:
Die Beschreibung von sleep() in der Library:Code:// Servoansteuerung mit sleep(), Servoimpuls an ADC0 10.1.09 mic
#include "RP6RobotBaseLib.h"
int main(void)
{
initRobotBase(); // initialisieren
DDRA |= 1; // Datenrichtung Port A Bit 0 (das ist ADC0) auf Ausgang
while(true) // endlos Impulse für Servomitte senden
{
PORTA |= 1; // Ausgang auf high setzen (Impulsstart für Servo)
sleep(15); // sleep(1) verzögert ca. 100µsec, sleep(15) dann ca. 1,5ms=Servomitte
PORTA &= ~1; // Ausgang auf low setzen (Impulsende für Servo)
sleep(200-15); // 20ms-Impulslänge warten vor nächstem Impuls
}
return(0);
}
Infos zum Impulstimeing der Servos gibt's im RN-Wissen.Zitat:
/**
* Delay with the help of the 10kHz timer.
* sleep(10) delays for *about* 1ms! Not exaclty, as we do not use assembly routines
* anywhere in this library!
*
* This is a blocking routine, which means that the processor
* will loop in this routine and (except for interrupts) the
* normal program flow is stopped!
* Thus you should use the Stopwatch functions wherever you can!
*
* Example:
* sleep(1); // delay 1 * 100us = 100us = 0.1ms
* sleep(10); // delay 10 * 100us = 1000us = 1ms
* sleep(100); // delay 100 * 100us = 10000us = 10ms
* // The maximum delay is:
* sleep(255); // delay 255 * 100us = 25500us = 25.5ms
*/
void sleep(uint8_t time)
{
for (delay_timer = 0; delay_timer < time;);
}
Gruß
mic
tut nich kann aber auch sein dass der Servo falsch eingesteckt ist ?
bei mir is des
Schwarze Kabel an 3
Rote Kabel an 2
und weiß an 1
Hallo
Das Programm habe ich nun getestet und wie erwartet funktioniert es auch leidlich. Deine Pinbelegung scheint nicht zu passen:
Bild hier
(Anklicken!)
Die Anschlüsse ADC0 und 1 passen leider nicht zu den Standartservosteckern, +(VDD,1) und -(GND,2) sind vertaucht. Allerdings kann man recht einfach die Servostecker umbelegen:
https://www.roboternetz.de/phpBB2/ze...=356247#356247
Viel Erfolg
mic
hey danke jetzt funktioniert alles :)
ich hab dein code kopiert und jetzt bewegt sich der Sensor nach rechts, da ich mich beim prorammieren nich no auskenn ne neue frage:
wie beweg ich den sensor jetzt nach links
Gruß Robin