Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC0 am RP6
.:Robin:.
09.01.2009, 23:19
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.
radbruch
09.01.2009, 23:48
Hallo
Es gibt unzählige Möglichkeiten ein Servo anzusteuern. Eine kleine Auswahl:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=338771#338771
Glückwunsch zum RP6 und willkommen im RN-Forum (das auch eine Suchfunktion hat).
Gruß
mic
.:Robin:.
10.01.2009, 00:13
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
radbruch
10.01.2009, 00:33
Das hier kannst du auch für adc0 verwenden:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=45180
Ein besseres Konzept als meine verwirrenden Versuche ;)
.:Robin:.
10.01.2009, 01:11
Also ganz ehrlich...
ich bekomm des nich hin
radbruch
10.01.2009, 01:53
Mein RP6 ist grad eingemottet, ich kann's deshalb nicht testen:
// 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);
}
Die Beschreibung von sleep() in der Library:
/**
* 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;);
}
Infos zum Impulstimeing der Servos gibt's im RN-Wissen.
Gruß
mic
.:Robin:.
10.01.2009, 12:03
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
radbruch
10.01.2009, 14:33
Hallo
Das Programm habe ich nun getestet und wie erwartet funktioniert es auch leidlich. Deine Pinbelegung scheint nicht zu passen:
http://radbruch.roboterbastler.de/rp6/ports/adc_klein.jpg (http://radbruch.roboterbastler.de/rp6/ports/adc.jpg)
(Anklicken! (http://radbruch.roboterbastler.de/rp6/ports/adc.jpg))
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/zeigebeitrag.php?p=356247#356247
Viel Erfolg
mic
.:Robin:.
10.01.2009, 16:34
hey danke jetzt funktioniert alles :)
.:Robin:.
10.01.2009, 19:36
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
radbruch
10.01.2009, 20:00
Hallo
Ich vermute, mit "Sensor" meinst du das Servo.
Das einfach Programm oben sollte das Servo immer in die Mittelstellung bewegen. Hier eine kleine Erweiterung für zwei Positionen:
// Servoansteuerung mit sleep(), Servoimpuls an ADC0, 2 Positionen 10.1.09 mic
#include "RP6RobotBaseLib.h"
uint8_t i;
int main(void)
{
initRobotBase(); // initialisieren
DDRA |= 1; // Datenrichtung Port A Bit 0 (das ist ADC0) auf Ausgang
while(true)
{
for(i=0;i<100; i++) // 100 mal Impuls für Position 1 senden
{
PORTA |= 1;
sleep(10);
PORTA &= ~1;
sleep(200-10);
}
for(i=0;i<100; i++) // 100 mal Impuls für Position 2 senden
{
PORTA |= 1;
sleep(20);
PORTA &= ~1;
sleep(200-20);
}
}
return(0);
}
Die For-Schleifen senden den jeweiligen Impuls mehrmals um dem Servo Zeit zu geben die neue Position anzufahren.
Gruß
mic
.:Robin:.
10.01.2009, 20:19
hmm ich glaub mein servo is kaputt die enzige bewegung die er macht ist nach rechts.
Gruß Robin
radbruch
10.01.2009, 20:35
Hallo
Vielleicht stimmen auch die Anschlüsse noch nicht und Impuls ist mit VDD vertauscht. Deine Aderfarben würde ich so zuordnen:
weis = Signal
rot = Spannungsversorgung +
schwarz = Spannungsversorgung -
Das würde als Steckerbelegung am ADC0 dann so aussehen:
1 - rot
2 - schwarz
3 - weis
Hast du Infos zu dem Servo? Typ, Hersteller, Bezugsquelle und Artikelnummer...
Gruß
mic
.:Robin:.
22.01.2009, 18:26
Hey danke jetzt tut alles
Gruß Robin
.:Robin:.
18.03.2009, 21:39
so hab mal wieder ne frage
hat Impuls eigendlich eine Bezeichnung ?
... weiß am XBus1 nich wo der impuls is
Gruß Robin
... weiß am XBus1 nich wo der impuls is
Impuls? Wenn du fragen willst, wo ADC0 zu finden ist (darum gings hier ja mal!), dann gibts den nicht am XBUS.
Schau mal auf die Hauptplatine des RP6. Da gibt es zwei weiße Rahmen mit "1 2 3" drin, da steht an einem auch ADC0 dran.
Gruß Dirk
.:Robin:.
18.03.2009, 22:28
nein... mein adc 0 und adc 1 sind belegt und jetzt wollt ich noch en servo anschließen
... und dachte des geht am XBUS
... am XBUS find ich VDD und GND aber ich weiß net wo ich das kabel für impuls hineinstecken soll
am XBUS find ich VDD und GND aber ich weiß net wo ich das kabel für impuls hineinstecken soll
Es gibt am XBUS noch drei Portpins (SCL, SDA und E_INT1). Wenn du VDD und GND im Anhang der M32-Anleitung am Stecker gefunden hast, wirst du auch diese 3 Pins finden.
Gruß Dirk
.:Robin:.
19.03.2009, 21:02
ok thx
Gruß Robin
.:Robin:.
21.03.2009, 20:47
ok weiß jetzt wo
SLK,SDA,E_INT
ist, aber dort gibt es 2x VDD und 3x GND und ich dachte des wär irgendwie unlogisch sowas herzustellen und dachte vielleicht gibt es noch sowas wie VDD nur mit anderer bezeichnung.
So und meine Frage gibt es einen Pol der auch VDD ist aber nicht VDD heißt ?
SKIZZE:
http://twsp.de/downloads/RP6_MANUAL_DE_20071219.pdf%20-%20Adobe%20Reader.bmp
So und meine Frage gibt es einen Pol der auch VDD ist aber nicht VDD heißt ?
Nein.
Gruß Dirk
.:Robin:.
22.03.2009, 09:08
des heißt man kann an einem XBUS höchstens 2 Servos anschließen ?
(ich wollte nämlich 17 Servos anschließen)
Gruß Robin
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.