- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 7 von 7

Thema: Fragen eines RP6 Neulings

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    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

  2. #2
    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;
    }

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    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:
    https://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
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    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

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    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
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    shedepe
    Gast
    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, 17:49
  2. Neulings Problem mit dem Atmel
    Von sege im Forum AVR Hardwarethemen
    Antworten: 32
    Letzter Beitrag: 13.01.2008, 12: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, 06:38
  4. Fragen zum Motor eines PC Lüfters
    Von Hellmut im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 27.02.2006, 11:42
  5. Fragen zum Bau eines Getriebes
    Von Hans Krohn im Forum Mechanik
    Antworten: 9
    Letzter Beitrag: 11.02.2005, 22:12

Berechtigungen

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

12V Akku bauen