Dirk (Diskussion | Beiträge) K (→CompactC) |
Dirk (Diskussion | Beiträge) K (→Port-Verwendung) |
||
Zeile 299: | Zeile 299: | ||
|Funktion | |Funktion | ||
|Bezeichnung | |Bezeichnung | ||
+ | |Stecker | ||
|Anmerkungen | |Anmerkungen | ||
|- | |- | ||
Zeile 308: | Zeile 309: | ||
| | | | ||
|ADC0 | |ADC0 | ||
+ | |VDD/GND/ADC0 | ||
|ADC_ADC0 (frei) | |ADC_ADC0 (frei) | ||
|- | |- | ||
Zeile 317: | Zeile 319: | ||
| | | | ||
|ADC1 | |ADC1 | ||
+ | |VDD/GND/ADC1 | ||
|ADC_ADC1 (frei) | |ADC_ADC1 (frei) | ||
|- | |- | ||
Zeile 326: | Zeile 329: | ||
| | | | ||
|LS_R | |LS_R | ||
+ | | | ||
|ADC_LS_R | |ADC_LS_R | ||
|- | |- | ||
Zeile 335: | Zeile 339: | ||
| | | | ||
|LS_L | |LS_L | ||
+ | | | ||
|ADC_LS_L | |ADC_LS_L | ||
|- | |- | ||
Zeile 344: | Zeile 349: | ||
| | | | ||
|E_INT1 (INT1) | |E_INT1 (INT1) | ||
+ | |XBUS: 8 | ||
|XBUS INT1 | |XBUS INT1 | ||
|- | |- | ||
Zeile 352: | Zeile 358: | ||
| | | | ||
| | | | ||
− | |MCURRENT_R | + | |MCURRENT_R * |
+ | | | ||
|ADC_MCURRENT_R | |ADC_MCURRENT_R | ||
|- | |- | ||
Zeile 361: | Zeile 368: | ||
| | | | ||
| | | | ||
− | |MCURRENT_L | + | |MCURRENT_L * |
+ | | | ||
|ADC_MCURRENT_L | |ADC_MCURRENT_L | ||
|- | |- | ||
Zeile 370: | Zeile 378: | ||
| | | | ||
| | | | ||
− | |UBAT | + | |UBAT * |
+ | | | ||
|ADC_BAT | |ADC_BAT | ||
|- | |- | ||
Zeile 380: | Zeile 389: | ||
| | | | ||
|SL6 | |SL6 | ||
+ | | | ||
|Status LED 6 | |Status LED 6 | ||
|- | |- | ||
Zeile 389: | Zeile 399: | ||
| | | | ||
|SL5 | |SL5 | ||
+ | | | ||
|Status LED 5 *** | |Status LED 5 *** | ||
|- | |- | ||
Zeile 398: | Zeile 409: | ||
| | | | ||
|ACS (INT2) | |ACS (INT2) | ||
+ | | | ||
|IR Empfänger (TSOP) | |IR Empfänger (TSOP) | ||
|- | |- | ||
Zeile 407: | Zeile 419: | ||
| | | | ||
|ACS_PWRH | |ACS_PWRH | ||
+ | | | ||
|ACS Sendedioden HiPwr | |ACS Sendedioden HiPwr | ||
|- | |- | ||
Zeile 416: | Zeile 429: | ||
| | | | ||
|PWRON | |PWRON | ||
+ | | | ||
|Power On ** | |Power On ** | ||
|- | |- | ||
Zeile 425: | Zeile 439: | ||
|ISP | |ISP | ||
|START | |START | ||
+ | |ISP: 1 | ||
|Start/Stop-Taster | |Start/Stop-Taster | ||
|- | |- | ||
Zeile 434: | Zeile 449: | ||
|ISP | |ISP | ||
|ACS_L | |ACS_L | ||
− | |ACS Sendediode | + | |ISP: 9 |
+ | |ACS Sendediode links | ||
|- | |- | ||
|PB7 | |PB7 | ||
Zeile 443: | Zeile 459: | ||
|ISP | |ISP | ||
|SL4 | |SL4 | ||
+ | |ISP: 7 | ||
|Status LED 4 *** | |Status LED 4 *** | ||
|- | |- | ||
|PC0 | |PC0 | ||
|SCL | |SCL | ||
− | |In/Out | + | |In/Out ² |
|0 | |0 | ||
| | | | ||
|I2C-Bus | |I2C-Bus | ||
|SCL | |SCL | ||
+ | |XBUS: 10 | ||
|XBUS SCL | |XBUS SCL | ||
|- | |- | ||
Zeile 461: | Zeile 479: | ||
|I2C-Bus | |I2C-Bus | ||
|SDA | |SDA | ||
+ | |XBUS: 12 | ||
|XBUS SDA | |XBUS SDA | ||
|- | |- | ||
Zeile 469: | Zeile 488: | ||
|0 | |0 | ||
|JTAG | |JTAG | ||
− | |DIR_L | + | |DIR_L * |
+ | | | ||
|Fahrtrichtung linke Kette | |Fahrtrichtung linke Kette | ||
|- | |- | ||
Zeile 478: | Zeile 498: | ||
|0 | |0 | ||
|JTAG | |JTAG | ||
− | |DIR_R | + | |DIR_R * |
+ | | | ||
|Fahrtrichtung rechte Kette | |Fahrtrichtung rechte Kette | ||
|- | |- | ||
Zeile 488: | Zeile 509: | ||
|JTAG | |JTAG | ||
|SL1 | |SL1 | ||
+ | | | ||
|Status LED 1 *** | |Status LED 1 *** | ||
|- | |- | ||
Zeile 497: | Zeile 519: | ||
|JTAG | |JTAG | ||
|SL2 | |SL2 | ||
+ | | | ||
|Status LED 2 *** | |Status LED 2 *** | ||
|- | |- | ||
Zeile 506: | Zeile 529: | ||
| | | | ||
|SL3 | |SL3 | ||
+ | | | ||
|Status LED 3 | |Status LED 3 | ||
|- | |- | ||
Zeile 515: | Zeile 539: | ||
| | | | ||
|ACS_R | |ACS_R | ||
+ | | | ||
|ACS Sendediode rechts | |ACS Sendediode rechts | ||
|- | |- | ||
Zeile 524: | Zeile 549: | ||
|RS232 | |RS232 | ||
|RX | |RX | ||
+ | |PRG/U: 2 | ||
|Soll: Pullup ? | |Soll: Pullup ? | ||
|- | |- | ||
Zeile 533: | Zeile 559: | ||
|RS232 | |RS232 | ||
|TX | |TX | ||
+ | |PRG/U: 3 | ||
| | | | ||
|- | |- | ||
Zeile 542: | Zeile 569: | ||
| | | | ||
|ENC_L | |ENC_L | ||
+ | | | ||
|Radencoder links | |Radencoder links | ||
|- | |- | ||
Zeile 551: | Zeile 579: | ||
| | | | ||
|ENC_R | |ENC_R | ||
+ | | | ||
|Radencoder rechts | |Radencoder rechts | ||
|- | |- | ||
Zeile 559: | Zeile 588: | ||
|0 | |0 | ||
| | | | ||
− | |MOTOR_L | + | |MOTOR_L * |
+ | | | ||
|PWM Motor links | |PWM Motor links | ||
|- | |- | ||
Zeile 568: | Zeile 598: | ||
|0 | |0 | ||
| | | | ||
− | |MOTOR_R | + | |MOTOR_R * |
+ | | | ||
|PWM Motor rechts | |PWM Motor rechts | ||
|- | |- | ||
Zeile 578: | Zeile 609: | ||
| | | | ||
|ACS_PWR | |ACS_PWR | ||
+ | | | ||
|ACS Sendedioden Power | |ACS Sendedioden Power | ||
|- | |- | ||
Zeile 587: | Zeile 619: | ||
| | | | ||
|IRCOMM | |IRCOMM | ||
+ | | | ||
|IRCOMM Sendedioden | |IRCOMM Sendedioden | ||
|- | |- | ||
Zeile 592: | Zeile 625: | ||
Zeichen: | Zeichen: | ||
− | * | + | * Standard-Belegung! Über Jumper/Lötbrücke änderbar. |
− | ** Power On für Radencoder, IR-Empfänger, Stromsensoren | + | ** Power On für Radencoder, IR-Empfänger, Stromsensoren, PWRON-LED |
− | *** Zusätzlicher Anschluß von Bumpern oder Tastern möglich | + | *** Zusätzlicher Anschluß von Bumpern oder Tastern möglich! |
+ | ² I2C-Master: Out, Slave: In | ||
=====Timer-Nutzung===== | =====Timer-Nutzung===== |
Version vom 4. August 2011, 18:29 Uhr
Inhaltsverzeichnis
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
Der RP6Loader ist hier zu finden.
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
Die wesentlichen Hardware-Konfigurationen des RP6 sind in der "RP6Config.h" zu finden. Sie enthält Festlegungen zu:
- Encoder-Auflösung
- Rotations-Faktor
- Geschwindigkeits-Messintervall
- Power On Warnung
- ACS
Diese Header-Datei wird standardmäßig auch in die RP6RobotBase Library eingebunden.
Port-Verwendung
Die Verwendung der Ports des RP6 Microcontrollers wird festgelegt in der Header-Datei "RP6RobotBase.h". In dieser Datei wird auch noch Folgendes aufgeführt:
- Quarzfrequenz (F_CPU)
- True/false Definition
- Verschiedene Macros
- Baudrate der seriellen Schnittstelle
Hier eine Tabelle mit den Port-Definitionen für die RP6 Base:
Port | Name | In/Out | Pullup | Wert | Funktion | Bezeichnung | Stecker | Anmerkungen |
PA0 | ADC0 | In | 0 | ADC0 | VDD/GND/ADC0 | ADC_ADC0 (frei) | ||
PA1 | ADC1 | In | 0 | ADC1 | VDD/GND/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: 8 | 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 | ISP: 1 | Start/Stop-Taster | |
PB6 | MISO | Out | 0 | ISP | ACS_L | ISP: 9 | ACS Sendediode links | |
PB7 | SCK | Out | 0 | ISP | SL4 | ISP: 7 | Status LED 4 *** | |
PC0 | SCL | In/Out ² | 0 | I2C-Bus | SCL | XBUS: 10 | XBUS SCL | |
PC1 | SDA | In/Out | 0 | I2C-Bus | SDA | XBUS: 12 | 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 | PRG/U: 2 | Soll: Pullup ? | |
PD1 | TXD | Out | 0 | RS232 | TX | PRG/U: 3 | ||
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 |
Zeichen:
* Standard-Belegung! Über Jumper/Lötbrücke änderbar. ** Power On für Radencoder, IR-Empfänger, Stromsensoren, PWRON-LED *** Zusätzlicher Anschluß von Bumpern oder Tastern möglich! ² I2C-Master: Out, Slave: In
Timer-Nutzung
RP6Control Library
Konfiguration
Die wesentlichen Hardware-Konfigurationen des RP6 sind in der "RP6Config.h" zu finden. Sie enthält Festlegungen zu:
- Encoder-Auflösung
- Rotations-Faktor
- Geschwindigkeits-Messintervall
- Power On Warnung
- ACS
Diese Header-Datei wird standardmäßig auch in die RP6Control Library eingebunden.
Port-Verwendung
Die Verwendung der Ports des RP6 CONTROL M32 Microcontrollers wird festgelegt in der Header-Datei "RP6Control.h". In dieser Datei wird auch noch Folgendes aufgeführt:
- Quarzfrequenz (F_CPU)
- True/false Definition
- Baudrate der seriellen Schnittstelle
Hier eine Tabelle mit den Port-Definitionen der M32:
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 |
Zeichen:
* I2C-Master: Out, Slave: In ** Frei nutzbar. wenn kein 2. EEPROM (IC5) eingesetzt ist!
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 ! // ------------------------------------------------------ // Zwei Zeilen Text mit dem LCD anzeigen: showScreenLCD("RP6 CCPRO M128", "Hello World!"); // Zweimal piepsen: beep(200,300,100); // Format: beep (<tonhöhe>, <dauer>, <pause>) beep(100,100,100); // 2 Sekunden Pause: AbsDelay(2000); // 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
Hier das selbe Beispiel in BASIC:
' WICHTIG: Immer die RP6CCLib mit einbinden: #include "../../RP6CCLib/RP6CCLib.cbas" Sub main() Dim runLight, dir As Byte ' Variablen deklarieren ' WICHTIG! Immer als erstes aufrufen: RP6_CCPRO_Init() ' Auf Startsignal warten, LCD und andere Dinge initialisieren! ' ------------------------------------------------------ ' Zwei Zeilen Text mit dem LCD anzeigen: showScreenLCD("RP6 CCPRO M128", "Hello World!") ' Zweimal piepsen: beep(200,300,100) ' Format: beep (<tonhöhe>, <dauer>, <pause>) beep(100,100,100) ' 2 Sekunde Pause: AbsDelay(2000) ' Untere Zeile im LCD löschen: clearPosLCD(1,0,16) ' ------------------------------------------------------ ' Lauflicht: runLight = 1 ' Lauflicht Variable dir = 0 ' Laufrichtung des Lauflichtes Do While True setLEDs(runLight) ' LEDs setzen ' Laufrichtung wechseln wenn die äusseren LEDs erreicht wurden: If runLight >= 16 Then dir = 1 ' Laufrichtung im LCD anzeigen: setCursorPosLCD(1,4) printLCD("<<<<----") Else If runLight <= 1 Then dir = 0 ' Laufrichtung im LCD anzeigen: setCursorPosLCD(1,4) printLCD("---->>>>") End If End If ' LED Bit weiter "shiften" - nach links oder rechts, je nach Richtung: If dir = 0 Then runLight = runLight << 1 Else runLight = runLight >> 1 End If AbsDelay(150) ' 150ms Pause End While End Sub
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 (?) |
Konfiguration
Die wesentlichen Hardware-Konfigurationen der RP6 CCPRO finden sich am Anfang der M128 Library (RP6CClib). Dort stehen Festlegungen zu:
- Encoder Auflösung
Port-Verwendung
Die Festlegungen zur Verwendung der Ports des RP6 CCPRO M128 Microcontrollers finden sich am Ende der M128 Library (RP6CClib) in der Funktion RP6_CCPRO_Init(). Dort wird auch noch Folgendes gemacht:
- SPI Initialisierung
- Schieberegister zurücksetzen
- Serielle Schnittstelle initialisieren
- I2C Modul initialisieren
- LCD initialisieren
Hier eine Tabelle mit den Port-Definitionen der M128:
Port | Name | In/Out | Pullup | Wert | Port-Bit | Bezeichnung | Stecker | Anmerkungen |
PA0 | AD0 | 0 | AD0 | PORTA: 2 | IC2/3 AD0 | |||
PA1 | AD1 | 1 | AD1 | PORTA: 1 | IC2/3 AD1 | |||
PA2 | AD2 | 2 | AD2 | PORTA: 3 | IC2/3 AD2 | |||
PA3 | AD3 | 3 | AD3 | PORTA: 4 | IC2/3 AD3 | |||
PA4 | AD4 | 4 | AD4 | PORTA: 5 | IC2/3 AD4 | |||
PA5 | AD5 | 5 | AD5 | PORTA: 7 | IC2/3 AD5 | |||
PA6 | AD6 | 6 | AD6 | PORTA: 6 | IC2/3 AD6 | |||
PA7 | AD7 | 7 | AD7 | PORTA: 8 | IC2/3 AD7 | |||
PB0 | SS | In | **** | 8 | PORT_SS | SPI_I/O: 5 | frei | |
PB1 | SCK | Out | 1 | 9 | PORT_SCK | SPI_I/O: 6 | IC4 CLK | |
PB2 | MOSI | Out | 1 | 10 | PORT_MOSI | SPI_I/O: 3 | IC4 D | |
PB3 | MISO | In | 11 | PORT_MISO | SPI_I/O: 4 | frei | ||
PB4 | OC0 | 12 | PB4 | SPI_I/O: 2 | frei | |||
PB5 | OC1A | 13 | PB5 | I/O: 1 | SERVO: 1, frei | |||
PB6 | OC1B | 14 | PB6 | I/O: 3 | SERVO: 2, frei | |||
PB7 | OC2/OC1C | 15 | PB7 | SPI_I/O: 1 | SERVO: 3, frei | |||
PC0 | A8 | 16 | A8 * | PORTC: 1 | IC3 A8 | |||
PC1 | A9 | 17 | A9 * | PORTC: 2 | IC3 A9 | |||
PC2 | A10 | 18 | A10 * | PORTC: 3 | IC3 A10 | |||
PC3 | A11 | 19 | A11 * | PORTC: 4 | IC3 A11 | |||
PC4 | A12 | 20 | A12 * | PORTC: 5 | IC3 A12 | |||
PC5 | A13 | 21 | A13 * | PORTC: 6 | IC3 A13 | |||
PC6 | A14 | 22 | A14 * | PORTC: 7 | IC3 A14 | |||
PC7 | A15 | 23 | A15 * | PORTC: 8 | IC3 A15 | |||
PD0 | SCL/INT0 | In | 24 | PORT_SCL | XBUS: 10 | XBUS SCL | ||
PD1 | SDA/INT1 | In | 0 | 25 | PORT_SDA | XBUS: 12 | XBUS SDA | |
PD2 | RXD1/INT2 | 26 | PORT_RXD1 | I/O: 8 | RX 1, frei | |||
PD3 | TXD1/INT3 | 27 | PORT_TXD1 | I/O: 7 | TX 1, frei | |||
PD4 | ICP1 | 28 | PD4 (A16) * | I/O: 6 | frei (IC3 A16) | |||
PD5 | XCK1 | Out | 0 | 29 | PORT_LCD_EN | LCD: 6 | LCD EN | |
PD6 | T1 | 30 | PD6 | I/O: 4 | frei | |||
PD7 | T2 | 31 | PD7 | I/O: 2 | frei | |||
PE0 | RXD0/PDI | 32 | PORT_RXD0 | PRG/U: 2 | RX 0 | |||
PE1 | TXD0/PDO | 33 | PORT_TXD0 | PRG/U: 3 | TX 0 | |||
PE2 | XCK0/AIN0 | Out | 0 | 34 | PORT_STR | IC4 STR | ||
PE3 | OC3A/AIN1 | Out | 0 | 35 | PORT_SND * | I/O: 5 | Beeper | |
PE4 | OC3B/INT4 | In | **** | 36 | PORT_START | PRG/U: 4 ² | START_BOOT Taster | |
PE5 | OC3C/INT5 | In | 37 | PORT_PE5_INT * | SPI_I/O: 7 | XBUS: 8, INT1 ** | ||
PE6 | T3/INT6 | In | 38 | PORT_PE6_INT * | XBUS: 9, INT3 *** | |||
PE7 | ICP3/INT7 | 39 | PE7 (EXT-DATA) | SPI_I/O: 8 | frei | |||
PF0 | ADC0 | 40 | ADC0 | ADC: 4 | frei | |||
PF1 | ADC1 | 41 | ADC1 | ADC: 1 | frei | |||
PF2 | ADC2 | 42 | ADC2 | ADC: 6 | frei | |||
PF3 | ADC3 | 43 | ADC3 | ADC: 3 | frei | |||
PF4 | ADC4/TCK | 44 | ADC4 | ADC: 8 | YADC4, frei | |||
PF5 | ADC5/TMS | 45 | ADC5 | ADC: 5 | frei | |||
PF6 | ADC6/TDO | 46 | ADC6 | ADC: 7 | YADC6, frei | |||
PF7 | ADC7/TDI | 47 | ADC7 | ADC: 2 | frei | |||
PG0 | WR | 48 | WE | IC3 WE/ | ||||
PG1 | RD | 49 | OE | IC3 OE/ | ||||
PG2 | ALE | 50 | ALE | IC2 C | ||||
PG3 | TOSC2 | Out | 0 | 51 | PORT_LED1 * | JP: YL1 | Status LED1 | |
PG4 | TOSC1 | Out | 0 | 52 | PORT_LED2 * | JP: YL3 | Status LED2 |
Zeichen:
* Standard-Belegung! Über Jumper/Lötbrücke änderbar ** XBUS INT1 Base: PA4, Control M32: PD2 *** XBUS INT3 Base: n.c., Control M32: PB2 **** Pullup-Widerstand 100 kOhm! ² Über Serienwiderstand 470 Ohm
Timer-Nutzung
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, 03. August 2011 (CET)