Tasten-Programmierwettbewerb               

Beiträge von Michael Gaus                                     

Elektronik-Labor  Literatur  Projekte  Lernpakete  TPS                        

Flickercode für optischen TAN-Generator

von Michael Gaus


Bei einigen Banken (z.B. Sparkassen, Volksbanken oder Postbank) wird für das Onlinebanking ein optisches TAN-Verfahren mit einem Flickercode verwendet. Der Kunde kauft hierzu einen optischen TAN-Generator mit LCD, Ziffernfeld und Karteneinschub für die Bankkarte. Der Preis eines solchen Geräts beträgt ungefähr 10€. Beim Onlinebanking muss das Gerät dann an den Bildschirm gehalten werden und über 5 optische Sensoren kann dann eine drahtlose Datenübertragung stattfinden. Das Verfahren ist hier beschrieben:
http://de.wikipedia.org/wiki/Transaktionsnummer#chipTAN_comfort.2FSmartTAN_optic_.28Flickering.29



Es werden ein Taktsignal sowie 4 Bits parallel über die 5 Fotoelemente übertragen. Das Übertragungsprotokoll ist nicht komplett offen gelegt, man findet aber hier die erforderlichen Infos:
http://6xq.net/blog/2010/flickercodes/
http://6xq.net/blog/2010/flickercodes/flickercode.html
http://www.bitinfarkt.de/chiptan/26C3_chiptan_slides.pdf

Mit der TPS kann über 5 LEDs ein entsprechendes Leuchtmuster erzeugt werden, sodass testweise eine Datenübertragung zum TAN-Generator erfolgen kann und auf dem LCD nacheinander zwei Texte erscheinen. Nach dem Drücken der OK-Taste wird der 2. Text angezeigt.

Die 5 LEDs wurden im passenden Abstand für den TAN-Generator auf eine kleine Zusatzplatine angelötet, sodass sie passgenau auf die 5 Löcher auf der Generatorrückseite gehalten werden können.

Als TAN-Generator wurde der "Reiner-SCT tanJack optic SR" verwendet:
http://www.reiner-sct.com/content/view/189/
Das LCD hat 2 Zeilen mit jeweils 12 alphanumerischen Zeichen.



Zunächst muss erst einmal die zu übertragende Sequenz ermittelt werden. Es sollen die Texte "TEST" und "Hallo" nacheinander auf dem LCD erscheinen. "TEST" entspricht im ASCII-Code 54 45 53 54 (Hexwerte). Die Anzahl Zeichen sind 4. "Hallo" entspricht im ASCII-Code 48 61 6C 6C 6F (Hexwerte). Die Anzahl Zeichen sind 5. Dies wird nun entsprechend in das Format eingefügt, sodass das ganze so aussieht:

00 04 855 49552 14 54455354 15 48616C6C6F 00
||                             ||                   ||                          ||
||                             ||                   ||                          ||- Prüfsumme: wird berechnet von Skript, deshalb 00
||                             ||                   ||
||                             ||                   ||- Anzahl ASCII-zeichen 2.Text
||                             ||                   |-- 1=ASCII-kodiert
||                             ||
||                             ||- Anzahl ASCII-zeichen 1.Text
||                             |-- 1=ASCII-kodiert
||
||- Gesamtlänge des Codes: wird berechnet von Skript, deshalb 00

       

Achtung:
Bei den Texten funktioniert das Leerzeichen (0x20) nicht (TAN-Generator bringt Fehlermeldung). Alle ASCII-Zeichen zwischen 0x2A und 0x7E funktionieren. Ab 0x7B wird ä,ö,ü,ß angezeigt.


Auf der Seite http://6xq.net/blog/2010/flickercodes/flickercode.html kann dann diese Sequenz eingetragen werden. Es wird dann automatisch die Länge und die Prüfsumme berechnet und der Flickercode angezeigt. Achtung: beim Internet Explorer funktioniert die Flickercodeanzeige nicht immer, mit dem Firefox gab es keine Probleme. Das Resultat ist:
11048554955214544553541548616C6C6F57
Damit kann jetzt schon der TAN-Generator ausprobiert werden (Grafik entsprechend zoomen) und es müsste sich die entsprechende Anzeige auf dem LCD ergeben.

Um nun diesen Code per LEDs auf der TPS auszugeben, muss folgendes beachtet werden:
a) Am Beginn muss eine Synchronisation eingefügt werden, diese sieht so aus: F0FF
b) Bei allen Bytes aus dem vom Skript erzeugten Code müssen die Nibbles jeweils gedreht werden. Aus 110485549552... wird dann 114058455925...
c) Das ganze Leuchtmuster wiederholt sich fortlaufend in einer Endlosschleife.

 
Adresse Befehl Daten Kommentar
00 9 9 Springe zu Adr. 09
01 2 5 Warte 50ms (UP Clockpuls)
02 4 0 A=0
03 5 9 PWM=A
04 2 5 Warte 50ms
05 4 1 A=1
06 5 9 PWM=A
07 2 5 Warte 50ms
08 E 0 Ret (Ende UP Clockpuls)
09 4 1 A=1
0A 5 9 PWM=A
0B 1 F Port F (Sync)
0C D 1 Call UP 01
0D 1 0 Port 0 (Sync)
0E D 1 Call UP 01
0F 1 F Port F (Sync)
10 D 1 Call UP 01
11 1 F Port F (Sync)
12 D 1 Call UP 01
13 1 1 Port 1
14 D 1 Call UP 01
15 1 1 Port 1
16 D 1 Call UP 01
17 1 4 Port 4
18 D 1 Call UP 01
19 1 0 Port 0
1A D 1 Call UP 01
1B 1 5 Port 5
1C D 1 Call UP 01
1D 1 8 Port 8
1E D 1 Call UP 01
1F 1 4 Port 4
20 D 1 Call UP 01
21 1 5 Port 5
22 D 1 Call UP 01
23 1 5 Port 5
24 D 1 Call UP 01
25 1 9 Port 9
26 D 1 Call UP 01
27 1 2 Port 2
28 D 1 Call UP 01
29 1 5 Port 5
2A D 1 Call UP 01
2B 1 4 Port 4
2C D 1 Call UP 01
2D 1 1 Port 1
2E D 1 Call UP 01
2F 1 4 Port 4
30 D 1 Call UP 01
31 1 5 Port 5
32 D 1 Call UP 01
33 1 5 Port 5
34 D 1 Call UP 01
35 1 4 Port 4
36 D 1 Call UP 01
37 1 3 Port 3
38 D 1 Call UP 01
39 1 5 Port 5
3A D 1 Call UP 01
3B 1 4 Port 4
3C D 1 Call UP 01
3D 1 5 Port 5
3E D 1 Call UP 01
3F 1 5 Port 5
40 D 1 Call UP 01
41 1 1 Port 1
42 D 1 Call UP 01
43 1 8 Port 8
44 D 1 Call UP 01
45 1 4 Port 4
46 D 1 Call UP 01
47 1 1 Port 1
48 D 1 Call UP 01
49 1 6 Port 6
4A D 1 Call UP 01
4B 1 C Port C
4C D 1 Call UP 01
4D 1 6 Port 6
4E D 1 Call UP 01
4F 1 C Port C
50 D 1 Call UP 01
51 1 6 Port 6
52 D 1 Call UP 01
53 1 F Port F
54 D 1 Call UP 01
55 1 6 Port 6
56 D 1 Call UP 01
57 1 7 Port 7
58 D 1 Call UP 01
59 1 5 Port 5
5A D 1 Call UP 01
5B 9 0 Springe zu Adr. 00
 


Im TPS-Programm wird jeweils der Ausgangsport entsprechend der 4-Bit Daten gesetzt und dann ein Unterprogrammaufruf  (Befehl D1) durchgeführt. Dort wird dann über die PWM-LED das Taktsignal mit passenden Verzögerungszeiten ausgegeben.

Wenn das Leuchtmuster erzeugt wird, kann die Übertragung zum TAN-Generator folgendermaßen erfolgen:



a) Bankkarte einstecken (ohne Bankkarte arbeitet der Generator nicht)
b) F-Taste auf dem TAN-Generator drücken
c) im Display erscheint "Übertragung aktiviert"
d) TAN-Generator auf die LEDs drücken (es sollte kein Streulicht von außen auf die Fotoelemente fallen)
e) im Display erscheint "Warte auf Beginn"
f) kurz darauf startet die Übertragung, im Display erscheint "Übertragung" und ein Fortschrittsbalken
g) warten, bis "Übertragung erfolgreich" im Display erscheint
h) jetzt kann der Generator vom Flickercode weghalten werden
i) der 1. Text "TEST" wird angezeigt in der 2. LCD-Zeile, die 1. LCD-Zeile zeigt "Zusatzdaten"
j) Taste OK drücken
k) der 2. Text "Hallo" wird angezeigt in der 2. LCD-Zeile, die 1. LCD-Zeile zeigt "Zusatzdaten"



Als Spannungsversorgung kann entweder ein Steckernetzteil mit stabilisierter 5V Ausgangsspannung dienen oder aber
3 in Serie geschaltete Mignonbatterien (ca. 4,5 V) bzw. 4 Mignonakkus (ca. 5 V), so wie auf dem Aufbaufoto zu sehen.

 


LED-Textschwenker

von Michael Gaus



Durch Ausnutzung des POV-Effekts ("Persistence of vision") können Texte erzeugt werden, die in dunkler Umgebung lesbar sind.

Ein Zeichen des Textes besteht aus einer Matrix aus 5 Pixel horizontal und 5 Pixel vertikal. Es werden also 5 LEDs vertikal benötigt. Im einfachsten Fall kann man auf der TPS-Platine aus dem Franzis Lernpaket einfach links von der LED "8" noch eine zusätzliche rote LED anbringen. Diese kann einfach mit der umgebogenen Kathode an die Kathoden der schon vorhandenen 4 LEDs angelötet werden, das reicht als mechanischer Halt. Die Anode kann über einen Fädeldraht sowie einen 2,2 kOhm Vorwiderstand am PWM-Ausgang angeschlossen werden.



Damit während des Schwenkens der Platine der Startzeitpunkt des Textes einigermaßen definiert ist und der Text bei jeder Schwenkbewegung immer am Anfang beginnt, wird ein Neigungsschalter als Synchronisation verwendet. Der Sensor wird mit der Bezeichnung "Tilt sensor" verkauft und stammt von dieser Platine: http://www.ebay.de/itm/251123293619

Das TPS Programm wartet solange, bis der Sensor einen Low-Puls erzeugt, dann wird der komplette Text nacheinander über die 5 LEDs ausgegeben. Danach wiederholt sich das ganze. Mit der passenden Ausrichtung des Neigungsschalters, der richtigen Schwenkgeschwindigkeit und ein wenig Übung lassen sich lesbare Texte erzeugen.

Im TPS Programm wird ein Buchstabe durch 5 Spaltenwerte ausgegeben, indem jeweils der Port und der PWM-Ausgang entsprechend gesetzt werden. Danach erfolgt ein Sprung ins Unterprogramm zur Ausgabe eines Zwischenraums als Trennung zwischen den Buchstaben. Der Buchstabe "L" sieht z.B. folgendermaßen aus (X=LED an, O=LED aus):

LED PWM: X O O O O
LED 8:   X O O O O
LED 4:   X O O O O
LED 2:   X O O O O
LED 1:   X X X X X

Das Beispielprogramm gibt folgenden Text aus: "HALLO" gefolgt von einem Smiley.



Als Spannungsversorgung können 3 in Serie geschaltete Mignonbatterien (ca. 4,5 V) bzw. 4 Mignonakkus (ca. 5 V) verwendet
werden, so wie auf dem Aufbaufoto zu sehen.

 
Adresse Befehl Daten Kommentar
00 C 8 Skip if Din.0=0
01 3 1 Springe –1
02 2 4 Warte 20ms
03 9 9 Springe zu Adr. 09
04 4 0 A=0 (UP04: Ausgabe Leerspalte)
05 1 0 Port setzen
06 5 9 PWM=A
07 2 0 Warte 1ms
08 E 0 Ret (Ende UP04)
09 4 F A=F
0A 1 F Port setzen
0B 5 9 PWM=A
0C 4 0 A=0
0D 1 4 Port setzen
0E 5 9 PWM=A
0F 4 0 A=0
10 1 4 Port setzen
11 5 9 PWM=A
12 4 0 A=0
13 1 4 Port setzen
14 5 9 PWM=A
15 4 F A=F
16 1 F Port setzen
17 5 9 PWM=A
18 D 4 Call 04
19 4 0 A=0
1A 1 F Port setzen
1B 5 9 PWM=A
1C 4 F A=F
1D 1 4 Port setzen
1E 5 9 PWM=A
1F 4 F A=F
20 1 4 Port setzen
21 5 9 PWM=A
22 4 F A=F
23 1 4 Port setzen
24 5 9 PWM=A
25 4 0 A=0
26 1 F Port setzen
27 5 9 PWM=A
28 D 4 Call 04
29 4 F A=F
2A 1 F Port setzen
2B 5 9 PWM=A
2C 4 0 A=0
2D 1 1 Port setzen
2E 5 9 PWM=A
2F 4 0 A=0
30 1 1 Port setzen
31 5 9 PWM=A
32 4 0 A=0
33 1 1 Port setzen
34 5 9 PWM=A
35 4 0 A=0
36 1 1 Port setzen
37 5 9 PWM=A
38 D 4 Call 04
39 4 F A=F
3A 1 F Port setzen
3B 5 9 PWM=A
3C 4 0 A=0
3D 1 1 Port setzen
3E 5 9 PWM=A
3F 4 0 A=0
40 1 1 Port setzen
41 5 9 PWM=A
42 4 0 A=0
43 1 1 Port setzen
44 5 9 PWM=A
45 4 0 A=0
46 1 1 Port setzen
47 5 9 PWM=A
48 D 4 Call 04
49 4 0 A=0
4A 1 E Port setzen
4B 5 9 PWM=A
4C 4 F A=F
4D 1 1 Port setzen
4E 5 9 PWM=A
4F 4 F A=F
50 1 1 Port setzen
51 5 9 PWM=A
52 4 F A=F
53 1 1 Port setzen
54 5 9 PWM=A
55 4 0 A=0
56 1 E Port setzen
57 5 9 PWM=A
58 D 4 Call 04
59 4 0 A=0
5A 1 2 Port setzen
5B 5 9 PWM=A
5C 4 F A=F
5D 1 1 Port setzen
5E 5 9 PWM=A
5F 4 0 A=0
60 1 1 Port setzen
61 5 9 PWM=A
62 4 F A=F
63 1 1 Port setzen
64 5 9 PWM=A
65 4 0 A=0
66 1 2 Port setzen
67 5 9 PWM=A
68 D 4 Call 04
69 2 3 Wait 10ms
6A 9 0 Springe zu Adr. 00
 

Der heiße Draht

von Michael Gaus



Hier eine Mini-Anwendung für die TPS mit kompaktem Programmcode: Beim bekannten Spiel "Der heiße Draht" muss mit einer Drahtschlaufe über einen beliebig gebogenen Drahtparcours gefahren werden, ohne dass die Schlaufe den Parcours berühren darf. Kommt es trotzdem zur Berührung, leuchtet eine LED und es gibt einen akustischen Signalton. Um schummeln zu verhindern, bleibt der Fehlerfall gespeichert, d.h. zum Zurücksetzen muss die Resettaste gedrückt werden.



Das Spiel lässt sich inkl. akustischem Signalton mit 5 Befehlen auf der TPS umsetzen. Da jeder Befehl auf der TPS mit Holtek-Controller ca. 1 ms benötigt, kann durch aufeinanderfolgendes Setzen/Rücksetzen eines Ausgangspins über den Piezo ein hörbarer Ton erzeugt werden.

Die Drahtschlaufe wird am Eingang E1 angeschlossen, der Drahtparcours an GND. Als Spannungsversorgung können 3 in Serie geschaltete Mignonbatterien (ca. 4,5 V) bzw. 4 Mignonakkus (ca. 5 V) verwendet werden, so wie auf dem Aufbaufoto zu sehen.

 
Adresse Befehl Daten Kommentar
00 C 8 Skip if Din.0=0
01 3 1 Springe -1
02 1 1 Port 0001
03 1 0 Port 0000
04 3 2 Springe -2
 



Elektronik-Labor  Literatur  Projekte  Lernpakete  TPS