Programmieren mit dem TI-84

Programmieren mit dem TI-84: Wie man seine eigenen grafischen Taschenrechner programmiert
Keine Kommentare

Grafische Taschenrechner kommen normalerweise nicht aus freien Stücken ins Leben des Entwicklers – wer kein Examen zu bestehen hat, bleibt bei CAS und App. Dass die kleinen Rechner programmierbar sind, erkennt man erst auf den zweiten Blick. Wir schauen uns an, was mit einem TI-84 so alles möglich ist.

Im Hause Texas Instruments – die Rechner aus dem Hause HP bleiben ob der eigenwilligen Reverse Polish Notation und ihrer geringeren Verbreitung in diesem Artikel außen vor – setzt man auf Derivate des Prozessoroldies Z80. Bei den mit einem Farbbildschirm ausgestatteten Modellen läuft dieser mit 48 MHz. Dass man dem Rechner beim Zeichnen eines Sinus zusehen kann, hat sich durch die Performancesteigerung nicht geändert.

Trotzdem gilt, dass ein intelligent geschriebenes Programm in der Praxis wertvolle Zeit spart. Die hier besprochenen Anweisungen gelten für den TI-83 und den TI-84 – die 68k-basierten Rechner und die CAS-Modelle sind eine andere Gattung, die unsere Programme nur teilweise akzeptiert.

Einrichtung

In der Welt der TI-Programmierung gibt es zwei mehr oder weniger voneinander getrennte Arbeitsumgebungen: einerseits Programme, andererseits Applikationen. Ein Programm ist auf einem TI-Taschenrechner ein Stück Software, das eine mathematische oder sonstige Funktion bereitstellt. Ein Beispiel dafür wäre ein Impendanzrechner, der nach (komplexen) Befragungen des Benutzers einen Wert zurückliefert, mit dem man weiterrechnen kann. Applikationen sind die vollwertigeren Softwarepakete, die Instruktoren zum Kochen bringen – ein gutes Beispiel sind die diversen Spiele. Wir wollen uns in den folgenden Schritten auf Programme konzentrieren.

Texas Instruments setzt nach wie vor auf Mini-USB – wer seinen Rechner mit dem PC verbinden möchte, muss also ein zusätzliches Kabel benutzen. Für die Ansteuerung unter Windows ist TI Connect erforderlich. Auch wenn der Set-up-Assistent selbst keinen Reboot verlangt, ist er nach Erfahrung des Autors empfehlenswert – die Treibereinrichtung erfolgt erst danach. Starten Sie TI Connect jedenfalls und prüfen Sie die erfolgreiche Erkennung Ihrer Hardware. Finden sich die beiden Rechner auch dann nicht, so wechseln Sie in den Gerätemanager. Der Rechner erscheint dort normalerweise wie in Abbildung 1 gezeigt.

Abb. 1: Hier ist etwas faul

Abb. 1: Hier ist etwas faul

Klicken Sie den TI-84 rechts an und entscheiden Sie sich für die Kontextmenüoption zur Aktualisierung der Treiber. Lassen Sie Windows nicht online suchen, sondern navigieren Sie von Hand in den Ordner C:\Program Files (x86)\TI Education\TI Connect CE\drivers. Windows erfreut Sie danach noch mit einem Treibersignierungsdialog, der zu quittieren ist. Lohn der Mühen ist, dass der Rechner in Connect CE auftaucht. Wir arbeiten in den folgenden Schritten in deutscher Sprache; achten Sie darauf, dass sich Methodennamen gegenüber einer auf Englisch eingestellten Workstation unterscheiden. Im Hauptmenü von Connect CE findet sich eine Option zum Übersetzen. Die IDE passt Programme im Rahmen des Deployments zudem an die Sprache des angeschlossenen Taschenrechners an.

Beginn der Arbeiten

Die Kommandoapplikation ist nicht nur auf das Programmieren der Taschenrechner beschränkt. Sie erlaubt auch das Übertragen von Messdaten und das Machen von Screenshots. Wer einfach drauflosprogrammieren möchte, klickt in der ganz links eingeblendeten Statusleiste auf das Piktogramm mit den drei Quadraten. Entscheiden Sie sich danach für die Option Neues Programm, um eine neue Applikation zu erzeugen. Die TI-Basic-Programme hören auf den Namen .8xp. Abbildung 2 zeigt die Entwicklungsumgebung.

Abb. 2: Die IDE von TI ist vergleichsweise spartanisch

Abb. 2: Die IDE von TI ist vergleichsweise spartanisch

Kleine TI-Taschenrechner wie der hier verwendete TI-84 Plus CE unterscheiden sich von Klassikern wie dem Voyage dadurch, dass sie keinen Programmstarter mitbringen. Die Programme leben als „Variable“, die man aus Rechenoperationen heraus aufruft. Das Festlegen des zu verwendenden Namens erfolgt dann über das Feld Var Name, das in Abbildung 2 zu sehen ist. In der Haupttextbox geben wir folgenden Code ein:

ClrHome
Output(2,2,"HELLO, WORLD!")

An sich handelt es sich hier um ein gewöhnliches BASIC-Programm. Verwirrend ist, dass man online immer wieder Listings findet, in denen die Statements mit Doppelpunkten beginnen. Es handelt sich hierbei um eine Besonderheit von TI-Basic, die bei der Arbeit am Desktop aber keine Rolle spielt. Wichtig ist, dass die Programmiersprache Whitespace-sensitiv ist: Wer vor oder nach dem Komma ein Leerzeichen platziert, bekommt zur Laufzeit einen Fehler.

Speichern Sie das Programm durch Drücken von STRG + S. Das Übergeben des Dateinamens ist irrelevant. Im nächsten Schritt folgt ein Klick auf das Taschenrechnerpiktogramm in der Statusleiste. TI Connect blendet daraufhin ein Fenster ein, in dem Sie, wie in Abbildung 3 gezeigt, die Zieleinstellungen beeinflussen. Wichtig ist, dass sie die Checkbox Gleichnamigen vorhandenen Inhalt auf dem Zieltaschenrechner ersetzen markieren. Beim späteren Überschreiben kommt es sonst zu Problemen.

Abb. 3: Wer mehrere Taschenrechner am PC angeschlossen hat, muss hier aufpassen

Abb. 3: Wer mehrere Taschenrechner am PC angeschlossen hat, muss hier aufpassen

Für die eigentliche Programmausführung klicken Sie am Rechner auf die PRGM-Taste. Der Rechner reagiert darauf mit der Einblendung einer Liste aller Programme, die im Moment auf ihm installiert sind. Selektieren Sie das gewünschte Programm und drücken Sie auf ENTER, um es zur Ausführung freizugeben. Ein weiterer Druck auf Enter befiehlt dann die eigentliche Abarbeitung nach dem in Abbildung 4 gezeigten Schema.

Abb. 4: Drei Schritte bei der Programmabarbeitung

Abb. 4: Drei Schritte bei der Programmabarbeitung

Daten einlesen

Das Benutzerinterface von Texas-Instruments-Taschenrechnern zeichnet sich durch eine Menüstruktur aus, durch die der Benutzer mit dem 5-Wege-Navigator scrollt. Unser Programm ist in der Lage, sich in diese Menüstruktur zu integrieren. Für einen ersten Test wollen wir die Inhalte des „Hallo-Welt“-Codes durch folgende Applikation ersetzen (Listing 1).

Menu("Tam's lästige Snackbar!","Döner",DO,"Gyros",GY,"Keks",KE,"Mate",MA)
Lbl DO
Lbl GY
Lbl KE
Output(4,4,"FUTTER AHOY!")
Stop
Lbl MA
Output(4,4,"DRINK AHOY!")
END

Die Menüfunktion erwartet als ersten Parameter einen String, der als Titel des zu generierenden Menüs dient. Darauf folgen Paare aus String und Label. Parameter 1 legt den Namen der Menüoption fest, während Parameter 2 das Label darstellt, das der Interpreter bei der Aktivierung der jeweiligen Option anspringen wird. Da Programme primär für kleine mathematische Aufgaben vorgesehen sind, beschränkt Texas Instruments die maximale Länge der erlaubten Labels auf zwei Zeichen. Im Fall unseres Programms gibt es einerseits die drei Labels für die verschiedenen Nahrungsmittel, andererseits auch ein Label für das Getränk. In beiden Fällen rufen wir Output auf, um Informationen auf den Bildschirm zu bringen. Das End-Statement beendet die Programmausführung.

Schicken Sie die Software auf den Taschenrechner, um sich an den in Abbildungen 5 gezeigten Bildschirmen zu erfreuen. Beachten Sie, dass die in der Abbildung gezeigte Meldung direkt über den sonstigen Rechenprozessen erscheinen würde, wenn schon entsprechende Informationen auf dem Bildschirm wären. Das permanente Aufrufen der Methode zum Leeren des Bildschirms ist keine Pedanterie.

Abb. 5: Das Menü erscheint am Bildschirm (links), die Meldung verhält sich analog (rechts)

Abb. 5: Das Menü erscheint am Bildschirm (links), die Meldung verhält sich analog (rechts)

Variablen unter Vorbehalt

Wirklich komplizierte Software setzt die Verwendung von Variablen voraus. Zur Demonstration der Möglichkeiten wollen wir die Position der Meldung am Bildschirm verschieben. Hierzu reicht es aus, das Programm nach dem Schema aus Listing 2 anzupassen.

Menu("Tam's lästige Snackbar!","Döner",DO,"Gyros",GY,"Keks",KE,"Mate",MA)
Lbl DO
Lbl GY
Lbl KE
Input "WO:",X
Output(X,4,"FUTTER AHOY!")
. . .

Input ist für das Entgegennehmen von Werten verantwortlich. Der als erster Parameter übergebene String erscheint als Abfrage am Bildschirm. Er erlaubt es, dem Benutzer weitere Informationen darüber zu liefern, was er in das Programm einzugeben hat. In unserem Fall wandern die Ergebnisse in die Variable X, die im nächsten Schritt einen Teil der Positionierung des Output-Kommandos beeinflusst.

Kritisch ist, dass Variablen am Texas Instruments 84 nicht beliebige Namen aufnehmen dürfen. Für numerische Variablen stehen nur 27 Slots zur Verfügung, die einerseits die Namen von A bis Z und andererseits den Namen Theta aufweisen. Neben den Problemen beim Hantieren mit den Variablen ist ärgerlich, dass die Variablen mit dem Rest des Taschenrechners geteilt werden. Abbildung 6 zeigt beispielsweise, dass unser Programm einen schon in der Variable X gespeicherten Wert während der Programmausführung zerstören würde.

Abb. 6: BASIC-Programme entfalten mitunter Nebeneffekte

Abb. 6: BASIC-Programme entfalten mitunter Nebeneffekte

Falls Sie derartige Nebenwirkungen vermeiden wollen, können Sie den Inhalt der Variablen durch Aufruf von DelVar zurücksetzen. Sie enthalten dann den numerischen Wert null.

Input "WO:",X
Output(X,4,"FUTTER AHOY!")
DelVar X

Beachten Sie, dass viele Formeln auch mit null „funktionieren“ – bei der Weitergabe von Programmen für TI-84-Taschenrechner ist eine Schulung der Anwender unbedingt erforderlich. Dieser normalerweise lästige Nebeneffekt kann zur Verkettung von Programmen genutzt werden. Die weiter oben verwendete Syntax zum Aufrufen unseres Programms lässt sich zum Aktivieren von Subroutinen einspannen. Stammen beide Programme aus dem gleichen Haus, ist es möglich, die geteilten Variablen statt des am TI-84 nicht zur Verfügung stehenden Parametersubsystems zu verwenden.

Neben numerischen Zahlen kennt der TI-84 auch Listen von Werten und Strings. Für Listen sind die Speicherplätze L1 bis L6 vorgesehen, während Strings in dezidierten Speicherplätzen unterkommen. Zusätzlich kennt der TI-84 noch die Möglichkeit, benutzerdefinierte Listen mit bis zu fünf Zeichen langen Namen anzulegen.

Wer eine Liste mit einem ausreichend seltsamen Namen erzeugt, kann – bis zu einem gewissen Grad – davon ausgehen, dass er von anderen Benutzern in Ruhe gelassen wird. Leider ist das Speichern von Strings in Listen aufwendig, weshalb sich die Vorgehensweise zur Unschädlichmachung der in Rechenprozessen gerne verwendeten numerischen Variablen eignet.
Da die weiter oben verwendete Variable X durchaus häufig ist, wollen wir unser kleines Snackbar-Programm nun absichern. Dazu müssen wir als erstes den Wert von X in eine neue Variable kopieren. Dafür verwenden wir als Listenname TAMSK.

Aufgrund der Beschränkungen unserer Layoutmöglichkeiten sieht der folgende Teil des Listings seltsam aus. Der TI-84 kennt ein spezielles Symbol in Form eines tiefgestellten L, das für die Adressierung einer Liste steht. Es lässt sich auf der Workstation über das im Editor links eingeblendete Menü einfügen. Ebenda findet sich auch der Pfeil, der für das Belegen von Variablenwerten verantwortlich ist. An dieser Stelle zeigt sich die mathematische Abstammung von TI-Basic. Das Schreiben einer Variablen erfolgt am TI-84, indem man den Wert über das Pfeilsystem in die Variable schiebt:

X→⌊TAMSK(1)
Menu("Tam's lästige Snackbar!","Döner",DO,"Gyros",GY,"Keks",KE,"Mate",MA)
Lbl DO
Lbl GY
Lbl KE

Ursache für die Manipulationen mit der Variable X ist, dass der Input-Befehl nur numerische oder Stringvariablen akzeptiert. Er ist nicht in der Lage, Werte in Richtung eines Listenfeldes zu schreiben – auch nicht, wenn es sich dabei um Zahlen handelt:

Input "Wohin?",X
Output(X,4,"FUTTER AHOY!")
Goto EN

Leider kann der Rechner die Transformation nicht automatisch durchführen. Wir benötigen am Ende des Programms ein Restaurierungs- Snippet, das nach dem folgenden Schema aufzubauen ist:

Lbl MA
Output(4,4,"DRINK AHOY!")
Lbl EN
⌊TAMSK(1)→X
END

Mit der neuen Version unseres Programms gibt es keine Probleme mit dem Wert der Variable X. Interessant ist, dass Listen in TI-Basic am Wert 1 beginnen. Wer also Arrays am Computer gewohnt ist, muss umdenken.

An dieser Stelle sei noch ein kleines Programm vorgeführt, das der Autor in der Praxis verwendet. Es berechnet den Impendanzwert eines Kondensators bei einer bestimmten Frequenz:

Prompt C
Prompt F
1/(i*2*π*F*C)

Prompt ist eine einfachere Variante des Input-Kommandos, die während ihrer Abarbeitung den Namen der Variable anzeigt, die gerade eingelesen wird. Interessant ist das Zurückgeben des Werts – ein allein in einer Zeile stehender mathematischer Ausdruck dient dem Rechner als Rückgabewert. Abbildung 7 zeigt einen Beispielrechenlauf. Wer in seinem eigenen Programm komplexe Zahlen verwenden möchte, muss darauf achten, das i-Symbol aus dem weiter oben angesprochenen Werkzeugkasten zu entnehmen. Wer mit der Tastatur des Rechners oder der Tastatur des PCs ein I eintippt, erhält kein kompilationsfähiges Programm.

Abb. 7: Die komplexe Zahl ist am Platz

Abb. 7: Die komplexe Zahl ist am Platz

Flow Control

Da TI-Basic einst nicht für Informatiker, sondern für klassische Ingenieure entwickelt wurde, ist die Sprache reich an Sicherheitsüberprüfungen. Übergibt man Funktionen einen Koordinatenwert, der außerhalb des angezeigten Bereichs liegt, so beendet der Taschenrechner die Programmausführung. Für unser Programm ist das insofern ungünstig, als ein zu großer oder zu kleiner Wert in X zu einem Fehler führt. Der einfachste Weg zur Umgehung des Problems bestünde darin, den Benutzer so lange nach einer Zahl zu fragen, bis er einen gültigen Wert anliefert. Hierzu benötigen wir im ersten Schritt ein Werkzeug, das konditionale Ausführung ermöglicht:

Input "WO:",X
If X<7
Output(X,4,"FUTTER AHOY!")
Output(1,4,"DANKE!")

Analog zu klassischem BASIC bietet auch der TI-84 eine einwertige Istselektion an. Findet der Rechner ein Statement wie If, so wird das darauffolgende Kommando nur dann ausgeführt, wenn die jeweilige Bedingung erfüllt ist. Im Fall unseres Programms würde dies bedeuten, dass „FUTTER AHOY!“ nur dann erscheint, wenn X einen gültigen Wert aufweist. Die Abarbeitung der Ausgabe „DANKE!“ erfolgt derweil immer.

Wer mehrzeilige Blöcke konstruieren möchte, muss auf den Then-Operator zurückgreifen. Unser Snippet inkludiert noch eine Else-Bedingung, die – Visual Basic und Co. lassen grüßen – immer dann ausgeführt wird, wenn keine andere Bedingung zutrifft (Listing 3).

Input "WO:",X
If X<7
Then
Output(X,4,"FUTTER AHOY!")
Output(1,4,"DANKE!")
Else
ClrHome
Goto DO
End

Von Bedeutung ist, dass das Ende des If-Blocks durch einen End-Operator angezeigt wird. Erkennt unser Programm die Eingabe eines ungültigen Werts, so leert es im ersten Schritt den Bildschirm, um danach wieder nach oben zu springen und den Benutzer zu einem weiteren Eingabelauf zu zwingen. Sollte sich ihr Programm jemals in einer nicht verlassbaren Endlosschleife befinden, so drücken Sie einfach auf den On-Knopf. Er beendet alles, was gerade am Rechner läuft – ein Befehl, der auch hilfreich ist, wenn die Berechnung eines Graphen oder die Darstellung von Informationen zu viel Zeit in Anspruch nimmt. TI spendiert dem TI-84 drei zweiwertige logische Operatoren: And, Or und Xor erlauben die Kombination von zwei Bedingungen:

If X=0  and  Y=1
Disp "Ja"

Der Inversionsoperator Not ist insofern besonders, als er den angelieferten Wert in einer Klammer erwartet:

:If not(X≠0)
:Disp "X Nicht Null"

Weitere Informationen zu diesem Thema finden sich auf https://education.ti.com. Falls Texas Instruments den Link irgendwann ändert, so suchen Sie nach dem Dateinamen TI84_Plus_CE_ProgrammingGuide_EN.pdf.

Intelligente Schleife

Wer je einen Mikrocontroller programmiert hat, weiß, dass man mit If und Goto sehr komplexe Programme realisieren kann. Die Betonung liegt hier auf „kann“. Komfortabel ist die Vorgehensweise nicht. Schleifenbefehle sind ein schönerer Weg; beginnen wir mit der klassischen for-Zählschleife:

For(X,10,160,2)
. . .
End

Beachten Sie, dass der hier übergebene Sprungparameter nicht unbedingt erforderlich ist. Wenn Ihr Programm mit einer Inkrementierung um 1 auskommt, lässt sich die Schleife folgendermaßen anschreiben:

For(X,10,160
. . .
End

Das Fehlen der Klammer am Ende ist kein Druckfehler. Analog zum Rechnen im Algebraeingabemodus kann der TI-84 „fehlende“ Operatoren am Ende jeder Programmzeile automatisch ergänzen. Insbesondere in englischen Quellen findet man häufig Code, der fast komplett ohne schließende Klammern auskommt. Der Autor hält diese Vorgehensweise allerdings für unsauber, weshalb sich in seinen Projekten schließende Klammern finden.

For-Schleifen sind nicht der einzige Weg zur repetitiven Wiederholung. Die while-Schleife stellt die TI-Version einer kopfgesteuerten Iteration dar. Ihre Syntax ist einfach:

:While condition
:command (while condition is true)
:command (while condition is true)
:End

Wünschen Sie sich eine fußgesteuerte Schleife, so verwenden Sie den Repeat-Befehl. Auch hier gilt, dass der zu wiederholende Block durch einen End-Operator beendet wird:

Repeat condition
command (until condition is true)
command (until condition is true)
End

Zu guter Letzt wollen wir noch eine Subroutine realisieren. Hierzu benötigen wir prinzipiell ein zweites Programm. Klicken Sie auf das Plussymbol oben links am Bildschirm, um TI Connect zum Öffnen eines weiteren Tabs zu animieren. Achten Sie darauf, als Variablennamen den String PROG03 zu vergeben. Der Korpus des Programms sieht folgendermaßen aus:

ClrHome
Output(1,4,"FALSCHE EINGABE!")
Wait 1
ClrHome
Return

Für den Subroutineneinsatz vorgesehene Programme verwenden den Return-Operator, um die Ausführung zu beenden und die Kontrolle an den Aufrufer zurückzugeben. Am Ende jeder Routine platziert der Rechner zudem ein implizites Return. Quasi nebenbei stellt dieses Programm-Snippet auch den Wait-Operator vor, mit dem Sie das Programm pausieren können. Senden Sie das Programm danach wie gewohnt auf den Taschenrechner. Im von weiter oben zu übernehmenden Hauptprogramm lässt sich die Methode dann über das prgm-Makro aufrufen. Wichtig ist, dass zwischen dem Präfix und dem Programmnamen kein Leerzeichen stehen darf:

. . .
Else
prgmPROG03
ClrHome
Goto DO
End

Unsere Subroutine ist insofern einfach, als sie keinen Wert zurückliefern möchte. Ist das aus irgendeinem Grund erforderlich, so müssen Sie entweder auf eine Liste oder auf eine der geteilten Variablen zurückgreifen.

In den Grafikmodus

TI-Taschenrechner sind konzeptuell an alte Heimcomputer angelegt. Analog zu C64 und Co. bieten auch sie sowohl einen Grafik- als auch einen Textmodus. Bisher ist unser Programm im Textmodus geblieben. Als kleine Grafikaufgabe wollen wir nun eine Gruppe von Pixeln am Bildschirm anpassen. Hierzu benötigen wir im ersten Schritt zwei For-Schleifen, die einen X-und Y-Bereich adressieren. Danach rufen wir die Methode Pxl-Ein auf, um das Pixel einzufärben (Listing 4).

LöBild
For(X,10,160)
For(Y,10,160)
Pxl-Ein(X,Y,11)
End
End
Wait 5

Wenn Sie das vorliegende Programm zur Ausführung freigeben, sehen Sie, wie sich der Bildschirm langsam rot verfärbt. Die im Hintergrund eingeblendeten Funktionen, Tabellen und sonstigen Nettigkeiten sind ein Überbleibsel dessen, was Sie vor dem Aufruf des Programms in den Grafikregistern des TI-84 abgelegt hatten. Wundern Sie sich nicht darüber, dass TI Connect während der Ausführung des Programms die Verbindung zum Rechner verliert. Wenn Sie die Kontrolle sofort wieder übernehmen möchten, müssen Sie auf den Ordner-Knopf drücken.

Als letztes Beispiel wollen wir die Farbfähigkeiten des Rechners nutzen, indem wir ein zufällig eingefärbtes Feld erzeugen. Hierzu dient – auf deutschsprachigen Versionen von TI Connect – der Befehl zufInt, im Englischen würde man randInt verwenden (Listing 5).

LöBild
For(X,10,160)
For(Y,10,160)
Pxl-Ein(X,Y,zufInt(10,24))
End
End
Wait 5

Wer das vorliegende Programm zur Ausführung bringt, erhält das in Abbildung 8 gezeigte Resultat. Der TI-84 bietet keine vollwertige RGB-Farbdarstellung, Entwickler müssen stattdessen mit einer (im Menü des Rechners anzeigbaren) Palette auskommen.

Abb. 8: Zufällige Farbinformationen sind auf dem Bildschirm

Abb. 8: Zufällige Farbinformationen sind auf dem Bildschirm

Fazit

Trotz der eingeschränkten Möglichkeiten der Programmierumgebung bietet TI-Basic eine Vielzahl von Komfortfunktionen an, die die Erfüllung häufig benötigter mathematischer und finanzmathematischer Aufgaben erleichtern. Auf einem 68K-basierten Taschenrechner ist die Programmierumgebung sogar noch mächtiger. Wer Spiele und andere extrem komplizierte Programme realisieren möchte, muss auf das (normalerweise mit Z80-Assembler) arbeitende TI-SDK ausweichen.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -