ja die hab ich aber schon runtergeladen und bei den normalen librarys geschpeichert
Druckbare Version
ja die hab ich aber schon runtergeladen und bei den normalen librarys geschpeichert
Ja speichern reicht nicht, du musst sie auch importieren
aber wenn du seinen code 1:1 übernimmst sollte das ja schon gemacht sein
wenns im gleichen verzeichnis ist, dann musst du dafür normal auch nicht das makefile verändern...
komisch xD
tut mir leid, da weiss ich dann auch nicht weiter
LG Pr0gm4n
Also ich hab sie runter geladen dan hab ich sie enpackt und in den ordner RP6base in dem Lib ordner gespeichert
Hallo
Kannst du andere/eigene Programme fehlerfrei kompilieren? Welche Fehlermeldungen werden angezeigt? (mit Copy&Paste hier in einem Codefenster zeigen)
Ich verwende eine eigene abgespeckte Library weil ich für die Servoansteuerung einen Timer verwende der von der orginalen Lib belegt ist. Eine andere Ansteuerung ermöglicht den Einsatz der orginalen Lib:
(Aus https://www.roboternetz.de/phpBB2/ze...=394784#394784)Code:// RP6 steuert ein Servo an der SL1-LED mit Sleep()
#include "RP6RobotBaseLib.h"
uint8_t i;
int main(void)
{
initRobotBase();
while(true)
{
i=0; // i mit Startwert laden
while(getBumperLeft() && (i<5)) // Wenn links gedrückt fünf Impulse senden
{
setLEDs(1); // Impuls High senden
sleep(10); // ca. 10 * 100µs warten
setLEDs(0); // Impuls Low senden
sleep(200-10); // ca. 20ms - 1ms Pause
i++;
}
i=0;
while(getBumperRight() && (i<5))
{
setLEDs(1);
sleep(20);
setLEDs(0);
sleep(200-20);
i++;
}
}
return 0;
}
Das Servo wird bei IO1 (SL1) angeschlossen, die Impulse werden mit Sleep()s erzeugt.
Gruß
mic
[Edit]Dazu kann man ja seitenweise quasseln: https://www.roboternetz.de/phpBB2/ze...=407273#407273
Also es hat jetzt hat es die fehlermeldung domino.c:35: fatal error: opening dependency file .dep/domino.o.d: No such file or directory angezeigt aber alsw ich sie hochgeladen haben pasierte nichts ich hab den signal anschluss bei IO1 angeschlossen plus bei VDD und minus bei GND
Hat sich erledigt das mit den bummers dis funktioniert jetzt
Hast du eigntlich deinen greifarm auch an die anschlüsse für die LEDs abgeschlossen ?
Übrigens deine erfindungen find ich total cool
[ausgrab]
@radbruch an welchem port war deine RC Anlage am M32?
[/ausgrab]
Ich bin neu beim rp6 und möchte mir einen einfachen greifer so wie radbruch bauen und wollte fragen wo ich die servos genau anschließen soll?
Kann da mal wer ein foto ins netz stellen?
Danke schonmal im vorraus für die antworten.
@ radbruch
hallo,
ich hab mal eine frage an den greifer.
Wie hast du das genau gemacht mit den "Zahnrädern" am Servo.
@BabaLrObOt
das möchte ich auch gern mal wissen wo man die anschließt
Mit freundlichen Grüßen
Michael
Hallo
Hier werden die Signale über den XBUS ausgegeben. Obwohl die Pins teilweise mit PullUp ausgestattet sind, eignen sie sich wunderbar zum Anschluss kleiner Erweiterungen. Eine meiner ersten Lötübungen war ein kleiner XBUS-Adapter:
Bild hier
(Bild aus https://www.roboternetz.de/phpBB2/vi...=328950#328950)
Auf dem Bild links sieht man die geraden Pins, unten links ist Pin2. Die weisen Drähte gehen auf Pin8( E_INT, PA4), Pin10(SCL, PC0) und Pin12(SDA, PC1). Rechts sind die Stiftleisten, jeweils das Signal, Vcc (von unten weis) und GND (von unten schwarz) (Servokonform). Die vierte Stiftleiste oben rechts ist nur mit VCC und GND belegt.
Bild hier
(Bild (Anklicken für 1920x1080) aus https://www.roboternetz.de/phpBB2/vi...=328708#328708)
Der Antrieb erfolgt unten links mit dem Servohorn. Von dort geht die Kraft über die linke Greiferbacke zum linken Zahnrad. Dieses wiederum treibt das rechte Zahnrad und damit die rechte Greiferbacke an. Die Lager sind mit Heiskleber befestigte Reißzwecken. Hülsen zur Anpassung der Durchmesser an den Zahnrädern sind Kabelummantelungen.
Gruß
mic
ah danke
noch eine frage zu dem greifer :
und wie hast du die Lager angebracht (mit heißkleber ist mir schon kla).
Also mir einem reißnagel o. was ähnliches.
"Die Lager sind mit Heiskleber befestigte Reißzwecken."
Reißzwecken = Reißnagel
Ein bewährtes Konzept:
Bild hier
(Bild aus https://www.roboternetz.de/phpBB2/ze...=324867#324867)
:)
Genial ;)
Danke
Moin,
nachdem ich jetzt mehrfach mit längeren Pausen dazwischen versucht habe meine RC Anlage am Robo anzuschließen, und es nicht geschafft habe Frage ich jetzt nochmal nach.
Versucht habe ich es mit dem Programm von mic was er hier am anfang gepostet hat die beiden Libs habe ich auch eingebunden.
Versucht habe ich es auch mit dem fertig kompiliertenm Programm
https://www.roboternetz.de/phpBB2/ze...&highlight=mac
Angeschlossen habe ich den Emfänger an XBUS Pin 10 (links/rechts)
Und XBUS Pin 12 (vor/zurück)
Leider dreht sich dabei immer nur die Rechte Kette was ja wie mic in einem anderen Beitrag geschrieben hat nur ein Programmier Fehler ist deshalb denke ich das meine RC Anlage gar nicht erkannt wird.
Funktionieren tut Sie aber da ich Sie eben nochmal mit zwei Servos getestet habe und das ging.
Es gab doch mal irgendwo was von MC Delta wo er versucht hat die Signale auszulesen oder?
Warscheinlich habe ich nur einen denk Fehler ist das so richtig?
Und nochmal Sorry das ich den alten kramm wieder ausgrabe :D
Hallo
Erstaunlicherweise habe ich alle Teile auf Anhieb wiedergefunden, sogar die Batterien meines RC-Senders funktionieren noch (die waren natürlich separat gelagert). Zusammengestöpselt, das oben erwähnte, schon kompilierte Programm geflash, läuft.
Beim Anschluß muss selbstverständlich auch die Minus-Leitung des RC-Empfängers mit dem GND des RP6 verbunden sein!
"Die RC-Kanäle kommen an den XBUS-Stecker, links/rechts an Pin10 (SCL), vor/zurück an Pin12 (SDA). RC-Empfänger + und - an VCC und GND des RP6."
Ich hatte zusätzlich noch Angstwiderstände (820 Ohm) in die Signalleitungen eingebaut. Als Alternative zum XBUS kann man übrigends auch den I2C-Anschluß auf der RP6-Platine neben XBUS2 verwenden. Auf den 5 Pins liegen Vdd (5V), GND, SDA, SCL und INT1 (E_INT). Das hatte ich damals auch noch nicht gecheckt ;)
Wichtig ist vielleicht noch, dass die RC-Fernbedienung positive Servosignale sendet.
Aus heutiger Sicht betrachtet war das damals echter Murks, aber ich war Anfänger und es hat (leidlich) funktioniert. Inzwischen kann ich die Servos auch libverträglich ansteuern und der ganze rblib-Mist ist somit Geschichte:
(Code aus https://www.roboternetz.de/phpBB2/ze...=483757#483757)Code:// Servoansteuerung mit Timer1 31.1.2010 mic
// Einfach und elegant, warum finde ich das erst jetzt? Timer1 (RP6-Motoransteuerung)
// läuft ja sowieso im Hintergrund. Deshalb kann man die "klassische" Servoansteuerung
// in die Overflow-ISR einbauen und mit ca. 19kHz aufrufen lassen. Timersetup der Lib:
// Mode 10, Phase Correct mit ICR1 als Top ergibt bei ICR1=210 ca. 8MHz/420=19047,6Hz ;)
// Drehbereich meiner RS-2-Servos ist von ca. 14 bis ca. 38
#include "RP6RobotBaseLib.h"
volatile uint8_t servo1, servo2, servo3, p; // Servopositionen und Impulszähler
uint8_t c; // ein Char zur freien Verfügung
int main(void)
{
initRobotBase();
servo1=servo2=servo3=26; // Servomitte?
TIMSK |= (1 << TOIE1); // Die Timer1 Overflow-ISR zur Servoansteuerung
DDRA |= (E_INT1); // Servopins auf Ausgang setzen
DDRC |= (SCL | SDA);
setLEDs(1); // und los!
startStopwatch1();
startStopwatch2();
startStopwatch3();
while(1)
{
for(c=0;c<6;c++) // 6 mal ein einfaches Demo....
{
setLEDs(1<<c);
servo1=servo2=servo3=26; // mitte
p=50; while(p); // warten bis 50 Impulse gesendet (ca. 1 Sek.)
servo1=servo2=servo3=14; // links
p=50; while(p);
servo1=servo2=servo3=38; // rechts
p=50; while(p);
}
setStopwatch1(0);
setStopwatch2(0);
setStopwatch3(0);
while(c) // und 6 mal ein etwas anspruchsvolleres Demo
{
setLEDs(1<<c);
if(getStopwatch1()>1000)
{
setStopwatch1(0);
switch(servo1)
{
case 38: servo1=30; break;
case 30: servo1=20; break;
case 20: servo1=14; break;
case 14: servo1=21; break;
case 21: servo1=31; break;
case 31: servo1=38; break;
}
}
if(getStopwatch2()>100)
{
setStopwatch2(0);
servo2++;
if (servo2 > 38) { servo2=14; c--; }
}
if(getStopwatch3()>300)
{
setStopwatch3(0);
if (servo3 == 10) servo3=50; else servo3=10;
}
task_RP6System(); // Verträglichkeitstest ;)
}
}
return 0;
}
ISR (TIMER1_OVF_vect)
{
static uint16_t servocount=1;
if(servocount > servo1) PORTA &= ~E_INT1; else PORTA |= E_INT1; // PA4 XBUS 8
if(servocount > servo2) PORTC &= ~SCL; else PORTC |= SCL; // PC0 XBUS 10
if(servocount > servo3) PORTC &= ~SDA; else PORTC |= SDA; // PC1 XBUS 12
if(servocount < 400) servocount++; else {servocount=1; if(p) p--;} // p = 1/50 Sek
}
Allerdings ist die Auflösung viel geringer (100kHz zu knapp 20kHz), aber dafür ist der zusätzliche Code minimal:
TIMSK |= (1 << TOIE1);
schaltet den Overflow-Interrupt ein und bindet so die zusätzlich Timer1-OverFlow-ISR ein. Für das Einlesen der RC-Signale müsste die ISR dann etwa so aussehen:
Vorsichtshalber sollte man volatile verwenden.Code:// Globale Variablen
volatile uint8_t rc_input_pwr, rc_input_dir;
ISR (TIMER1_OVF_vect)
{
static uint16_t rc_temp_pwr=0;
static uint16_t rc_temp_dir=0;
if (PINC & 1) rc_temp_dir++; else
if (rc_temp_dir) { rc_input_dir=rc_temp_dir-1; rc_temp_dir=0; }
if (PINC & 2) rc_temp_pwr++; else
if (rc_temp_pwr) { rc_input_pwr=rc_temp_pwr-1; rc_temp_pwr=0; }
}
Die eingelesenen Werte sind so zwar deulich kleiner (ca. 1/5), aber zur Ansteuerung sollte es reichen. Die Formel zur Verteilung der Werte auf beide Antriebe passt dann natürlich auch nicht mehr, aber die war auch nicht besonders gut ;)
Der linke Antrieb meines RP6 lief damals nur, wenn ich den Motortreiberbaustein angewärmt (anhauchen oder ohne Motorüberwachung warmfahren) hatte. Den Fehler, der da dahintersteckt, hatte ich nie gefunden. Zur Zeit funktioniert das aber auch ohne vorwärmen problemlos.
Gruß
mic
Ich hatte den Emfänger mit den passenden Akkus Betrieben also muss +/- am Emfänger Ausgang auch mit dem RP6 Verbinden?Zitat:
Beim Anschluß muss selbstverständlich auch die Minus-Leitung des RC-Empfängers mit dem GND des RP6 verbunden sein!
Wenn du den Empfänger mit eigenen Akkus versorgst, dann darf/muss nur Minus vom Empfänger mit dem GND des RP6 verbunden sein. Auf keinen Fall darf man 5V vom RP6 mit zusätzlichen Akkus verbinden!
Ich versorge meinen Empfänger mit den 5V des RP6 (Vdd ist am XBUS Pin 3 und 5, GND ist Pin 1, 2 und 14).
Ich hatte eigentlich Meinen Emfänger komplette mit eigenem Akku verbundennur irgendwie kommt kein Signal am RP6 an.
/Edit ich werde es nochmal mit der 5V Versorgunsspannung versuchen.
Guten Tag. Ich finde dein Projekt einfach klasse.
Da ich komplett Anfänger bin (studiere 2 Wochen et-totorials.de mit Keil Programm), schafe ich nicht mit notepad++ hex Datei erstellen.
Mit welcher Programm arbeitet man am besten mit RP6?
Vielen Dank, eugen
Hallo radbruch.
Ich hab Programm (erstes versuch mit Greifarm für Domino. Seite 1) und "rblib.h"
"rblib.c mit AVR Studio 4 ein hex datei erstellt. Hat ohne Problemen gelaufen. Dann wollte ich RP6 mit RP6Loader Programm an mein RP6 übertagen. Aber ergent wie funktionier das Programm nicht. RP6 macht lauter Gerausche und bleibt stehen, macht Garnichts. Wo kann das liegen, mache ich was falsch? Bitte um antwort. bin voll verzweifelt. Vielen Dank. Mit freundlichen grüssen eugen
Hi Radbruch,
das 2. Bild kenne ich, das ist das Projekt der Rudolf-Diesel-Fachschule Nürnberg, das ich hier (Projektarbeiten 2011/12) verlinkt habe.
Kannst du sagen, woher das 1. Bild stammt? Sieht auch interessant aus (natürlich nicht im Mindesten so interessant, wie deine Umsetzung!). ;)