Hi,
solltest den robby vlt. nächstes mal so hinstellen dass seine reifen den boden ned berühren xD
LG Pr0gm4n
Hallo
Danke für eure Hilfe ,ich werde mich gleich mal an die Sache ran schmeissen ,meine vorherigen versuche waren ja nicht so gut von mir,mein Robi ist mir mit quietschenden Reifen davon ich dachte echt er haut mit der Terassentür ab, aber sie hat ihn doch noch gebremst
,und ab jetzt muss ich wohl ein klein wenig aufpassen.
Hi,
solltest den robby vlt. nächstes mal so hinstellen dass seine reifen den boden ned berühren xD
LG Pr0gm4n
Hallo
Danke für die ganzen Tipps ,Dirk mit deinem Demo Programm komme ich leider noch nicht ganz klar. Ich habe da immer wieder Fehler Meldungen wenn ich da die ADC1 u. ADC2 einfüge, irgentwas mach ich da falsch, bin ja der volle Anfänger.
Ich hab da noch eine Frage, bei dem Programm mit dem ich gerade experimentiere ist zwar ganz gut zum testen aber leider ist es sehr schwer die Räder untereinander einzustellen, ADC1 u. ADC0 sind doch zwei seperate Ein und Eusgänge? Warum ändert es z.b die Geschwindigkeit an ADC1 wenn ich an ADC0 was ändere? oder anderst herum.
Ich hab auch bei dem code schon alles geändert, aber ich komm da nicht wirklich weiter ,ich habe auch die Werte wo das x steht geändert aber sobald ich bei irgent einen was ändere dreht sich das eine schneller und das andere langsamer was ja ok wäre wens nicht zu schnell wäre dann hab ich es geschafft dass ich es langsamer kriege aber dafür geht das andere garnicht mehr oder zu schnell oder wieder anderst rum das ist der jammer echt, ich dachte immer wenn ich eine Seite eingestellt habe dann bleibt das so und sobald ich mich dann an das andere Rad mache verändere ich automatisch das andere wieder mitwas habe ich den falsch verstanden?.
Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); DDRA |= 1; DDRA |= 2; int x = 15; // 10<=x<=20; wenn x >15 in die eine richtung, x<15 in die andre, x=15 stillstand while(true) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } return(0); }
Hi,
das iss doch der code den ich geschrieben hab oder?
im prinzip solltest du verstehen, der code macht im moment folgendes:
-init
-dann DDRA-bits 0 und 1 auf ausgang setzen
dann macht er nen 1,5 ms impuls an Pin PA0, dann nen 1,5ms impuls an PA1 und dann wartet er 17ms, dann fängt er wieder mit 1,5ms impuls an PA0 an...
sollte schon klappen denk ich ;D
wenn nich, dann beschreib doch mal was er macht xD
also der code hier iss natürlich nur zum geradeausfahren gedacht, er sollte, so meine hoffnung das eigentlich auch tun...
hast du die pins auch ja richtig angeschlossen?
hast du zufällig nen servo da damit dus damit schnell überprüfen könntest?
wenns mit dem servo geht, dann wird dein fahrtenregler entweder anders angesteuert oder er ist kaputt xD
LG Pr0gm4n
Hallo
Wenn ich mit deinem Programm ein normales Servo ansteuere stellt es sich brav auf eine Position, allerdings nicht auf die Mitte. Möglicherweise ist die Auflösung mit der sleep()-Funktion einfach nicht fein genug um den Nullpunkt der Regler zu treffen.
Das geht vielleicht in die selbe Richtung. Ein Impulszyklus dauert die Summe der einzelnen Sleep()s und ist vielleicht nicht genau genug 20 ms lang. Möglicherweise reagiert der Regler darauf unerwartet.Warum ändert es z.b die Geschwindigkeit an ADC1 wenn ich an ADC0 was ändere?
Ich würde zu einer etwas kompfortableren Impulserzeugung via ISR raten, allerdings ist das zusammen mit der RP6-Library nicht ganz einfach.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hi,
danke dass dus getestet hast ;D
also bei mir sind grad die akkus leer, sonst hätt ich grade auch nochmal schnell was getestet, ich glaub ich bastel morgen mal mein netzteil an den robby ran, hab selber keine fahrtests z.z. xD
naja, mal schaun was meine Servos bei x= 10 x= 15 und x=20 so zusammenfahren xD
LG Pr0gm4n
Der RP6 macht dann aber nichts mehr außer Servos ansteuern...Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); DDRA |= 1; DDRA |= 2; int x; // 10<=x<=20; wenn x >15 in die eine richtung, x<15 in die andre, x=15 stillstand char i; while(true) { x = 15; for(i=0; i<50; i++) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } x = 10; for(i=0; i<50; i++) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } x = 20; for(i=0; i<75; i++) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } } return(0); }
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo u. danke für eure Mühe. Also wenn ich es so lasse x=10, x=15, x=20 dann fährt er vor stoppt dann und dann zurück. Das ist schon echt super nur leider viel zu schnell - also Vollgas. Ich habe unten noch eine Zeile hinzugefügt, weil beim Ende der Schleife ist er ohne Stop gleich wieder in die andere Richtung und das ist nicht gut für die Motoren bei Vollgas.
Ich weiss nicht ob ich es richtig gemacht habe, aber so stoppt er kurz und fährt dann weiter. Sowie ich es jetzt habe ist es echt super für eine Richtung, aber wie schaffe ich es jetzt, dass er es so macht wie oben beschrieben - vor Stop und dann zurück, weil wenn ich es jetzt so lasse und nur den letzten Wert ändere also x=20, dann fängt er wieder an zu spinnen, d.h. vor geht er super
auch mit der Geschwindigkeit passt es zusammen sowie ich es bräuchte, aber zurück nur zu schnell, ruckartig, garnicht oder nur eine Seite.
Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); DDRA |= 1; DDRA |= 2; int x; // 10<=x<=20; wenn x >15 in die eine richtung, x<15 in die andre, x=15 stillstand char i; while(true) { x =13; for(i=0; i<50; i++) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } x = 15; for(i=0; i<50; i++) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } x = 13; for(i=0; i<50; i++) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } x = 15; for(i=0; i<50; i++) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } } return(0); }
Hab es jetzt doch noch geschafft und es geht super, aber ich könnt Hilfe bei der Feineinstellung gebrauchen. Wie kann ich mir jetzt ausrechnen, dass ich auch links u. rechts fahren kann. Welche Werte muss ich wo verändern. Leider bin ich echt der volle Anfänger und bin euch für eure Hilfe SEHR dankbar, denn ohne euch wär ich aufgeschmissen.
Hab zuerst wieder viel zu viel verändert und deshalb hat es nicht gleich geklappt. Vielleicht wäre ja auch einer so nett von euch mir mit dem Einfügen der Programierung für die Pumpers zu helfen.
Damit er wenn er wo anstösst die Richtung wechselt. Das wäre super Nett - Danke euch schon mal im Voraus für eure Hilfe!.
Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); DDRA |= 1; DDRA |= 2; int x; // 10<=x<=20; wenn x >15 in die eine richtung, x<15 in die andre, x=15 stillstand char i; while(true) { x =13; for(i=0; i<50; i++) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } x = 15; for(i=0; i<50; i++) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } x = 20; for(i=0; i<50; i++) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } x = 15; for(i=0; i<50; i++) { PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } } return(0); }
Hi,
zu deim problem kann ich dir heut nachmittag nochmal helfen, muss jetz weg, nacher guck ichs mir nochmal an *sry 4 now*
aber meine kurze frage:
das hab ich compiliert und reingeladen, die Servos haben keinen muks gemacht...Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); DDRA |= 1; DDRA |= 2; int x = 15; // 10<=x<=20; wenn x >15 in die eine richtung, x<15 in die andre, x=15 stillstand int i = 0; while(true) { if(i<100) { x=15; PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } if((i>100)&&(i<200)) { x=20; PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } if(i>200) { x=10; PORTA |= 1; sleep(x); PORTA &= ~1; PORTA |= 2; sleep(30-x); PORTA &= ~2; sleep(170); } i++; } return(0); }
radbruch könntest du mein hexfile vlt. schnell testen?
LG Pr0gm4n
Lesezeichen