Jeder von uns, der schon einmal einen
Mikrocontroller in Assembler program-
miert hat, kennt die Schwierigkeiten, die
sich im Laufe eines Projektes ergeben
können. Zu Beginn der Arbeit muß sich
der Programmierer in die teilweise kom-
plizierten Architekturen und Befehle des
neuen Controllers einarbeiten.
Anschließend beginnt die Programm-
entwicklung und die Inbetriebnahme
der Applikation. Während dieser Phase
treten häufig Probleme auf, die auf die
Unkenntnis der prozessorspezifischen
Besonderheiten zurückzuführen sind.
Erst ein intensives Studium der Hand-
bücher und Applikationsschriften bringt
dann die erhoffte Lösung. All diese Fak-
toren führen oft zu einem erheblichen
Zeitdruck bei der Softwareentwicklung.
In der Folge fehlt dem Programmierer
diese Zeit in der Testphase der Applika-
tion und bei der Dokumentierung sei-
nes Programms. Nachträgliche Modifi-
kationen der Software oder im schlimm-
sten Fall Rückrufaktionen bereits
ausgelieferter Produkte können die
möglichen Folgen sein.
Das Entwicklungskonzept
Die niederländische Firma Actum Solu-
tions bietet mit der graphischen Ent-
wicklungssoftware ST-REALIZER ein Werk-
zeug, das diese Probleme auf sehr effi-
ziente Weise lösen kann. Die Idee hin-
ter diesem Konzept setzt sozusagen bei
der Geburtsstunde einer neuen Appli-
kation an. Zu Beginn eines Projektes
haben die Entwickler meist eine klare
Vorstellung über die Funktion ihres
neuen Gerätes. Alles, was danach
kommt, also die Auswahl der optimalen
Controllerarchitektur, der richtigen
Gehäusegröße, das Erlernen der Pro-
grammiersprache, das Debugging und
die Dokumentation behindern die Errei-
chung des eigentlichen Zieles und soll-
ten daher möglichst in den Hintergrund
treten. Und genau das ist der Vorteil
einer graphischen Programmierung.
Durch die Verknüpfung einfacher logi-
scher Symbole, die bereits in Libraries
geordnet zusammengefaßt sind, kann
die Funktion einer Applikation mit Hilfe
weniger Mausklicks in einem Editor
X-6 - 10/99 Elektor
EXTRA
———————————————————— PC-P
LUS
Graphisch orientierte Softwareentwicklungstools finden in der
Mikrocontrollerwelt immer größeren Anklang. Für viele Entwickler,
die aus der Automatisierungstechnik oder der Elektroindustrie kom-
men, stellen die immer noch komplizierten und vielfach unkomfor-
tablen herkömmlichen Entwicklungstools eine beträchtliche Hürde
dar. Hier stellt eine graphische Entwicklungssoftware wie der REALI-
ZER eine große Hilfe dar. Im Gegensatz zur bisherigen Version des
ST-REALIZERs verfügt die neue 32-Bit-Version über eine verbesserte
Echtzeitfähigkeit und ermöglicht es erstmals, auch interruptgesteu-
erte Programmabläufe zu beschreiben.
Von Rolf Nandlinger (STMicroelectronics GmbH)
ST-REALIZER
für ST6 und ST7
Ein graphisches Entwicklungstool
der nächsten Generation
beschrieben (“gezeichnet”) werden.
Das Erlernen dieser Art der Program-
mierung geschieht beinahe intuitiv, da
die verwendete Symbolsprache
bewußt sehr einfach ausgelegt wurde.
Ebenso wie die Piktogrammsprache an
Flughäfen international verständlich ist,
sind die Symbole beim ST-REALIZER eng
an die bekannten Schaltungssymbole
der Elektrotechnik angelehnt. Die Ver-
knüpfung der einzelnen Symbole
geschieht ähnlich wie bei einem Schal-
tungsentwurf durch einfache Linien-
führung. Wenn der Programmablauf
vollständig beschrieben ist, kann mit
Hilfe eines integrierten Simulationspro-
gramms das Ergebnis überprüft und
gegebenenfalls optimiert werden. Ist
der Entwickler mit dem Resultat zufrie-
den, sucht er sich aus einer Liste ver-
fügbarer Controller den passenden Typ
aus und läßt sich durch den integrier-
ten Analyser den endgültigen Maschi-
nencode zur Controllerprogrammie-
rung erzeugen. Als Nebeneffekt erhält
der Entwickler durch den Ausdruck des
gezeichneten Programmablaufs eine
vollständige Dokumentation seines Pro-
grammes.
Die nächste Generation
Die bisherige Version des ST-REALIZERs ist
aufgrund seiner strukturierten Program-
mierung in erster Linie für nichtzeitkriti-
sche Ablaufsteuerungen geeignet. Mit
der jetzt vorgestellten 32-Bit-Version ist
es nun erstmals möglich, auch inter-
ruptgesteuerte Programmabläufe zu
beschreiben. Daraus ergeben sich für
den Anwender eine Vielzahl neuer
Anwendungsmöglichkeiten. Anhand
eines Beispiels soll nun gezeigt werden,
wie einfach dies selbst für ungeübte
Programmierer möglich ist.
Problemstellung
Die Aufgabe besteht darin, einen mikro-
controllergesteuerten Lampendimmer
für das Hausstromnetz in zwei Versionen
zu entwickeln. Version A hat als Sollwert-
geber für die Leuchtstärke ein Potentio-
meter. Bei Version B soll dies mit Hilfe von
zwei Drucktasten geschehen.
Funktionsbeschreibung
Die Änderung der Leuchtstärke wird
durch Erhöhung bzw. Erniedrigung des
Zündzeitpunktes eines Triacs ermöglicht.
In der Version A ist dieser Phasenwinkel
proportional zum Analogwert des
Potentiometers. Bei Version B entspricht
der Phasenwinkel einem Zahlenwert,
der durch Tastendruck verändert wird.
Hält der Anwender eine Taste längere
Zeit gedrückt, soll der Zahlenwert fort-
laufend bis hin zu einer definierten
Grenze verändert werden. Der Bezug
für den Zündzeitpunkt des Triacs ist
durch die Information des Netznull-
durchgangs gegeben. Dieses Bezugs-
signal steht an einem Porteingang mit
Interruptfunktion dem Controller zur Ver-
fügung. Tritt dieser Interrupt auf, muß
entsprechend dem vorher ermitteltem
Phasenwinkel eine Verzögerungszeit
generiert werden. Nach Ablauf dieser
Zeit wird der Triac gezündet. Um den
Harwareaufwand für die Spannungs-
versorgung der Applikation gering zu
halten, wird der Triac anstelle eines lan-
gen Zündimpulses mit mehreren kurzen
Impulsen beaufschlagt.
Programmierung
Die vorangegangene Funktionsbe-
schreibung wird nun in eine Symbol-
sprache umgesetzt. Dem Entwickler ste-
hen dazu mehrere Libraries zur Verfü-
gung, aus denen er die benötigten
Abhängigkeiten zusammensetzt.
Version ”Potentiometer”
In Bild 1 ist das symbolisierte Haupt-
programm der Potentiometerversion
des Dimmers dargestellt. Das Symbol
des A/D-Umsetzers liefert als Ergebnis
einen 8-Bit Zahlenwert, der durch zwei
dividiert und auf zwei Endwerte
beschränkt wird. Der so ermittelte Zah-
lenwert zwischen Null und Neunzig ent-
spricht einem Phasenwinkel zwischen
0 % und 100 %. Zur Übergabe des Wer-
tes an die Interruptroutine dient das
Symbol eines Sub-Schems. Die Initiali-
sierung des Controllers, das Starten und
Abfragen des A/D-Umsetzers, die Divi-
sion und so weiter ist in den zugehöri-
gen Libraryfunktionen festgelegt und
bleibt für den Programmierer unsichtbar
im Hintergrund. Da dieses Hauptpro-
gramm sehr einfach aufgebaut ist, sind
keinerlei logische Entscheidungen not-
wendig. Das bedeutet, daß bei jedem
Durchlauf der Hauptprogrammschleife
zuerst das Ergebnis des A/D-Umsetzers
eingelesen, arithmetisch verändert und
dann an die Interruptroutine weiterge-
geben wird. Eine Ablaufsteuerung des
Hauptprogramms, die sogenannte Sta-
temaschine, ist deshalb in diesem Bei-
spiel nicht notwendig.
Bild 2 zeigt die zugehörige Interruptrou-
PC-P
LUS
———————————————————
Elektor
EXTRA
X-7 - 10/99
Bild 1. Hauptprogramm der Beispiel-Version A (Dimmer mit Potisteuerung).
Bild 2. Unterprogramm ”Port Interrupt”.
tine, die auf einem separatem Arbeits-
blatt erstellt werden muß. Gekennzeich-
net wird die Interruptroutine durch das
”Event”-Symbol, das in diesem Beispiel
auf der linken Seite des Arbeitsblattes
plaziert wurde. Durch einen Doppelklick
darauf kann die Art des Interrupts und
die Pinnummer festgelegt werden. Tritt
der Interrupt auf (beim Nulldurchgang
des Sinussignals), wird mit dem errech-
neten Zahlenwert aus dem Hauptpro-
gramm ein Timer gestartet, der den
gewünschten Phasenwinkel erzeugt.
Nach Ablauf der Zeit wird mit Hilfe eines
Oszillators, eines Delays, eines Inverters
und eines dreifach OR-Gatters eine Puls-
folge von fünf Pulsen zu je 0,2 ms
erzeugt. Der Multiplexer dient dazu, die
Pulsfolge gleichzeitig auf vier Portpins
auszugeben, um die Treiberfähigkeit zu
erhöhen. Die Definition des Ports erfolgt
durch Doppelklick auf das Ausgangs-
symbol. Diese Version der Applikation ist
nun fertig beschrieben und kann com-
piliert werden.
Bis zu diesem Zeitpunkt mußte sich der
Anwender noch nicht für einen
bestimmten Controller festlegen. Er hat
nun die Wahl zwischen der ST6 und der
ST7 Mikrocontrollerfamilie von STMicro-
electronics. Innerhalb dieser Familien
sollte zuerst ein größerer Typ selektiert
werden, da zu diesem Zeitpunkt schwer
festzustellen ist, wieviel Ressourcen das
Programm tatsächlich benötigen wird.
Während der Übersetzung informiert der
ST-REALIZER in einem Report über mög-
liche Fehler und gibt Warnungen aus,
falls eine Zweideutigkeit festgestellt
wurde. Am Ende wird eine Statistik
erstellt, die exakt über die benötigten
Ressourcen informiert.
Anhand dieser Informationen kann der
Programmierer nun abschätzen wieviel
Funktionalität noch in diesen Controller
gepackt werden kann, oder ob even-
tuell eine kleinerer Controller mit weni-
ger Speicher ausreicht. Da die graphi-
sche Programmbeschreibung keinerlei
direkte Abhängigkeit zur Hardware hat,
kann ohne Problem nachträglich zwi-
schen einzelnen Controllertypen
gewechselt werden, ohne daß dafür
eine neue Zeichnung erstellt werden
muß. Lediglich die Eingänge und Aus-
gängen müssen per Doppelklick auf
neuen I/O-Pins verteilt werden.
Version ”Drucktaster”
Für die zweite Version der Applikation
werden zur Einstellung der Leuchtstärke
zwei Drucktasten verwendet. Zwei Sym-
bole eines digitalen Eingangs reprä-
sentieren diese Funktion innerhalb des
Schematics. Wie man in Bild 3 sieht,
haben die Symbole der digitalen Ein-
gänge, jeweils einen logischen Aus-
gang. Um die Funktionsweise der REALI-
ZERS richtig zu verstehen, ist es wichtig,
folgende Vereinbarung zu kennen: Der
X-8 - 10/99 Elektor
EXTRA
———————————————————— PC-P
LUS
Bild 3. Hauptprogramm der Beispiel-Version B (Dimmer mit Tastersteuerung).
Bild 4. Pinlevel-Simulation.
Ausgang der Eingangssymbole reprä-
sentiert den physikalischen Zustand am
Eingangspin und hat demnach den
Zustand ”1” oder ”0”. Ein low-aktiver
Tastendruck verursacht auf dieser Lei-
tung den Zustandswechsel 1-0-1. Dieser
Zustandswechsel ist wiederum Eingang
des Zählers und kann diesen dadurch
erhöhen oder erniedrigen. Zwischen Ein-
gang und Zähler ist jeweils ein NOR-Gat-
ter geschaltet. Durch diese Art der Ver-
schaltung wird erreicht, daß der Zähl-
wert die durch Konstanten festgelegten
Grenzen für den minimalen und maxi-
malen Phasenwinkel nicht überschreitet.
Der Anwender muß sich natürlich noch
überlegen, wie er die Grenzen des
Zählers überprüft. In unserem Beispiel ist
dafür im Hauptprogramm eine soge-
nannte Statemaschine erforderlich. Wie
man in Bild 3 erkennen kann, besteht
dieses symbolisierte Flußdiagramm aus
Zuständen (States = Kreise), in denen
etwas ausgeführt werden kann und aus
Bedingungen (Conditions = Doppel-
pfeile), die erfüllt sein müssen, um von
einem Zustand in den nächsten zu
gelangen. Auch hier ist es wichtig zu
verstehen, daß ein aktiver Zustands-
name (z.B. ”dimm”) mit einer logischen
”1” und alle nichtaktiven Zustandsna-
men mit einer logischen ”0” gleichzu-
setzen sind. Taucht der aktive Name in
anderen Teile der Zeichnung wieder
auf, sind alle Schaltungsteile, die damit
direkt verbunden sind, ebenfalls logisch
”1”. Der Wechsel zwischen zwei Zustän-
den findet dann statt, wenn der Name
der Bedingung durch einen damit ver-
bundenen Schaltungsteil auf ”1”gesetzt
wird. Erreicht beispielsweise der Zähler
das obere Limit, wird der entspre-
chende Ausgang des Komparators auf
”1” gesetzt. Dieser Ausgang ist gleich-
gesetzt mit dem Namen ”uplimit”. Fol-
gerichtig wechselt die Statemaschine
vom Zustand ”dimm” in den Zustand
”preset”. Dadurch wird der Name ”pre-
set” aktiv und sperrt den Tastereingang
”Up-Button” solange, bis der Zähler wie-
der erniedrigt wurde. Nachdem der
richtige Zahlenwert auf diese Art und
Weise ermittelt ist, wird er an die Inter-
ruptroutine übergeben. Die Interrupt-
routinen von Version A und Version B
sind identisch.
Simulation
Nachdem der Anwender nun auch
diese Version fehlerfrei compiliert hat,
kann er beide Programme in einem
graphischen Simulator testen. Zur Aus-
wahl steht entweder eine Pinlevelsimu-
lation oder eine Simulation auf der
Ebene der Schematics. Die erste Mög-
lichkeit zeigt den Mikrocontroller als
komplettes IC (Bild 4), an dessen Ein-
gangspins verschiedene Signalformen
vom digitalen Eingang über analoge
Eingänge bis hin zum Sinus- oder Recht-
eckgenerator angeschlossen werden
können. An den Ausgangspins stehen
digitale Monitore und symbolisierte
Osczilloskope zur Verfügung. Durch
diese Art der Simulation kann sehr gut
das Verhalten des gesamten Bausteins
nach außen hin untersucht werden. Bei
der zweiten Methode können die eben
erwähnten Simulatoren und Monitore
direkt mit beliebigen Leitungen inner-
halb der Schaltung verbunden werden.
Diese Art der Simulation ist in Bild 5 dar-
gestellt und eignet sich besonders für
Detailuntersuchungen.
Fazit
Wie anhand des Beispiels gezeigt
wurde, ist es mit der neuen Generation
des ST-REALIZERs möglich, in sehr kurzer
Zeit auch zeitkritische Applikation zu
beschreiben, ohne Vorkenntnisse einer
controllerspezifischen Programmierspra-
che zu haben. Neben dem Vorteil der
kurzen Einarbeitungs- und Entwicklungs-
zeit kann der Anwender auch auf gete-
stete Libraryfunktionen zurückgreifen
und steigert somit die Qualität seines Pro-
gramms. Quasi als Nebeneffekt muß der
Programmierer keine Zeit mehr für auf-
wendige Beschreibungen seines Codes
verwenden, da der komplette Pro-
grammablauf auf wenigen Seiten Papier
allgemein verständlich dargestellt ist. Die
neue Generation des ST-REALIZERs stellt
somit eine wertvolle Ergänzung zu den
traditionellen Programmiersprachen für
Mikrocontroller dar.
(982093-1)
Adressen und Bezugsquellen siehe S.11 (“Readers’ Corner ”).
PC-P
LUS
———————————————————
Elektor
EXTRA
X-9 - 10/99
Bild 5. Funktionale Simulation.