-         

Ergebnis 1 bis 7 von 7

Thema: Fragen eines RP6 Neulings

  1. #1

    Fragen eines RP6 Neulings

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo Roboternetz-Community,
    habe mir vor kurzem den RP6 geholt und auch schon ein Testprogramm geschrieben gehabt um mich etwas mit C warm zu machen, da ich normalerweise (arbeitsbedingt) nur C++,C# und Co programmiere.
    Habe nun nach einigen Tagen herumtestens ein paar Fragen bekommen, welche ich nicht direkt durch google (verweist meistens sowieso in dieses Forum) beantwortet bekommen habe.
    Entschuldigung schonmal falls es doch irgendwo eine Antwort dazu gab oder die Frage offensichtlich etwas doof ist (und ja es gibt sicher doofe Fragen ).

    Hier mal meine Fragen:
    1) Bei meinem Test Programm wollte ich die Bumper testen um darüber den Speed des RP6 zu steuern, dabei habe ich die Bedingung eingebaut das wenn beide Bumper gedrückt werden, er moveAtSpeed(0,0); setzen soll. Das klappt soweit auch alles, solange ich das ganze in einer Endlosschleife laufen lasse. Sobald ich allerdings in die Bedingung einbaue das er danach die Schleife verlassen soll, verlässt er zwar die Schleife (durch eine Textausgabe geprüft), setzt aber den moveAtSpeed nicht auf 0.
    Kann mir einer dieses Phänomen erklären wieso man den moveAtSpeed in einer Endlosschleife laufen lassen muss, wenn ich den RP6 doch nur einmalig anhalten will?
    2) Gibt es irgendwie eine Befehlsliste der Befehle des µC (bsp. Linker Motor drehen mit Speed x)? Ich wollte mir selber eine Lib schreiben um schneller zu verstehen was wann wo genau passiert und nicht die "vorgefertigten" Prozeduren vom RP6 zu benutzen, diese sind dort ja schon in eine "verständlichere" Sprache ummodeliert worden.
    3) Gibt es die Möglichkeit das ganze auf C# zu adaptieren wenn man sich eine eigene Lib schreibt? Sowas hat doch sicher schonmal einer probiert oder?

    Hoffe mir kann bei den Punkten jemand weiterhelfen.
    Danke schonmal im voraus.

    Gruß
    Goma

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755
    Hi!
    Zu 1.) hab ich nur eine Idee:
    setzt du den Speed irgendwo anders wieder auf einen anderen Wert? Dann kommt er nämlich nur "kurz" am moveAtSpeed(0,0) vorbei und bekommt dann einen neuen wert...
    Zu 2.) schau mal ein, zwei Threads weiter unten, dort hat nil.at eine gute Zusammenstellung gebracht. Einfach runterladen
    Zu 3. weiß ich leider auch keinen Rat, ich könnte mir es allerings schon vorstellen, solange Programmers Notepad (oder ein anderes Tool) das kann.

    Grüße

  3. #3
    Hallo,
    danke für die schnelle Antwort.

    Zu 1)
    Hier mal mein Quellcode, wie gesagt ist nichts großes war nur zum Bumper und Motor testen. So wie er da steht ist es mit Endlosschleife da Abbruchbedingung x<4 ist und x nirgends 4< wird, so funktioniert es, lass ich dann beide Bumper los, fährt er auch wieder.
    Änder ich allerdings die Abbruchbedingung in x<3 und drücke dann beide, müsste er ja den Motorspeed auf 0 setzen und dürfte nirgendwo sonst hinlaufen und danach nur noch die Ausgabe "Aus" ausgeben. Soweit tut er das auch bis eben auf den MotorSpeed.
    Irgend eine Idee?
    Code:
    #include "RP6RobotBaseLib.h" 
    
    int main(void)
    {
    	initRobotBase(); // Always call this first! The Processor will not work
    					 // correctly otherwise.
    					 
    	setLEDs(0b111111); // Turn all LEDs on
    	mSleep(500);       // delay 500ms
    	setLEDs(0b000000); // All LEDs off
    	
    
    		//left_power = 5;
    		//right_power = 2;
    		powerON(); 	// Turn Encoders, Motor Current Sensors 
    		changeDirection(FWD);
    		moveAtSpeed(0,0);  
    		writeString("An\n");
    	int x = 0;
    	while(x<4)
    	{
    		if (bumper_left && bumper_right)
    		{
    			x=3;
    			writeString("Speed auf 0|0\n");
    			//while(bumper_left && bumper_right)
    				moveAtSpeed(0,0);
    				//task_RP6System();
    			//}
    		}
    		else if (bumper_right)
    		{
    			x=1;
    			moveAtSpeed(20,50);
    			writeString("Speed auf 20|50\n");
    		}
    		else if (bumper_left)
    		{
    			x=2;
    			moveAtSpeed(50,20);
    			writeString("Speed auf 50|20\n");
    		}
    		else if (!bumper_left && !bumper_right)
    		{
    			x=0;
    			moveAtSpeed(50,50);
    			writeString("Speed auf 50/50\n");
    		}
    		writeString("x="); writeInteger(x, DEC); writeString("\n");
    		task_RP6System();
    	}
     
    	writeString("Aus");
    	//stop();
    	
    	return 0;
    }
    zu 2) ja den Thread habe ich gesehen, aber das ist nicht ganz das was ich suche. Das ist mehr oder weniger die Sammlung der premade RP6 Lib Prozeduren (z.B. eben die moveAtSpeed(x,y); Prozedur), welche mitgeliefert wird, ich Suche allerdings viel mehr nach einer Erklärung der Befehle aus der sich dann diese fertigen Prozeduren zusammen setzen
    Bsp: Prozedur getBumperLeft setzt sich aus folgendem zusammen:
    Code:
    uint8_t getBumperLeft(void)
    { 
    	PORTB &= ~SL6;
    	DDRB &= ~SL6; 
    	nop();
    	uint8_t tmp = PINB & SL6;
    	if(statusLEDs.LED6) { 
    		DDRB |= SL6; 
    		PORTB |= SL6; 
    	}
    	return tmp;
    }

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Versuche es mal so:

    Code:
    	writeString("Aus\n");
    	//stop();
    
    	while(1) task_RP6System();
    	return 0;
    moveAtSpeed(0,0); funktioniert mit Beschleunigungs- und Verzögerungsrampen die vom Tasksystem gesteuert werden. Mit isMovementComplete() kann man prüfen, ob beide Motoren bei PWM=0 angekommen sind.

    Noch eine Alternative für den sofortigen Stop: move(0,FWD,0,BLOCKING);

    Damit wird aber das Tasksystem "ausgehebelt", es ist das Ergebniss dieses Threads:
    http://www.roboternetz.de/community/...eAtSpee-Befehl

    Übrigends sollte ein Programm nie beendet werden, also immer in einer Endlosschleife vor dem return enden. (Deshalb hat meine Variante ein \n hinter "Aus"!)

    Die Funktionen werden in der Library in den Dateien RP6RobotBase.h, RP6RobotBaseLib.h und RP6RobotBaseLib.c sowie in RP6Uart.c und .h definiert. Parametrierungen kann man in RP6Config.h ändern/anpassen.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Hi radbruch,
    danke für die Aufklärung bzgl. des Speeds, werde das ganze mal Testen.

    Wegen der Lib, genau in die habe ich geschaut (dort habe ich auch den Teil mit getBumperLeft her), Problem ist eben das ich die Befehle wie DDRB und PORTB nicht kennt und genau dafür eine Erklärung bräuchte, die gibts dort aber in der Lib leider nicht und es gibt ja noch mehr davon.

    Gruß
    Goma

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    http://www.mikrocontroller.net/artic...f_auf_IO-Ports

    Das hilft dir sicher weiter. Und dann natürlich das hier:
    Schaltpläne des RP6: http://arexx.com/rp6/downloads/RP6_Schematics.zip
    Datenblatt des Mega32: http://www.atmel.com/dyn/resources/p...ts/doc2503.pdf

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266
    Hey zu 3. Eine Portierung auf C# ist nicht möglich da C# einen nicht zu vernachlässigen Overhead erzeugt. D.h. es braucht, das .Net Framwork (das selbst mal in der kleinsten version viel zu groß für den Mega32 ist) und die CLR (Common Language Runtime) die den MSIL Code den dein C# Compiler erzeugt, just-in-time kompiliert. Auf einem PC (der wesentlich mehr Speicher und Rechenleistung besitzt) klappt das ohne Probleme. Auf einem Atmega 32 läuft das ganze allerdings nicht.

Ähnliche Themen

  1. fragen zur Realisierung eines Selbstbauboards
    Von Muhkuhmuhhh im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 7
    Letzter Beitrag: 23.02.2009, 18:49
  2. Neulings Problem mit dem Atmel
    Von sege im Forum AVR Hardwarethemen
    Antworten: 32
    Letzter Beitrag: 13.01.2008, 13:02
  3. Wie, was , warum ... Fragen eines Anfängers
    Von Fraper im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 9
    Letzter Beitrag: 22.03.2006, 07:38
  4. Fragen zum Motor eines PC Lüfters
    Von Hellmut im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 27.02.2006, 12:42
  5. [ERLEDIGT] Fragen zum Bau eines Getriebes
    Von Hans Krohn im Forum Mechanik
    Antworten: 9
    Letzter Beitrag: 11.02.2005, 23:12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •