06.12.2012 Aufrufe

computer

computer

computer

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

COMPUTER<br />

Magnetkarten-Leser<br />

Den ISO-Spuren auf der Spur<br />

Entwurf von Karl Bauer<br />

Ob Kreditkarte, EC-Karte, sonstige Bankkarte oder Parkschein: Auch<br />

wenn viele dieser Karten einen Chip enthalten – einen Magnetstreifen finden<br />

Sie immer. Wie man diese Magnetstreifen “abspielen” und dekodieren<br />

kann, erfahren Sie in diesem Beitrag.<br />

Das hier vorgestellte Projekt besteht aus drei<br />

Teilen: dem eigentlichen Magnetkartenleser<br />

zum “Abspielen” der Datenspuren, einem<br />

Interface, das den Magnetkartenleser mit der<br />

seriellen Schnittstelle eines PCs verbindet<br />

und schließlich einer Windows-Software zur<br />

Dekodierung und Anzeige sowie zur Verwaltung<br />

der ausgelesenen Daten.<br />

Durchzugsleser<br />

Als Lesegerät wird ein handelsüblicher<br />

Durchzugsleser verwendet, bei dem die<br />

Magnetkarte von Hand durch einen Schlitz<br />

und damit an einem Lesekopf vorbeigezogen<br />

wird. Im Prinzip funktioniert das genauso wie<br />

bei jedem Datenrekorder mit<br />

Magnetband(kassette), nur mit dem Unterschied,<br />

dass das Magnetband sozusagen auf<br />

die Karte aufgeklebt und nur ein paar Zentimeter<br />

lang ist. Wer sich selbst eine Magnetkarte<br />

basteln möchte, kann tatsächlich ein<br />

Stück Magnetband (wegen der Breite von<br />

einer VHS-Videokassette) passend zuschneiden<br />

und auf eine Plastik- oder Kartonkarte<br />

aufkleben. Allerdings muss man sich dann<br />

einen Magnetkartenschreiber selbst basteln<br />

oder auf einem Elektronik-Schrottplatz besorgen,<br />

denn regulär zu kaufen gibt es so etwas<br />

nur zu “Profi-Preisen” im vierstelligen DM-<br />

Bereich, während ein einfacher Durchzugsleser<br />

schon ab etwa 50 DM zu haben ist. Ein<br />

solcher Leser beinhaltet eine kleine Platine<br />

mit der Wiedergabeelektronik (Verstärker und<br />

Impulsformer) und liefert an seinem Ausgang<br />

bereits ein fertig aufbereitetes TTL-Signal.<br />

Tatsächlich handelt es sich um drei Signale<br />

pro ausgelesener Magnetspur, die in<br />

Bild 1 in zwei Impulsdiagrammen<br />

dargestellt sind: Ein Taktsignal, ein<br />

Datensignal und ein Bereitsignal.<br />

Wie Impulsdiagramm 1 erkennen<br />

lässt, markiert das Bereitsignal CLS/<br />

den Beginn und das Ende des Lesevorgangs<br />

beim Durchziehen einer<br />

Karte, wobei das Ende mit einer Verzögerung<br />

von 50 ms gegenüber dem<br />

letzten Taktimpuls angegeben wird<br />

(CLS wird wieder High). Impulsdiagramm<br />

2 zeigt den Zusammenhang<br />

zwischen Taktsignal (RCP/) und<br />

Datensignal (RDP/). Die Abfrage des<br />

Werts (“1” oder “0”) des Datensignals<br />

erfolgt bei der negativen<br />

Flanke des Taktsignals. Das Datensignal<br />

wird invertiert ausgegeben,<br />

ein Low-Pegel zum Abfragezeitpunkt<br />

bedeutet “1”, ein High-Pegel<br />

“0”. Im Diagramm sind auch die Spezifikationen<br />

der Impulsdauer für Takt<br />

und Daten angegeben, ebenso die<br />

minimale Verzögerung zwischen der<br />

Flanke des Datensignals (Pegel-<br />

30 Elektor 6/2000


wechsel) und dem Abfragezeitpunkt.<br />

Für das Projekt ausgewählt wurde<br />

ein Durchzugsleser des Herstellers<br />

Hopt+Schuler, der sich durch einen<br />

weiten Arbeitstemperaturbereich (-<br />

20 °C bis +60 °C) und eine robuste<br />

Bauweise auszeichnet. Der Hersteller<br />

gibt eine Lebensdauer von<br />

300.000 Betätigungen für den Leser<br />

und 1000 Betätigungen für eine einzelne<br />

Magnetkarte an. Die Karten-<br />

Einführgeschwindigkeit darf zwischen<br />

100 und 1000 mm/s liegen.<br />

Der Leser ist in 1-, 2- oder 3-Spur-<br />

Version erhältlich, wobei die werksseitig<br />

eingestellte Spurlage der ISO-<br />

Norm entspricht (siehe Textkasten).<br />

Für den Anschluss an die Auswerteelektronik<br />

(in unserem Fall das Interface)<br />

ist der Leser mit einem Krimpkontakt-Stecker<br />

versehen, der bei<br />

der 1-Spur-Version 5-polig, bei der 2-<br />

Spur-Version 9-polig und bei der 3-<br />

Spur-Version 12-polig ausgeführt ist.<br />

Auf der Interfaceplatine sind<br />

Anschlussleisten für alle drei Versionen<br />

vorgesehen. Allerdings wurde<br />

für den Test- und Musteraufbau nur<br />

die 1-Spur-Version verwendet, weil<br />

nur diese Ausführung auch einzeln<br />

(über Conrad) erhältlich ist.<br />

Spuranpassung<br />

Der 1-Spur-Leser ist für die ISO-Spur<br />

3 ausgelegt. Allerdings hat der Hersteller<br />

die Möglichkeit vorgesehen,<br />

die Kopfträgerplatte und damit die<br />

Spurlage einzustellen, wie die schematische<br />

Darstellung in Bild 2 zeigt.<br />

Ab Werk ist der Kopf von der Grundplatte<br />

aus gesehen in der höchsten<br />

Stellung, was der erwähnten ISO-<br />

Spur 3 entspricht. Insgesamt kann<br />

die Trägerplatte mit den beiden<br />

Schrauben in fünf Stellungen fixiert<br />

werden. In Bezug auf die ISO-Spuren<br />

sind nur die oberste, die unterste<br />

und die mittlere Stellung relevant.<br />

Die oberste ist ISO-Spur 3, die mittlere<br />

ist Spur 2 und die unterste Spur<br />

1. Wenn immer die gleiche Spur<br />

gelesen werden soll, ist es mit einer<br />

einmaligen Einstellung getan. Für<br />

einen häufigeren Spurwechsel ist<br />

diese Art der Einstellung mit den<br />

beiden Schrauben zu umständlich,<br />

schließlich muss man jedes Mal auch<br />

das Gehäuse öffnen und schließen.<br />

Es gibt aber auch dafür eine praktikable<br />

Lösung: Man lässt den Kopf in<br />

6/2000 Elektor<br />

Impulsdiagram 1 Impulsdiagram 2<br />

RCP<br />

RDP<br />

CLS<br />

ca. 50 ms<br />

RCP<br />

RDP<br />

DATEN:<br />

" 0"<br />

tn<br />

tc =<br />

4<br />

tv<br />

tn<br />

COMPUTER<br />

td<br />

tc<br />

" 1"<br />

" 1"<br />

" 0"<br />

tn<br />

td = tv = min 0,2 µs<br />

2<br />

000054 - 12<br />

Bild 1. Der Ausgang des Lesemoduls liefert drei Signale pro ausgelesener Magnetspur, die<br />

hier in zwei Impulsdiagrammen dargestellt sind.<br />

Magnetkartenkodierung nach ISO-Norm<br />

Die Aufzeichnung der Bits auf den Magnetspuren erfolgt nach der so genannten Aiken-Biphasen-<br />

Methode. Der Schreibkopf wird mit einem Rechtecksignal angesteuert. Bei jedem Polaritätswechsel<br />

(Flanke) ändert sich die Richtung des Stroms durch die Kopfspule und damit die Richtung<br />

der Magnetisierung auf dem Band. Die Aufzeichnung eines Bits erfolgt in einer so genannten<br />

“Bitzelle”, das ist ein Abschnitt auf dem Band, in dem sich bei einer logischen “0” eine Ummagnetisierung,<br />

bei einer logischen “1” aber zwei Ummagnetisierungen befinden. Das heißt: Es<br />

wird bei der Aufzeichnung ein Schreibsignal verwendet, das für eine “0” aus einem Impuls, für<br />

eine “1” aber aus zwei Impulsen besteht, die aber nur halb so lang sind wie der “0”-Impuls. Die<br />

“Bit-Zellen” haben daher die Frequenz des “0”-Signals, das “1”-Signal hat genau die doppelte<br />

Frequenz. Diese einfache Aufzeichnungsmethode hat den Vorteil, dass sich aus dem gelesenen<br />

Signal leicht ein Lesetaktsignal generieren lässt und dass sich die Bits damit unabhängig von der<br />

Lesegeschwindigkeit dekodieren lassen: Eine “1” hat gegenüber einer “0” immer die doppelte<br />

Frequenz, unabhängig davon, wie schnell die Karte am Lesekopf vorbeigezogen wird.<br />

Für die Aufzeichnung und Kodierung von Daten auf Magnetstreifenkarten ist der ANSI/ISO-Standard<br />

(ISO 3554) am weitesten verbreitet. Nach diesem Standard werden auf dem Magnetstreifen<br />

drei Spuren mit einer Breite von 2,8 mm (0,11 Zoll) aufgezeichnet. Wenn man die Karte so<br />

hinlegt, dass sich der Magnetstreifen horizontal unten auf der Karte befindet, dann ist auf dem<br />

Streifen oben die Spur 3, in der Mitte die Spur 2 und unten die Spur 1. Schaut man jetzt auf den<br />

Streifen, so werden die Daten von links nach rechts gelesen wie die Buchstaben einer Textzeile.<br />

Nach ISO ist für jede Spur eine bestimmte Anwendung, Kodierung und Bitdichte (bpi = bits per<br />

inch, Deutsch: Bits pro Zoll) vorgesehen:<br />

Spur 1: 210 bpi, alphanumerisch (7 bit), 79 Zeichen<br />

Spur 2: 75 bpi, BCD (5 bit), 40 Ziffern<br />

Spur 3: 210 bpi, BCD (5 bit), 107 Ziffern<br />

Spur 1 ist demnach die einzige Spur mit Textkodierung (z.B. Name des Karteninhabers). Die<br />

Kodierung erfolgt bei Spur 1 im ANSI/ISO ALPHA-Datenformat, kurz auch als ISO-7-bit-Format<br />

bezeichnet. Bei den Spuren zwei und drei hingegen im ANSI/ISO-BCD-Datenformat, kurz ISO-<br />

5-bit-Format genannt.<br />

Das ISO-7-bit-Format umfasst mit 6 bit pro Zeichen 64 verschiedene Zeichen. In der Reihenfolge<br />

ist das 1. Bit das LSB (least significant bit), das auch als erstes gelesen wird, das 6. Bit ist das<br />

MSB und das 7. Bit ist ein ungerades Paritätsbit. Von den 64 kodierten Zeichen sind 43 Kodes<br />

alphanumerische Zeichen, 3 sind Rahmenzeichen (Startzeichen, Trennungszeichen und Endzeichen)<br />

und 18 Kodes werden für Steuer- und Sonderzeichen verwendet.<br />

Das ISO-5-bit-Format kodiert mit den ersten vier Bits 16 verschiedene Zeichen, das fünfte Bit ist<br />

wieder ein ungerades Paritätsbit. Auch hier ist das erste Bit das LSB, das zuerst gelesen wird.<br />

Von den 16 kodierten Zeichen sind 10 Zeichen numerisch (Ziffern), 3 sind wieder Rahmenzeichen<br />

und weitere 3 sind Steuerzeichen.<br />

Die Aufzeichnung auf einer Spur des Magnetstreifens beginnt immer mit einer Reihe von logischen<br />

Nullen (“0”-bit-Zellen), um das Taktsignal für die Dekodierung zu synchronisieren. Ein<br />

Startzeichen markiert den Anfang der “echten” Daten, damit die Dekodierschaltung im Leser mit<br />

dem Abzählen der Bits (5er- oder 7er-Gruppen) für die Dekodierung der einzelnen Zeichen an<br />

der richtigen Stelle beginnt. Am Ende der Datenbitreihe einer Spur steht ein Endzeichen, dem<br />

ein LRC-Zeichen folgt. LRC bedeutet “Longitudinal Redundancy Check”, dabei handelt es sich<br />

um ein Paritätsbit für die Summe aller Datenbits sämtlicher vorangegangener Zeichen. Mit dieser<br />

“Längsparität” kann auch ein doppelter Bitfehler in einem Zeichen erkannt werden, der mit dem<br />

ungeraden Zeichenparitätsbit nicht erkannt werden kann, weil sich zwei Bitfehler innerhalb eines<br />

Zeichens bei der Paritätsprüfung kompensieren.<br />

31


COMPUTER<br />

Tabelle 1<br />

Jumper-Setting<br />

Jumper auf K2 für 1-Spur-Leser<br />

für Spur gesetzte Jumper<br />

1 1–2 und 7–8<br />

2 3–4 und 9–10<br />

3 5–6 und 11–12<br />

Jumper auf K3 für 2-Spur-Leser<br />

für Spur gesetzte Jumper<br />

1 1–2 und 5–6<br />

2 3–4 und 7–8<br />

Für 3-Spur-Leser sind keine Jumper<br />

erforderlich.<br />

der gelieferten (höchsten) Stellung für Spur 3<br />

und verstellt anstelle der Kopfplatte die Höhe<br />

der Grundplatte im Schlitz mit zwei Plättchen<br />

von etwa 4 mm Dicke. Diese “Unterlagen”<br />

heben die Magnetkarte beim Durchziehen um<br />

4 mm (für Spur 2) beziehungsweise um 8 mm<br />

(für Spur 1) an und ermöglichen so die Einstellung<br />

für alle 3 Spuren ohne “Eingriff” in<br />

5V<br />

5V<br />

K5<br />

K4<br />

K6<br />

K2<br />

1 2<br />

3 4<br />

5 6<br />

7 8<br />

9 10<br />

11 12<br />

K3<br />

1 2<br />

3 4<br />

5 6<br />

7 8<br />

5V<br />

R2<br />

5V<br />

1<br />

8x 10k<br />

2 3 4 5 6 7 8 9<br />

den Durchzugsleser.<br />

Das Interface<br />

Die Schaltung des PC-Interfaces ist<br />

in Bild 3 zu sehen. Sieht man einmal<br />

vom Spannungsregler ab, besteht<br />

das Interface aus nur zwei ICs:<br />

Einem Atmel-AVR-Controller<br />

(AT89C2051) und einem MAX232.<br />

Der AVR-Controller sorgt für die<br />

10<br />

C6<br />

33p<br />

20<br />

C12<br />

X1 X2<br />

5 4<br />

X1<br />

11.0592MHz<br />

100n<br />

RST<br />

1<br />

12<br />

P1.0 IC2<br />

13<br />

P1.1<br />

P3.7<br />

11<br />

14<br />

15<br />

16<br />

P1.2<br />

AT89C2051<br />

P1.3 -12PC P3.5<br />

P1.4<br />

P3.4<br />

9<br />

8<br />

17<br />

P1.5<br />

P3.3<br />

7<br />

18<br />

P1.6<br />

P3.2<br />

6<br />

19<br />

P1.7<br />

P3.1<br />

3<br />

P3.0<br />

2<br />

K1<br />

D1<br />

1N4001<br />

Track 1<br />

Track 2<br />

Track 3<br />

5V<br />

C2<br />

100µ<br />

25V<br />

Umwandlung des vom Durchzugsleser<br />

gelieferten Takt- und Datensignals<br />

in ein serielles Datensignal für<br />

den PC und regelt auch die Kommunikation<br />

über die serielle Schnittstelle,<br />

wobei der MAX232 wie üblich<br />

für die Pegelanpassung zwischen<br />

TTL und RS232 in beide Richtungen<br />

sorgt.<br />

Im Schaltbild und auf der Platine<br />

sind die drei getrennten Anschluss-<br />

32 Elektor 6/2000<br />

C5<br />

33p<br />

C3<br />

100n<br />

IC1<br />

7805<br />

10µ 16V<br />

Markierung<br />

Kopfträgerplatte<br />

(Metall)<br />

R6<br />

8k2 C9<br />

C8<br />

10µ<br />

16V<br />

C7<br />

10µ<br />

16V<br />

C1<br />

2k7<br />

100n<br />

D5 D4 D3<br />

Bild 3. Die Interfaceschaltung, die das Lesemodul mit einem seriellen Port des PCs verbindet.<br />

R5<br />

5V<br />

5V<br />

2k7<br />

R4<br />

2k7<br />

R3<br />

16V<br />

1<br />

C1+<br />

2<br />

V+<br />

16<br />

3<br />

C1–<br />

IC3<br />

11<br />

T1IN T1OUT<br />

14<br />

10<br />

T2IN T2OUT<br />

7<br />

9<br />

R2OUT R2IN<br />

8<br />

12<br />

R1OUT R1IN<br />

13<br />

4<br />

C2+<br />

5<br />

MAX232CP<br />

C2–<br />

V-<br />

15<br />

C4<br />

10µ<br />

16V<br />

2k7<br />

R1<br />

D2<br />

6<br />

Kunststoff-Gehäuse<br />

C11<br />

10µ<br />

C10<br />

10µ<br />

16V<br />

C14<br />

10µ<br />

63V<br />

5V<br />

C13<br />

100n<br />

1<br />

6<br />

2<br />

7<br />

3<br />

8<br />

4<br />

9<br />

5<br />

000054 - 11<br />

K7<br />

000054 - 13<br />

Bild 2. Beim 1-Spur-Leser ist eine Änderung der Spurlage durch Verstellen der<br />

Kopfträgerplatte möglich.


Stückliste<br />

Widerstände:<br />

R1,R3...R5 = 2k7<br />

R2 = 8 x 10 k<br />

R6 = 8k2<br />

Kondensatoren:<br />

C1,C3,C12,C13 = 100 n<br />

C2 = 100 µ/25 V stehend<br />

C4,C7...C11,C14 = 10 µ/16 V<br />

stehend<br />

C5,C6 = 33 p<br />

Halbleiter:<br />

D1 = 1N4001<br />

D2,D3 = Low-current-LED rot<br />

3mm<br />

D4 = Low-current-LED gelb 3mm<br />

D5 = Low-current-LED grün<br />

3mm<br />

IC1 = 7805<br />

IC2 = AT89C2051-12PC (EPS<br />

000054-41)<br />

IC3 = MAX232CP<br />

Außerdem:<br />

K1 = 2-polige Platinenanschlussklemme<br />

5 mm Rastermaß<br />

X1 = 11,0592-MHz-Quarz<br />

K2 = 6-fach Jumper<br />

K3 = 4-fach Jumper<br />

K4 = 9-poliger Pfostenfeldstecker<br />

K5 = 5-poliger Pfostenfeldstecker<br />

K6 = 12-poliger Pfostenfeldstecker<br />

K7 = 9-polige Sub-D-Buchse,<br />

gewinkelt, für Platinenmontage<br />

Magnetkartenleser, z.B. Hopt +<br />

Schuler Typ 832-01320000000<br />

(Best-Nr. 165328-33), siehe Text<br />

Platine EPS 000054-1<br />

Diskette EPS 000054-11 (siehe<br />

Tabelle 2)<br />

(EPS: siehe Serviceanzeige in der<br />

Heftmitte)<br />

leisten zu sehen, die wie eingangs<br />

beschrieben für den Anschluss der<br />

verschiedenen Versionen des Durchzugslesers<br />

von Hopt+Schuler vorgesehen<br />

sind. Für den ausführlich<br />

beschriebenen 1-Spur-Leser ist der<br />

5-polige Steckverbinder K5 vorgesehen.<br />

Die Einstellung der Interfaceschaltung<br />

auf den verwendeten<br />

Durchzugsleser erfolgt mit Jumpern<br />

in den Stiftleisten K2 und K3 entsprechend<br />

der Tabelle 1.<br />

Beim Aufbau auf der einseitigen Platine<br />

in Bild 4 gibt es fast keine<br />

Besonderheiten. Auch wenn es<br />

selbstverständlich ist, sei doch zur<br />

6/2000 Elektor<br />

IC1<br />

C3<br />

C1<br />

Sicherheit an die Kontrolle der Drahtbrücken,<br />

der Polung der Dioden und<br />

Elkos und daran erinnert, dass die<br />

ICs richtig herum eingelötet bzw. in<br />

die Fassung gesteckt werden (müssen).<br />

Ein wirklich wichtiger Punkt ist<br />

die Verwendung einer Sub-D-Buchse<br />

für K7. Wenn bei aus Elektor nachgebauten<br />

Projekten die serielle Verbindung<br />

zum PC nicht zustandekommt,<br />

liegt es nach der Erfahrung<br />

der Redaktion fast immer daran,<br />

dass der geneigte Leser anstelle<br />

einer Buchse einen Sub-D-Stecker<br />

auf die Platine gelötet hat und somit<br />

ein falsches Kabel verwendet.<br />

Für die Stromversorgung der Interfaceschaltung<br />

genügt ein unstabilisiertes<br />

9-V-Steckernetzteil, das nur<br />

etwa 100 mA zu liefern braucht.<br />

Bedienung<br />

H4<br />

H3<br />

K1<br />

R1<br />

D2<br />

D1<br />

D4<br />

C2 D5<br />

C4<br />

000054-1<br />

(C) ELEKTOR<br />

Wenn die Schaltung eingeschaltet<br />

wird, leuchtet die Einschaltkontroll-<br />

LED D2 auf. Die drei LEDs für die<br />

Spuranzeige (D3, D4 und D5) spielen<br />

während der nun folgenden Initiali-<br />

D3<br />

C5<br />

R6<br />

C9<br />

C6<br />

R3<br />

R4<br />

R5<br />

C12<br />

X1<br />

000054-1<br />

IC2<br />

R2<br />

C8<br />

C7<br />

C11<br />

IC3<br />

K2 K3<br />

K5 K4<br />

K6<br />

Bild 4. Das Layout der einseitigen Interface- Platine.<br />

C14 C13<br />

C10<br />

COMPUTER<br />

sierungsphase Lauflicht. Nach dem Ende der<br />

Initialisierung leuchtet nur noch die LED D5,<br />

die anzeigt, dass die Spur 3 ausgewählt<br />

wurde. Wie Bild 5 zeigt, startet auch das<br />

Windows-PC-Programm Magread.EXE mit<br />

Spur 3 als Voreinstellung (default). Durch<br />

Wechseln der Registerkarten “ISO Track 1”<br />

bis “ISO Track 3” kann zwischen den einzelnen<br />

Spuren der Karte umgeschaltet werden,<br />

dies kann durch die LEDs auf der Platine mitverfolgt<br />

werden. Wenn auf eine andere Spur<br />

umgeschaltet wird, ändert sich automatisch<br />

auch das Wortformat auf die nach ISO zugeordnete<br />

Wortlänge von 5 oder 7 Bit. Falls<br />

gewünscht, kann aber in jeder ISO-Spur zwischen<br />

5-bit- und 7-bit Dekodierung umgeschaltet<br />

werden.<br />

Die weitere Bedienung des Programms ist<br />

sehr einfach. Unter dem Menüpunkt Extra<br />

sind zwei Untermenüpunkte vorhanden, die<br />

das komfortable Anzeigen der Daten einer<br />

EC- bzw. Bank-Card und einer Kreditkarte<br />

erlauben. Dazu ist wie folgt vorzugehen: Bei<br />

EC- oder Bank-Cards ist zuerst die ISO-Spur<br />

3 einzulesen, anschließend kann mit der<br />

Funktionstaste “F5” der Karteninhalt wie<br />

Bankleitzahl, Kontonummer, Gültigkeitsjahr,<br />

Gültigkeitsmonat und so weiter in einem<br />

K7<br />

ELEKTOR<br />

(C)<br />

000054-1<br />

H2<br />

H1<br />

33


COMPUTER<br />

eigenen Fenster angezeigt werden. Bei Kreditkarten<br />

ist zuerst die ISO-Spur 1 einzulesen,<br />

dann kann mit der Funktionstaste “F6” der<br />

Karteninhalt wie Kreditkartennummer, Name<br />

des Inhabers, Gültigkeitsjahr und Gültigkeitsmonat<br />

in einem eigenen Fenster angezeigt<br />

werden .<br />

Unter Configuration findet man die Auswahl<br />

des Com-Ports (Com Port Setup), die Einstellung<br />

der Dekodier-Verzögerung (Decode<br />

Delay) und der Sprache für die Programmbedienung<br />

(Deutsch oder Englisch). Mit der<br />

Dekodierverzögerung wird je nach PC die<br />

Zeit zwischen Lesebeginn und Dekodierbeginn<br />

eingestellt. Standardeinstellung ist 2500<br />

ms (2,5 s), diese Zeit ist von 486/33 MHz aufwärts<br />

geeignet. Falls nicht richtig dekodiert<br />

wird (Ausgabe einer Fehlermeldung) ist die<br />

Zeit länger einzustellen.<br />

Das Programm zeigt im Bedienfenster oben<br />

die vom Leser gelieferten Originaldaten (Bitstream)<br />

und unten die dekodierten Daten<br />

(ASCII). Die Dekodierung kann auch durch<br />

Anklicken des Vorhangschloss-Symbols<br />

unten im Bedienfenster gestartet werden.<br />

Wie das am Beispiel einer (aus Datenschutzgründen<br />

fiktiven) Kreditkarte aussieht, ist in<br />

Bild 6 zu sehen. Von links beginnend sind die<br />

ersten beiden Zeichen Startzeichen. Es folgt<br />

die 16-stellige Kartennummer, gefolgt von<br />

einem ^ als Trennzeichen. Weiter folgen<br />

Name und Vorname und nach einem Punkt<br />

Zusatzbuchstaben für die englischsprachige<br />

Anrede. Die vier Ziffern nach dem nächsten<br />

Trennzeichen geben den Gültigkeitszeitraum<br />

der Karte an (hier 9711, also gültig bis 11/97).<br />

Die danach folgenden Ziffern stellen eine verschlüsselte<br />

Kodierung der Kreditkartengesellschaft<br />

dar, die es einem Offline-Kreditkartenleser<br />

ermöglicht, die Kartennummer zu<br />

verifizieren. Mit den Befehlsfeldern unten<br />

links (Save und Open für Originaldaten und<br />

dekodierte Daten) hat man die Möglichkeit,<br />

den Inhalt der Anzeigefelder zu speichern<br />

bzw. wieder zu laden.<br />

Zum Schluss<br />

Wie schon erwähnt, führt die Schaltung nach<br />

dem Anlegen der Stromversorgung einen<br />

optisch sichtbaren Funktionstest durch: die<br />

LEDs der ISO-Spuranzeigen wandern 1 mal<br />

Inhalt der Diskette 000054-11<br />

MAGREAD EXE Windows-Programm<br />

MAGREAD HEX Hex-Datei<br />

MAGREAD ASM Assembler-Datei<br />

INFO TXT Textdatei<br />

COPYRIGHT TXT Textdatei<br />

CONTENTS TXT Textdatei<br />

Bild 5. Das Benutzerinterface des Dekodierprogramms.<br />

hin und her. Ist dies nicht der Fall, ist<br />

die Schaltung auf Fehler zu überprüfen<br />

(Bauteildefekt oder Aufbaufehler).<br />

Funktioniert die Schaltung, so sendet<br />

sie bei Anlegen der Versorgungsspannung<br />

eine Startmeldung<br />

über die serielle Schnittstelle zum<br />

PC. Für mögliche Fehler folgen hier<br />

ein paar Tipps zur Fehlerbehebung.<br />

Fehler: Es erscheinen keine Magnetkartendaten<br />

in der Software:<br />

1. COM-Port-Einstellung in der Software<br />

überprüfen.<br />

2. Das Schnittstellenkabel auf Defekte überprüfen.<br />

3. Die Schaltung auf Defekte überprüfen.<br />

Fehler: Es kommen nur verstümmelte oder<br />

fehlerhafte Daten im PC an:<br />

1. Die Karte wurde nicht “sauber” durch<br />

den Mangetkartenleser gezogen.<br />

2. Der PC (die Schnittstellenkarte) kann mit<br />

Bild 6. Beispiel der dekodierten Daten einer (fiktiven) Kreditkarte.<br />

34 Elektor 6/2000


der Baudrate von 57600 Baud nicht<br />

umgehen => Karte (gegen 16550 UART)<br />

oder PC zum Einlesen der Daten wechseln.<br />

Fehler: Die Software meldetet “Decoding<br />

Error! , Start Sentinel not Found !”:<br />

1. Die Karte wurde nicht “sauber” durch<br />

den Magnetkartenleser gezogen.<br />

2. Die Magnetkarte wurde in der falschen<br />

Richtung durch den Magnetkartenleser<br />

gezogen (Pfeil auf dem Lesemodul beachten)<br />

Software<br />

3. Der Zeitraum zwischen Auslesebeginn<br />

und Dekodierbeginn ist zu kurz (Standardeinstellung<br />

von 2500 ms unter dem<br />

Menüpunkt Konfiguration auf einen höheren<br />

Wert stellen)<br />

4. Die Startmeldung der Schaltung wurde<br />

zum PC übertragen.<br />

000054e<br />

Der Magnetkartenleser liest seine Daten ein und dekodiert diese<br />

dann wie folgt:<br />

Das Programm der Hardwareschaltung wartet in einer Endlosschleife<br />

darauf, dass eine Magnetkarte in den Magnetkartenleser eingeführt<br />

wird. Sobald der Taktausgang des Lesemoduls, das eine<br />

negative Logik hat, auf “Low” wechselt, prüft das Programm in dem<br />

Atmel AT89C2051 Mikrocontroller, ob der Datenausgang des Lesemoduls<br />

einen “High”-Pegel (was einer logischen “0” entspricht)<br />

oder einen “Low”-Pegel hat (was einer Logischen “1” entspricht). Je<br />

nach Logikpegel wird über die serielle Schnittstelle der Schaltung<br />

eine “0” (High Pegel) oder eine “1” (Low Pegel) ausgegeben. Die<br />

serielle Schnittstelle arbeitet mit 57600 Baud, 1 Stoppbit, keine<br />

Parität.<br />

Nach der Ausgabe der “0” oder “1” über die serielle Schnittstelle<br />

wartet das mC-Programm auf einen neuen “Low”-Pegel.<br />

Die Ausgabe erfolgt im Klartext, d.h., es kann mit jedem Terminalprogramm<br />

mit den oben genannten Schnittstelleneinstellungen der<br />

Datenstrom angezeigt werden. Dieser kann z. B. im Terminalprogramm<br />

so aussehen:<br />

000011010000110000010001100100100101010110111100000101001111111<br />

(Ausgewertet: S0123456789E ; S=Startzeichen E=Stoppzeichen).<br />

Das sind die “Rohdaten”, die von der Schaltung zum PC übertragen werden.<br />

6/2000 Elektor<br />

Internet-Adressen:<br />

COMPUTER<br />

Informationen über Magnetkarten findet man bei<br />

www.paulmax.eng.net./indexmag.html<br />

Durchzugsleser findet man einmal beim Hersteller<br />

www.Hopt-Schuler.com<br />

sowie bei www.conrad.de<br />

Die Auswertung findet durch die Software statt. Da die Schaltung nur “Rohdaten” zum PC überträgt, kann sie mit selbst entwickelter<br />

Software universell und auch für besondere, nicht ISO-normgerechte Magnetkartenkodierungen verwendet werden.<br />

Die Software zur Schaltung liest beim Durchziehen der Magnetkarte den Datenstring ein. Nach einer in der Software einstellbaren Zeit,<br />

die das Programm benötigt, bis der serielle Puffer komplett eingelesen und geleert ist, beginnt die Software mit der Dekodierung der von<br />

der Schaltung gelieferten “Rohdaten”. Die Software kann mit ISO-5-bit- und ISO-7-bit-kodierten Magnetstreifen umgehen.<br />

Die Dekodierung der Daten funktioniert folgendermaßen:<br />

Eine Softwareroutine sucht nach dem Startzeichen im “Rohdatenstring”, das bei ISO-5-bit der Bitfolge “11010” und bei ISO-7-bit der Bitfolge<br />

“1010001” entspricht. Ist dieses gefunden, so werden nachfolgend immer 5 bzw. 7 Bit eingelesen und durch eine Softwareroutine<br />

dekodiert. Ein Ausschnitt der ISO-5-bit-Dekodierung aus dem Quelltext ist nachfolgend zu sehen:<br />

function ISODecode_5bit_Coded(InputStr: String): String;<br />

begin<br />

ISODecode_5bit_Coded := ‘?’;<br />

if InputStr = ‘00001’ then ISODecode_5bit_Coded := ‘0’;<br />

if InputStr = ‘10000’ then ISODecode_5bit_Coded := ‘1’;<br />

.......<br />

if InputStr = ‘10011’ then ISODecode_5bit_Coded := ‘9’;<br />

if InputStr = ‘11010’ then ISODecode_5bit_Coded := ‘S’; {Startzeichen}<br />

if InputStr = ‘00111’ then ISODecode_5bit_Coded := ‘’; {Steuerzeichen}<br />

if InputStr = ‘11111’ then ISODecode_5bit_Coded := ‘E’; {Stoppzeichen}<br />

end;<br />

Der ISO-Norm entsprechend sind auf den Spuren 2 und 3 nur numerische und Steuerzeichen vorhanden, deshalb reicht auch eine 5-bit-<br />

Kodierung aus. Auf Spur 1 finden sich numerische, alphanumerische und Steuerzeichen, weswegen eine 7-bit-Kodierung erforderlich ist.<br />

����<br />

����� ���� ���<br />

��� ��<br />

��<br />

����� ������ ��� �<br />

����� ��<br />

�����������<br />

���� ������ ��� �<br />

��<br />

����� ���� ���<br />

��� ��<br />

����<br />

35

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!