Dirk (Diskussion | Beiträge) K (→RP6 Base) |
Dirk (Diskussion | Beiträge) K (→Autoren) |
||
(499 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | [[Bild:Overview de.gif|Der RP6]] | + | [[Bild:Overview de.gif|Der RP6|right|500px]] |
− | + | ||
==Allgemein== | ==Allgemein== | ||
− | In diesem Artikel geht es um die Programmierung des RP6 und | + | In diesem Artikel geht es um die Programmierung des RP6, des RP6v2 und ihrer Erweiterungsplatinen RP6 CONTROL M32 und RP6 CCPRO M128. |
+ | |||
+ | Zu den Grundlagen des [[RP6]] und des [[RP6v2]] gibt es jeweils eigene Seiten. | ||
==RP6Loader== | ==RP6Loader== | ||
− | Der RP6Loader | + | Der RP6Loader und der USB Interface Treiber sind [http://www.arexx.com/rp6/html/de/software.htm hier] zu finden. Der RP6Loader ist ein JAVA-Programm, das den RP6 oder die M32 über deren serielle Schnittstelle mit einem PC verbindet. |
+ | |||
+ | Das Programm verfügt über folgende Funktionen: | ||
+ | * Statusfenster mit RP6-Akku Spannungsanzeige | ||
+ | * Flash Loader (Programme hochladen und starten, Programmspeicher löschen) | ||
+ | * HexViewer (Inhalt der HEX-Datei ansehen) | ||
+ | * Terminal (Zeichen über die serielle Schnittstelle senden/empfangen) | ||
+ | * Displays (Grafische Hilfen zur Encoder-Einstellung) | ||
+ | * Log (Protokoll-Datei zur Fehlereingrenzung) | ||
+ | Der RP6Loader kann alle seine Funktionen nur mit dem Bootloader-Programm in der RP6 Base und M32 ausspielen. Entscheidet man sich für die ISP-Programmierung mit Löschen des Bootloaders, bleibt vom Funktionsumfang eigentlich nur das Terminal übrig. | ||
===Loader Versionen=== | ===Loader Versionen=== | ||
Zeile 19: | Zeile 29: | ||
|1.1c | |1.1c | ||
|ab Win2k SP4 (XP, VISTA, W7) | |ab Win2k SP4 (XP, VISTA, W7) | ||
− | | | + | |ab 07.06.2007 |
|- | |- | ||
|05.09.2007 | |05.09.2007 | ||
− | |1.1e - JRE1.5 | + | |[http://www.arexx.com/rp6/downloads/RP6Loader_JRE5.zip 1.1e - JRE1.5] |
|JRE5, Version für Win98SE/ME | |JRE5, Version für Win98SE/ME | ||
| | | | ||
|- | |- | ||
|07.09.2007 | |07.09.2007 | ||
− | |1.1c | + | |[http://www.arexx.com/rp6/downloads/RP6Loader_20070907.zip 1.1c] |
|wie 03.08.2007 (?) | |wie 03.08.2007 (?) | ||
| | | | ||
Zeile 37: | Zeile 47: | ||
|- | |- | ||
|30.09.2007 | |30.09.2007 | ||
− | |1.2 | + | |[http://www.arexx.com/rp6/downloads/RP6Loader_20070930.zip 1.2] |
|wie 28.09.2007 (?) | |wie 28.09.2007 (?) | ||
| | | | ||
Zeile 44: | Zeile 54: | ||
|1.4 - BETA | |1.4 - BETA | ||
|ab 1.4: neuer Encodertest | |ab 1.4: neuer Encodertest | ||
− | |neuer Selftest! | + | |[http://www.arexx.com/rp6/downloads/RP6Base_NEW_SELFTEST.zip neuer Selftest!] |
|- | |- | ||
|23.12.2007 | |23.12.2007 | ||
Zeile 52: | Zeile 62: | ||
|- | |- | ||
|28.03.2008 | |28.03.2008 | ||
− | |1.4c | + | |[http://www.arexx.com/rp6/downloads/RP6Loader_20080328.zip 1.4c] |
− | |diese Version gibt's auch für Linux 64bit | + | |diese [http://www.arexx.com/rp6/downloads/RP6Loader_20080328_linux_x64.zip Version] gibt's auch für Linux 64bit |
| | | | ||
|- | |- | ||
+ | |12.07.2010 | ||
+ | |[http://www.arexx.com/rp6/downloads/RobotLoader_20100712.zip 1.5h] | ||
+ | |"RobotLoader", auch für Roboterarme und Caterpillar | ||
+ | | | ||
|} | |} | ||
+ | '''Hinweis:''' Neuere Versionen des RobotLoaders ab Version 2.0 findet ihr [[RP6v2#RobotLoader|hier]]. | ||
+ | |||
+ | ===Geeignete Terminals=== | ||
+ | Der RP6Loader enthält u.a. eine Terminal-Funktion. Stattdessen kann man auch andere Terminals mit besserem Funktionsumfang einsetzen. | ||
+ | |||
+ | ====HTerm==== | ||
+ | Dieses Terminal-Programm [http://www.der-hammer.info/terminal/ HTerm] wurde von [http://www.roboternetz.de/community/members/120-SlyD SlyD] empfohlen. Die Konfiguration zeigt dieses [http://www.arexx.com/rp6/downloads/HTerm_RP6.gif Bild]. | ||
+ | |||
+ | ====ZOC==== | ||
+ | [http://www.roboternetz.de/community/members/25333-radbruch radbruch] hat [http://www.roboternetz.de/community/showthread.php?48073-VT100-Ansi-Terminal-für-den-RP6 hier] darauf hingewiesen, dass es ein schönes, sogar farbiges Terminal-Programm [http://www.emtec.com/download.htm ZOC] gibt, das man gut anstelle des Terminals im RP6Loader einsetzen kann. | ||
===Projekte=== | ===Projekte=== | ||
+ | * Protokoll der Datenübertragung zwischen RP6 und Computer: | ||
+ | ** [http://www.roboternetz.de/community/threads/48534-C-Kommunikation-zwischen-RP6-und-Computer C# Kommunikation zwischen RP6 und Computer] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?43909-RP6Loader-für-.Net-oder-CLR-Schreiben RP6Loader für .Net oder CLR Schreiben] | ||
+ | * [http://www.roboternetz.de/community/showthread.php?51352-RP6FlashWriter-Der-Opensource-RP6-Loader RP6FlashWriter: Der Opensource RP6 Loader] | ||
+ | * [http://www.roboternetz.de/community/showthread.php?53832-rpyutils-0.1-Loader-amp-Term-in-python-für-linux rpyutils 0.1 Loader und Term in Python für Linux] | ||
+ | * EEPROM-Daten per Compiler-Option flashen: | ||
+ | ** [http://www.roboternetz.de/community/threads/64915-1KB-EEPROM-im-Prozessor 1KB EEPROM im Prozessor] | ||
+ | * ... | ||
+ | <br/> | ||
==RP6 Base und CONTROL M32== | ==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 ([http://www.arexx.com/rp6/html/de/ | + | Der RP6 ([http://www.conrad.de/ce/de/product/191524/C-Control-Robot-System-RP6-Robotersystem 191524]), sein Nachfolger RP6v2 ([http://www.conrad.de/ce/de/product/191584/Arexx-RP6-V2-Robotersystem 191584]) und die RP6 CONTROL M32 Erweiterungsplatine ([http://www.conrad.de/ce/de/product/191550/Arexx-RP6-ATMEGA32-Erweiterungssatz 191550]) 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 (WinAVR), ist ausschließlich Freeware und kann entweder der CD entnommen oder aus dem Internet heruntergeladen werden. |
+ | |||
+ | ===Dokumentation=== | ||
+ | Die Dokumentation (Anleitungen, avr-libc Reference Manual, Schaltpläne und Datenblätter) befindet sich [http://www.arexx.com/rp6/html/de/docs.htm hier]. | ||
+ | |||
+ | ====Manuals==== | ||
+ | ====Schematics==== | ||
+ | ====Datasheets==== | ||
+ | |||
===Demo-Programme=== | ===Demo-Programme=== | ||
Die RP6 Base und M32 Demo Programme sind [http://www.arexx.com/rp6/html/de/software.htm hier] zu finden. | Die RP6 Base und M32 Demo Programme sind [http://www.arexx.com/rp6/html/de/software.htm hier] zu finden. | ||
Zeile 71: | Zeile 112: | ||
<pre> | <pre> | ||
− | #include "RP6RobotBaseLib.h" | + | #include "RP6RobotBaseLib.h" |
int main(void) | int main(void) | ||
{ | { | ||
− | initRobotBase(); // | + | initRobotBase(); // Mikrocontroller initialisieren |
+ | |||
+ | powerON(); // Encoder und Motorstromsensoren anschalten (WICHTIG!!!) | ||
setLEDs(0b111111); // Alle LEDs anschalten | setLEDs(0b111111); // Alle LEDs anschalten | ||
+ | |||
moveAtSpeed(100,100); // Beide Motoren fahren mit Geschwindigkeit 100 | moveAtSpeed(100,100); // Beide Motoren fahren mit Geschwindigkeit 100 | ||
− | |||
− | |||
while(true) | while(true) | ||
{ | { | ||
− | + | task_motionControl(); // Geschwindigkeit einstellen | |
+ | task_ADC(); // Wird wegen der Motorstromsensoren aufgerufen | ||
} | } | ||
return 0; | return 0; | ||
} | } | ||
+ | |||
</pre> | </pre> | ||
− | In dem Programm würde der RP6 als erstes alle LEDs anschalten und | + | In dem Programm würde der RP6 als erstes alle LEDs anschalten und dann endlos mit Geschwindigkeit 100 geradeaus fahren, ohne Hindernisse zu berücksichtigen. |
====CONTROL M32==== | ====CONTROL M32==== | ||
Zeile 128: | Zeile 172: | ||
</pre> | </pre> | ||
− | |||
===Library=== | ===Library=== | ||
+ | Die Library für die RP6 Base und CONTROL M32 besteht aus folgenden 13 Dateien: | ||
+ | {| {{Blauetabelle}} | ||
+ | |Library | ||
+ | |Datei | ||
+ | |Funktion | ||
+ | |- | ||
+ | |RP6 | ||
+ | |RP6Config.h | ||
+ | |RP6 Hardware-Konfiguration | ||
+ | |- | ||
+ | |RP6Base | ||
+ | |RP6RobotBase.h | ||
+ | |RP6Base Definitionen | ||
+ | |- | ||
+ | |RP6Base | ||
+ | |RP6RobotBaseLib.h | ||
+ | |RP6Base Library Header | ||
+ | |- | ||
+ | |RP6Base | ||
+ | |RP6RobotBaseLib.c | ||
+ | |RP6Base Library | ||
+ | |- | ||
+ | |CONTROL M32 | ||
+ | |RP6Control.h | ||
+ | |CONTROL M32 Definitionen | ||
+ | |- | ||
+ | |CONTROL M32 | ||
+ | |RP6ControlLib.h | ||
+ | |CONTROL M32 Library Header | ||
+ | |- | ||
+ | |CONTROL M32 | ||
+ | |RP6ControlLib.c | ||
+ | |CONTROL M32 Library | ||
+ | |- | ||
+ | |RP6uart | ||
+ | |RP6uart.h | ||
+ | |RS232 Funktionen Header | ||
+ | |- | ||
+ | |RP6uart | ||
+ | |RP6uart.c | ||
+ | |RS232 Funktionen | ||
+ | |- | ||
+ | |RP6I2CmasterTWI | ||
+ | |RP6I2CmasterTWI.h | ||
+ | |I2C Master Funktionen Header | ||
+ | |- | ||
+ | |RP6I2CmasterTWI | ||
+ | |RP6I2CmasterTWI.c | ||
+ | |I2C Master Funktionen | ||
+ | |- | ||
+ | |RP6I2CslaveTWI | ||
+ | |RP6I2CslaveTWI.h | ||
+ | |I2C Slave Funktionen Header | ||
+ | |- | ||
+ | |RP6I2CslaveTWI | ||
+ | |RP6I2CslaveTWI.c | ||
+ | |I2C Slave Funktionen | ||
+ | |- | ||
+ | |} | ||
+ | |||
====Versionen==== | ====Versionen==== | ||
Hier eine Tabelle der (mir) bekannten Library Versionen der RP6 Base und M32: | Hier eine Tabelle der (mir) bekannten Library Versionen der RP6 Base und M32: | ||
Zeile 195: | Zeile 298: | ||
|- | |- | ||
|11.08.2007 | |11.08.2007 | ||
− | |1.2 | + | |[http://www.arexx.com/rp6/downloads/RP6Examples_20070811.zip 1.2] |
|1.2_07.08.07 | |1.2_07.08.07 | ||
|1.0 | |1.0 | ||
Zeile 207: | Zeile 310: | ||
|- | |- | ||
|28.09.2007 | |28.09.2007 | ||
− | |1.3 | + | |[http://www.arexx.com/rp6/downloads/RP6Examples_20070928.zip 1.3] |
|1.3_25.09.07 | |1.3_25.09.07 | ||
|1.1 | |1.1 | ||
Zeile 219: | Zeile 322: | ||
|- | |- | ||
|16.10.2007 | |16.10.2007 | ||
− | |1.3 | + | |[http://www.arexx.com/rp6/downloads/RP6Examples_20071016.zip 1.3] |
|1.3_25.09.07 | |1.3_25.09.07 | ||
|1.1 | |1.1 | ||
Zeile 231: | Zeile 334: | ||
|- | |- | ||
|10.05.2008 | |10.05.2008 | ||
− | |1.4 | + | |[http://www.arexx.com/rp6/downloads/RP6Examples_20080510.zip 1.4] |
|1.4_29.04.08 | |1.4_29.04.08 | ||
|1.1 | |1.1 | ||
Zeile 243: | Zeile 346: | ||
|- | |- | ||
|15.09.2008 | |15.09.2008 | ||
− | |1.5 | + | |[http://www.arexx.com/rp6/downloads/RP6Examples_20080915.zip 1.5] |
|1.5_12.09.08 | |1.5_12.09.08 | ||
|1.2 | |1.2 | ||
Zeile 264: | Zeile 367: | ||
| | | | ||
| | | | ||
+ | | | ||
+ | |- | ||
+ | |03.02.2012 | ||
+ | |1.5 | ||
+ | |1.5_12.09.08 | ||
+ | |1.31beta | ||
+ | |15 | ||
+ | | | ||
+ | | | ||
+ | |1.31beta | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | |16.07.2012 | ||
+ | |[http://www.arexx.com/rp6/downloads/RP6Examples_20120716.zip 1.7] * | ||
+ | |1.6_16.07.12 | ||
+ | |1.3_24.02.12 | ||
+ | |16 | ||
+ | |1.2_07.08.07 | ||
+ | |1.6_2012 (im Kopf: 1.5) | ||
+ | |1.3_2012 | ||
+ | |1.2_16.07.12 | ||
+ | |1.0_16.05.07 | ||
+ | |1.0_16.05.07 | ||
+ | |- | ||
+ | |19.07.2012 | ||
+ | |1.7 | ||
+ | |1.6_16.07.12 | ||
+ | |[http://www.roboternetz.de/community/attachment.php?attachmentid=22864&d=1342812201 1.32beta] | ||
+ | |16 | ||
+ | | | ||
+ | | | ||
+ | |1.32beta | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | |25.07.2012 | ||
+ | |[http://www.arexx.com/rp6/downloads/RP6Examples_20120725.zip 1.8] | ||
+ | |1.6_16.07.12 | ||
+ | |1.3_24.02.12 | ||
+ | |Base 18, Control 16 | ||
+ | |1.2_07.08.07 | ||
+ | |1.8_2012 | ||
+ | |1.3_2012 | ||
+ | |1.2_16.07.12 | ||
+ | |1.0_16.05.07 | ||
+ | |1.0_16.05.07 | ||
+ | |- | ||
+ | |25.07.2012 ² | ||
+ | |[http://www.arexx.com/rp6/downloads/RP6Examples_20120725f.zip 1.8] | ||
+ | |1.6_16.07.12 | ||
+ | |1.3_24.02.12 | ||
+ | |Base 18, Control 16 | ||
+ | |1.2_07.08.07 | ||
+ | |1.8_2012 | ||
+ | |1.3_2012 | ||
+ | |1.2_16.07.12 | ||
+ | |1.0_16.05.07 | ||
+ | |1.0_16.05.07 | ||
+ | |- | ||
+ | |04.09.2012 | ||
+ | |1.8 | ||
+ | |1.6_16.07.12 | ||
+ | |1.3_24.02.12 | ||
+ | |Base 18, Control 16 | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |1.1_04.09.12 ³ | ||
| | | | ||
|} | |} | ||
+ | '''Zu *:''' Ab der Version 1.7 sind auch die Libraries und Examples der RP6 M256 WiFi Platine enthalten! Siehe [[RP6v2#Versionen|hier]]! | ||
+ | |||
+ | '''Zu ²:''' Die Datei heißt RP6Examples_20120725'''f'''.zip. Mir ist nicht bekannt, ob ein Unterschied zur RP6Examples_20120725.zip besteht. | ||
+ | |||
+ | '''Zu ³:''' Von [http://www.jm3-engineering.com/ JM3 Engineering] modifizierte Version auf der ''"RP6 Robot System Xtra Modules CD-ROM"'' zum [[RP6_Sensor_Board_und_Xtra_Module#RP6_Sensor_Board_2|RP6 Sensor Board]] und zu den [[RP6_Sensor_Board_und_Xtra_Module#RP6_Xtra_Module_2|Xtra Modulen]]. Neue Funktion: I2CTWI_readWordRegisters(). | ||
+ | |||
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 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. | ||
Zeile 271: | Zeile 452: | ||
Die jeweils aktuelle Library ist in den Demo-Programmen auf der AREXX Homepage enthalten. Link siehe oben! | Die jeweils aktuelle Library ist in den Demo-Programmen auf der AREXX Homepage enthalten. Link siehe oben! | ||
− | Die RP6Control Library in der Version 1. | + | Die RP6Control Library in der Version 1.32beta vom 19.07.2012 könnt ihr |
[http://www.roboternetz.de/community/showthread.php?47198-RP6Control-M32-Neue-Library-Version-1.3beta hier] finden. | [http://www.roboternetz.de/community/showthread.php?47198-RP6Control-M32-Neue-Library-Version-1.3beta hier] finden. | ||
− | ====RP6RobotBase Library==== | + | ====RP6RobotBase==== |
+ | Die RP6 Base Library existiert inzwischen in der Version 1.8 von 2012. Gegenüber der Version 1.4 vom 29.04.2008 wurden diese Verbesserungen vorgenommen: | ||
+ | * Stopwatch Fehler (10% zu langsam) berichtigt | ||
+ | * Optionen CHANGE_DIRECTION_FAST, MEDIUM und SLOW eingeführt | ||
+ | |||
+ | Von Maximilian Voss wurde [http://maexchen.net/rp6/library.php hier] eine eigene Version der RP6 Base Library veröffentlicht mit folgenden Änderungen: | ||
+ | * Compiler Optionen (UART-, Antriebs-, Bumper- und LED-Funktionen können einzeln de-/aktiviert werden) | ||
+ | * Core Funktionen (Konfiguration, Timer) | ||
+ | Die Library ist unvollständig und scheint nicht weiter entwickelt zu werden. | ||
+ | |||
+ | Von [http://www.roboternetz.de/community/members/25333-radbruch radbruch] wurde [http://www.roboternetz.de/community/showthread.php?31931-Domino-Day-für-den-RP6&p=302166&viewfull=1#post302166 hier] eine ''minimale'' RP6 Base Library veröffentlicht mit folgenden Änderungen: | ||
+ | * Maximale Kürzung der Library | ||
+ | * Reduktion aller Funktionen auf ein Minimum | ||
+ | |||
+ | =====Bug-Report===== | ||
+ | |||
=====Konfiguration===== | =====Konfiguration===== | ||
Die wesentlichen Hardware-Konfigurationen des RP6 sind in der "RP6Config.h" zu finden. Sie enthält Festlegungen zu: | Die wesentlichen Hardware-Konfigurationen des RP6 sind in der "RP6Config.h" zu finden. Sie enthält Festlegungen zu: | ||
Zeile 291: | Zeile 487: | ||
* Baudrate der seriellen Schnittstelle | * Baudrate der seriellen Schnittstelle | ||
Hier eine Tabelle mit den Port-Definitionen für die RP6 Base: | Hier eine Tabelle mit den Port-Definitionen für die RP6 Base: | ||
+ | Erklärung der Spalten: | ||
+ | Port -> Atmel Portpin Bezeichnung | ||
+ | Name -> Atmel Funktionsbezeichnung | ||
+ | In/Out -> Eingang (In) oder Ausgang (Out) | ||
+ | Pullup -> Falls Eingang: Pullup ein- (1) oder ausgeschaltet (0) | ||
+ | Wert -> Falls Ausgang: Logikpegel high (1) oder low (0) | ||
+ | Funktion -> Schnittstellenfunktion | ||
+ | Bezeichnung -> Portpin Bezeichnung der Library | ||
+ | Stecker -> Portpin verfügbar an STECKER: Pin | ||
+ | Anmerkungen -> Kommentare (ADC_xxxxx: ADC-Kanal Bezeichnung) | ||
{| {{Blauetabelle}} | {| {{Blauetabelle}} | ||
|Port | |Port | ||
Zeile 309: | Zeile 515: | ||
| | | | ||
|ADC0 | |ADC0 | ||
− | | | + | |ADC0: 3 |
|ADC_ADC0 (frei) | |ADC_ADC0 (frei) | ||
|- | |- | ||
Zeile 319: | Zeile 525: | ||
| | | | ||
|ADC1 | |ADC1 | ||
− | | | + | |ADC1: 3 |
|ADC_ADC1 (frei) | |ADC_ADC1 (frei) | ||
|- | |- | ||
Zeile 623: | Zeile 829: | ||
|- | |- | ||
|} | |} | ||
− | + | Zeichen: | |
− | Zeichen: | + | |
* Standard-Belegung! Über Jumper/Lötbrücke änderbar. | * Standard-Belegung! Über Jumper/Lötbrücke änderbar. | ||
** Power On für Radencoder, IR-Empfänger *, Stromsensoren *, PWRON-LED * | ** Power On für Radencoder, IR-Empfänger *, Stromsensoren *, PWRON-LED * | ||
Zeile 631: | Zeile 836: | ||
=====Timer-Nutzung===== | =====Timer-Nutzung===== | ||
+ | Die Nutzung der Timer wird in der RP6Base Library in der Funktion initRobotBase() am Ende der Datei RP6RobotBaseLib.c festgelegt. | ||
+ | |||
+ | ======Timer 0====== | ||
+ | Timer 0 arbeitet in der RP6Base Library im CTC-Modus (Mode 2) mit einem Vorteiler von 8 und nutzt als TOP-Wert OCR0. Bei einem Wert von 99 für OCR0 errechnet sich ein Zyklus von 100 us bei einer Quarzfrequenz von 8 MHz. | ||
+ | |||
+ | Der Zyklus von 100 us wird genutzt für: | ||
+ | * Verzögerungen (sleep, mSleep) | ||
+ | * Stopwatches | ||
+ | * RC5 Empfang | ||
+ | * Timer Variable | ||
+ | * Geschwindigkeits-Messung | ||
+ | * Weiche PWM-Anpassung und automatische PWM-Abschaltung | ||
+ | * ACS Timing | ||
+ | * Blinken der Power On LED | ||
+ | * Überstrom Zeitmessung | ||
+ | * Bumper Check Intervall Zeitmessung | ||
+ | * Selbsttest: Duty cycle Messung | ||
+ | |||
+ | ======Timer 1====== | ||
+ | Timer 1 arbeitet im phasenrichtigen (phase correct) PWM-Modus (Mode 10) mit einem Vorteiler von 1 (kein Vorteiler!) und nutzt als TOP-Wert ICR1. Bei einem Maximalwert von 210 für ICR1 errechnet sich eine PWM-Frequenz von ca. 19048 Hz. | ||
+ | |||
+ | Die PWM wird genutzt für: | ||
+ | * Geschwindigkeitsregelung der Motoren | ||
+ | |||
+ | ======Timer 2====== | ||
+ | Der Timer 2 arbeitet im CTC-Modus (Mode 2) mit einem Vorteiler von 1 (kein Vorteiler!) und nutzt als TOP-Wert OCR2. Bei einem Wert von 110 (= 0x6E) für OCR2 errechnet sich eine Frequenz von ca. 72072 Hz. | ||
+ | |||
+ | Die 72 kHz Frequenz wird genutzt für: | ||
+ | * ACS | ||
+ | |||
+ | ====RP6Control==== | ||
+ | Die RP6Control Library gibt es inzwischen in der Version 1.3 vom 24.02.2012. Gegenüber der Version 1.1 (ab 2007) wurde diese Verbesserung vorgenommen: | ||
+ | * Stopwatch Fehler (10% zu langsam) berichtigt | ||
+ | |||
+ | Von [http://www.roboternetz.de/community/members/1972-Dirk Dirk] wurde [http://www.roboternetz.de/community/showthread.php?47198-RP6Control-M32-Neue-Library-Version-1.3beta hier] eine Version 1.3beta veröffentlicht mit folgenden Verbesserungen: | ||
+ | * Neue Task ADC | ||
+ | * Funktionen für die freien I/O-Portpins | ||
+ | * Tonfrequenz-Konstanten für den Beeper | ||
+ | Die neueste Version 1.32beta der RP6Control Library vom 19.07.2012 ist kompatibel zur offiziellen Version 1.3. | ||
+ | |||
+ | Von [http://www.roboternetz.de/community/members/48237-RolfD RolfD] wurde [http://www.roboternetz.de/community/threads/64730-Senden-und-empfangen-auf-dem-UART-mit-ISR-kompatibel-zur-bisherigen-RP6lib?p=599477&viewfull=1#post599477 hier] eine neue Version der RP6Control Library veröffentlicht mit folgenden Änderungen: | ||
+ | * Ursprüngliche Ein-/Ausgabefunktionen durch <stdio> Treiberfunktionen ersetzt | ||
+ | * "Mantelfunktionen" zur Sicherung der Abwärtskompatibilität | ||
+ | * ASCII- und Binär-Betriebsart | ||
+ | * Neue Funktion lcd_generatechar (eigene Zeichen für das LCD definieren) | ||
+ | * LCD-Ausgabefunktionen der RP6ControlLib_2 (writeLongLCD, writeLongLengthLCD, writeDoubleLCD, writeDoubleExpLCD) hinzugefügt | ||
+ | Die vorgeschlagenen Änderungen der RP6Control Library müssen noch in eine der beiden letzten Versionen der RP6ControlLib (1.32beta oder 1.3) eingefügt werden. Eine Anleitung dazu befindet sich in dem verlinkten Thread. | ||
+ | |||
+ | =====Bug-Report===== | ||
− | |||
=====Konfiguration===== | =====Konfiguration===== | ||
Die wesentlichen Hardware-Konfigurationen des RP6 sind in der "RP6Config.h" zu finden. Sie enthält Festlegungen zu: | Die wesentlichen Hardware-Konfigurationen des RP6 sind in der "RP6Config.h" zu finden. Sie enthält Festlegungen zu: | ||
Zeile 648: | Zeile 901: | ||
* Baudrate der seriellen Schnittstelle | * Baudrate der seriellen Schnittstelle | ||
Hier eine Tabelle mit den Port-Definitionen der M32: | Hier eine Tabelle mit den Port-Definitionen der M32: | ||
+ | Erklärung der Spalten: | ||
+ | Port -> Atmel Portpin Bezeichnung | ||
+ | Name -> Atmel Funktionsbezeichnung | ||
+ | In/Out -> Eingang (In) oder Ausgang (Out) | ||
+ | Pullup -> Falls Eingang: Pullup ein- (1) oder ausgeschaltet (0) | ||
+ | Wert -> Falls Ausgang: Logikpegel high (1) oder low (0) | ||
+ | Funktion -> Schnittstellenfunktion | ||
+ | Bezeichnung -> Portpin Bezeichnung der Library | ||
+ | Stecker -> Portpin verfügbar an STECKER: Pin | ||
+ | Anmerkungen -> Kommentare (ADC_xxxxx: ADC-Kanal Bezeichnung) | ||
{| {{Blauetabelle}} | {| {{Blauetabelle}} | ||
|Port | |Port | ||
Zeile 686: | Zeile 949: | ||
| | | | ||
|ADC2 | |ADC2 | ||
− | |ADC: 2 | + | |ADC: 2, ADC2: 3 |
|ADC_2 (frei) | |ADC_2 (frei) | ||
|- | |- | ||
Zeile 696: | Zeile 959: | ||
| | | | ||
|ADC3 | |ADC3 | ||
− | |ADC: 1 | + | |ADC: 1, ADC3: 3 |
|ADC_3 (frei) | |ADC_3 (frei) | ||
|- | |- | ||
Zeile 950: | Zeile 1.213: | ||
|- | |- | ||
|PD5 | |PD5 | ||
− | | | + | |OC1A |
|In/Out | |In/Out | ||
|1 | |1 | ||
Zeile 980: | Zeile 1.243: | ||
|- | |- | ||
|} | |} | ||
− | + | Zeichen: | |
− | Zeichen: | + | |
* Standard-Belegung! Über Jumper/Lötbrücke änderbar. | * Standard-Belegung! Über Jumper/Lötbrücke änderbar. | ||
** Frei nutzbar. wenn kein 2. EEPROM (IC5) eingesetzt ist! | ** Frei nutzbar. wenn kein 2. EEPROM (IC5) eingesetzt ist! | ||
Zeile 987: | Zeile 1.249: | ||
=====Timer-Nutzung===== | =====Timer-Nutzung===== | ||
+ | Die Nutzung der Timer wird in der CONTROL M32 Library in der Funktion initRP6Control() am Ende der Datei RP6ControlLib.c festgelegt. | ||
− | ==== | + | ======Timer 0====== |
+ | Timer 0 arbeitet in der M32 Library im CTC-Modus (Mode 2) mit einem Vorteiler von 8 und nutzt als TOP-Wert OCR0. Bei einem Wert von 199 für OCR0 errechnet sich ein Zyklus von 100 us bei einer Quarzfrequenz von 16 MHz. | ||
− | ====RP6I2Cmaster/slaveTWI Library==== | + | Der Zyklus von 100 us wird genutzt für: |
+ | * Verzögerungen (sleep, mSleep) | ||
+ | * Stopwatches | ||
+ | * Timer Variable | ||
+ | * Sound timing | ||
+ | |||
+ | ======Timer 1====== | ||
+ | Timer 1 ist in der M32 Library nicht genutzt und kann beliebig in eigenen Programmen eingesetzt werden. | ||
+ | |||
+ | ======Timer 2====== | ||
+ | Der Timer 2 arbeitet im Normal-Modus (Mode 0). Der Wert von OCR2 bestimmt die Frequenz. | ||
+ | |||
+ | Die von Timer 2 erzeugte Frequenz wird genutzt für: | ||
+ | * Beeper | ||
+ | |||
+ | ====RP6uart==== | ||
+ | Diese Library stellt Funktionen für die serielle Kommunikation zur Verfügung. Sie kann auf der RP6 Base und M32 eingesetzt werden. Die aktuelle Version ist seit dem 16.07.2012 die Version 1.2. Gegenüber der Version 1.1 vom 10.09.2007 gibt es folgende Verbesserung: | ||
+ | * Fehler in der Funktion readChars berichtigt | ||
+ | Die RP6uart Library ist standardmäßig in die RP6Base und CONTROL M32 Library eingebunden. | ||
+ | |||
+ | In diesem [http://www.roboternetz.de/community/threads/64730-Senden-und-empfangen-auf-dem-UART-mit-ISR-kompatibel-zur-bisherigen-RP6lib Thread] entwickelt [http://www.roboternetz.de/community/members/48237-RolfD RolfD] die RP6uart Library weiter: | ||
+ | * Nicht blockierende Sendefunktion mit eigenem Sendepuffer | ||
+ | * Zeichen 0x00 kann übertragen werden | ||
+ | * Neue Funktionen serial_sendc() und serial_getc() | ||
+ | * <stdio> Treiberfunktionen | ||
+ | * "Mantelfunktionen" zur Sicherung der Abwärtskompatibilität | ||
+ | * ASCII- und Binär-Betriebsart | ||
+ | * ASCII Edit mode | ||
+ | * Xon/Xoff Modus | ||
+ | * ... | ||
+ | |||
+ | ====RP6I2Cmaster/slaveTWI==== | ||
+ | Diese Library (bestehend aus einer Master- und einer Slave-Library) stellt Funktionen für die I2C-Kommunikation zur Verfügung. Die Library, die es in der Version 1.0 unverändert bereits seit dem 16.05.2007 gibt, läßt sich sowohl auf der RP6Base, als auch auf der M32 nutzen. Beide Plattformen können I2C-Master oder -Slave sein. | ||
+ | |||
+ | Eine erweiterte Master-Library (Version 1.1) gibt es mit Datum vom 04.09.2012, veröffentlicht ab Februar 2014 von [http://www.jm3-engineering.com/ JM3 Engineering] für das [[RP6_Sensor_Board_und_Xtra_Module#RP6_Sensor_Board_2|RP6 Sensor Board]] und die [[RP6_Sensor_Board_und_Xtra_Module#RP6_Xtra_Module_2|Xtra Module]]. Sie ist abwärts-kompatibel zur Master-Library in der Version 1.0 vom 16.05.2007 und bietet lediglich folgende Erweiterung: | ||
+ | * Neue Funktion I2CTWI_readWordRegisters() zum Lesen von 16 Bit Registern | ||
+ | |||
+ | Eine neue Master-Library, die die TWI-Funktionen von Peter Fleury's I2C Master Library anstelle der Interrupt-basierten Funktionen der Original-Library von SlyD nutzt, wurde [http://www.roboternetz.de/community/threads/66003-Peter-Fleury-s-I2C-Master-Library-f%C3%BCr-RP6 hier] veröffentlicht. Sie basiert auf der o.g. erweiterten Master-Library (Version 1.1). | ||
+ | |||
+ | =====Bug-Report===== | ||
+ | Dieser interessante [http://www.roboternetz.de/community/showthread.php?51816-Dicker-Fehler-in-der-RP6I2CmasterTWI.h-der-RP6Lib-Bugfix Thread] von [http://www.roboternetz.de/community/members/48237-RolfD RolfD] dreht sich um eventuelle Fehler in dieser Lib und deren Fix. | ||
+ | |||
+ | =====Ergänzung===== | ||
+ | [http://www.roboternetz.de/community/threads/56861-Frage-zu-RP6-I2C-Library-Funktionen-der-Lib-von-Peter-Fleury?p=542255&viewfull=1#post542255 Hier] findet sich eine (evtl. noch nicht fehlerfreie) Veränderung der RP6I2Cmaster Library, um mit ihr den berührungslosen Temperatursensor MLX90614 anzusteuern. Die Änderungen ermöglichen einen Repeated Start zwischen dem Senden der I2C- und RAM-Adresse und dem Lesen der Sensor-Werte. Die Original-Library sendet an dieser Stelle ein Stop. | ||
+ | |||
+ | =====RP6 I2C-Adressen===== | ||
+ | '''Definierte I2C-Adressen des RP6-Systems:''' | ||
+ | {| {{Blauetabelle}} | ||
+ | |- | ||
+ | | '''Definition (RP6 Sensor Board: Demo-Software)''' || '''I2C-<br/>Adresse''' || '''Alternative I2C-Adressen''' || '''Verwendung''' | ||
+ | |- | ||
+ | | I2C_RP6_BASE_ADR || 10 || || [[RP6v2|RP6v2]] Base: I2C-Slave | ||
+ | |- | ||
+ | | I2C_RP6_M32_ADR || 12 * || || RP6 CONTROL M32: I2C-Slave | ||
+ | |- | ||
+ | | I2C_RP6_M128_ADR || 14 * || || RP6 CCPRO M128: I2C-Slave | ||
+ | |- | ||
+ | | I2C_RP6_M256_ADR || 16 * || || [[RP6v2#RP6v2_M256_WiFi_Platine|RP6 M256 WiFi]]: I2C-Slave | ||
+ | |- | ||
+ | | TCN75_ADR || 0x90 ² || 0x92, 0x98, 0x9a || M128: TCN75 Temperatursensor | ||
+ | |- | ||
+ | | 24LCXXX_ADR || 0xa0 || 0xa2, 0xa4, 0xa6 || M128: 24LCxxx EEPROM | ||
+ | |- | ||
+ | | PCF8574_8LEDS_ADR || 0x70 || || RP6Base_I2CMaster_01 Example: PCF8574 ** | ||
+ | |- | ||
+ | | PCF8591_4LDRS_ADR || 0x90 ² || || RP6Base_I2CMaster_02 Example: PCF8591 ** | ||
+ | |- | ||
+ | | SRF_ADR || 0xe6 || 0xe0 (Standard) || RP6Base_I2CMaster_03 Example: SRF08/SRF10 ** | ||
+ | |- | ||
+ | | SRF_LEFT_ADR || 0xe6 || || RP6Base_I2CMaster_04 Example: SRF08/SRF10 ** | ||
+ | |- | ||
+ | | SRF_RIGHT_ADR || 0xe8|| || RP6Base_I2CMaster_04 Example: SRF08/SRF10 ** | ||
+ | |- | ||
+ | | I2C_SENSOR_LSM303DLHC_A_ADR (ACCELEROMETER) || 0x32 ² || || [[RP6_Sensor_Board_und_Xtra_Module#RP6_Sensor_Board_2|RP6 Sensor Board]]: LSM303DLHC Accelerometer | ||
+ | |- | ||
+ | | I2C_SENSOR_LSM303DLHC_M_ADR (MAGNETOMETER) || 0x3c || || RP6 Sensor Board: LSM303DLHC Magnetometer | ||
+ | |- | ||
+ | | I2C_SENSOR_PORTEXP_ADR (IOEXP1) || 0x40 || || RP6 Sensor Board: MAX7311 I/O Port Expander | ||
+ | |- | ||
+ | | I2C_SENSOR_SERVO_ADR (PWMDRIVER) || 0x88 || || RP6 Sensor Board: PCA9685 Servo Controller | ||
+ | |- | ||
+ | | I2C_SENSOR_LEDDRIVER_ADR (LEDDRIVER) || 0x8a || || RP6 Sensor Board: TCA6507 LED Controller | ||
+ | |- | ||
+ | | I2C_SENSOR_TEMP_ADR (TEMPSENSOR) || 0x90 ² || || RP6 Sensor Board: LM75B Temperatursensor | ||
+ | |- | ||
+ | | I2C_SENSOR_RTC_ADR (RTCLOCK) || 0xd0 ² || || RP6 Sensor Board: DS1339 RTC | ||
+ | |- | ||
+ | | I2C_GPS_RECEIVER_ADR (GPS) || 0xc8 || 0xca, 0xcc, 0xce, 0xd0 ², 0xd2,<br/>0xd4, 0xd6, 0xd8, 0xda, 0xdc,<br/>0xde || [[RP6_Sensor_Board_und_Xtra_Module#I2C_GPS_Empf.C3.A4nger_JM3-GPS|RP6 I2C GPS Receiver]] | ||
+ | |- | ||
+ | | I2C_ACCSENS_ADR (ADR_ACC_MODULE) || 0x30 || 0x32 ² || [[RP6_Sensor_Board_und_Xtra_Module#3D_Accelerometer_Modul_JM3-3DA|RP6 3D Accelerometer Modul]] | ||
+ | |- | ||
+ | | I2C_BHT_B_ADR (BAROMETER) || 0xee || || [[RP6_Sensor_Board_und_Xtra_Module#BHT_Modul_JM3-BHT31|RP6 BHT Modul]]: MS5607-02BA Pressure Sensor | ||
+ | |- | ||
+ | | I2C_BHT_HT_ADR (HYGROMETER) || 0x80 || || RP6 BHT Modul: HTU21D Humidity Sensor | ||
+ | |} | ||
+ | '''Zu *)''' Adresse nicht festgelegt. Empfehlung! | ||
+ | |||
+ | '''Zu **)''' Hardware nicht im RP6-System vorhanden. | ||
+ | |||
+ | '''Zu ²)''' Adress-Konflikt möglich! | ||
===WinAVR=== | ===WinAVR=== | ||
+ | Die neueste Version von [[WinAVR]] kann man [http://sourceforge.net/projects/winavr/files/ hier] oder [http://www.arexx.com/rp6/html/de/software.htm hier] herunterladen. | ||
+ | WinAVR ist eine fertige Windows-Einrichtung eines Editors (Programmer's Notepad 2) und eines C-Compilers für Atmel AVR-Microcontroller (AVR-GCC). | ||
+ | |||
+ | Zu empfehlen ist ein Blick in folgende Anleitungen, die in der WinAVR-Installation enthalten sind: | ||
+ | * WinAVR-user-manual.html (Benutzer-Handbuch im Stammverzeichnis) | ||
+ | * pn2.chm (PN2 Hilfe-Datei im Unterverzeichnis \pn\help) | ||
+ | |||
====Programmer's Notepad 2==== | ====Programmer's Notepad 2==== | ||
+ | Programmer's Notepad 2 (PN2) ist der Editor von WinAVR, mit dem man Programme schreibt. | ||
+ | |||
====GCC==== | ====GCC==== | ||
+ | [http://gcc.gnu.org/ GCC] ist eine Sammlung von Compilern, die auch eine C-Variante enthält (AVR-GCC), die für die Programmierung von AVR-Microcontrollern eingesetzt wird. In AVR-GCC wird auch der RP6 programmiert. In seiner Anleitung gibt es einen "C - Crashkurs" (Kapitel 4.4.). | ||
+ | |||
+ | Zusätzlich ist u.a. in der WinAVR-Installation folgende Referenz zu allen Definitionen und Funktionen der AVR-GCC-Libraries enthalten: | ||
+ | * avr-libc-user-manual.pdf (Handbuch im Unterverzeichnis \doc\avr-libc) | ||
+ | |||
+ | Es gibt gute Tutorials, um die Sprache zu lernen: | ||
+ | * [[Avr-gcc]] | ||
+ | * [[C-Tutorial]] | ||
+ | * [http://www.c-howto.de/tutorial.html Das C Tutorial (deutsch)] | ||
+ | * [http://c.baeumle-courth.eu/ Einiges zu ANSI-C] | ||
+ | Darüber hinaus gibt es natürlich auch Bücher: | ||
+ | * [http://www.roboternetz.de/community/showthread.php?47538-Suche-C-Buch-für-Einstieg Suche C-Buch für Einstieg] | ||
===Projekte=== | ===Projekte=== | ||
+ | Ohne Anspruch auf Vollständigkeit habe ich hier Links zu wichtigen Software-Projekten für die RP6Base und die M32 aufgelistet. Wichtig war mir dabei, dass es sich um direkt nutzbare und vollständige Programme oder Libraries handelt. | ||
+ | |||
+ | ... kann gern ergänzt werden ... | ||
+ | |||
====RP6 Base==== | ====RP6 Base==== | ||
+ | * Library: | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?31931-Domino-Day-für-den-RP6&p=302166&viewfull=1#post302166 Minimale Lib für den RP6] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php/47114-RP6Control-M32-Rechteck-Generator?p=453225&viewfull=1#post453225 RP6uart_2 Lib] | ||
+ | ** [http://www.roboternetz.de/community/threads/64730-Senden-und-empfangen-auf-dem-UART-mit-ISR-kompatibel-zur-bisherigen-RP6lib RP6uart Lib mit ISR] | ||
+ | ** [http://www.roboternetz.de/community/threads/66003-Peter-Fleury-s-I2C-Master-Library-f%C3%BCr-RP6 Peter Fleury's I2C Master Library für RP6] | ||
+ | ** [http://www.roboternetz.de/community/threads/66586-RP6v2-Base-CONTROL-M32-M256-WiFi-100%C2%B5s-Stopwatches-Library Library für acht 100µs Stopwatches] | ||
+ | * LCD Ansteuerung (Demo, Library): | ||
+ | ** [http://www.roboternetz.de/community/threads/37232-LCD-an-RP6-Base LCD an RP6 Base] | ||
+ | * Servoansteuerung (Grundlagen, Demos, Library): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?30877-RP6-Servo-Ansteuerung RP6 Servo Ansteuerung] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?31931-Domino-Day-für-den-RP6 Domino Day für den RP6] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?33909-Minimallösung-Servo-Sensor Minimallösung Servo-Sensor] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?41287-Libverträgliche-Servo-ISR Libverträgliche Servo-ISR] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?40052-RP6Base-Library-für-8-Servos RP6Base Library für 8 Servos] | ||
+ | * LEDs als Helligkeitssensor (Demo): | ||
+ | ** [http://www.roboternetz.de/community/threads/35322-LED-Sensor-am-RP6 LED-Sensor am RP6] | ||
+ | * Ansteuerung externer I2C-Hardware (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?30930-RP6-Beispiel-RTC-PCF8583 RP6 Beispiel RTC PCF8583] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?30830-RP6-Beispiel-Devantech-CMPS03 RP6 Beispiel Devantech CMPS03] | ||
+ | * Ansteuerung des RP6 durch Lego NXT über I2C (Demo): | ||
+ | ** [http://www.roboternetz.de/community/threads/63240-howto-RP6-und-Lego-NXT-koppeln howto: RP6 und Lego NXT koppeln] | ||
+ | * Kamera Minimallösung (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?29906-Minimallösung-Kamera-für-den-RP6 Minimallösung Kamera für den RP6] | ||
+ | * [http://www.rn-wissen.de/index.php/RP6_Kamera_-_Mitmach-Projekt Kamera-Projekt] (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?48057-RP6Base-Video-Grabber-1 RP6Base Video Grabber 1] | ||
+ | * Clock (Library): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?30257-RP6(Control)-Einfache-Clock-Library RP6 Einfache Clock Library] | ||
+ | * DCF77-Decoder/Clock (Library): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?30731-RP6(Control)-DCF77-Library RP6 DCF77 Library] | ||
+ | * Linienfolger (Demo): | ||
+ | ** [http://www.roboternetz.de/community/threads/34328-RP6-Linienfolger RP6 Linienfolger] | ||
+ | * PC-Verbindung über Bluetooth (Grundlagen): | ||
+ | ** [http://www.roboternetz.de/community/threads/52088-RP6-Uart-Adapter-für-btm222 RP6 Uart Adapter für BTM222] | ||
+ | * PC-Fernsteuerung (Demo): | ||
+ | ** [http://www.roboternetz.de/community/threads/49953-RP6-über-Joystick-steuern-(in-VB2008) RP6 über Joystick steuern (in VB2008)] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?53885-RP6-und-Funk RP6 und Funk] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?47704-RP6-Remotrol-1.3-Die-Opensource-RP6-Fernsteuerung RP6 Remotrol 1.3] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?54162-Gemeinschaftsprojekt-RP6-Remotrol-2.0 Gemeinschaftsprojekt RP6 Remotrol 2.0] | ||
+ | ** [http://www.roboternetz.de/community/threads/64684-RP6-mit-Raspberry-Pi-verbinden RP6 mit Raspberry Pi verbinden] | ||
+ | * RC-Fernsteuerung (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?32928-RP6-und-RC RP6 und RC] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?47147-Fernsteuerung-für-den-RP6 Fernsteuerung für den RP6] | ||
+ | * IR-Fernsteuerung (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?52370-RP6_TV_-Remote RP6_TV_ Remote] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?51851-Servos-mittels-TV-Remote-steuern Servos mittels TV-Remote steuern] | ||
+ | * IR-Kommunikation (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?29313-gelöst-Einfache-IR-Kommunikation-für-den-RP6 Einfache IR Kommunikation für den RP6] | ||
+ | * RP6 und BASCOM (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?30719-rp6-mit-bascom-(kleiner-anfang) RP6 mit BASCOM (kleiner Anfang)] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?30738-rp6-mit-bascom-und-fernbedienung-rc5 RP6 mit BASCOM und Fernbedienung RC5] | ||
+ | * RP6 und LabView (Demo): | ||
+ | ** [http://www.roboternetz.de/community/threads/54946-Der-Robby-und-LabView Der Robby und LabView] | ||
+ | * Morse-Code senden/empfangen (Demo, Library): | ||
+ | ** [http://www.rn-wissen.de/index.php/RP6_-_Morse-Code RP6 - Morse-Code] | ||
+ | * RP6 mit MetaController (C++ Projekt): | ||
+ | ** [http://www.roboternetz.de/community/threads/45940-RP6-mit-MetaController RP6 mit MetaController] | ||
+ | * FreeRTos auf RP6 (Projekt): | ||
+ | ** [http://www.roboternetz.de/community/threads/51774-FreeRTos-auf-RP6 FreeRTos auf RP6?] | ||
+ | ** [http://www.roboternetz.de/community/threads/58790-Projekt-FreeRTos-auf-RP6 Projekt: FreeRTos auf RP6] | ||
+ | * Verschiedenes: | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?40508-Maussensor-an-RP6 Maussensor an RP6] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?46581-Feuerwehrbot-Roboterwettbewerb-Der-Gewinner-ist... Feuerwehrbot Roboterwettbewerb] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?47843-Projekt-RP6-mit-Snake-Vision Projekt RP6 mit Snake Vision] | ||
+ | ** [http://www.roboternetz.de/community/threads/56098-First-release-of-rp6simul-a-simulator-for-the-RP6-and-m32 RP6 und M32 Simulator] | ||
+ | ** ... | ||
+ | |||
====CONTROL M32==== | ====CONTROL M32==== | ||
+ | * Library: | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?47198-RP6Control-M32-Neue-Library-Version-1.3beta RP6Control M32 Library Version 1.3beta] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php/47114-RP6Control-M32-Rechteck-Generator?p=453225&viewfull=1#post453225 RP6uart_2 Lib] | ||
+ | ** [http://www.roboternetz.de/community/threads/64730-Senden-und-empfangen-auf-dem-UART-mit-ISR-kompatibel-zur-bisherigen-RP6lib RP6uart Lib mit ISR] | ||
+ | ** [http://www.roboternetz.de/community/threads/64730-Senden-und-empfangen-auf-dem-UART-mit-ISR-kompatibel-zur-bisherigen-RP6lib?p=599477&viewfull=1#post599477 RP6Control M32 Library mit <stdio> Funktionen] | ||
+ | ** [http://www.roboternetz.de/community/threads/63388-4-zeilen-LCD-display-an-der-m32 4x20 LCD an der M32 (KS0066 Controller)] | ||
+ | ** [http://www.roboternetz.de/community/threads/66003-Peter-Fleury-s-I2C-Master-Library-f%C3%BCr-RP6 Peter Fleury's I2C Master Library für RP6] | ||
+ | ** [http://www.roboternetz.de/community/threads/66586-RP6v2-Base-CONTROL-M32-M256-WiFi-100%C2%B5s-Stopwatches-Library Library für acht 100µs Stopwatches] | ||
+ | * Servoansteuerung (Library): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?40090-RP6Control-M32-Library-für-8-Servos RP6Control M32 Library für 8 Servos] | ||
+ | * Ansteuerung des zweiten SPI-EEPROMs (Library): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?38922-RP6Control-Library-für-2.-SPI-EEPROM-(IC5) RP6Control Library für 2. SPI-EEPROM (IC5)] | ||
+ | * Messgeräte (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?47114-RP6Control-M32-Rechteck-Generator RP6Control M32 Rechteck Generator] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?47088-RP6Control-M32-Impulslängen-Messgerät RP6Control M32 Impulslängen Messgerät] | ||
+ | * [http://www.rn-wissen.de/index.php/RP6_Kamera_-_Mitmach-Projekt Kamera-Projekt] (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?48167-RP6Control-M32-Video-Zeilenzähler-1 RP6Control M32 Video Zeilenzähler 1] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?48032-RP6Control-M32-Video-Grabber-1 RP6Control M32 Video Grabber 1] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?48207-RP6Control-M32-Helligkeits-Sensor RP6Control M32 Helligkeits Sensor] | ||
+ | * TRX433 (CS-8 C, 190045, Library): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?30111-RP6Control-Lib-für-den-433-MHz-Transceiver-CS-8-C RP6Control Lib für den 433 MHz Transceiver CS-8 C] | ||
+ | * Clock (Library): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?30257-RP6(Control)-Einfache-Clock-Library RP6 Einfache Clock Library] | ||
+ | * DCF77-Decoder/Clock (Library): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?30731-RP6(Control)-DCF77-Library RP6 DCF77 Library] | ||
+ | * MultiIO Projekt (Demos, Library): | ||
+ | ** [http://rn-wissen.de/wiki/index.php/RP6_Multi_IO_Projekt_-_Software#RP6_CONTROL_M32 Multi IO Projekt - Software RP6 CONTROL M32] | ||
+ | * ArduIO Projekt (Demos, Library): | ||
+ | ** [http://rn-wissen.de/wiki/index.php/RP6_ArduIO_-_Software ArduIO Projekt - Software] | ||
+ | * Spiele (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?53345-RP6-Sammlung-von-Spielen-und-anderen-Mini-Programmen RP6 Sammlung von Spielen und anderen Mini-Programmen] | ||
+ | * PC-Fernsteuerung (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?47704-RP6-Remotrol-1.3-Die-Opensource-RP6-Fernsteuerung RP6 Remotrol 1.3] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?54162-Gemeinschaftsprojekt-RP6-Remotrol-2.0 Gemeinschaftsprojekt RP6 Remotrol 2.0] | ||
+ | * IR-Fernsteuerung (Demo): | ||
+ | ** [http://www.roboternetz.de/community/threads/40446-M32-Master-Problem-mit-RC5?p=587907&viewfull=1#post587907 IR-Fernsteuerung mit M32 als I2C-Master] | ||
+ | * Morse-Code senden/empfangen (Demo, Library): | ||
+ | ** [http://www.rn-wissen.de/index.php/RP6_-_Morse-Code RP6 - Morse-Code] | ||
+ | * I2C-Slave (Programm): | ||
+ | ** [http://www.rn-wissen.de/index.php/RP6Control_M32:_I2C-Slave#I2C-Slave RP6Control M32 I2C-Slave] | ||
+ | * NMEA Parser (Programm): | ||
+ | ** [http://www.roboternetz.de/community/threads/60893-RP6-im-Space?p=571655&viewfull=1#post571655 NMEA Parser mit GPS-Modul NL-552ETTL] | ||
+ | * Verschiedenes: | ||
+ | ** [http://www.roboternetz.de/community/threads/56098-First-release-of-rp6simul-a-simulator-for-the-RP6-and-m32 RP6 und M32 Simulator] | ||
+ | ** [[Induktive Ladestation für den RP6]] | ||
+ | ** [[IR-bake für den RP6]] | ||
+ | ** ... | ||
− | + | <br/><br/> | |
==RP6 CCPRO M128== | ==RP6 CCPRO M128== | ||
− | Die CCPRO M128 wird in | + | Die RP6 CCPRO M128 Erweiterungsplatine ([http://www.conrad.de/ce/de/product/191563/Arexx-RP6-CC-PRO-MEGA128-Erweiterungssatz 191563]) hat zunächst keinen Microcontroller an Bord. Man muß daher das C-Control PRO MEGA128 Modul ([http://www.conrad.de/ce/de/product/198219/C-Control-PRO-Unit-Mega-128-45-55-VDC-Eingaenge-Ausgaenge-8-Analogeingaenge-6-mit-je-8-Pins-1-mit-5-Pins-Digital 198219]) mit bestellen. Es gehört zum C-Control PRO System von CONRAD und enthält einen ATmega128 Microcontroller. Das CCPRO MEGA128 Modul wird in CompactC oder BASIC programmiert. Die Programme werden als Byte-Code von der IDE in das Modul geladen und dort von einem Byte-Code-Interpreter ausgeführt. |
+ | |||
+ | ===Dokumentation=== | ||
+ | Die Dokumentation (Anleitung, Schaltplan, Datenblätter) befindet sich [http://www.arexx.com/rp6/html/de/soft_doc_ccpro.htm hier]. | ||
+ | |||
+ | ====Manuals==== | ||
+ | ====Schematics==== | ||
+ | ====Datasheets==== | ||
===Demo-Programme=== | ===Demo-Programme=== | ||
Zeile 1.142: | Zeile 1.650: | ||
===Library=== | ===Library=== | ||
+ | Die RP6 CCPRO M128 Library besteht aus den beiden Dateien RP6CClib.cc (CompactC) und RP6CClib.cbas (BASIC). Ihr Inhalt ist identisch. | ||
+ | |||
====Versionen==== | ====Versionen==== | ||
Hier eine Tabelle der (mir) bekannten Library Versionen der CCPRO M128: | Hier eine Tabelle der (mir) bekannten Library Versionen der CCPRO M128: | ||
{| {{Blauetabelle}} | {| {{Blauetabelle}} | ||
|ZIP-Datum | |ZIP-Datum | ||
+ | |Version | ||
|Version CompactC | |Version CompactC | ||
|Version BASIC | |Version BASIC | ||
Zeile 1.151: | Zeile 1.662: | ||
|- | |- | ||
|22.10.2008 | |22.10.2008 | ||
+ | |1.0 | ||
|1.0_16.10.08 | |1.0_16.10.08 | ||
|1.0_07.10.08 | |1.0_07.10.08 | ||
Zeile 1.156: | Zeile 1.668: | ||
|- | |- | ||
|31.01.2009 | |31.01.2009 | ||
+ | |[http://www.arexx.com/rp6/downloads/RP6_CCPRO_EXAMPLES_DE_20090131.zip 1.0] | ||
|1.0_16.10.08 | |1.0_16.10.08 | ||
|1.0_07.10.08 | |1.0_07.10.08 | ||
Zeile 1.161: | Zeile 1.674: | ||
|- | |- | ||
|} | |} | ||
+ | |||
+ | ====Bug-Report==== | ||
+ | Die Funktion '''void RP6_readRegisters(byte adr, byte start_reg, byte readBuffer[], byte reg_count)''' der RP6CClib liest "reg_count" Register des Controllers auf dem RP6 Mainboard über den I2C-Bus. | ||
+ | |||
+ | In diesem Teil: | ||
+ | <pre> I2C_Start(); | ||
+ | I2C_Write(adr+1); | ||
+ | byte i; | ||
+ | for(i=0;i<reg_count;i++) | ||
+ | readBuffer[i] = (I2C_Read_ACK()); | ||
+ | readBuffer[i+1] = (I2C_Read_NACK()); | ||
+ | I2C_Stop(); | ||
+ | </pre> | ||
+ | ... werden die Register eingelesen. | ||
+ | |||
+ | Ist reg_count z.B. 10 (10 Register sollen gelesen werden), werden mit I2C_Read_ACK() die Register in readBuffer[0] bis readBuffer[9] abgelegt. Danach wird mit I2C_Read_NACK() noch das 11. Register in readBuffer[11] abgelegt. readBuffer[10] bleibt unberührt. | ||
+ | Damit funktioniert diese Funktion zwar (d.h. in readBuffer[0..9] sind die gewünschten 10 Register vorhanden), aber es findet ein unnötiger Lesezyklus zusätzlich statt. | ||
+ | |||
+ | Man kann die RP6CClib.cc so anpassen: | ||
+ | <pre> I2C_Start(); | ||
+ | I2C_Write(adr+1); | ||
+ | byte i; | ||
+ | for(i=0;i<(reg_count-1);i++) | ||
+ | readBuffer[i] = (I2C_Read_ACK()); | ||
+ | readBuffer[i] = (I2C_Read_NACK()); | ||
+ | I2C_Stop(); | ||
+ | </pre> | ||
+ | In der RP6CClib.cbas sieht das so aus: | ||
+ | <pre> I2C_Start() | ||
+ | I2C_Write(adr+1) | ||
+ | For i=0 To reg_count-2 | ||
+ | readBuffer(i) = I2C_Read_ACK() | ||
+ | Next | ||
+ | readBuffer(i) = I2C_Read_NACK() | ||
+ | I2C_Stop() | ||
+ | </pre> | ||
====Konfiguration==== | ====Konfiguration==== | ||
− | Die wesentlichen Hardware-Konfigurationen des RP6 finden sich am Anfang der M128 Library (RP6CClib). Dort | + | Die wesentlichen Hardware-Konfigurationen des RP6 finden sich am Anfang der M128 Library (RP6CClib). Dort steht eine Festlegung zur: |
* Encoder-Auflösung | * Encoder-Auflösung | ||
====Port-Verwendung==== | ====Port-Verwendung==== | ||
− | Am Anfang der M128 Library (RP6CClib) werden Bezeichnungen für einige Portpins der RP6 CCPRO M128 definiert, siehe Abschnitt "C-Control Standard Port Konfiguration auf dem RP6 CCPRO M128 Modul". Diese Bezeichnungen kann man anstelle der Port-Bit Nummern verwenden, um das Programm selbsterklärender zu machen. | + | Am Anfang der M128 Library (RP6CClib) werden Bezeichnungen für einige Portpins der RP6 CCPRO M128 definiert, siehe Abschnitt "C-Control Standard Port Konfiguration auf dem RP6 CCPRO M128 Modul". Diese Bezeichnungen kann man anstelle der Port-Bit Nummern verwenden, um das Programm selbsterklärender zu machen. Weitere Definitionen am Anfang der M128 Library: |
+ | * Port On/Port Off | ||
+ | * LF, CR, SPACE | ||
+ | * LED1..LED6 | ||
Die Festlegungen zur Verwendung der Ports des RP6 CCPRO M128 Microcontrollers finden sich am Ende der M128 Library in der Funktion RP6_CCPRO_Init(). Dort wird auch noch Folgendes gemacht: | Die Festlegungen zur Verwendung der Ports des RP6 CCPRO M128 Microcontrollers finden sich am Ende der M128 Library in der Funktion RP6_CCPRO_Init(). Dort wird auch noch Folgendes gemacht: | ||
Zeile 1.176: | Zeile 1.728: | ||
* LCD initialisieren | * LCD initialisieren | ||
Hier eine Tabelle mit den Port-Definitionen der M128: | Hier eine Tabelle mit den Port-Definitionen der M128: | ||
+ | Erklärung der Spalten: | ||
+ | Port -> Atmel Portpin Bezeichnung | ||
+ | Name -> Atmel Funktionsbezeichnung | ||
+ | In/Out -> Eingang (In) oder Ausgang (Out) | ||
+ | Pullup -> Falls Eingang: Pullup ein- (1) oder ausgeschaltet (0) | ||
+ | Wert -> Falls Ausgang: Logikpegel high (1) oder low (0) | ||
+ | Port-Bit -> CCPRO Port-Bit Nummer (0..52) | ||
+ | Bezeichnung -> Portpin Bezeichnung der Library | ||
+ | Stecker -> Portpin verfügbar an STECKER: Pin | ||
+ | Anmerkungen -> Kommentare | ||
{| {{Blauetabelle}} | {| {{Blauetabelle}} | ||
|Port | |Port | ||
Zeile 1.718: | Zeile 2.280: | ||
|- | |- | ||
|} | |} | ||
− | + | Zeichen: | |
− | Zeichen: | + | |
* Standard-Belegung! Über Jumper/Lötbrücke änderbar. | * Standard-Belegung! Über Jumper/Lötbrücke änderbar. | ||
** Pullup-Widerstand 100 kOhm! | ** Pullup-Widerstand 100 kOhm! | ||
Zeile 1.725: | Zeile 2.286: | ||
====Timer-Nutzung==== | ====Timer-Nutzung==== | ||
− | ==== | + | Die Nutzung der Timer wird in der M128 Library in der Funktion RP6_CCPRO_Init() am Ende der Datei RP6CClib.cc oder RP6CClib.cbas festgelegt. Dort steht jedoch nur der Hinweis auf die Nutzung von Timer 3 für den Piezo Tongeber. |
− | ==== | + | |
+ | =====Timer 0===== | ||
+ | Frei für die eigene Nutzung. | ||
+ | |||
+ | =====Timer 1===== | ||
+ | Frei für die eigene Nutzung. | ||
+ | |||
+ | =====Timer 2===== | ||
+ | Interne CCPRO Zeitbasis (10ms Tick), z.B. für die Clock Funktion und die Thread-Ablaufsteuerung. Timer 2 kann vom eigenen Programm nicht anders konfiguriert werden, man kann aber den 10ms Tick im eigenen Programm nutzen. | ||
+ | |||
+ | =====Timer 3===== | ||
+ | Timer 3 wird in der Library für den Piezo Tongeber verwendet. Nutzt man die Funktionen beep(), beep_t() und die Macros sound(), sound_off() und tone() NICHT, kann man Timer 3 auch anders konfigurieren und nutzen. | ||
+ | |||
+ | ===C-Control PRO=== | ||
+ | [http://www.c-control.de/c-control-pro/c-control-pro/startseite_c-control-pro.html C-Control PRO] (CCPRO) ist eine Hardware- und Programmierumgebung von CONRAD. Sie ist angepaßt an die CCPRO Module MEGA32 und MEGA128. Das CCPRO MEGA128 Modul arbeitet auch auf der RP6 CCPRO M128 Erweiterungsplatine. | ||
− | |||
====IDE==== | ====IDE==== | ||
− | ==== | + | Die neueste Version der CCPRO-IDE und das CCPRO-Handbuch sind [http://www.c-control.de/c-control-pro/software,_treiber,_downloads/software,_treiber,_downloads.html hier] zu finden. |
− | ==== | + | |
+ | Um die Programmierung des C-Control PRO MEGA128 Moduls kennenzulernen, kann man sich auch die [http://www.c-control.de/c-control-pro/applikationen/applikationen.html Demo-Programme] ansehen. Achtung: Sie laufen nicht ohne Änderungen auf der RP6 CCPRO M128 Erweiterungsplatine! | ||
+ | |||
+ | ====Projekte==== | ||
+ | Derzeit gibt es nur ein interessantes Projekt als "Alternative" für die CCPRO IDE. | ||
+ | |||
+ | ... kann gern ergänzt werden ... | ||
+ | |||
+ | =====CCPro-Loader===== | ||
+ | [http://www.roboternetz.de/community/showthread.php?42017-CCPro-Loader-C-Control-Pro-ohne-Interpreter-nutzbar Hier] gab es den CCPro-Loader. Mit diesem Programm von [http://www.roboternetz.de/community/members/40147-messier messier] kann man HEX-Dateien, die man mit anderen Programmiersprachen erstellt hat, in das C-Control PRO MEGA128 Modul laden, ohne den Bootloader zu zerstören. Das eröffnet die Möglichkeit, das Modul nicht nur in CompactC oder BASIC (d.h. in Bytecode-Interpreter Sprachen) zu programmieren, sondern auch z.B. mit GCC oder BASCOM. | ||
===Projekte=== | ===Projekte=== | ||
+ | Ohne Anspruch auf Vollständigkeit habe ich hier Links zu wichtigen Software-Projekten für die RP6 CCPRO M128 aufgelistet. Wichtig war mir dabei, dass es sich um direkt nutzbare und vollständige Programme oder Libraries handelt. | ||
+ | |||
+ | ... kann gern ergänzt werden ... | ||
+ | |||
====CompactC==== | ====CompactC==== | ||
+ | * Stopwatches (Library): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?48406-CCPRO-M128-Stopwatches-(CompactC) CCPRO M128 Stopwatches] | ||
+ | * DCF77-Decoder/Clock (Library): | ||
+ | ** CCPRO M128 DCF77 Decoder [http://www.roboternetz.de/community/showthread.php?42859-CCPRO-M128-DCF77-Decoder-1-(CompactC) Teil 1] und [http://www.roboternetz.de/community/showthread.php?42860-CCPRO-M128-DCF77-Decoder-2-(CompactC) Teil 2] | ||
+ | ** CCPRO M128 DCF Clock [http://www.roboternetz.de/community/showthread.php?42983-CCPRO-M128-DCF-Clock-1-(CompactC) Teil 1] und [http://www.roboternetz.de/community/showthread.php?42984-CCPRO-M128-DCF-Clock-2-(CompactC) Teil 2] | ||
+ | * Servo-Ansteuerung (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?42950-CCPRO-M128-Demo-Servo-Ansteuerung CCPRO M128 Demo Servo Ansteuerung] | ||
+ | * PC-Fernsteuerung (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?47704-RP6-Remotrol-1.3-Die-Opensource-RP6-Fernsteuerung RP6 Remotrol 1.3] | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?54162-Gemeinschaftsprojekt-RP6-Remotrol-2.0 Gemeinschaftsprojekt RP6 Remotrol 2.0] | ||
+ | * Morse-Code senden/empfangen (Demo, Library): | ||
+ | ** [http://www.rn-wissen.de/index.php/RP6_-_Morse-Code RP6 - Morse-Code] | ||
+ | |||
====BASIC==== | ====BASIC==== | ||
+ | * DCF77-Decoder/Clock (Library): | ||
+ | ** CCPRO M128 DCF77 Decoder [http://www.roboternetz.de/community/showthread.php?42861-CCPRO-M128-DCF77-Decoder-1-(CCPRO-BASIC) Teil 1] und [http://www.roboternetz.de/community/showthread.php?42862-CCPRO-M128-DCF77-Decoder-2-(CCPRO-BASIC) Teil 2] | ||
+ | ** CCPRO M128 DCF Clock [http://www.roboternetz.de/community/showthread.php?42985-CCPRO-M128-DCF-Clock-1-(CCPRO-BASIC) Teil 1] und [http://www.roboternetz.de/community/showthread.php?42986-CCPRO-M128-DCF-Clock-2-(CCPRO-BASIC) Teil 2] | ||
+ | * Servo-Ansteuerung (Demo): | ||
+ | ** [http://www.roboternetz.de/community/showthread.php?42950-CCPRO-M128-Demo-Servo-Ansteuerung CCPRO M128 Demo Servo Ansteuerung] | ||
==Erfahrungsberichte== | ==Erfahrungsberichte== | ||
− | ... | + | ... kann gerne ergänzt werden ... |
− | + | ||
− | + | ||
==Siehe auch== | ==Siehe auch== | ||
* [[RP6]] | * [[RP6]] | ||
+ | * [[RP6v2]] | ||
+ | * [[RP6 Sensor Board und Xtra Module]] | ||
+ | * [[RP6Control M32: I2C-Slave]] | ||
+ | * [[RP6 - Morse-Code]] | ||
+ | * [[RP6 Multi IO Projekt - Software]] | ||
+ | * [[RP6 ArduIO - Software]] | ||
* [[CCRP5]] | * [[CCRP5]] | ||
+ | * [[Wild Thumper]] | ||
+ | * [[Wild Thumper - Programmierung]] | ||
* [[Yeti]] | * [[Yeti]] | ||
* [[Asuro]] | * [[Asuro]] | ||
* [[C't-Bot]] | * [[C't-Bot]] | ||
+ | <br/> | ||
==Weblinks== | ==Weblinks== | ||
* [http://www.arexx.com/forum/viewforum.php?f=19 AREXX Support Forum] | * [http://www.arexx.com/forum/viewforum.php?f=19 AREXX Support Forum] | ||
+ | * [http://ccpro.cc2net.de/forum/ C-Control PRO Forum] | ||
+ | * [http://www.roboternetz.de/phpBB2/viewforum.php?f=49 Roboternetz RP6 Forum] | ||
+ | * [http://sourceforge.net/projects/rp6flashwriter/ RP6 FlashWriter] | ||
+ | * [http://sourceforge.net/projects/rp6remotrol/ RP6 Remotrol] | ||
+ | * [http://www.rn-wissen.de/index.php/RP6_mit_AVR_Studio RP6 mit AVR Studio] | ||
+ | * [http://www.roboternetz.de/community/threads/62934-RP6-Projekt-induktive-Ladestation RP6-Projekt induktive Ladestation] | ||
+ | * [http://www.roboternetz.de/community/threads/63467-IR-bake IR-bake] | ||
− | |||
− | * [http://www. | + | ===Einzelne Projekte=== |
+ | * [http://www.schmiereck.de/jawiki/user/coders/RP6 JaWiki: RP6] | ||
+ | * [http://www.mikrocontroller.net/topic/79965#1049779 Eclipse mit WinAVR] | ||
+ | * [http://code.google.com/p/rp6cntrl/ rp6cntrl - Project in which a RP6 robot is interfaced with a Fox board] | ||
+ | * Maximilian Voss: [http://maexchen.net/rp6/library.php My rewritten RP6 Library] | ||
+ | * [http://www.euvolution.com/futurist-transhuman-news-blog/artificial-intelligence/rp6-robot-solves-a-maze-with-artificial-intelligence-video.php RP6 Robot solves a maze with Artificial Intelligence - Video] | ||
+ | * Uwe Galepp: [http://www.roboternetz.de/community/threads/64486-Sprachmodul-f%C3%BCr-den-RP6-mit-SpeakJet Sprachmodul für den RP6 mit SpeakJet] | ||
+ | * [[Induktive_Ladestation_f%C3%BCr_den_RP6|Induktive Ladestation für den RP6]] | ||
+ | * [[IR-bake_f%C3%BCr_den_RP6|IR-bake für den RP6]] | ||
+ | * fulltime: [http://www.roboternetz.de/community/threads/65410-RP6-Erster-Umbau RP6 Erster Umbau] | ||
+ | * Roland Schmid (Pr0gm4n): [https://www.roboternetz.de/community/threads/77875-Wiederauferstehung-des-RP6-Erste-Erfahrungen-und-Aufruf-zum-Austausch%21 Rust programmieren mit RP6] | ||
+ | ** Das Projekt "Portieren der RP6Lib auf Rust" auf [https://github.com/Pr0gm4n/rust-rp6lib Github] | ||
+ | * Dr. Fabian Queck (fabqu): [https://www.roboternetz.de/community/threads/77925-RP6-mit-ESP32-ein-kleine-Library-%28via-UART%29 RP6 mit ESP32 ein kleine Library (via UART)] | ||
+ | ** Das Projekt "Eine Bibliothek für ESP-basierte Controller um sie mit der RP6 Plattform zu verbinden" auf [https://github.com/MINT-Labs-Regensburg/RP6_UART2_Library Github] | ||
+ | |||
+ | <br/> | ||
+ | |||
+ | ===Schule, Lehre und Ausbildung=== | ||
+ | * Droste-Hülshoff-Gymnasium Meersburg: [http://dhg-meersburg.de/portfolio/robotik/ Robotik] | ||
+ | * HTW Berlin: [http://www.robotik-projekt.de/ Robotik-Projekt] | ||
+ | * FH-Wiesbaden: | ||
+ | ** Home: [http://www.cs.hs-rm.de/~linn/vpdv08/RP6_1/index.html Anwendung der Prozessdatenverarbeitung] | ||
+ | ** Doku: [http://www.cs.hs-rm.de/~linn/vpdv08/RP6_1/Doku.pdf Anwendung der Prozessdatenverarbeitung] | ||
+ | * FEEIT, Skopje Macedonia: [http://en.feit.ukim.edu.mk/ H&S 2011] | ||
+ | * Uni Regensburg: Bachelorarbeit | ||
+ | ** ... im RP6-Forum: [http://www.roboternetz.de/community/threads/58177-LabView-Fernsteuerungs-Tool-mit-diversen-Routinen LabView-Fernsteuerungs-Tool mit diversen Routinen] | ||
+ | ** ... als Buch: [https://www.google.de/search?hl=de&tbo=p&tbm=bks&q=isbn:3863413067 Fabian Queck; Entwicklung und Programmierung einer Robot Remote Control in LabVIEW; Diplomica Verlag GmbH Hamburg 2012; ISBN: 978-3-86341-306-4] | ||
+ | * Informatik Uni Frankfurt: [http://www-stud.informatik.uni-frankfurt.de/~tobiweis/Pics/Nerdstuff/RP6RobotControlSystem.pdf RP6RobotControlSystem] | ||
+ | * Rudolf-Diesel-Fachschule Nürnberg: Mechatroniktechnik Projektarbeiten (teils mit RP6) | ||
+ | ** Mars-Explorer: [http://www.rdfnuernberg.de/download/projekte_met/Projekt_Mars_Explorer_2011.pdf Link] | ||
+ | ** ... 2011/12: [http://www.mechatroniktechniker-nuernberg.de/projektarbeiten-2011-12 Link] | ||
+ | ** ... 2012/13: [http://www.mechatroniktechniker-nuernberg.de/projektarbeiten-2012-2013 Link] | ||
+ | ** ... 2013/14: [http://www.mechatroniktechniker-nuernberg.de/projektarbeiten-2013-2014 Link] | ||
+ | * Informatik HU Berlin: [http://se-it.de/Edel_Navigation.pdf Navigation eines autonomen Roboters mittels Lasertriangulation] | ||
+ | * Mechatronik Uni Duisburg Essen: [http://www.uni-due.de/imperia/md/content/mechatronik/lehre/afgabenstellung_rp6-cmucam_search_and_destroy.pdf Ansteuerung und Implementierung einer Projektilabschussvorrichtung in einen mobilen Roboter (Aufgabenbeschreibung)] | ||
+ | * Heinrich-Wieland-Schule Pforzheim: [http://technikerarbeit.mueller-fds.de/ Entwicklung eines mobilen, computergesteuerten R/C-Robotersystems mit 5-Achs-Greifarm] | ||
+ | * [http://www.ostfalia.de/cms/de/ Ostfalia Hochschule für angewandte Wissenschaften]: Albert. Danewitz: Entwicklung einer Drohne und Steuerung dieser über eine Virtual-Reality-Brille (Basis: RP6-Robotersystem), 2014, Prof. Dr. Ing. Jürgen Kreyßig | ||
+ | * Fachhochschule Südwestfalen: [http://www4.fh-swf.de/de/home/ueber_uns/standorte/ha/fb_ei/doz_ei/profs_ei/neugebauer/projektarbeiten/alf_roboter/alf_roboter_1.php Entwurf, Planung und Realisierung eines autonomen Roboterfahrzeugs zum Umfahren von Hindernissen], Prof. Dr. rer. nat. Gerhard Neugebauer | ||
+ | * [http://www.dgpf.de DGPF] - Deutsche Gesellschaft für Photogrammetrie, Fernerkundung und Geoinformation: [http://www.dgpf.de/neu/Proc2014/proceedings/papers/Beitrag198.pdf Verarbeitung und spatio-temporale Anfragen von mobilen Sensordaten auf Basis des OGC-Sensorbeobachtungsdienstes SOS 2.0] | ||
+ | |||
+ | <br/> | ||
[[Kategorie:Robotikeinstieg]] | [[Kategorie:Robotikeinstieg]] | ||
[[Kategorie:Praxis]] | [[Kategorie:Praxis]] | ||
− | |||
==Autoren== | ==Autoren== | ||
− | --[ | + | --[http://www.roboternetz.de/community/members/24729-sloti sloti] 22:23, 29. Dez 2007 (CET) |
− | --[ | + | --[http://www.roboternetz.de/community/members/44891-Tobias1 Tobias1] 18:30, 6. Apr 2010 (CET) |
− | --[ | + | --[http://www.roboternetz.de/community/members/1972-Dirk Dirk] 19:03, 5. Feb 2023 (CET) |
Aktuelle Version vom 5. Februar 2023, 19:03 Uhr
Inhaltsverzeichnis
- 1 Allgemein
- 2 RP6Loader
- 3 RP6 Base und CONTROL M32
- 4 RP6 CCPRO M128
- 5 Erfahrungsberichte
- 6 Siehe auch
- 7 Weblinks
- 8 Autoren
Allgemein
In diesem Artikel geht es um die Programmierung des RP6, des RP6v2 und ihrer Erweiterungsplatinen RP6 CONTROL M32 und RP6 CCPRO M128.
Zu den Grundlagen des RP6 und des RP6v2 gibt es jeweils eigene Seiten.
RP6Loader
Der RP6Loader und der USB Interface Treiber sind hier zu finden. Der RP6Loader ist ein JAVA-Programm, das den RP6 oder die M32 über deren serielle Schnittstelle mit einem PC verbindet.
Das Programm verfügt über folgende Funktionen:
- Statusfenster mit RP6-Akku Spannungsanzeige
- Flash Loader (Programme hochladen und starten, Programmspeicher löschen)
- HexViewer (Inhalt der HEX-Datei ansehen)
- Terminal (Zeichen über die serielle Schnittstelle senden/empfangen)
- Displays (Grafische Hilfen zur Encoder-Einstellung)
- Log (Protokoll-Datei zur Fehlereingrenzung)
Der RP6Loader kann alle seine Funktionen nur mit dem Bootloader-Programm in der RP6 Base und M32 ausspielen. Entscheidet man sich für die ISP-Programmierung mit Löschen des Bootloaders, bleibt vom Funktionsumfang eigentlich nur das Terminal übrig.
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) | ab 07.06.2007 |
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 | |
12.07.2010 | 1.5h | "RobotLoader", auch für Roboterarme und Caterpillar |
Hinweis: Neuere Versionen des RobotLoaders ab Version 2.0 findet ihr hier.
Geeignete Terminals
Der RP6Loader enthält u.a. eine Terminal-Funktion. Stattdessen kann man auch andere Terminals mit besserem Funktionsumfang einsetzen.
HTerm
Dieses Terminal-Programm HTerm wurde von SlyD empfohlen. Die Konfiguration zeigt dieses Bild.
ZOC
radbruch hat hier darauf hingewiesen, dass es ein schönes, sogar farbiges Terminal-Programm ZOC gibt, das man gut anstelle des Terminals im RP6Loader einsetzen kann.
Projekte
- Protokoll der Datenübertragung zwischen RP6 und Computer:
- RP6FlashWriter: Der Opensource RP6 Loader
- rpyutils 0.1 Loader und Term in Python für Linux
- EEPROM-Daten per Compiler-Option flashen:
- ...
RP6 Base und CONTROL M32
Der RP6 (191524), sein Nachfolger RP6v2 (191584) und die RP6 CONTROL M32 Erweiterungsplatine (191550) 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 (WinAVR), ist ausschließlich Freeware und kann entweder der CD entnommen oder aus dem Internet heruntergeladen werden.
Dokumentation
Die Dokumentation (Anleitungen, avr-libc Reference Manual, Schaltpläne und Datenblätter) befindet sich hier.
Manuals
Schematics
Datasheets
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" int main(void) { initRobotBase(); // Mikrocontroller initialisieren powerON(); // Encoder und Motorstromsensoren anschalten (WICHTIG!!!) setLEDs(0b111111); // Alle LEDs anschalten moveAtSpeed(100,100); // Beide Motoren fahren mit Geschwindigkeit 100 while(true) { task_motionControl(); // Geschwindigkeit einstellen task_ADC(); // Wird wegen der Motorstromsensoren aufgerufen } return 0; }
In dem Programm würde der RP6 als erstes alle LEDs anschalten und dann endlos mit Geschwindigkeit 100 geradeaus fahren, ohne Hindernisse zu berücksichtigen.
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
Die Library für die RP6 Base und CONTROL M32 besteht aus folgenden 13 Dateien:
Library | Datei | Funktion |
RP6 | RP6Config.h | RP6 Hardware-Konfiguration |
RP6Base | RP6RobotBase.h | RP6Base Definitionen |
RP6Base | RP6RobotBaseLib.h | RP6Base Library Header |
RP6Base | RP6RobotBaseLib.c | RP6Base Library |
CONTROL M32 | RP6Control.h | CONTROL M32 Definitionen |
CONTROL M32 | RP6ControlLib.h | CONTROL M32 Library Header |
CONTROL M32 | RP6ControlLib.c | CONTROL M32 Library |
RP6uart | RP6uart.h | RS232 Funktionen Header |
RP6uart | RP6uart.c | RS232 Funktionen |
RP6I2CmasterTWI | RP6I2CmasterTWI.h | I2C Master Funktionen Header |
RP6I2CmasterTWI | RP6I2CmasterTWI.c | I2C Master Funktionen |
RP6I2CslaveTWI | RP6I2CslaveTWI.h | I2C Slave Funktionen Header |
RP6I2CslaveTWI | RP6I2CslaveTWI.c | I2C Slave Funktionen |
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 | |||||
03.02.2012 | 1.5 | 1.5_12.09.08 | 1.31beta | 15 | 1.31beta | |||||
16.07.2012 | 1.7 * | 1.6_16.07.12 | 1.3_24.02.12 | 16 | 1.2_07.08.07 | 1.6_2012 (im Kopf: 1.5) | 1.3_2012 | 1.2_16.07.12 | 1.0_16.05.07 | 1.0_16.05.07 |
19.07.2012 | 1.7 | 1.6_16.07.12 | 1.32beta | 16 | 1.32beta | |||||
25.07.2012 | 1.8 | 1.6_16.07.12 | 1.3_24.02.12 | Base 18, Control 16 | 1.2_07.08.07 | 1.8_2012 | 1.3_2012 | 1.2_16.07.12 | 1.0_16.05.07 | 1.0_16.05.07 |
25.07.2012 ² | 1.8 | 1.6_16.07.12 | 1.3_24.02.12 | Base 18, Control 16 | 1.2_07.08.07 | 1.8_2012 | 1.3_2012 | 1.2_16.07.12 | 1.0_16.05.07 | 1.0_16.05.07 |
04.09.2012 | 1.8 | 1.6_16.07.12 | 1.3_24.02.12 | Base 18, Control 16 | 1.1_04.09.12 ³ |
Zu *: Ab der Version 1.7 sind auch die Libraries und Examples der RP6 M256 WiFi Platine enthalten! Siehe hier!
Zu ²: Die Datei heißt RP6Examples_20120725f.zip. Mir ist nicht bekannt, ob ein Unterschied zur RP6Examples_20120725.zip besteht.
Zu ³: Von JM3 Engineering modifizierte Version auf der "RP6 Robot System Xtra Modules CD-ROM" zum RP6 Sensor Board und zu den Xtra Modulen. Neue Funktion: I2CTWI_readWordRegisters().
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.32beta vom 19.07.2012 könnt ihr hier finden.
RP6RobotBase
Die RP6 Base Library existiert inzwischen in der Version 1.8 von 2012. Gegenüber der Version 1.4 vom 29.04.2008 wurden diese Verbesserungen vorgenommen:
- Stopwatch Fehler (10% zu langsam) berichtigt
- Optionen CHANGE_DIRECTION_FAST, MEDIUM und SLOW eingeführt
Von Maximilian Voss wurde hier eine eigene Version der RP6 Base Library veröffentlicht mit folgenden Änderungen:
- Compiler Optionen (UART-, Antriebs-, Bumper- und LED-Funktionen können einzeln de-/aktiviert werden)
- Core Funktionen (Konfiguration, Timer)
Die Library ist unvollständig und scheint nicht weiter entwickelt zu werden.
Von radbruch wurde hier eine minimale RP6 Base Library veröffentlicht mit folgenden Änderungen:
- Maximale Kürzung der Library
- Reduktion aller Funktionen auf ein Minimum
Bug-Report
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:
Erklärung der Spalten: Port -> Atmel Portpin Bezeichnung Name -> Atmel Funktionsbezeichnung In/Out -> Eingang (In) oder Ausgang (Out) Pullup -> Falls Eingang: Pullup ein- (1) oder ausgeschaltet (0) Wert -> Falls Ausgang: Logikpegel high (1) oder low (0) Funktion -> Schnittstellenfunktion Bezeichnung -> Portpin Bezeichnung der Library Stecker -> Portpin verfügbar an STECKER: Pin Anmerkungen -> Kommentare (ADC_xxxxx: ADC-Kanal Bezeichnung)
Port | Name | In/Out | Pullup | Wert | Funktion | Bezeichnung | Stecker | Anmerkungen |
PA0 | ADC0 | In | 0 | ADC0 | ADC0: 3 | ADC_ADC0 (frei) | ||
PA1 | ADC1 | In | 0 | ADC1 | ADC1: 3 | 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 | ||
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
Die Nutzung der Timer wird in der RP6Base Library in der Funktion initRobotBase() am Ende der Datei RP6RobotBaseLib.c festgelegt.
Timer 0
Timer 0 arbeitet in der RP6Base Library im CTC-Modus (Mode 2) mit einem Vorteiler von 8 und nutzt als TOP-Wert OCR0. Bei einem Wert von 99 für OCR0 errechnet sich ein Zyklus von 100 us bei einer Quarzfrequenz von 8 MHz.
Der Zyklus von 100 us wird genutzt für:
- Verzögerungen (sleep, mSleep)
- Stopwatches
- RC5 Empfang
- Timer Variable
- Geschwindigkeits-Messung
- Weiche PWM-Anpassung und automatische PWM-Abschaltung
- ACS Timing
- Blinken der Power On LED
- Überstrom Zeitmessung
- Bumper Check Intervall Zeitmessung
- Selbsttest: Duty cycle Messung
Timer 1
Timer 1 arbeitet im phasenrichtigen (phase correct) PWM-Modus (Mode 10) mit einem Vorteiler von 1 (kein Vorteiler!) und nutzt als TOP-Wert ICR1. Bei einem Maximalwert von 210 für ICR1 errechnet sich eine PWM-Frequenz von ca. 19048 Hz.
Die PWM wird genutzt für:
- Geschwindigkeitsregelung der Motoren
Timer 2
Der Timer 2 arbeitet im CTC-Modus (Mode 2) mit einem Vorteiler von 1 (kein Vorteiler!) und nutzt als TOP-Wert OCR2. Bei einem Wert von 110 (= 0x6E) für OCR2 errechnet sich eine Frequenz von ca. 72072 Hz.
Die 72 kHz Frequenz wird genutzt für:
- ACS
RP6Control
Die RP6Control Library gibt es inzwischen in der Version 1.3 vom 24.02.2012. Gegenüber der Version 1.1 (ab 2007) wurde diese Verbesserung vorgenommen:
- Stopwatch Fehler (10% zu langsam) berichtigt
Von Dirk wurde hier eine Version 1.3beta veröffentlicht mit folgenden Verbesserungen:
- Neue Task ADC
- Funktionen für die freien I/O-Portpins
- Tonfrequenz-Konstanten für den Beeper
Die neueste Version 1.32beta der RP6Control Library vom 19.07.2012 ist kompatibel zur offiziellen Version 1.3.
Von RolfD wurde hier eine neue Version der RP6Control Library veröffentlicht mit folgenden Änderungen:
- Ursprüngliche Ein-/Ausgabefunktionen durch <stdio> Treiberfunktionen ersetzt
- "Mantelfunktionen" zur Sicherung der Abwärtskompatibilität
- ASCII- und Binär-Betriebsart
- Neue Funktion lcd_generatechar (eigene Zeichen für das LCD definieren)
- LCD-Ausgabefunktionen der RP6ControlLib_2 (writeLongLCD, writeLongLengthLCD, writeDoubleLCD, writeDoubleExpLCD) hinzugefügt
Die vorgeschlagenen Änderungen der RP6Control Library müssen noch in eine der beiden letzten Versionen der RP6ControlLib (1.32beta oder 1.3) eingefügt werden. Eine Anleitung dazu befindet sich in dem verlinkten Thread.
Bug-Report
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:
Erklärung der Spalten: Port -> Atmel Portpin Bezeichnung Name -> Atmel Funktionsbezeichnung In/Out -> Eingang (In) oder Ausgang (Out) Pullup -> Falls Eingang: Pullup ein- (1) oder ausgeschaltet (0) Wert -> Falls Ausgang: Logikpegel high (1) oder low (0) Funktion -> Schnittstellenfunktion Bezeichnung -> Portpin Bezeichnung der Library Stecker -> Portpin verfügbar an STECKER: Pin Anmerkungen -> Kommentare (ADC_xxxxx: ADC-Kanal Bezeichnung)
Port | Name | In/Out | Pullup | Wert | Funktion | Bezeichnung | Stecker | Anmerkungen |
PA0 | ADC0 | In | 0 | MIC * | ADC_MIC | |||
PA1 | ADC1 | In | 0 | KEYPAD * | ADC_KEYPAD | |||
PA2 | ADC2 | In | 0 | ADC2 | ADC: 2, ADC2: 3 | ADC_2 (frei) | ||
PA3 | ADC3 | In | 0 | ADC3 | ADC: 1, ADC3: 3 | ADC_3 (frei) | ||
PA4 | ADC4 | In/(Out) | 0 | ADC4 | ADC: 3 | ADC_4 (frei) | ||
PA5 | ADC5 | In | 0 | ADC5 | ADC: 5 | ADC_5 (frei) | ||
PA6 | ADC6 | In | 0 | ADC6 | ADC: 7 | ADC_6 (frei) | ||
PA7 | ADC7 | In | 0 | ADC7 | ADC: 9 | 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: 9 | XBUS INT3 | ||
PB3 | AIN1/OC0 | Out | 0 | LCD_RS | LCD: 4 | LCD RS | ||
PB4 | SS | Out | 0 | LCD_EN | LCD: 6 | LCD EN | ||
PB5 | MOSI | Out | 0 | ISP | MOSI | ISP: 1 | EEPROM SI | |
PB6 | MISO | In | 0 | ISP | MISO | ISP: 9 | EEPROM SO | |
PB7 | SCK | Out | 0 | ISP | SCK | ISP: 7 | EEPROM SCK | |
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 | In/Out | 1 | JTAG | IO_PC2 | I/O: 7 | frei | |
PC3 | TMS | In/Out | 1 | JTAG | IO_PC3 | I/O: 5 | frei | |
PC4 | TDO | In/Out | 1 | JTAG | IO_PC4 | I/O: 6 | frei | |
PC5 | TDI | In/Out | 1 | JTAG | IO_PC5 | I/O: 3 | frei | |
PC6 | TOSC1 | In/Out | 1 | IO_PC6 | I/O: 4 | frei | ||
PC7 | TOSC2 | In/Out | 1 | IO_PC7 | I/O: 1 | frei | ||
PD0 | RXD | In | 0 | RS232 | RX | PRG/U: 2 | ||
PD1 | TXD | Out | 0 | RS232 | TX | PRG/U: 3 | ||
PD2 | INT0 | In | 0 | EINT1 (INT0) | XBUS: 8 | XBUS INT1 | ||
PD3 | INT1 | In | 0 | EINT2 (INT1) * | XBUS: 11 | XBUS INT2 | ||
PD4 | OC1B | Out | 0 | STR | IC3 STR | |||
PD5 | OC1A | In/Out | 1 | IO_PD5 | I/O: 9 | frei | ||
PD6 | ICP | In/Out | 1 | IO_PD6 | I/O: 8 | frei | ||
PD7 | OC2 | Out | 0 | BUZ | Beeper |
Zeichen: * Standard-Belegung! Über Jumper/Lötbrücke änderbar. ** Frei nutzbar. wenn kein 2. EEPROM (IC5) eingesetzt ist! ² I2C-Master: Out, Slave: In
Timer-Nutzung
Die Nutzung der Timer wird in der CONTROL M32 Library in der Funktion initRP6Control() am Ende der Datei RP6ControlLib.c festgelegt.
Timer 0
Timer 0 arbeitet in der M32 Library im CTC-Modus (Mode 2) mit einem Vorteiler von 8 und nutzt als TOP-Wert OCR0. Bei einem Wert von 199 für OCR0 errechnet sich ein Zyklus von 100 us bei einer Quarzfrequenz von 16 MHz.
Der Zyklus von 100 us wird genutzt für:
- Verzögerungen (sleep, mSleep)
- Stopwatches
- Timer Variable
- Sound timing
Timer 1
Timer 1 ist in der M32 Library nicht genutzt und kann beliebig in eigenen Programmen eingesetzt werden.
Timer 2
Der Timer 2 arbeitet im Normal-Modus (Mode 0). Der Wert von OCR2 bestimmt die Frequenz.
Die von Timer 2 erzeugte Frequenz wird genutzt für:
- Beeper
RP6uart
Diese Library stellt Funktionen für die serielle Kommunikation zur Verfügung. Sie kann auf der RP6 Base und M32 eingesetzt werden. Die aktuelle Version ist seit dem 16.07.2012 die Version 1.2. Gegenüber der Version 1.1 vom 10.09.2007 gibt es folgende Verbesserung:
- Fehler in der Funktion readChars berichtigt
Die RP6uart Library ist standardmäßig in die RP6Base und CONTROL M32 Library eingebunden.
In diesem Thread entwickelt RolfD die RP6uart Library weiter:
- Nicht blockierende Sendefunktion mit eigenem Sendepuffer
- Zeichen 0x00 kann übertragen werden
- Neue Funktionen serial_sendc() und serial_getc()
- <stdio> Treiberfunktionen
- "Mantelfunktionen" zur Sicherung der Abwärtskompatibilität
- ASCII- und Binär-Betriebsart
- ASCII Edit mode
- Xon/Xoff Modus
- ...
RP6I2Cmaster/slaveTWI
Diese Library (bestehend aus einer Master- und einer Slave-Library) stellt Funktionen für die I2C-Kommunikation zur Verfügung. Die Library, die es in der Version 1.0 unverändert bereits seit dem 16.05.2007 gibt, läßt sich sowohl auf der RP6Base, als auch auf der M32 nutzen. Beide Plattformen können I2C-Master oder -Slave sein.
Eine erweiterte Master-Library (Version 1.1) gibt es mit Datum vom 04.09.2012, veröffentlicht ab Februar 2014 von JM3 Engineering für das RP6 Sensor Board und die Xtra Module. Sie ist abwärts-kompatibel zur Master-Library in der Version 1.0 vom 16.05.2007 und bietet lediglich folgende Erweiterung:
- Neue Funktion I2CTWI_readWordRegisters() zum Lesen von 16 Bit Registern
Eine neue Master-Library, die die TWI-Funktionen von Peter Fleury's I2C Master Library anstelle der Interrupt-basierten Funktionen der Original-Library von SlyD nutzt, wurde hier veröffentlicht. Sie basiert auf der o.g. erweiterten Master-Library (Version 1.1).
Bug-Report
Dieser interessante Thread von RolfD dreht sich um eventuelle Fehler in dieser Lib und deren Fix.
Ergänzung
Hier findet sich eine (evtl. noch nicht fehlerfreie) Veränderung der RP6I2Cmaster Library, um mit ihr den berührungslosen Temperatursensor MLX90614 anzusteuern. Die Änderungen ermöglichen einen Repeated Start zwischen dem Senden der I2C- und RAM-Adresse und dem Lesen der Sensor-Werte. Die Original-Library sendet an dieser Stelle ein Stop.
RP6 I2C-Adressen
Definierte I2C-Adressen des RP6-Systems:
Definition (RP6 Sensor Board: Demo-Software) | I2C- Adresse |
Alternative I2C-Adressen | Verwendung |
I2C_RP6_BASE_ADR | 10 | RP6v2 Base: I2C-Slave | |
I2C_RP6_M32_ADR | 12 * | RP6 CONTROL M32: I2C-Slave | |
I2C_RP6_M128_ADR | 14 * | RP6 CCPRO M128: I2C-Slave | |
I2C_RP6_M256_ADR | 16 * | RP6 M256 WiFi: I2C-Slave | |
TCN75_ADR | 0x90 ² | 0x92, 0x98, 0x9a | M128: TCN75 Temperatursensor |
24LCXXX_ADR | 0xa0 | 0xa2, 0xa4, 0xa6 | M128: 24LCxxx EEPROM |
PCF8574_8LEDS_ADR | 0x70 | RP6Base_I2CMaster_01 Example: PCF8574 ** | |
PCF8591_4LDRS_ADR | 0x90 ² | RP6Base_I2CMaster_02 Example: PCF8591 ** | |
SRF_ADR | 0xe6 | 0xe0 (Standard) | RP6Base_I2CMaster_03 Example: SRF08/SRF10 ** |
SRF_LEFT_ADR | 0xe6 | RP6Base_I2CMaster_04 Example: SRF08/SRF10 ** | |
SRF_RIGHT_ADR | 0xe8 | RP6Base_I2CMaster_04 Example: SRF08/SRF10 ** | |
I2C_SENSOR_LSM303DLHC_A_ADR (ACCELEROMETER) | 0x32 ² | RP6 Sensor Board: LSM303DLHC Accelerometer | |
I2C_SENSOR_LSM303DLHC_M_ADR (MAGNETOMETER) | 0x3c | RP6 Sensor Board: LSM303DLHC Magnetometer | |
I2C_SENSOR_PORTEXP_ADR (IOEXP1) | 0x40 | RP6 Sensor Board: MAX7311 I/O Port Expander | |
I2C_SENSOR_SERVO_ADR (PWMDRIVER) | 0x88 | RP6 Sensor Board: PCA9685 Servo Controller | |
I2C_SENSOR_LEDDRIVER_ADR (LEDDRIVER) | 0x8a | RP6 Sensor Board: TCA6507 LED Controller | |
I2C_SENSOR_TEMP_ADR (TEMPSENSOR) | 0x90 ² | RP6 Sensor Board: LM75B Temperatursensor | |
I2C_SENSOR_RTC_ADR (RTCLOCK) | 0xd0 ² | RP6 Sensor Board: DS1339 RTC | |
I2C_GPS_RECEIVER_ADR (GPS) | 0xc8 | 0xca, 0xcc, 0xce, 0xd0 ², 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde |
RP6 I2C GPS Receiver |
I2C_ACCSENS_ADR (ADR_ACC_MODULE) | 0x30 | 0x32 ² | RP6 3D Accelerometer Modul |
I2C_BHT_B_ADR (BAROMETER) | 0xee | RP6 BHT Modul: MS5607-02BA Pressure Sensor | |
I2C_BHT_HT_ADR (HYGROMETER) | 0x80 | RP6 BHT Modul: HTU21D Humidity Sensor |
Zu *) Adresse nicht festgelegt. Empfehlung!
Zu **) Hardware nicht im RP6-System vorhanden.
Zu ²) Adress-Konflikt möglich!
WinAVR
Die neueste Version von WinAVR kann man hier oder hier herunterladen. WinAVR ist eine fertige Windows-Einrichtung eines Editors (Programmer's Notepad 2) und eines C-Compilers für Atmel AVR-Microcontroller (AVR-GCC).
Zu empfehlen ist ein Blick in folgende Anleitungen, die in der WinAVR-Installation enthalten sind:
- WinAVR-user-manual.html (Benutzer-Handbuch im Stammverzeichnis)
- pn2.chm (PN2 Hilfe-Datei im Unterverzeichnis \pn\help)
Programmer's Notepad 2
Programmer's Notepad 2 (PN2) ist der Editor von WinAVR, mit dem man Programme schreibt.
GCC
GCC ist eine Sammlung von Compilern, die auch eine C-Variante enthält (AVR-GCC), die für die Programmierung von AVR-Microcontrollern eingesetzt wird. In AVR-GCC wird auch der RP6 programmiert. In seiner Anleitung gibt es einen "C - Crashkurs" (Kapitel 4.4.).
Zusätzlich ist u.a. in der WinAVR-Installation folgende Referenz zu allen Definitionen und Funktionen der AVR-GCC-Libraries enthalten:
- avr-libc-user-manual.pdf (Handbuch im Unterverzeichnis \doc\avr-libc)
Es gibt gute Tutorials, um die Sprache zu lernen:
Darüber hinaus gibt es natürlich auch Bücher:
Projekte
Ohne Anspruch auf Vollständigkeit habe ich hier Links zu wichtigen Software-Projekten für die RP6Base und die M32 aufgelistet. Wichtig war mir dabei, dass es sich um direkt nutzbare und vollständige Programme oder Libraries handelt.
... kann gern ergänzt werden ...
RP6 Base
- Library:
- LCD Ansteuerung (Demo, Library):
- Servoansteuerung (Grundlagen, Demos, Library):
- LEDs als Helligkeitssensor (Demo):
- Ansteuerung externer I2C-Hardware (Demo):
- Ansteuerung des RP6 durch Lego NXT über I2C (Demo):
- Kamera Minimallösung (Demo):
- Kamera-Projekt (Demo):
- Clock (Library):
- DCF77-Decoder/Clock (Library):
- Linienfolger (Demo):
- PC-Verbindung über Bluetooth (Grundlagen):
- PC-Fernsteuerung (Demo):
- RC-Fernsteuerung (Demo):
- IR-Fernsteuerung (Demo):
- IR-Kommunikation (Demo):
- RP6 und BASCOM (Demo):
- RP6 und LabView (Demo):
- Morse-Code senden/empfangen (Demo, Library):
- RP6 mit MetaController (C++ Projekt):
- FreeRTos auf RP6 (Projekt):
- Verschiedenes:
CONTROL M32
- Library:
- Servoansteuerung (Library):
- Ansteuerung des zweiten SPI-EEPROMs (Library):
- Messgeräte (Demo):
- Kamera-Projekt (Demo):
- TRX433 (CS-8 C, 190045, Library):
- Clock (Library):
- DCF77-Decoder/Clock (Library):
- MultiIO Projekt (Demos, Library):
- ArduIO Projekt (Demos, Library):
- Spiele (Demo):
- PC-Fernsteuerung (Demo):
- IR-Fernsteuerung (Demo):
- Morse-Code senden/empfangen (Demo, Library):
- I2C-Slave (Programm):
- NMEA Parser (Programm):
- Verschiedenes:
RP6 CCPRO M128
Die RP6 CCPRO M128 Erweiterungsplatine (191563) hat zunächst keinen Microcontroller an Bord. Man muß daher das C-Control PRO MEGA128 Modul (198219) mit bestellen. Es gehört zum C-Control PRO System von CONRAD und enthält einen ATmega128 Microcontroller. Das CCPRO MEGA128 Modul wird in CompactC oder BASIC programmiert. Die Programme werden als Byte-Code von der IDE in das Modul geladen und dort von einem Byte-Code-Interpreter ausgeführt.
Dokumentation
Die Dokumentation (Anleitung, Schaltplan, Datenblätter) befindet sich hier.
Manuals
Schematics
Datasheets
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
Die RP6 CCPRO M128 Library besteht aus den beiden Dateien RP6CClib.cc (CompactC) und RP6CClib.cbas (BASIC). Ihr Inhalt ist identisch.
Versionen
Hier eine Tabelle der (mir) bekannten Library Versionen der CCPRO M128:
ZIP-Datum | Version | Version CompactC | Version BASIC | Bemerkungen |
22.10.2008 | 1.0 | 1.0_16.10.08 | 1.0_07.10.08 | |
31.01.2009 | 1.0 | 1.0_16.10.08 | 1.0_07.10.08 | wie 22.10.2008 (?) |
Bug-Report
Die Funktion void RP6_readRegisters(byte adr, byte start_reg, byte readBuffer[], byte reg_count) der RP6CClib liest "reg_count" Register des Controllers auf dem RP6 Mainboard über den I2C-Bus.
In diesem Teil:
I2C_Start(); I2C_Write(adr+1); byte i; for(i=0;i<reg_count;i++) readBuffer[i] = (I2C_Read_ACK()); readBuffer[i+1] = (I2C_Read_NACK()); I2C_Stop();
... werden die Register eingelesen.
Ist reg_count z.B. 10 (10 Register sollen gelesen werden), werden mit I2C_Read_ACK() die Register in readBuffer[0] bis readBuffer[9] abgelegt. Danach wird mit I2C_Read_NACK() noch das 11. Register in readBuffer[11] abgelegt. readBuffer[10] bleibt unberührt. Damit funktioniert diese Funktion zwar (d.h. in readBuffer[0..9] sind die gewünschten 10 Register vorhanden), aber es findet ein unnötiger Lesezyklus zusätzlich statt.
Man kann die RP6CClib.cc so anpassen:
I2C_Start(); I2C_Write(adr+1); byte i; for(i=0;i<(reg_count-1);i++) readBuffer[i] = (I2C_Read_ACK()); readBuffer[i] = (I2C_Read_NACK()); I2C_Stop();
In der RP6CClib.cbas sieht das so aus:
I2C_Start() I2C_Write(adr+1) For i=0 To reg_count-2 readBuffer(i) = I2C_Read_ACK() Next readBuffer(i) = I2C_Read_NACK() I2C_Stop()
Konfiguration
Die wesentlichen Hardware-Konfigurationen des RP6 finden sich am Anfang der M128 Library (RP6CClib). Dort steht eine Festlegung zur:
- Encoder-Auflösung
Port-Verwendung
Am Anfang der M128 Library (RP6CClib) werden Bezeichnungen für einige Portpins der RP6 CCPRO M128 definiert, siehe Abschnitt "C-Control Standard Port Konfiguration auf dem RP6 CCPRO M128 Modul". Diese Bezeichnungen kann man anstelle der Port-Bit Nummern verwenden, um das Programm selbsterklärender zu machen. Weitere Definitionen am Anfang der M128 Library:
- Port On/Port Off
- LF, CR, SPACE
- LED1..LED6
Die Festlegungen zur Verwendung der Ports des RP6 CCPRO M128 Microcontrollers finden sich am Ende der M128 Library in der Funktion RP6_CCPRO_Init(). Dort wird auch noch Folgendes gemacht:
- SPI initialisieren
- Schieberegister zurücksetzen
- Serielle Schnittstelle initialisieren
- I2C Modul initialisieren
- LCD initialisieren
Hier eine Tabelle mit den Port-Definitionen der M128:
Erklärung der Spalten: Port -> Atmel Portpin Bezeichnung Name -> Atmel Funktionsbezeichnung In/Out -> Eingang (In) oder Ausgang (Out) Pullup -> Falls Eingang: Pullup ein- (1) oder ausgeschaltet (0) Wert -> Falls Ausgang: Logikpegel high (1) oder low (0) Port-Bit -> CCPRO Port-Bit Nummer (0..52) Bezeichnung -> Portpin Bezeichnung der Library Stecker -> Portpin verfügbar an STECKER: Pin Anmerkungen -> Kommentare
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 | XBUS INT1 | ||
PE6 | T3/INT6 | In | 38 | PORT_PE6_INT * | XBUS: 9 | XBUS 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. ** Pullup-Widerstand 100 kOhm! ² Über Serienwiderstand 470 Ohm
Timer-Nutzung
Die Nutzung der Timer wird in der M128 Library in der Funktion RP6_CCPRO_Init() am Ende der Datei RP6CClib.cc oder RP6CClib.cbas festgelegt. Dort steht jedoch nur der Hinweis auf die Nutzung von Timer 3 für den Piezo Tongeber.
Timer 0
Frei für die eigene Nutzung.
Timer 1
Frei für die eigene Nutzung.
Timer 2
Interne CCPRO Zeitbasis (10ms Tick), z.B. für die Clock Funktion und die Thread-Ablaufsteuerung. Timer 2 kann vom eigenen Programm nicht anders konfiguriert werden, man kann aber den 10ms Tick im eigenen Programm nutzen.
Timer 3
Timer 3 wird in der Library für den Piezo Tongeber verwendet. Nutzt man die Funktionen beep(), beep_t() und die Macros sound(), sound_off() und tone() NICHT, kann man Timer 3 auch anders konfigurieren und nutzen.
C-Control PRO
C-Control PRO (CCPRO) ist eine Hardware- und Programmierumgebung von CONRAD. Sie ist angepaßt an die CCPRO Module MEGA32 und MEGA128. Das CCPRO MEGA128 Modul arbeitet auch auf der RP6 CCPRO M128 Erweiterungsplatine.
IDE
Die neueste Version der CCPRO-IDE und das CCPRO-Handbuch sind hier zu finden.
Um die Programmierung des C-Control PRO MEGA128 Moduls kennenzulernen, kann man sich auch die Demo-Programme ansehen. Achtung: Sie laufen nicht ohne Änderungen auf der RP6 CCPRO M128 Erweiterungsplatine!
Projekte
Derzeit gibt es nur ein interessantes Projekt als "Alternative" für die CCPRO IDE.
... kann gern ergänzt werden ...
CCPro-Loader
Hier gab es den CCPro-Loader. Mit diesem Programm von messier kann man HEX-Dateien, die man mit anderen Programmiersprachen erstellt hat, in das C-Control PRO MEGA128 Modul laden, ohne den Bootloader zu zerstören. Das eröffnet die Möglichkeit, das Modul nicht nur in CompactC oder BASIC (d.h. in Bytecode-Interpreter Sprachen) zu programmieren, sondern auch z.B. mit GCC oder BASCOM.
Projekte
Ohne Anspruch auf Vollständigkeit habe ich hier Links zu wichtigen Software-Projekten für die RP6 CCPRO M128 aufgelistet. Wichtig war mir dabei, dass es sich um direkt nutzbare und vollständige Programme oder Libraries handelt.
... kann gern ergänzt werden ...
CompactC
- Stopwatches (Library):
- DCF77-Decoder/Clock (Library):
- Servo-Ansteuerung (Demo):
- PC-Fernsteuerung (Demo):
- Morse-Code senden/empfangen (Demo, Library):
BASIC
- DCF77-Decoder/Clock (Library):
- Servo-Ansteuerung (Demo):
Erfahrungsberichte
... kann gerne ergänzt werden ...
Siehe auch
- RP6
- RP6v2
- RP6 Sensor Board und Xtra Module
- RP6Control M32: I2C-Slave
- RP6 - Morse-Code
- RP6 Multi IO Projekt - Software
- RP6 ArduIO - Software
- CCRP5
- Wild Thumper
- Wild Thumper - Programmierung
- Yeti
- Asuro
- C't-Bot
Weblinks
- AREXX Support Forum
- C-Control PRO Forum
- Roboternetz RP6 Forum
- RP6 FlashWriter
- RP6 Remotrol
- RP6 mit AVR Studio
- RP6-Projekt induktive Ladestation
- IR-bake
Einzelne Projekte
- JaWiki: RP6
- Eclipse mit WinAVR
- rp6cntrl - Project in which a RP6 robot is interfaced with a Fox board
- Maximilian Voss: My rewritten RP6 Library
- RP6 Robot solves a maze with Artificial Intelligence - Video
- Uwe Galepp: Sprachmodul für den RP6 mit SpeakJet
- Induktive Ladestation für den RP6
- IR-bake für den RP6
- fulltime: RP6 Erster Umbau
- Roland Schmid (Pr0gm4n): Rust programmieren mit RP6
- Das Projekt "Portieren der RP6Lib auf Rust" auf Github
- Dr. Fabian Queck (fabqu): RP6 mit ESP32 ein kleine Library (via UART)
- Das Projekt "Eine Bibliothek für ESP-basierte Controller um sie mit der RP6 Plattform zu verbinden" auf Github
Schule, Lehre und Ausbildung
- Droste-Hülshoff-Gymnasium Meersburg: Robotik
- HTW Berlin: Robotik-Projekt
- FH-Wiesbaden:
- FEEIT, Skopje Macedonia: H&S 2011
- Uni Regensburg: Bachelorarbeit
- Informatik Uni Frankfurt: RP6RobotControlSystem
- Rudolf-Diesel-Fachschule Nürnberg: Mechatroniktechnik Projektarbeiten (teils mit RP6)
- Informatik HU Berlin: Navigation eines autonomen Roboters mittels Lasertriangulation
- Mechatronik Uni Duisburg Essen: Ansteuerung und Implementierung einer Projektilabschussvorrichtung in einen mobilen Roboter (Aufgabenbeschreibung)
- Heinrich-Wieland-Schule Pforzheim: Entwicklung eines mobilen, computergesteuerten R/C-Robotersystems mit 5-Achs-Greifarm
- Ostfalia Hochschule für angewandte Wissenschaften: Albert. Danewitz: Entwicklung einer Drohne und Steuerung dieser über eine Virtual-Reality-Brille (Basis: RP6-Robotersystem), 2014, Prof. Dr. Ing. Jürgen Kreyßig
- Fachhochschule Südwestfalen: Entwurf, Planung und Realisierung eines autonomen Roboterfahrzeugs zum Umfahren von Hindernissen, Prof. Dr. rer. nat. Gerhard Neugebauer
- DGPF - Deutsche Gesellschaft für Photogrammetrie, Fernerkundung und Geoinformation: Verarbeitung und spatio-temporale Anfragen von mobilen Sensordaten auf Basis des OGC-Sensorbeobachtungsdienstes SOS 2.0
Autoren
--sloti 22:23, 29. Dez 2007 (CET)
--Tobias1 18:30, 6. Apr 2010 (CET)
--Dirk 19:03, 5. Feb 2023 (CET)