Die Tasten-programmierbare Steuerung TPS


Elektronik-Labor  Projekte   TPS




TPS 2: Der Programmiermodus
TPS 3: Rechnen mit Variablen
TPS 4: Sprünge und Verzweigungen
Mini-TPS mit ATmega8

Die Idee ist einfach: Ein kleiner Steuercomputer soll ohne PC oder Programmiergerät nur über ein paar Tasten programmiert werden können.  Der Befehlsvorrat soll so einfach sein, dass man ihn im Kopf behalten kann um notfalls ganz ohne Unterlagen ein Steuerprogramm zu entwickeln. Damit alles möglichst klein und überschaubar ist, soll es ein 4-Bit-System werden. Es gibt vier digitale Ausgänge, vier digitale Eingänge, intern verarbeitete Daten haben eine Breite von vier Bit, und auch die Befehle sind nur mit vier Bit kodiert, d.h. es gibt maximal 16 Befehle, die man sich merken muss.

Bei der Programmeingabe hat man ein Display aus vier LEDs, das abwechselnd Befehle und Daten anzeigen soll. Zur Eingabe braucht man zwei Tasten. S1 dient zur Eingabe von Daten, S2 zum Programmieren. Außerdem muss es noch eine Reset-Taste geben, mit der man wahlweise das Programm startet oder den Programmiermodus einschaltet.

Dieser kleine Steuercomputer kann ganz unterschiedliche Aufgaben erfüllen, von der Alarmanlage bis zur automatischen Akku-Ladestation oder zum Solarregler. Die Idee ist mir im Urlaub gekommen. Ich hatte keinen PC dabei, aber so ein kleines Platinchen passt in jede Reisetasche. Da könnte man mal dies und das eintippen und dabei seinen Geist trainieren. Tipp, teripp, tiptipp, schon ist ein kleines Reaktionsspiel programmiert. Oder man könnte einen Programmierwettbewerb veranstalten, wer löst eine Aufgabe mit den wenigsten Programmschritten...

Bisher gibt es nur die Idee und eine grobe Aufstellung der wichtigsten Befehle. Etwas ähnliches habe ich vor einiger Zeit schon einmal entwickelt: Den Umwelt-Spion mit mehreren Sensoren und einer einfachen Interpretersprache (Spion-Basic). Später kam dann noch der Kosmos-Mikrocontroller mit seinem Kosmos-Basic. Beides waren 8-Bit-Systme, die über den PC programmiert werden mussten. Diesmal will ich es noch einfacher halten, also nur vier Bit und direkte Programmeingabe. Die ganze Entwicklung soll hier in allen Phasen vorgestellt werden. Damit kann dann jeder noch seine eigenen Befehle hinzufügen und das System an eigene Bedürfnisse anpassen.



Wie fängt man am besten an? Man könnte natürlich erst mal einen Controller nehmen, auf eine Lochrasterplatine setzen und mit den nötigen drei Tastern und vier LEDs verbinden. Aber im Moment ist noch nicht einmal klar, welcher Controller es am Ende werden soll. Deshalb habe ich mich dafür entscheiden, die ersten Schritte auf dem STK500 zu entwickeln. Zufällig war gerade ein ATmega168 in der Fassung, mit dem wird jetzt erst mal gearbeitet. Und es sollen die Tasten und die LEDs auf dem STK500 verwendet werden. Zwei Kabel verbinden den Port D mit den LEDs. Verwendet wird D0 bis D4. Weil die LEDs bei diesem System gegen VCC geschaltet sind, muss die Ausgabe in dieser Entwicklungsphase invertiert werden.

Die Firmware soll in Bascom entwickelt werden. Im ersten Schritt soll der Interpreter mit nur drei Befehlen (Portausgabe, Wartezeit, Sprungbefehl) angefangen werden. Den Programmiermodus gibt es noch nicht, aber dafür wird das erste Miniprogramm mit nur fünf Programmschritten direkt ins EEPROM geschrieben.

Die ersten drei Befehle lauten:

1: Direkte Portausgabe 0...15
2: Wartezeit 0...15
    (1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 30000,  60000 ms)
3: Sprung zurück 0...15

Jeder dieser Befehle hat direkt eingegebene 4-Bit-Daten. Zusammen mit den Daten wird jeweils ein Byte belegt. In hexadezimaler Schreibweise stellt daher das obere Nibble den Befehl und das untere die Daten dar.

Das erste Testprogramm erzeugt einen einfachen Wechselblinker:

&H11     Portausgabe 1
&H29     Wartezeit 1 s
&H18     Portausgabe 8
&H29     Wartezeit 1 s
&H34     Sprung 4 zurück

Download: TPS1

'--------------------------------------------------------------
' Tasten-programmierbare Steuerung TPS
' Test 1: Interpreter, die ersten drei Befehle
'--------------------------------------------------------------

$regfile = "m168def.dat"
$crystal = 11059200
$hwstack = 32
$swstack = 64
$framesize = 64


Dim Adr As Byte
Dim Eebyte As Byte
Dim Dat As Byte
Dim Kom As Byte

Ddrd = &HFF 'D0...D1 Outputs
Portd = &H0F 'STK500 invertiert
Portc = &H0F 'C0..C3 Inputs mit Pullup

S1 Alias Pinc.3 'Dateneingabe
S2 Alias Pinc.0 'Programmieren

Waitms 200

Dat = &H11 : Writeeeprom Dat , 0 'Dout=1
Dat = &H29 : Writeeeprom Dat , 1 '1000 ms
Dat = &H18 : Writeeeprom Dat , 2 'Dout=8
Dat = &H29 : Writeeeprom Dat , 3 '1000 ms
Dat = &H34 : Writeeeprom Dat , 4 'Adr = Adr - 4

Waitms 200

If S2 = 0 Then
Goto Programmieren
Else
Ausfuehren:
Adr = 0
Do
Readeeprom Eebyte , Adr
Adr = Adr + 1
Dat = Eebyte And 15
Kom = Eebyte / 16
If Kom = 1 Then '1: Direkte Portausgabe
Portd = 255 - Dat 'invertierte Portausgabe wegen STK500
End If
If Kom = 2 Then '2: Wartezeit
If Dat = 0 Then Waitms 1
If Dat = 1 Then Waitms 2
If Dat = 2 Then Waitms 5
If Dat = 3 Then Waitms 10
If Dat = 4 Then Waitms 20
If Dat = 5 Then Waitms 50
If Dat = 6 Then Waitms 100
If Dat = 7 Then Waitms 200
If Dat = 8 Then Waitms 500
If Dat = 9 Then Waitms 1000
If Dat = 10 Then Waitms 2000
If Dat = 11 Then Waitms 5000
If Dat = 12 Then Waitms 10000
If Dat = 13 Then Waitms 20000
If Dat = 14 Then Waitms 30000
If Dat = 15 Then Waitms 60000
End If
If Kom = 3 Then '3: Sprung - relativ
Adr = Adr - 1
Adr = Adr - Dat
End If
Loop
End If

Programmieren:
Do
Loop

End


Und tatsächlich, es blinkt. Fertig ist der Mini-Interpreter mit nur drei Befehlen. Damit kann man schon viele unterschiedliche Programme schreiben, vom Lauflicht bis zur Schrittmotorsteuerung.

weiter


Elektronik-Labor  Projekte   TPS