Parallax, der Hersteller der Basic-Stamp Produkte, hat mit dem Propeller einen radikal neuen Typ
von Mikrokontrollern entwickelt. Bisherige Kontroller integrierten einen Mikroprozessor mit Datenspeicher
und Peripheriebausteinen auf einem Chip. Der Propeller dagegen hat 8 parallel laufende
Mikroprozessoren auf einem Chip, dafür fast keine Peripheriefunktionen. Da es noch sehr wenige
Informationen zum Propeller in deutsch gibt, habe ich diese Seite geschaffen, auf der ich meine
Erfahrungen weitergeben will.
Aufbau des Propellers
Die Idee hinter dem Propellerchip ist, fest vorgegebene Peripheriebausteine durch Software auf einem
parallel laufenden Prozessor zu ersetzen. Damit kann man sich seine eigenen Peripheriebausteine programmieren,
oder genau die gewünschten fertigen Funktionen aus einer Library einbinden. Momentan beschränkt sich das Angebot
an fertigen Funktionen noch auf die Standards, wie UART, SPI, I2C, PS2, aber mal sehen, was in Zukunft noch
alles möglich sein wird.
Ein wenig Hardware-Peripherie gibt es allerdings auch im Propeller, und die hat es in sich. Pro Prozessor
sind 2 32-Bit Timer mit eigener PLL vorhanden, die auch wieder ganz anders arbeiten, als gewohnt. Sie sind in
der Lage Frequenzen bis zu 160 MHz zu erzeugen, können Ereignisse an den Pins bis 40 MHz zählen, DA und
AD Wandlung unterstützen, und enthalten sogar die nötige Hardware um Video- und VGA- Signale zu erzeugen!
Die Kombination aus 32 Bit-CPU, Timern und lokalem RAM nennt sich Cog. Neben den 8 Cogs gibt es noch ein globales
RAM und ROM mit je 32 kByte, 32 I/O-Pins, einen internen 12 MHz Oszillator und einen Quarz-Oszillator mit
PLL auf dem Chip.
Ein Cog arbeitet mit bis zu 80 MHz Taktfrequenz. Die CPU braucht für jeden Befehl mindestens 4 Takte, so dass
im Maximum 20 MIPS pro Cog möglich sind. Bei 8 Cogs sind das immerhin 160 MIPS! Zugriffe auf das globale
RAM dauern allerdings länger, ein sogenannter Hub sorgt dafür, dass die 8 Cogs sich nicht in die Quere kommen
und dadurch wird die Zugriffsrate, zum globalen RAM, auf maximal 5 MHz begrenzt. Dies gilt nicht für die
IO-Pins, Ein- und Ausgaben können mit voller Geschwindigkeit (20 MHz) gemacht werden.
Das globale RAM wird zur Datenübertragung zwischen den Cogs verwendet, sowie für grössere Datenarrays, die
im internen Cog RAM keinen Platz haben, und es enthält nach dem Booten den Programmcode für alle Cogs,
der dann beim Start eines Cogs in dessen internes RAM kopiert wird.
Der Propeller hat kein internes Flashrom! Er muss bei jedem Start seinen Code von einer externen Quelle
erhalten. Das kann ein angeschlossener PC sein, oder ein externes kleines serielles EEPROM mit 256 kBit.
Entwicklungs-Software
Der Propeller kann in Assembler programmiert werden, oder in 'Spin', einer speziellen, von Parallax
geschaffenen höheren Programmiersprache. Spin ist eine, etwas eigenwillige, aber mächtige
Programmiersprache. Durch den objektorientierten Ansatz ist es relativ einfach, vorgefertigte Module
in seinen Code einzubinden. Und das ist für das ganze Propeller-Konzept von zentraler Bedeutung.
Spin-Code wird nicht in einzelne Assembler-Instruktionen kompiliert, wie es zum Beispiel bei C der Fall
ist, sondern in einen Zwischencode (ähnlich wie Java), der dann von einem Interpreter, der auf einem Cog
läuft in Echtzeit interpretiert wird. Der Zwischencode befindet sich im globalen RAM, und ist dadurch
nicht auf die Grösse des Cog-RAMs begrenzt. Durch die Interpretation, und den langsameren Zugriff
aufs globale RAM ist Spin Code deutlich langsamer, als Assembler-Code (Faktor 20..200). Assembler Code wird
beim Starten eines Cogs vom globalen RAM als ganzes in das Cog-RAM kopiert, ist deshalb auf etwa 490
Instruktionen begrenzt, und kann nicht mit Spin Code gemischt werden (in einem Cog läuft entweder der
Spin Interpreter, oder der Assembler Code).
Die Spin Entwicklungsumgebung ist gratis von der Parallax Homepage downloadbar. In einer einfachen, aber
durchdachten IDE lassen sich Spin und Assembler Anwendungen programmieren und per Tastendruck zum
Propeller senden. Was allerdings fehlt, ist ein Debugger. Man kann sich zwar damit behelfen
Werte auf einen angeschlossenen Monitor, oder ein Terminal auszugeben (auch von einem parallel laufenden
Cog), aber das ist, gerade für Assemblercode Debugging, nicht komfortabel. Eines meiner ersten Projekte
ist deshalb der PASD (Propeller Assembler Sourcecode Debugger).
Das Propeller Tool von Parallax läuft leider nur auf Windows, deshalb wird auch an alternativen
Opensource-Projekten, mit Assembler
und Downloader gearbeitet.
Entwicklungs-Hardware
Von Parallax gibt es fertige Entwicklungs- und Demoboards. Daneben verkaufen sie mit dem PropPlug/PropClip
auch einfache USB-Programmieradapter.
Das schöne ist, dass der Propeller Chip auch in Bastler/Prototypen freundlichen Ausführungen erhältlich
ist. Ich habe mir nur den nackten Chip im DIL-40 Gehäuse gekauft, und mit einem eigenen USB-seriell Adapter
(basierend auf FT232R) mit dem PC verbunden. Mit einem PropPlug würde das etwa so aussehen:
Die 3.3V habe ich übrigens vom internen Regler des FT232R abgegriffen, das ist kein Problem, bei dem
geringen Stromverbrauch des Propellers.
Hat man an seinem PC noch eine serielle Schnittstelle, so kann man auch damit den Propeller programmieren.
Eine einfache Interface-Schaltung findet man auf der Parallax Homepage.
Die Verbindung mit dem Propeller Tool hat sofort funktioniert, und ich konnte die ersten Tutorial-Beispiele
ausprobieren. Dazu war der Anschluss einer LED an P16,P17 nötig (natürlich mit Vorwiderstand).
Beim Parallax Demoboard gibt es Anschlüsse für PS2-Keyboard und PS2-Maus, viele Beispiele verwenden diese.
Da ich kein PS2-Keyboard zur Hand hatte, und auch keinen PS2-Konnektor aufs Steckbrett bauen wollte, habe ich
ein kleines PC-Programm geschrieben, dass die Tastendrücke der PC-Tastatur seriell zum Propeller schickte, und
das Keyboard.spin Objekt entsprechend angepasst. Das war so praktisch, dass daraus das
PropTerminal Projekt entstanden ist, das auch die Maus und den TV-Monitor
emulieren kann.
Links
Hier ein paar gesammelte Links zu Entwicklungs Hard- und Software zum Propeller.
Propeller Tool usw.:
Parallax
Parallax Shop für die Schweiz und Europa:
Zeko
Entwicklungs Board Bausatz:
tdus