Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Laderegler Test Tueftler Seite

Der RP6

Allgemein

In diesem Artikel geht es um die Programmierung des RP6 und seiner Erweiterungsplatinen RP6 CONTROL M32 und RP6 CCPRO M128. Zu den Grundlagen des RP6 gibt es eine eigene Seite: RP6


RP6Loader

Loader Versionen

Hier eine Tabelle der (mir) bekannten RP6Loader Versionen für die RP6 Base und M32:

ZIP-Datum Version Bemerkungen Examples
03.08.2007 1.1c ab Win2k SP4 (XP, VISTA, W7)
05.09.2007 1.1e - JRE1.5 JRE5, Version für Win98SE/ME
07.09.2007 1.1c wie 03.08.2007 (?)
28.09.2007 1.2 ab 1.2: \n wird gesendet ab 16.10.2007
30.09.2007 1.2 wie 28.09.2007 (?)
17.12.2007 1.4 - BETA ab 1.4: neuer Encodertest neuer Selftest!
23.12.2007 1.4 - BETA spezielle Testversion
28.03.2008 1.4c diese Version gibt's auch für Linux 64bit

Projekte

RP6 Base und CONTROL M32

Der RP6 und die M32 können frei in C programmiert werden. Dies wird durch die umfangreiche Funktionsbibliothek und die detailliert beschriebene Anleitung auch Anfängern sehr leicht gemacht. Die Software, die zur Programmierung verwendet wird, ist ausschließlich Freeware und kann entweder der CD entnommen oder aus dem Internet (hier) heruntergeladen werden.

Demo-Programme

Die RP6 Base und M32 Demo Programme sind hier zu finden.

RP6 Base

Ein Programm für die RP6 Base kann zum Beispiel so aussehen:


#include "RP6RobotBaseLib.h" // IMMER einbinden	

int main(void)
{
	initRobotBase(); // Den Roboter initialisieren

	setLEDs(0b111111); // Alle LEDs anschalten
	moveAtSpeed(100,100); // Mit Geschwindigkeit 100 auf beiden Motoren fahren
	mSleep(2000); // 2 Sekunden warten
	Stop(); // Anhalten

	while(true)
	{
               task_motionControl; // Geschwindigkeit regeln
	}
	return 0; 

}

In dem Programm würde der RP6 als erstes alle LEDs anschalten und für 2 Sekunden mit der selben Geschwindigkeit auf beiden Motoren fahren und dann stehen bleiben.

CONTROL M32

Noch ein Beispiel für die M32:


// Includes:

#include "RP6ControlLib.h" 		// IMMER einbinden!!!


int main(void)
{
	initRP6Control(); // IMMER als ERSTES aufrufen!!!
	initLCD(); // Das LCD starten. Muss IMMER aufgerufen werden, BEVOR das LCD verwendet wird!
	setLEDs(0b1111); // Alle LEDs ein
	mSleep(500); // Eine halbe Sekunde warten
	setLEDs(0b0000); // Alle LEDs aus
	sound(180,80,25); // 2 mal Piepsen
	sound(220,80,0);
	showScreenLCD("################", "################"); // Etwas auf dem Display zeigen
	mSleep(1500); // Warten
	showScreenLCD("<<RP6  Control>>", "<<LC - DISPLAY>>"); //
	mSleep(2500); // Warten
	showScreenLCD("Hello World", "Example Program");
	mSleep(2500); //Warten
	clearLCD(); // Das LCD löschen
		
	while(true) 
	{
	     mSleep(1500); // Ewig warten...
	}
	return 0;
}


Library

Versionen

Hier eine Tabelle der (mir) bekannten Library Versionen der RP6 Base und M32:

ZIP-Datum VERSION_ RP6 RP6Control RP6LIB_VERSION RP6Config.h BaseLib ControlLib UartLib MasterTWI SlaveTWI
07.06.2007 1.0 1.0 1.0 nein 1.0_16.05.07 1.0_10.04.07 1.0_16.05.07 1.0_10.04.07 1.0_16.05.07 1.0_16.05.07
08.07.2007 1.0 1.0 1.0 nein 1.0_16.05.07 1.0_10.04.07 1.0_16.05.07 1.0_10.04.07 1.0_16.05.07 1.0_16.05.07
31.07.2007 1.1 1.1 1.0 nein 1.1_27.07.07 1.1_27.07.07 1.0_16.05.07 1.0_10.04.07 1.0_16.05.07 1.0_16.05.07
07.08.2007 1.2 1.2_07.08.07 1.0 nein 1.2_07.08.07 1.2_07.08.07 1.0_16.05.07 1.0_10.04.07 1.0_16.05.07 1.0_16.05.07
11.08.2007 1.2 1.2_07.08.07 1.0 nein 1.2_07.08.07 1.2_07.08.07 1.0_16.05.07 1.0_10.04.07 1.0_16.05.07 1.0_16.05.07
28.09.2007 1.3 1.3_25.09.07 1.1 nein 1.2_07.08.07 1.3_25.09.07 1.1 1.1_10.09.07 1.0_16.05.07 1.0_16.05.07
16.10.2007 1.3 1.3_25.09.07 1.1 13 1.2_07.08.07 1.3_25.09.07 1.1 1.1_10.09.07 1.0_16.05.07 1.0_16.05.07
10.05.2008 1.4 1.4_29.04.08 1.1 13 1.2_07.08.07 1.4_29.04.08 1.1 1.1_10.09.07 1.0_16.05.07 1.0_16.05.07
15.09.2008 1.5 1.5_12.09.08 1.2 13 1.2_07.08.07 1.4_29.04.08 1.1 1.1_10.09.07 1.0_16.05.07 1.0_16.05.07
13.03.2010 1.5 1.5_12.09.08 1.3beta 15 1.3beta

In der 1. Spalte findet ihr das Datum der RP6Examples.zip Datei, in der die Library enthalten ist. Die 2. Spalte nennt die Version, die im Dateinamen der VERSION_x.x.txt Datei als x.x vorkommt. In der 3. und 4. Spalte steht die Versionsangabe der RP6Library und RP6ControlLibrary laut Angabe in der VERSION_x.x.txt Datei.

In der 5. Spalte gebe ich den Wert der Konstante RP6LIB_VERSION an. Es gibt sie erst ab den Examples vom 16.10.2007. In den Spalten 6 bis 11 führe ich nacheinander die Versionsnummern und ggf. das in der Datei genannte Datum der Header-Datei/Library an: RP6Config.h, BaseLib, ControlLib, UartLib, MasterTWI, SlaveTWI.

Die jeweils aktuelle Library ist in den Demo-Programmen auf der AREXX Homepage enthalten. Link siehe oben! Die RP6Control Library in der Version 1.3beta vom 13.03.2010 könnt ihr hier finden.

RP6RobotBase Library

Konfiguration
Port-Verwendung
Port Name In/Out Pullup Wert Funktion Bezeichnung Anmerkungen
PA0 ADC0 In 0 ADC0 ADC_ADC0 (frei)
PA1 ADC1 In 0 ADC1 ADC_ADC1 (frei)
PA2 ADC2 In 0 LS_R ADC_LS_R
PA3 ADC3 In 0 LS_L ADC_LS_L
PA4 ADC4 In/(Out) 0 E_INT1 (INT1) XBUS INT1
PA5 ADC5 In 0 MCURRENT_R ADC_MCURRENT_R
PA6 ADC6 In 0 MCURRENT_L ADC_MCURRENT_L
PA7 ADC7 In 0 UBAT ADC_BAT
PB0 T0/XCK Out 0 SL6 Status LED 6
PB1 T1 Out 0 SL5 Status LED 5 ***
PB2 AIN0/INT2 In 0 ACS (INT2) IR Empfänger (TSOP)
PB3 AIN1/OC0 Out 0 ACS_PWRH ACS Sendedioden HiPwr
PB4 SS Out 0 PWRON Power On **
PB5 MOSI In 0 ISP START Start/Stop-Taster
PB6 MISO Out 0 ISP ACS_L ACS Sendediode rechts
PB7 SCK Out 0 ISP SL4 Status LED 4 ***
PC0 SCL In/Out * 0 I2C-Bus SCL XBUS SCL
PC1 SDA In/Out 0 I2C-Bus SDA XBUS SDA
PC2 TCK Out 0 JTAG DIR_L Fahrtrichtung linke Kette
PC3 TMS Out 0 JTAG DIR_R Fahrtrichtung rechte Kette
PC4 TDO Out 0 JTAG SL1 Status LED 1 ***
PC5 TDI Out 0 JTAG SL2 Status LED 2 ***
PC6 TOSC1 Out 0 SL3 Status LED 3
PC7 TOSC2 Out 0 ACS_R ACS Sendediode rechts
PD0 RXD In 1 RS232 RX Soll: Pullup ?
PD1 TXD Out 0 RS232 TX
PD2 INT0 In 0 ENC_L Radencoder links
PD3 INT1 In 0 ENC_R Radencoder rechts
PD4 OC1B Out 0 MOTOR_L PWM Motor links
PD5 OC1A Out 0 MOTOR_R PWM Motor rechts
PD6 ICP Out 0 ACS_PWR ACS Sendedioden Power
PD7 OC2 Out 0 IRCOMM IRCOMM Sendedioden
Timer-Nutzung

RP6Control Library

Konfiguration
Port-Verwendung
Port Name In/Out Pullup Wert Funktion Bezeichnung Anmerkungen
PA0 ADC0 In 0 MIC ADC_MIC
PA1 ADC1 In 0 KEYPAD ADC_KEYPAD
PA2 ADC2 In 0 ADC2 ADC_2 (frei)
PA3 ADC3 In 0 ADC3 ADC_3 (frei)
PA4 ADC4 In/(Out) 0 ADC4 ADC_4 (frei)
PA5 ADC5 In 0 ADC5 ADC_5 (frei)
PA6 ADC6 In 0 ADC6 ADC_6 (frei)
PA7 ADC7 In 0 ADC7 ADC_7 (frei)
PB0 T0/XCK Out 1 MEM_CS EEPROM Chip Select
PB1 T1 Out 1 MEM_CS2 EEPROM Chip Select 2 **
PB2 AIN0/INT2 In 1 EINT3 (INT2) XBUS INT3
PB3 AIN1/OC0 Out 0 LCD_RS LCD RS
PB4 SS Out 0 LCD_EN LCD EN
PB5 MOSI Out 0 ISP MOSI EEPROM SI
PB6 MISO In 0 ISP MISO EEPROM SO
PB7 SCK Out 0 ISP SCK EEPROM SCK
PC0 SCL In/Out * 0 I2C-Bus SCL XBUS SCL
PC1 SDA In/Out 0 I2C-Bus SDA XBUS SDA
PC2 TCK In/Out 1 JTAG IO_PC2 frei
PC3 TMS In/Out 1 JTAG IO_PC3 frei
PC4 TDO In/Out 1 JTAG IO_PC4 frei
PC5 TDI In/Out 1 JTAG IO_PC5 frei
PC6 TOSC1 In/Out 1 IO_PC6 frei
PC7 TOSC2 In/Out 1 IO_PC7 frei
PD0 RXD In 0 RS232 RX
PD1 TXD Out 0 RS232 TX
PD2 INT0 In 0 EINT1 (INT0) XBUS INT1, Soll: Pullup 1
PD3 INT1 In 0 EINT2 (INT1) XBUS INT2, Soll: Pullup 1
PD4 OC1B Out 0 STR frei
PD5 Oc1A In/Out 1 IO_PD5 frei
PD6 ICP In/Out 1 IO_PD6 frei
PD7 OC2 Out 0 BUZ Beeper
Timer-Nutzung

RP6uart Library

RP6I2Cmaster/slaveTWI Library

WinAVR

Programmer's Notepad 2

GCC

Projekte

RP6 Base

CONTROL M32

RP6 CCPRO M128

Die CCPRO M128 wird in BASIC oder CompactC programmiert.

Demo-Programme

Die RP6 CCPRO M128 Demo Programme sind hier zu finden.

CompactC

Hier ein Beispiel in CompactC:


// WICHTIG: Immer die RP6CCLib mit einbinden:
#include "../../RP6CCLib/RP6CCLib.cc"

void main(void)
{
    // WICHTIG! Immer als erstes aufrufen:
    RP6_CCPRO_Init(); // Auf Startsignal warten, LCD und andere Dinge initialisieren !
    showScreenLCD("RP6 CCPRO M128", "Hello World!");  // Zwei Zeilen Text mit dem LCD anzeigen:
    // Zweimal piepsen:
    beep(200,300,100);   // Format: beep (<tonhöhe>, <dauer>, <pause>)
    beep(100,100,100); 
    AbsDelay(1000); // 1 Sekunde Pause:

    // Untere Zeile im LCD löschen:
    clearPosLCD(1,0,16);

    // Lauflicht:
    byte runLight, dir;   // Variablen deklarieren
    runLight = 1;  // Lauflicht Variable
    dir = 0;       // Laufrichtung des Lauflichtes
    while(true)
    {
		// LEDs setzen:
		setLEDs(runLight);

        // Laufrichtung wechseln wenn die äusseren LEDs erreicht wurden:
		if(runLight >= 16) {
            dir = 1;
            // Laufrichtung im LCD anzeigen:
            setCursorPosLCD(1,4);
            printLCD("<<<<----");
        }
		else if (runLight <= 1) {
			dir = 0;
            // Laufrichtung im LCD anzeigen:
            setCursorPosLCD(1,4);
            printLCD("---->>>>");
        }

		// LED Bit weiter "shiften" - nach links oder rechts, je nach Richtung:
		if(dir == 0)
			runLight = runLight << 1;
		else
			runLight = runLight >> 1;

        // 150ms Pause:
        AbsDelay(150);
    }
}

BASIC

Library

Versionen

Hier eine Tabelle der (mir) bekannten Library Versionen der CCPRO M128:

ZIP-Datum Version CompactC Version BASIC Bemerkungen
22.10.2008 1.0_16.10.08 1.0_07.10.08
31.01.2009 1.0_16.10.08 1.0_07.10.08 wie 22.10.2008 (?)

CompactC

BASIC

C-Control Pro

IDE

CompactC

BASIC

Projekte

CompactC

BASIC

Erfahrungsberichte

...in Arbeit...(kann aber gerne ergänzt werden)



Siehe auch


Weblinks


Autoren

--Sloti 22:23, 29. Dez 2007 (CET)

--Tobias1 18:30, 06. April 2010 (CET)

--Dirk 20:50, 02. August 2011 (CET)


LiFePO4 Speicher Test