TPS 2: Der Programmiermodus
Um
den Controller über die Tasten programmieren zu können,
werden zwei weitere Kabel auf das STK gesetzt. Für die
Programmierung werden die Tasten S1 (C3) und S2 (C0) gebraucht. Die
Lage der Tasten entspricht dann dem ursprünglichen Entwurf:
Dateneingabe links, Programmieren rechts.
In den
Programmiermodus gelangt man mit einem Reset bei gedrückter
Programmiertaste S2. Man kann nun allein mit der Taste S2 das ganze
Programm ansehen. Jede Adresse erfordert dazu zwei
Tastenbetätigungen an S2. So wechselt man jeweils in die Anzeige
des Befehls und der Daten. Außerdem wird jeweils für kurze
Zeit die aktuelle Adresse angezeigt.
- Erster Tastendruck S2:
- Adresse (untere vier Bit) anzeigen, 300 ms
- Anzeige aus, 300 ms
- Befehl anzeigen
- Zweiter Tastendruck S2
- Daten anzeigen
- Dritter Tastendruck S2
- Nächste Adresse anzeigen, 300 ms
- usw.
Will
man z.B. ein bestehendes Programm mit fünf Schritten nur ansehen,
aber nicht verändern, dann gelangt man mit insgesamt zehn
Betätigungen von S2 bis ans Ende. Weil jeweils die aktuelle
Adresse kurz eingeblendet wird, fällt die Orientierung leicht. Man
weiß immer, on die Anzeige gerade einen Befehl oder Daten
darstellt.
Die Taste S1 kommt nur zur Anwendung, wenn man einen
Befehl oder seine Daten verändern will. Grundsätzlich
können nur Zahlenwerte zwischen Null und 15 eingegeben werden. Mit
dem ersten Druck auf S1 wird eine Null eingestellt. Jeder folgende
Tastendruck erhöht die Zahl um Eins. Der aktuelle Stand wird
jeweils über die vier LEDs binär angezeigt. Will man z.B.
eine Vier eingeben, drückt man insgesamt fünfmal auf S1: 0,
1, 2, 3, 4
Wenn auf diese Weise entweder der Befehl oder die
Daten oder beides neu eingegeben wurde, führt der zweite
Tastendruck auf S2 dazu, dass dieses Byte ins EEPROM programmiert wird.
Um das zu verdeutlichen wird die LED-Anzeige für 600 ms
abgeschaltet, bevor die nächste Adresse und danach der
nächste Befehl angezeigt wird. Diese kleine Pause soll intuitiv
als Programmiervorgang verstanden werden. Man kann im Hinterkopf die
Vorstellung aufbauen, dass das System die Energie für die Anzeige
einspart und für die Programmierung des EEPROMs verwendet. Sowas
kennt man ja schon vom Auto: Wenn der Anlasser betätigt wird, geht
für einen kurzen Moment das Licht und das Radio aus. Das hilft
sehr, wenn man ein schon bestehendes Programm nur an einer Stelle
verändern möchte. Mit S2 scrollt man dann bis zur
gewünschten Stelle und verändert mit S1 den Befehl oder die
Daten, um sie dann mit S2 zu speichern.
Will man ein Programm mit z.B. zwei Bytes (&H17, &H30) komplett neu eingeben, dann muss so getippt werden:
Reset+S2
2 x S1
S2
8 x S1
S2
4 x S1
S2
1 x S1
S2
Wenn
man mal zu oft getippt hat, muss man noch einmal ganz rum. Das kennt
man ja von Digitaluhren. Allerdings ist einmal rum nicht 60, sondern in
diesem Fall nur 16.
Übrigens, ein Programm mit nur zwei
Bytes, was kann das wohl sein. Wenn man sich die Befehle und Daten
genau ansieht, tut es dies: Drei LEDs einschalten und dann Ende in Form
einer Endlosschleife mit Sprung auf sich selbst.
Download: TPS2
Programmieren:
Adr = 0
Prog = 0
Do
Adrlo = Adr And 15 'Adresse anzeigen
Portd = 255 - Adr
Waitms 300
Portd = 255 - 0
Waitms 200
Readeeprom Eebyte , Adr
Dat = Eebyte And 15
Kom = Eebyte / 16
Portd = 255 - Kom 'Befehl anzeigen
Do
Loop Until S2 = 1
Waitms 50
Prog = 1 'Phase 1: Befehl anzeigen
Do
If S1 = 0 Then
If Prog = 1 Then
Prog = 2
Kom = 15
End If
If Prog = 2 Then 'Phase 2: Befehl verändert
Kom = Kom + 1
Kom = Kom And 15
Portd = 255 - Kom
End If
If Prog = 3 Then : 'Phase 3: Befehl unverändert, Daten ändern
Prog = 5
Dat = 15
End If
If Prog = 4 Then 'Phase 4: Befehl und Daten geändert
Prog = 5
Dat = 15
End If
If Prog = 5 Then 'Phase 5: Daten verändert
Dat = Dat + 1
Dat = Dat And 15
Portd = 255 - Dat
End If
Waitms 50
Do
Loop Until S1 = 1
Waitms 50
End If
If S2 = 0 Then
If Prog = 3 Then Prog = 7 'nur angezeigt, nicht verändert
If Prog = 1 Then
Portd = 255 - Dat
Prog = 3
End If
If Prog = 4 Then
Portd = 255 - Dat
Prog = 6
End If
If Prog = 2 Then
Portd = 255 - Dat
Prog = 4
End If
If Prog = 6 Then 'nur Kommando wurde verändert
Dat = Dat And 15
Eebyte = Kom * 16
Eebyte = Eebyte + Dat
Writeeeprom Eebyte , Adr
Portd = 255 - 0
Waitms 600
Adr = Adr + 1
Prog = 0
End If
If Prog = 5 Then 'Daten wurden verändert
Dat = Dat And 15
Eebyte = Kom * 16
Eebyte = Eebyte + Dat
Writeeeprom Eebyte , Adr
Portd = 255 - 0
Waitms 600
Adr = Adr + 1
Prog = 0
End If
If Prog = 7 Then
Adr = Adr + 1
Prog = 0
End If
Waitms 50
Do
Loop Until S2 = 1
Waitms 50
End If
Loop Until Prog = 0
Loop
End
Das Bascom-Programm arbeitet im Programmiermodus wie eine
State-Machine. Es durchläuft bei der Eingabe mehrere Phasen Prog = 0 bis Prog =
7, in Abhängigkeit davon, ob der Speicheringhalt nur angezeigt oder auch
verändert werden soll. Die Tasten sind durch eine Wartezeit von 50 ms
entprellt.
Und hier einige Programme, die man in diesem Stadium
eingeben und ausführen kann:
Lauflicht 1:
&H11, &H28, &H12,
&H28, &H14, &H28, &H18, &H28, &H38
Lauflicht 2:
&H11, &H28, &H12,
&H28, &H14, &H28, &H18, &H28, &H14, &H28, &H12, &H28, &H3C
Zeitschalter, eine Minute:
&H1F, &H2F, &H10,
&H30
Am Anfang schreibt man sich die Programme vielleicht noch
mit Kommentaren auf, aber nach einiger Zeit lernt man digital zu denken und zu
fühlen. Mensch und Maschine werden eins, so wie beim Motorradfahren.
zurück
weiter