Lernpaket Mikrocontroller programmieren   

Der TPS-Controller        

Elektronik-Labor  Literatur  Projekte  Lernpakete  TPS



www.elo-web.de/elektronik-lernpakete/mikrocontroller/das-franzis-lernpaket-mikrocontroller-programmieren

Aufmerksame Leser dieser Seiten haben bereits die Vorbereitungen zu diesem Lernpaket mitbekommen. Zuerst wurde der Tastenprogrammierbare Steuerung TPS in Bascom auf einem AVR-Controller entwickelt, dann mit dem Holtek-C-Compiler auf den HT46F47 portiert.
 
Das Ziel war ein preiswertes Lernpaket für Einsteiger. Ich kenne mehrere Leute, die haben mir gesagt, mit dem Mikrocontroller fange ich nicht mehr an. Aber mit dem TPS-Controller wird das vielleicht anders. Keine Softwareinstallation, keine Schnittstellenprobleme, einfach nur ein paar Zahlen eintippen, und schon läuft ein Programm.
 
Das einfachste Programm braucht nur drei verschiedene Befehle und kommt mit fünf Zeilen aus. Direkte Ausgabe (1), ein Wartebefehl (2) und ein Sprungbefehl (3), mehr braucht man nicht um ein einfaches Ablaufprogramm zu schreiben.
 
Adresse Befehl Daten Kommentar
00 1 1 LED 1
01 2 8 Warte 500 ms
02 1 8 LED 8
03 2 8 Warte 500 ms
04 3 4 Springe - 4

Ein Wechselblinker
 
Und was einmal eingetippt ist bleibt bis zur nächsten Änderung im EEPROM erhalten. Das Lernpaket ist so gestaltet, dass man kleine Spezialanwendungen programmieren kann um den Controller dann in einer Schaltung fest einzubauen. Für Nachschub ist gesorgt, denn den TPS-Controller kann man als Ersatzteil bei AK Modul-Bus nachbestellen. Wer also sein eigenes Spezial-IC entwickeln möchte, kann dies auf der Basis des TPS-Controllers tun. Oder man baut die TPS-Platine fest ein und kann sie dann immer noch nachträglich umprogrammieren. Damit man später noch nachvollziehen kann, was da programmiert wurde, reicht ein kleiner Zettel mit dem Programm, hinter die Platine geklemmt oder mit etwas Klebeband befestigt. Alles ganz einfach und sehr spartanisch, so machen kleine Aufgaben wieder Spaß.
 


 

1

2

3

4

5

6

7

8

9

A

B

C

D

E

 

Port=

Wait

Jump -

A=

 ... =A

 A= ...

  A= ...

Page

Jump

C*

D*

Skip if ...

Call

Ret

0

0

1 ms

0

0

 

 

 

0

0

0

0

 

0

 

1

1

2 ms

1

1

B=A

A= B

A=A+1

1

1

1

1

A>B

1

 

2

2

5 ms

2

2

C=A

A=C

A=A–1

2

2

2

2

A<B

2

 

3

3

10

3

3

D=A

A=D

A=A+B

3

3

3

3

A=B

3

 

4

4

20

4

4

Dout=A

A=Din

A=A–B

4

4

4

4

Din.0=1

4

 

5

5

50

5

5

Dout.0=A.0

A=Din.0

A= A*B

5

5

5

5

Din.1=1

5

 

6

6

100

6

6

Dout.1=A.0

A=Din.1

A=A/B

6

6

6

6

Din.2=1

6

 

7

7

200

7

7

Dout.2=A.0

A=Din.2

A=A And B

7

7

7

7

Din.3=1

7

 

8

8

500

8

8

Dout.3= A.0

A=Din.3

A=A Or B

 

8

8

8

Din.0=0

8

 

9

9

1 s

9

9

PWM=A

A=AD1

A= A Xor B

 

9

9

9

Din.1=0

9

 

A

10

2 s

10

10

 

A =AD2

A=Not A

 

A

A

A

Din.2=0

A

 

B

11

5 s

11

11

 

 

 

 

B

B

B

Din.3=0

B

 

C

12

10 s

12

12

 

 

 

 

C

C

C

S1=0

C

 

D

13

20 s

13

13

 

 

 

 

D

D

D

S2=0

D

 

E

14

30 s

14

14

 

 

 

 

E

E

E

S1=1

E

 

F

15

60 s

15

15

 

 

 

 

F

F

F

S2=1

F

 

Siehe auch:

Franzis-TPS: Das Experimentierhandbuch
TPS mit Steckboard: Das Conrad TPS-Lernpaket
Video zur Eingabe von Programmen: http://youtu.be/Jo7aX1WqtD8
Video zur Verwendung von Binärzahlen: http://youtu.be/sGzcws8IdvA
August/September 2012: Der Programmierwettbewerb
TPS-Controller als Ersatzteil: www.ak-modul-bus.de/stat/ht46f47e_mit_tps_firmware.html


Zusatzversuche



Blitzlicht für Flugmodelle



Wenn man abends in den Himmel sieht, sind Flugzeuge leicht zu erkennen. Ein weißes Blitzlicht mit Einfach- oder Doppelblitzen soll Kollisionen verhindern. Rote und grüne Blitzlampen an den Enden der Tragflächen zeigen deutlich wie groß oder wie nah das Flugzeug ist. Wer gern Flugzeuge beobachtet, wird oft vom Fernweh gepackt. Wie schön wäre das, wenn ich jetzt mitfliegen könnte. Solche farbigen Lichtblitze kann man auch in ein Modellflugzeug einbauen. Der TPS-Controller macht es einfach. Das folgende Programm erzeugt die Doppelblitze an A1 und A2 sowie Einzelblitze an A3 und A4.  Das Programm war übrigens eine Arbeitsvorlage für das Beleuchtungsset für RC-Flugmodelle, das ebenfalls einen Holtek-Controller verwendet. 

 
Adresse Befehl Daten Kommentar
00 1 3 Doppelblitz.1  0011
01 2 4 20 ms
02 1 0 aus
03 2 8 500 ms
04 1 3 Doppelblitz.2  0011
05 2 4 20 ms
06 1 0 aus
07 2 8 500 ms
08 1 C Einzelblitz 1100
09 2 4 20 ms
0A 1 0 aus
0B 2 9 1000 ms
0C 9 0 Springe 00
0D      
0E      
0F      
 
LEDs dürfen hier (ausnahmsweise) ohne Vorwiderstände angeschlossen werden (Schaltbild A).  Jeder Ausgangsport besitzt nämlich seine eigene Strombegrenzung auf ca. 25 mA bei einer Betriebsspannung von 4,5 V. Das liegt an den internen Schalt-FETs und ihrem Sättigungsstrom. Wenn man zwei Ausgänge zusammenschaltet (Schaltbild B), erreicht man mit 50 mA superhelle Blitze mit einer weißen Standard-LED. Weil die Blitzdauer nur 20 ms beträgt, hält eine einfache LED das gut aus.

Manchmal möchte man mit möglichst wenigen Leitungen für die Verbindung der LEDs auskommen. Es reicht eine Doppelleitung für beide LEDs, wenn man statt der GND-Leitung den jeweils ausgeschalteten Port verwendet.



Auch hier können wieder Ports zusammengeschaltet werden um mehr Helligkeit zu erreichen. Im Schaltbild D wird der weiße Doppelblitz sehr hell, die beiden roten Blitz-LEDs an den Enden der Tragflächen weniger hell. Achtung, das Zusammenschalten von Ports ist nur möglich, wenn das Programm dazu passt! Außerdem müssen die Ports unverbunden sein, wenn der TPS-Controller neu programmiert wird. Am besten verwendet man deshalb einen Zwischenstecker.

Video: http://youtu.be/QFsglBV8lHs


Zeitschalter mit Notaus-Funktion

Die Idee wurde inspiriert durch den in Assembler geschriebenen Kaffeemühlentimer meines Bruders Ulli. Kriegt man das auch mit der Tastenprogrammierbaren Steuerung hin? Es geht, allerdings ist die Bedienung etwas anders geworden. Und der Einstellbereich ist auf 15 Zeiteinheiten beschränkt, wie es dem 4-Bit-System entspricht.



Diese Zeitschaltuhr wird über ein Poti am analogen Eingang AD1 im Bereich 1 s bis 15 s eingestellt. Der Schaltausgang ist der PWM-Port mit der grünen LED. Die vier roten LEDs dienen zur binären Anzeige der Restzeit.

Adresse Befehl Daten Kommentar
00 C C skip if S1 = 0
01 3 1 Abfrageschleife
02 6 9 A = AD1
03 5 2 C = A
04 4 F A = 15
05 5 9 PWM = 15, AN
06 2 9 1 s
07 C E skip if S1 = 1
08 9 C Jump 0C, AUS
09 6 2 A = C
0A 5 4 Restzeit anzeigen
0B A 6 C-mal 06
0C 4 0 A = 0
0D 5 9 PWM = 0, AUS
0E 1 0 Anzeige aus
0F C E skip if S1 = 1
10 3 1 Tasten-Ende abwarten
11 4 0 A = 0
12 5 9 PWM = 0, AUS
13 1 0 Anzeige aus
14 9 0 Zum Anfang


Das Programm verwendet den C-Zähler zum Abmessen der Zeit. Nachdem der C-Inhalt in A zurückgelesen wird, kann er auch an die Anzeige-LEDs ausgegeben werden.

Zum Start drückt man kurz auf S1, genauer gesagt kürzer als eine Sekunde. Damit wird der Ausgang eingeschaltet. Die eingestellte Zeit läuft rückwärts ab und wird über die LEDs angezeigt. Beim Zählerstand Null schaltet der Ausgang ab.

Zwischendurch kann man aber zu jeder vollen Sekunde mit einem erneuten Tastendruck auf S1 den Vorgang vorzeitig beenden. Das ist die Notaus-Funktion. Die Taste muss dazu lang gedrückt werden, jedenfalls bis zur nächsten umspringenden Sekunde.

Nach jedem Ende kann die Schaltuhr mit S1 wieder neu gestartet werden. Wenn man abweichend von der üblichen Prozedur nicht kurz sondern lang drückt, läuft die Uhr genau eine Sekunde lang und schaltet dann aus. Man könnte also z.B. eine Kaffeemühle erst mal eingestellte zehn Sekunden laufen lassen, und dann, wenn es doch nicht ganz gereicht hat, noch mal eine Sekunde. Die Bedienung ist intuitiv, man gewöhnt sich schnell daran.


Flugbeleuchtung 2



Diesmal ist jeweils ein Ausgang für eine LED zuständig, auch wieder ohne Vorwiderstände mit Strombegrenzung durch die Ports. Die rote und die grüne LED sind in Reihe geschaltet und damit nicht so hell. Für den Landescheinwerfer könnte man zusätzlich einen Transistortreiber vorsehen.
 
PA4 (A1): Beacon                                     B
PA5 (A2) : Strobe 1 (Einzelblitz)               S1
PA6 (A3) : Strobe 2 (Doppelblitz)             S2
PA7  (A4):  Landescheinwerfer                  L
 
Der Landescheinwerfer wird nach 60 s  eingeschaltet. Jeder Blitzzyklus dauert eine Sekunde. Mit zwei ineinander geschachtelten Zählschleifen werden 60 Impulse ausgeführt. Dann setzt das Modell zur Landung an.

Adresse Befehl Daten Kommentar
00 4 3 A=3     4 * 15 s
01 5 2 C=A
02 4 E A=14
03 5 3 D=A
04 1 1 B
05 2 5 50 ms
06 1 0 aus
07 2 7 200 ms
08 2 6 100 ms
09 1 6 S1, S2
0A 2 5 50 ms
0B 1 0 aus
0C 2 7 200 ms
0D 1 4 S2
0E 2 5 50 ms      650 ms gesamt
0F 1 0 aus
10 2 7 200 ms   + 350 ms
11 2 6 100 ms
12 2 5 50 ms
13 B 4 D-mal 04,  4-mal
14 A 2 C-mal 02, 15-mal
15 1  8 L
16 2 D 20 s
17 1 0 aus
18 3 0 Ende

43 52 4E 53 11 25 10 27 26 16 25 10 27 14 25 10 27 26 25 B4 A2 18 2D 10 30


Montagehinweise



Wenn das Batteriefach neben der Platine liegt, besteht immer die Gefahr, dass irgendwann bei zu viel Bewegung die Anschlussdrähte abbrechen. Deshalb habe ich die Platine jetzt mit zwei Klebeband-Schlaufen direkt auf die Unterseite des Batteriefachs geklebt. Man muss etwas aufpassen, dass dabei kein Kontakt zu den leitenden Teilen des Batteriefachs entsteht, was aber bei ausrechend großer Klebefläche kein Problem ist. Das ganze Gerätchen liegt mit eingelegten Batterien gut in der Hand und lässt sich leicht bedienen.


Lötnägel

Thomas Weihs berichtet, dass er gute Erfahrungen mit Lötnägeln auf der TPS-Platine gemacht hat.
 

TPS-Zufallsfunktion

In älteren Filmen sieht man Computer mit vielen Lämpchen an der Bedienertafel, die mehr oder weniger zufällige Blinkmuster absolvieren. Das Vormild müssen die ersten Computer mit einer sehr geringen Taktrate gewesen sein, sodass man noch die einzelnen Bits sehen konnte, also noch vor dem Zuse Z4. Sogar der TPS-Controller ist dafür schon zu schnell. Aber er kann so etwas simulieren. Nötig ist dazu nur eine Zufallsfunktion.
 
Der Zufall kommt hier vom PWM-Ausgang. Dieser hat sozusagen seinen eigenen Takt, weil er sehr viel schneller umschaltet als die einzelnen Programmbefehle abgearbeitet werden können. Wenn man den momentanen Zustand Null oder Eins abfragt, ist das Ergebnis daher zufällig. Hier wird eine Verbindung PWM-E1 verwendet. Der digitale Eingang E1 kann also immer wieder eine Eins oder Null vom PWM-Ausgang abholen. Und die verteilt er dann gerecht auf die vier Ausgänge.

Kabelverbindung: PWM-Ausgang - Eingang E1
 
Adresse Befehl Daten Kommentar
00 4 7 A=7
01 5 9 PWM=A
02 6 5 A = Din.0
03 5 5 Dout.0 = A.0
04 2 5 50ms
05 6 5 A = Din.0
06 5 7 Dout.2 = A.0
07 2 5 50ms
08 6 5 A = Din.0
09 5 8 Dout3 = A.0
0A 2 5 50ms
0B 6 5 A = Din.0
0C 5 6 Dout.1 = A.0
0D 2 5 50ms
0E 3 E Anfang
0F      
47 59  65 55 25 65 57 25 65 58 25 65 56 25 3E
 
 
Das Ergebnis ist eine echte Zufallsfolge. Ganz anders als in den alten Filmen, wo ich schon mal eine sich immer wiederholende Folge von Bitmustern entdecken konnte. Klar, die hatten ja damals noch keinen TPS-Controller im Filmstudio.


26.10.12:  Servosteuerung


 
Fernsteuer-Stervos steuert man Impulsserien mit Impulslängen zwischen 1 ms (links) und 2 ms (rechts). Zufällig dauert ein TPS-Pefehl etwa 1 ms. Damit erreicht man zwar noch keine beliebige Auflösung, aber immerhin können die beiden Endpositionen angefahren werden. Die untere Schleife zwischen Adresse 00 und 06 erzeugt lange Impulse von 2 ms. Die obere Schleife zwischen 07 und 0C erzeugt kurze Impulse von 1 ms. Das Programm schaltet über die Betätigung der Taste S1 zwischen den beiden Positionen um.


 
Adresse Befehl Daten Kommentar
00 1 1 1 an
01 1 1 2 ms langer Impuls
02 1 0 aus
03 2 3 10 ms
04 C C skip if S1=0
05 9 7 jump 7, kurz
06 3 6 jump -6
07 1 1 1 ms kurzer Impuls
08 1 0 aus
09 2 3 10 ms
0A C E skip if S1=1
0B 9 0 jump 0: lang
0C 3 5 jump -5
0D      
0E      
0F      
 
 
Darf es etwas kürzer sein? Das folgende Programm erzeugt immer nur die langen Impulse. Aber diesmal wird der interne Oszillator verändert. Ein Poti und ein zusätzlicher 100-k-Widerstand parallel zum 100-k-Oszillatorwiderstand des Controllers sorgen dafür, dass die Taktfrequenz zwischen 2 MHz und 4 MHz verändert werden kann. Damit wird zugleich der Impuls bis auf die Hälfte verkürzt. Die stufenlose Einstellung der Taktfrequenz ist eine besondere Eigenschaft des Holtek-Controllers, die auch bei ganz anderen Aufgaben nützlich werden kann. 


 

Adresse Befehl Daten Kommentar
00 1 1 1 an
01 1 1 2 ms langer Impuls
02 1 0 aus
03 2 3 10 ms
04 3 4 zum Anfang
05      
 
Diese Anwendung erfordert eine Verbindung zum Pin 13 des Controllers. Beim Franzis-Lernpaket kann der Pin an der Unterseite der Platine angeschlossen werden. Mit der Steckplatinenversion von Conrad hat man es etwas einfacher. Interessant ist, dass bei dieser Anwendung die Auflösung höher ist als mit dem AD-Wandler, der auf 4 Bit beschränkt ist.


16.4.13: Küchentimer, von Ulli Kainka




Der Timer wird vor dem Start mit der gewünschten Zeit "aufgeladen", die man in der LED-Anzeige sieht. Zur Laufzeit läuft diese Zeit dann rückwärts ab. Man hat jederzeit im Blick, wie lange die Uhr noch laufen soll. Zeiteingabe über S1, Start mit S2, PWM-Ausgang (Summer, 1 sec) bei Ablauf.
 
Adresse Befehl Daten Kommentar
00 8 0 Seite 0
01 4 0 A=0
02 5 1 B=A
03 C F S2=1 ?
04 9 D Springe 0D (absolut)
05 C C S1=0 ?
06 3 3 Springe -3 (relativ)
07 7 1 A=A+1
08 5 4 Dout=A
09 2 6 Warte 100 ms
0A C E S1=1 ?
0B 3 1 Springe -1 (relativ)
0C 3 9 Springe -9 (relativ)
0D 5 4 Dout=A
0E 2 E Warte 30 sec (oder andere Zeit)
0F 7 2 A=A-1
10 C 3 A=B ?
11 3 4 Springe -4 (relativ)
12 5 4 Dout=A
13 4 F A=15
14 5 9 PWM=A
15 2 9 Warte 1 sec
16 4 0 A=0
17 5 9 Dout=A
18 9 0 Springe 00 (absolut)
 


Elektronik-Labor  Literatur  Projekte  Lernpakete  TPS