- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Erfahrungen und Erfahrungsaustausch mit Arexx Robot-Arm-mini

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21

    Erfahrungen und Erfahrungsaustausch mit Arexx Robot-Arm-mini

    Nach der Beschäftigung mit RP6 +M32 leistete ich mir diesen Roboterarm.

    1. Das Metallgrundgestell ist stark mit schwarzen Lack bespritzt, so daß es fast unmöglich war, die Gewindeabstandshalter einzudrehen --- etwas mehr Kraft – und KNACK der erste ist abgebrochen ---- Also mit Gewindeschneider die restlichen 3 nachschneiden, aber wer hat schon passende Gewindeschneider ständig vor Ort?

    2. Die mitgelieferte CD war zerkratzt (an einer Stelle durchsichtig), trotz vom großen "C" in Berlin mit festem Band verschlossen – war also kein Kunde dran. Es gelang mit trotzdem die Daten auf Festplatte zu übertragen.

    3. Nach erheblichen Schwierigkeiten den Arm über den PC anzusprechen (Gerät nicht erkannt, und wenn zufällig doch --- war kein Programm ladbar ---falsche Id ....) gelangt es mir trotzdem, aber ein Servo arbeitete nicht ---- Ursache nachdem ich alle Servos mit einem Tester überprüft hatte ----ein Verlängerungskabel war defekt. Also Anschluß abgeschnitten und neuen Stecker angelötet.

    4. Im Testprogramm mit der "Tastatur" funktionierte eine Taste nicht (Servo6 UP).
    Nachdem ich das Programm umgeschrieben habe und die Funktion auf eine andere Taste umgelegt hatte, konnte ich erleichtert feststellen, daß zumindest der Port i.O. ist.
    Die Fehlersuche auf der Tastatur ergab, daß die Diode D9 auf der einen Seite nicht angelötet war. Nun geht es, bis zum nächsten Fehler ))

    Nachdem ich tagelang für die "Inbetriebnahme" gebraucht habe, ist es doch ein sehr interessantes Gerät.

    Gibt es hier jemanden, der kein "Montagsgerät aus Hinter-China" erwischt hat, und schon eigene Programme für den Arm vielleicht in Verbindung mit dem RP6 geschrieben hat ?

    Es gibt ja leider kein eigenes Forum für den Arm.

    Bin noch nicht tiefer eingestiegen, da ich fast nur mit der Fehlerbehebung beschäftigt war, daher noch eine Frage:

    Es gibt ja für mini und den teuren Metallarm auf der CD zwei verschiedene Programmverzeichnisse, obwohl die Elektronicplatine mit dem µProzessor scheinbar gleicht ist. Wo ist der Unterschied ??

    o.k viele Fragen , aber wo ist man besser aufgehoben, als im roboternetz?

    Ralf

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo Ralf,

    da will ich mich gern beteiligen:

    1. Beim Auspacken fiel auf, dass der Beutel der Hauptplatine auf der Lötseite an einer Stelle durchgescheuert war, da lagen auch 2 Leiterbahnen blank (d.h. ohne Lötstoplack). Durchgemessen: Leiterbahnen noch ok, mit Schutzlack nachlackiert.

    2. In der Tüte der Tastatur lag eine halbe Diode 4148. Das war D12, die mechanisch (wohl im Karton) einseitig abgebrochen war. Neue SMD-Diode eingelötet (Problem: Die eine Lötfläche war mit abgerissen, so dass ich da tricksen mußte).

    3. Aufbau: Auch bei mir war das Grundgestell dick schwarz lackiert. Die Abstandhalter für die Hauptplatine konnte man bei 2 Löchern nicht eindrehen, so dass ich mit M3 Stahlschrauben vorgedreht habe. Trotzdem ist dann ein Gewinde eines Abstandhalters abgebrochen. Ich konnte eine M3 Mutter auf beide "Stummel" setzen, so dass das auch so hält.

    4. Es gibt (zu) viele Sorten von Schrauben, die man sich sorgfältig vorsortieren muss, um hinterher nicht durcheinander zu kommen.

    5. Der mechanische Aufbau des Arms gelang erstaunlich gut, keine wesentlichen Probleme. Er ist auch recht gut beschrieben. Es gibt ein paar Hürden, wo man sich etwas mehr Hilfe von der Anleitung wünschen würde:
    - Montage Bodenservo: Es fehlt ein Hinweis, dass man die Mittelstellung des Bodenservos später nur noch mechanisch ändern kann, wenn man umständlich den Maxi-Servohalter öffnet und das Maxi-Servo wieder entfernt. Überhaupt sollte noch deutlicher erwähnt werden, dass man die Servos in Mittelstellung montieren muss.
    - Scheibe mit Achse: Die Schraube M3x8 ließ sich bei mir nur extrem schwer in die Scheibe eindrehen. Ich habe das Loch bei allen Scheiben leicht aufgeweitet.
    - Montage Doppelservohalter: In den Zeichnungen sieht es so aus, dass das Loch im Doppelservohalter (Kabelauslaß) oben beim Handgelenk liegt. Dann sind aber die Kabel zu kurz, so dass ich den Halter umgekehrt montiert habe.
    - Verkabelung (S. 19/20): Es ist nicht sofort erkennbar, welches Servo 1 und welches 6 ist. Ich bin dann erst im Kapitel 7.2 RACS-Verbindungsaufbau, Abbildung 2, darauf gestoßen, das der "gripper" Servo 1 ist.
    - Servo-Kabellänge: Ich finde: Ziemlich knapp. Ich habe mir noch 2 kurze Verlängerungskabel geleistet.

    6. Die Software-Installation klappte bei mir gut (auch durch den RP6 schon geübt!). Bei mir auch zunächst eine falsche ID, die ich nur durch Installation eines anderen RobotLoaders wegbekommen konnte.

    7. Tastatur-Test: Trotz meiner Reparatur der Tastatur (siehe 2.) funktionierten einzelne Tasten nicht. Durchmessen: Beim Tastaturkabel war ein Stecker so schräg aufgequetscht, dass 1 Ader keinen Kontakt bekam. Reparatur: Neuen Stecker aufgequetscht. Danach: Funktion der Tastatur ok.

    Materialeinsatz bis hier:
    - SMD Diode LL4148
    - Schutzlack
    - M3-Stahlschrauben, M3-Mutter
    - 2 Servo-Verlängerungskabel
    - Quetschstecker 8-pol für Tastaturkabel
    - Ein bißchen Lötzinn und Kleinigkeiten

    8. Programme und Library:
    Nur sehr basale Demos. In der Library Fehler bei ...
    - Port-Initialisierung PortC, E, G
    - Zu niedriger ADC Vorteiler
    - Für den Beeper wird PWM benutzt. Besser wäre eine echte Frequenzerzeugung (z.B. mit CTC), wenn man "Musik" machen will.
    Lösung: Habe die Library angepaßt an meine Bedürfnisse.

    Jetzt kanns losgehen ...

    Gruß Dirk

  3. #3
    Benutzer Stammmitglied Avatar von efb
    Registriert seit
    08.03.2011
    Beiträge
    50
    Hier ist noch einer:

    hatte sehr ähnliche Probleme wie in den ersten Posts geschildert. Alles letztlich nicht sooo wild, bis auf zwei schon ziemlich ärgerliche Sachen:

    Auch bei mir brach promt der erste Abstandshalter ab, weil man einfach nicht damit rechnet, das der nicht vollständig reingeht. Man denkt so lange, das es durch die Farbreste so schwer geht, bis das Teil abbricht und man gemerkt hat, das das Loch nicht tief genug ist!
    Später merkte ich, das man die Teile gar nicht so tief reindrehen solle, da sonst die Platine mit einzelnen Lötstellen auf das Metallgehäuse aufsetzen kann...
    Da gehört dringend ein Hinweis in die Anleitung.

    Und zweitens etwas zeitraubend:
    Tastatur war auch bei mir defekt. Ersteinmal muss man drauf kommen, das es die Tastatur ist und dann noch die Fehler finden.
    1) Eine SMD- Diode war ohne Ring und der Kollege hat sie also einfach auf gut Glück eingelötet. Prompt verkehrtherum. Umlöten war nicht so schwer.
    2) Zu merken, das aber auch noch das blöde Flachbandkabel nicht richtig Kontakt bekam hat schon etwas länger gedauert. Auch ich dachte erst einmal, durch die falsche Diode sei etwas an den Ports kaputt gegangen...

    Na, ich werde leider nicht der letzte sein, der diese Posts zu spät liest...
    Schreib ich also noch mal für die Suche: Roboterarm RA-2 Hobby oder so: Arexx RA2-Hobby

    Das der Ganze Kram trotzdem Spaß macht will ich aber nicht abstreiten

    Viel Erfolg noch allen Roboterarm-Nutzern.

    efb

  4. #4
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21
    Hallo efb,

    Willkommen in der Arexx-Arm-Gemeinde. Hast also auch viel "Lehrgeld" zahlen müssen.

    Inzwischen habe ich einen Joystick zur Armsteuerung (Keybordanschluß) angeschlossen (plus Masse extra)
    Port 0 bis 5 auf Eingang und Widerstände ein 0b00011111 ergibt 32 Möglichkeiten.
    Aber es ist kein analoger PC-Joystick --- sondern ein älterer Joystick von meinem
    ATARI 800/130 -Hobby(ältere Homecomputer). Dieser hat 5 Microschalter, die auf Masse geschaltet
    werden.

    Schade, daß es keine neuen Digital-Joysticks mehr zu kaufen gibt, denn meiner ist schon etwas ausgeleiert.

    Hallo radbruch,
    die Servos habe ich (noch ??) nicht umgebaut, sondern die Programme entsprechend umgeschrieben.

    Ein weiteres Projekt wäre, eine Steuerung über eine IR-Fernbedienung, wie z.B. bei ROBBY6.
    Die Arm-Platine hat leider keinen Empfänger, müßte doch aber nachzurüsten sein.
    Kann man da vielleicht dann die Lib vom Robby nehmen ?
    IR bei Robby an PD7, am Arm geht PD7 an eine Buchse SPI und scheint frei zu sein.

    MfG

    Ralf
    Geändert von ralf (09.03.2011 um 17:21 Uhr)

  5. #5
    Benutzer Stammmitglied Avatar von efb
    Registriert seit
    08.03.2011
    Beiträge
    50
    Zitat Zitat von ralf Beitrag anzeigen

    Inzwischen habe ich einen Joystick zur Armsteuerung (Keybordanschluß) angeschlossen
    ...
    Schade, daß es keine neuen Digital-Joysticks mehr zu kaufen gibt, denn meiner ist schon etwas ausgeleiert.
    Hallo Ralf,
    gute Idee mit den alten digitalen Joysticks, habe ich auch noch da, vom C64 .
    Und die gibts auch noch reichlich bei ebay: z.B. "competition pro"
    Viele Grüße

    efb

  6. #6
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21
    Hallo efb,
    darf man dich auch mit einem Vornamen ansprechen ?

    Die Ebay "competition pro" sind ja auch nicht neu oder einige Jahre alt.
    Kenne die auch, sehr robust für viele alte WeltraumBallerspiele sehr geeignet aber nicht gerade feinfühlig.
    Benutze einen QuickShot II, der den Feuerknopf oben im Hebel hat, damit ist eine EinHandBedienung möglich, beim
    "compiPro" geht das nicht.

    Eine Frage am Rande--- hast du noch einen C64 und benutzt ihn auch ? --
    Die alte Konkurrenz C64-Atari ist doch wohl vorbei

    Gruß Ralf

  7. #7
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21
    Hallo Dirk,
    deine Probleme signatisieren mir, daß ich nicht ganz allein dastehe.
    Ich habe es jetzt auch hinbekommen, den Arm mit der Loader-Software vom RP6 zu kombinieren.
    Der Loader vom Arm brachte fast nur Fehler, brauchte 2 Rechner.
    Wie sieht es bei dir mit " ID nicht erkannt" aus ?

    Ich habe festgestellt, daß der Arm sich schlecht "resetten" läßt, d.h. es wird sofort das Programm im
    µP gestartet. Damit ist das Loaderprogramm nicht aktiv und der µP über serielle Schnittstelle nicht
    erreichbar.
    Durch schnelles Drücken der Reset/Start-Taster komme ich jetzt doch rein ---ist aber nicht normal.
    Beim RP6 klappt das problemlos ---- ist ja fast das gleiche System.
    Vom Schaltplan ist RP6 und ARM fast gleich ---Resettaste ----ich dachte schon an Kontaktprellen---
    aber der Sofortstart beim einschalten ist der Taster noch garnicht betätigt ?????
    Daher bin ich etwas ratlos , ist ja fast der gleiche µP wie M32 (32 / 64).

    Kannst du bei deinen erkannten Library Fehlern etwas genauer werden, ehe ich auch darauf reinfalle ?

    es soll jetzt bei mir auch endlich losgen, ohne viel Fehlersuche

    Ralf

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo Ralf,
    Wie sieht es bei dir mit " ID nicht erkannt" aus ?
    Das hatte sich nach Neuinstallation des Loaders erledigt.

    Ich habe festgestellt, daß der Arm sich schlecht "resetten" läßt, ...
    Ja, das habe ich auch bemerkt. Vor allem betrifft das bei mir die Demos, die die Tastatur benutzen.
    Eine Erklärung habe ich (noch) nicht. Das Prellen des Reset Tasters kann keine Rolle spielen, weil das (Software-)Reset aus dem Loader ja auch nicht funktioniert.

    Gruß Dirk

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Ich habe auch einen RA2, gesponsert von arexx. Es handelt sich allerdings um ein Versuchsgerät das teilweise nicht dem Auslieferstand entspricht. Da ich den Arm eh nach eigenen Vorstellungen zusammengebaut habe, kann ich zu den mechanischen Mängeln nichts sagen. Das ID-Problem hatte ich auch mit der Installation das aktuellen Loaders gelöst. Das Resetproblem umgehe ich mit einer langen Pause beim Programmstart. Erst nach dieser Pause aktiviere ich die Servos, weil ich den Verdacht habe, dass der Start der Servos erneut einen Reset auslöst. Flashprobleme treten bei mir nicht mehr auf, seit ich das Board mit 4X4000mA-Babyzellen versorge. Da mein Arm auf dem RP6 sitzt, habe ich erfolglos versucht, beide mit den Akkus des RP6 zu versorgen. Die nominalen 7,2V sind aber scheinbar zu wenig für den Spannungsregler auf der arm64-Platine. Selbst mit überbrückter D1 hatte das nicht funktioniert. Möglicherweise liegt das aber auch an den Akkus meines RP6, es ist immer noch der erste Satz den ich gnadenlos mit mit einem Steckernetzteil über Nacht nachlade ;)

    Leider habe ich noch nicht viel damit angestellt. Mein Hauptproblem war die fehlende Erfahrung mit I2C. Da ich bisher keine Erweiterungsplatinen hatte, war das völliges Neuland für mich. Erste zaghafte Schritte waren die Anpassung der m32-Lib an das arm64 um den RP6 über I2C und und das RP6-Slave-Demo zu steuern:
    Code:
    // RA2 steuert RP6                                                   1.11.2010 mic
    
    // Das I2C-Masterdemo6 des m32 angepasst an das arm64-Modul.
    // Eine Ergänzung in der Abfrage des Keypads ermöglicht gleichzeitige Bewegungen
    // aller Servos und des RP6.
    // Auf dem RP6 läuft das unveränderte I2C-Slave-Demo.
    
    // Verbindung zwischen RP6-XBUS Pin8(E_INT), Pin10(SCL), Pin12(SDA) und Pin14(GND)
    // und IIC Pin 8-14 auf dem arm64. Beide Boards werden getrennt versorgt.
    
    // PollSwitch16() liefert ein 16bit Abbild der Tasten
    // scan_keyboard1() liefert die Tastennummer mit geänderter Portabfrage
    
    // Infos zum Portexpander
    // http://www.mikrocontroller.net/artic...pander_PCF8574
    
    #include "RobotArmBaseLib.h"
    #include "RP6I2CmasterTWI.h"
    #include "RP6Control_I2CMasterLib.h"
    
    #define I2C_RP6_BASE_ADR 10 // The default address of the Slave Controller (RP6)
    
    /*****************************************************************************/
    // I2C Error handler
    
    /**
     * This function gets called automatically if there was an I2C Error like
     * the slave sent a "not acknowledge" (NACK, error codes e.g. 0x20 or 0x30).
     * The most common mistakes are:
     *   - using the wrong address for the slave
     *   - slave not active or not connected to the I2C-Bus
     *   - too fast requests for a slower slave
     * Be sure to check this if you get I2C errors!
     */
    void I2C_transmissionError(uint8_t errorState)
    {
    	writeString_P("\nI2C ERROR - TWI STATE: 0x");
    	writeInteger(errorState, HEX);
    	writeChar('\n');
    }
    
    
    /*****************************************************************************/
    // Motor function
    
    uint8_t transmit_buffer[10]; // temporary transmit buffer
    							 // A global variable saves space on the heap...
    
    #define CMD_ROTATE 8
    
    #define LEFT 2
    #define RIGHT 3
    
    /**
     * Rotate function - you can define nearly the same functions as you have on
     * the RP6 and just forward the commands with I2C Bus transfers...
     * We will make an improved version of this and other functions in another example!
     */
    void RP6_rotate(uint8_t desired_speed, uint8_t dir, uint16_t angle)
    {
    	transmit_buffer[0] = 0;
    	transmit_buffer[1] = CMD_ROTATE;
    	transmit_buffer[2] = desired_speed;
    	transmit_buffer[3] = dir;
    	transmit_buffer[4] = ((angle>>8) & 0xFF);
    	transmit_buffer[5] = (angle & 0xFF);
    	I2CTWI_transmitBytes(I2C_RP6_BASE_ADR, transmit_buffer, 6 );
    }
    
    #define CMD_MOVE 7
    
    #define FWD 0
    #define BWD 1
    
    void RP6_move(uint8_t desired_speed, uint8_t dir, uint16_t ticks)
    {
    	transmit_buffer[0] = 0;
    	transmit_buffer[1] = CMD_MOVE;
    	transmit_buffer[2] = desired_speed;
    	transmit_buffer[3] = dir;
    	transmit_buffer[4] = ((ticks>>8) & 0xFF);
    	transmit_buffer[5] = (ticks & 0xFF);
    	I2CTWI_transmitBytes(I2C_RP6_BASE_ADR, transmit_buffer, 6 );
    }
    
    /*****************************************************************************/
    // Read all registers function
    
    uint8_t RP6data[32]; // This array will contain all register values of RP6
    					 // after you called readAllRegisters()
    
    					 // It is better to keep such big arrays GLOBAL as
    					 // they otherwise fill up the stack in memory...
    
    /**
     * This function reads ALL registers available in the standard I2C Bus Slave
     * Example program for the Robot Base and outputs their values on the serial interface.
     * You will see a lot of zeros when the Motors are not running. The main values that are not
     * zero are the two Light Sensors and the two free ADC Channels.
     */
    void readAllRegisters(void)
    {
    	I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 0); // Start with register 0...
    	I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 30); // and read all 30 registers up to
    													// register Number 29 !
    
    	// Now we output the Data we have just read on the serial interface:
    	writeString_P("\nREADING ALL RP6 REGISTERS:");
    	uint8_t i = 0;
    	for(i = 0; i < 30; i++)
    	{
    		if(i % 8 == 0) 		  // add some newline chars otherwise everything
    			writeChar('\n');  // is printed on ONE single line...
    		else
    			writeString_P(" | ");
    		writeChar('#');
    		writeIntegerLength(i,DEC,2);
    		writeChar(':');
    		writeIntegerLength(RP6data[i],DEC,3);
    	}
    	writeChar('\n');
    }
    
    /**
     * Here we demonstrate how to read a few specific registers.
     * It is just the same as above, but we only read 4 registers and
     * start with register Number 13...
     * We also show how to combine values from high and low registers
     * back together to a 16 Bit value...
     */
    void readLightSensors(void)
    {
    	uint8_t lightSens[4];
    
    	I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 13); // Start with register 13 (LSL_L)...
    	I2CTWI_readBytes(I2C_RP6_BASE_ADR, lightSens, 4); // and read all 4 registers up to
    													// register Number 16 (LSR_H) !
    	writeString_P("Light Sensor registers:\n");
    	writeString_P(" | LSL_L:"); writeInteger(lightSens[0], DEC);
    	writeString_P(" | LSL_H:"); writeInteger(lightSens[1], DEC);
    	writeString_P(" | LSR_L:"); writeInteger(lightSens[2], DEC);
    	writeString_P(" | LSR_H:"); writeInteger(lightSens[3], DEC);
    
    	writeString_P("\n\n Light Sensor Values:");
    	writeString_P(" | LSL:"); writeInteger(lightSens[0] + (lightSens[1]<<8), DEC);
    	writeString_P(" | LSR:"); writeInteger(lightSens[2] + (lightSens[3]<<8), DEC);
    	writeChar('\n');
    
    	//setCursorPosLCD(1, 3);
    	//writeIntegerLengthLCD(lightSens[0] + (lightSens[1]<<8), DEC, 4);
    	//setCursorPosLCD(1, 11);
    	//writeIntegerLengthLCD(lightSens[2] + (lightSens[3]<<8), DEC, 4);
    }
    
    /*****************************************************************************/
    // Main function - The program starts here:
    
    int PollSwitch16(void)
    {
    	int i, j, mask=0, x=0;
    
    	for(j=0; j<4; j++)
    	{
    		DDRA = (1<<j); 		// PAj auf Ausgang
    		PORTA = ~(1<<j);		// PA7 bis PA4 ist Eingang mit Pullup, PAj ist LOW (Tilde!)
    		sleep(10);           // Warten auf Pegel
    		x=(PINA>>4);        	// Eingang PA7-4 wird zu Bit3-0 in x
    		for(i=0; i<4; i++)   // Bits 0-3 überprüfen
    			if(!(x & (1<<i))) // Wenn Eingang low ist wurde die Taste gedrückt
    				mask += (1 << (i*4)) * (1<<j); // entsprechendes Bit in Maske setzen
    	}
    	PORTA = 0;              // Port A deaktivieren
    	DDRA = 0;
    
    	return(mask);
    }
    
    int scan_keyboard1(void)
    {
    	int i, mask = PollSwitch16();
    
    	for(i=0; i<16; i++)     // wurde eine Taste gedrückt?
    	{
    	   if(mask & (1<<i))    // Taste i gedrückt?
    	   {
    		   if(mask & ~(1<<i))
    	         return(0); 		// mehrere Tasten gleichzeitig gedrückt!
    			else
    			   return(i+1); 	// Tastennummer zurückgeben
    		}
    	}
    	return(0);					// keine Taste gedrückt
    }
    
    int speed;
    void Event( int x )
    {
    	if(x == 0)
    	{
    		if(PING & LED_GREEN) PowerLEDoff(); else PowerLEDgreen();
    		mSleep(300);
    	}
    	else
    	{
    		PowerLEDred();
    		//Power_Servos();
    		if(x & (1<<0)) { Pos_Servo_1-=speed; Power_Servos();}
    		if(x & (1<<1)) { Pos_Servo_1+=speed; }
    		if(x & (1<<2)) { Pos_Servo_2+=speed; } // Drehrichtung invers!
    		if(x & (1<<3)) { Pos_Servo_2-=speed; }
    		if(x & (1<<4)) { Pos_Servo_3-=speed; }
    		if(x & (1<<5)) { Pos_Servo_3+=speed; }
    		if(x & (1<<6)) { Pos_Servo_4-=speed; }
    		if(x & (1<<7)) { Pos_Servo_4+=speed; }
    		if(x & (1<<8)) { Pos_Servo_5-=speed; Pos_Servo_6-=speed; }
    		if(x & (1<<9)) { Pos_Servo_5+=speed; Pos_Servo_6+=speed; }
    		if(x & (1<<10)) { PowerLEDorange(); speed=5; }
    		if(x & (1<<11)) { PowerLEDorange(); speed=1; }
    		if(x & (1<<12)) { RP6_rotate(35,BWD,40); }
    		if(x & (1<<13)) { RP6_rotate(35,FWD,40); }
    		if(x & (1<<14)) { RP6_rotate(35,RIGHT,40); }
    		if(x & (1<<15)) { RP6_rotate(35,LEFT,40); }
    	}
    /*
    	writeInteger(Pos_Servo_1, 10);
    	writeString_P(" | ");
    	writeInteger(Pos_Servo_2, 10);
    	writeString_P(" | ");
    	writeInteger(Pos_Servo_3, 10);
    	writeString_P(" | ");
    	writeInteger(Pos_Servo_4, 10);
    	writeString_P(" | ");
    	writeInteger(Pos_Servo_5, 10);
    	writeString_P(" | ");
    	writeInteger(Pos_Servo_6, 10);
    	writeString_P("\n");
    	*/
    }
    int  Batterie(void)
    {
    	#define BATTERIE 6
    	ADMUX = (1 << REFS0) | (1 << REFS1) | BATTERIE;	// internal 2.56V reference with external capacitor
    	ADCSRA |= (1 << ADSC);			// Start conversion
    	while (!(ADCSRA & (1 << ADIF)));	// wait for conversion complete
    	ADCSRA |= (1 << ADIF);			// clear ADCIF
    	return ADCL + (ADCH << 8);
    }
    
    void printUBat(uint16_t ubat)
    {
    	writeIntegerLength((((ubat/204.8f)+0.1f)), DEC, 2);
    	writeChar('.');
    	writeIntegerLength((((ubat/2.048f)+10)), DEC, 2);
    	writeChar('V');
    }
    int main(void)
    {
    	initRobotBase();
    	PORTA = 0;              // Port A deaktivieren
    	DDRA = 0;
    
    	writeString_P("\n\nRA2 arm64 I2C Master Example Program!              3.11.2010 mic\n\n");
    	int ubat = readADC(ADC_UBAT);
    	printUBat(ubat);
    	writeString_P("\n");
    	
    
    	// IMPORTANT:
    	I2CTWI_initMaster(100); // Initialize the TWI Module for Master operation
    							// with 100kHz SCL Frequency
    	// Register the event handlers:
    	I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
    
    	//char counter = 1;
    
    	//Start_position(); //Use this function to set the servomotor in the centre.
    					  //This function must be called before using Power_Servos();
    
    	speed=1; //Speed for servo from '1'(slow) - '10'(fast!)
       Pos_Servo_1=1500;
    	Pos_Servo_2=1530;
    	Pos_Servo_3=1100;
    	Pos_Servo_4=1640;
    	Pos_Servo_5=580;
    	Pos_Servo_6=580;
    	//Power_Servos();  //Use this function to power the servo motors on
    
    	while(true)
    	{
    		Event(PollSwitch16());
    
    /*
    		if(scan_keyboard1())
    		{
    			writeInteger(scan_keyboard1(), 10);
    			writeChar('\n');
    			switch(0)
    			{
    				case 1: // Increment a counter and send value to LEDs of the
    						// Slave Controller:
    					//setLEDs(0b0001);
    					//showScreenLCD("INCREMENT", "LED COUNTER");
    					I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, 3, counter);
    					counter++;
    				break;
    				case 2: // Read and display ALL registers of the slave controller:
    					//setLEDs(0b0010);
    					//showScreenLCD("READ ALL RP6", "REGISTERS");
    					readAllRegisters();
    				break;
    				case 3: // Read the light sensors and show value on display:
    					//setLEDs(0b0100);
    					//showScreenLCD("LIGHT SENSORS:", "L:      R:");
    					readLightSensors();
    				break;
    				case 4: // Rotate a very small distance to the left:
    					//setLEDs(0b1000);
    					//showScreenLCD("ROTATE A BIT...", "... LEFT!");
    					RP6_rotate(35,LEFT,40);
    				break;
    				case 5: // Rotate a very small distance to the right:
    					//setLEDs(0b1001);
    					//showScreenLCD("ROTATE A BIT...", "... RIGHT!");
    					RP6_rotate(35,RIGHT,40);
    				break;
    			}
    			while(scan_keyboard1());
    		}
    */
    	}
    	return 0;
    }
    Außerdem mußte ich meine Tastenabfrage ändern, weil das Keypad nicht vollständig bestückt war:
    http://www.arexx.com/forum/viewtopic.php?f=19&t=1179

    Mein Arm ist nicht drehbar, dafür besitzt er die zwei gespiegelten Servos die ich noch rumliegen hatte:
    https://www.roboternetz.de/phpBB2/vi...=462535#462535

    Das Keypad und ein LCD betreibe ich inzwischen über I2C mit je einem PCF8574:
    https://www.roboternetz.de/phpBB2/ze...=525681#525681

    Mein RA2 auf dem RP6 sieht im Moment so aus:

    Bild hier  
    (Leider wie immer extrem unscharf)

    Weiter bin ich nicht gekommen, denn dann bin ich über das Pong gestolpert. Und zur Zeit versuche ich den RP6 zu einer Ladestation zu locken. Es gibt noch viel zu erforschen ;)

    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!

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @Ralf:
    Kannst du bei deinen erkannten Library Fehlern etwas genauer werden, ehe ich auch darauf reinfalle ?
    Ich hänge 'mal die Lib an, wie ich sie z.Zt. verwende. Sie ist so kompatibel zur 1. Version. Hauptänderung ist eigentlich erst einmal nur der CTC Modus für den Beeper.

    Gruß Dirk
    Angehängte Dateien Angehängte Dateien

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress