Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter Test

K (Library)
K (Autoren)
 
(482 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 seiner Erweiterungsplatinen RP6 CONTROL M32 und RP6 CCPRO M128. Zu den Grundlagen des RP6 gibt es eine eigene Seite: [[RP6]]
+
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 ist [http://www.arexx.com/rp6/html/de/software.htm hier] zu finden.
+
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/software.htm hier]) heruntergeladen werden.
+
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" // IMMER einbinden
+
#include "RP6RobotBaseLib.h"
  
 
int main(void)
 
int main(void)
 
{
 
{
initRobotBase(); // Den Roboter initialisieren
+
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
mSleep(2000); // 2 Sekunden warten
 
Stop(); // Anhalten
 
  
 
while(true)
 
while(true)
 
{
 
{
              task_motionControl; // Geschwindigkeit regeln
+
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 für 2 Sekunden mit derselben Geschwindigkeit beider Motoren fahren und dann stehen bleiben.
+
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.3beta vom 13.03.2010 könnt ihr  
+
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====
 
====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 300: Zeile 496:
 
  Bezeichnung -> Portpin Bezeichnung der Library
 
  Bezeichnung -> Portpin Bezeichnung der Library
 
  Stecker    -> Portpin verfügbar an STECKER: Pin
 
  Stecker    -> Portpin verfügbar an STECKER: Pin
  Anmerkungen -> Kommentare (ADC_xxxxx: ADC-Kanal-Bezeichnung)
+
  Anmerkungen -> Kommentare (ADC_xxxxx: ADC-Kanal Bezeichnung)
 
{| {{Blauetabelle}}
 
{| {{Blauetabelle}}
 
  |Port
 
  |Port
Zeile 640: 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====
 
====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 666: Zeile 910:
 
  Bezeichnung -> Portpin Bezeichnung der Library
 
  Bezeichnung -> Portpin Bezeichnung der Library
 
  Stecker    -> Portpin verfügbar an STECKER: Pin
 
  Stecker    -> Portpin verfügbar an STECKER: Pin
  Anmerkungen -> Kommentare (ADC_xxxxx: ADC-Kanal-Bezeichnung)
+
  Anmerkungen -> Kommentare (ADC_xxxxx: ADC-Kanal Bezeichnung)
 
{| {{Blauetabelle}}
 
{| {{Blauetabelle}}
 
  |Port
 
  |Port
Zeile 969: Zeile 1.213:
 
  |-
 
  |-
 
  |PD5
 
  |PD5
  |Oc1A
+
  |OC1A
 
  |In/Out
 
  |In/Out
 
  |1
 
  |1
Zeile 1.005: 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.
 +
 +
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====
 
====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====
 
====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 BASIC oder CompactC programmiert.
+
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.160: 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.169: 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.174: 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.179: 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====
Zeile 1.755: Zeile 2.286:
  
 
====Timer-Nutzung====
 
====Timer-Nutzung====
====CompactC====
+
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.
====BASIC====
+
 
 +
=====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.
  
===C-Control Pro===
 
 
====IDE====
 
====IDE====
====CompactC====
+
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.
====BASIC====
+
 
 +
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]
  
  
Zeile 1.771: Zeile 2.346:
  
 
... kann gerne ergänzt werden ...
 
... 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://ccpro.cc2net.de/forum/ C-Control Pro Forum]
 
  
* [http://www.roboternetz.de/phpBB2/viewforum.php?f=49 Roboternetz RP6 Forum]
+
===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==
--[[Benutzer:Sloti|Sloti]] 22:23, 29. Dez 2007 (CET)
+
--[http://www.roboternetz.de/community/members/24729-sloti sloti] 22:23, 29. Dez 2007 (CET)
  
--[[Benutzer:Tobias1|Tobias1]] 18:30, 06. April 2010 (CET)
+
--[http://www.roboternetz.de/community/members/44891-Tobias1 Tobias1] 18:30, 6. Apr 2010 (CET)
  
--[[Benutzer:Dirk|Dirk]] 20:50, 04. August 2011 (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

Der RP6

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


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

CONTROL M32



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

BASIC


Erfahrungsberichte

... kann gerne ergänzt werden ...


Siehe auch


Weblinks


Einzelne Projekte


Schule, Lehre und Ausbildung


Autoren

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

--Tobias1 18:30, 6. Apr 2010 (CET)

--Dirk 19:03, 5. Feb 2023 (CET)


LiFePO4 Speicher Test