Erstellt irgendwann vor 2006
Garnicht schwer!
Eine einfach nachzubauende Schaltung ist ein Telefonkartenleser. Er wird, wie die Schrittmotoren wieder ein mal über die parallele Schnittstelle angesteuert, ist jedoch von den Herstellungskosten und dem Lötaufwand wesentlich einfacher. Das einzige was man benötigt ist eine Kontaktiereinheit (inzwischen auch wieder bei Unrat, ähem Conrad, vorhanden) eine Lochrasterplatine und ein Spannungsregeler (78L05). Wenn man sich nun so eine Kontaktiereinheit ansieht, so stechen einem sofort die acht Kontakte in die Augen. Doch keine Angst, um eine Telefonkarte auszulesen werden nur sechs benötigt und einer davon ist sowieso Masse.
Der chip auf einer Telefonkarte befindet sich nun nach dem Einschieben genau unter/über den Kontakten. Manche Karten (eigentlich fast keine) haben den Chip etwas höher, doch die Norm ISO 7816 Teil 1-3 legt die grundsätzlichen Parameter für eine solche Karte fest.
Hier nun die Bezeichnung der einzelnen Kontakte:
C1 | Vcc | Versorgungsspannung 5V |
C2 | RST | Reset-Eingang |
C3 | CLK | Tackt (Clock)-Eingang |
C4 | reserviert | zur Zeit noch nicht belegt |
C5 | GND | Masse |
C6 | Vpp | Programmierspannung |
C7 | I/O | Datenleitung |
C8 | reserviert | zur Zeit noch nicht belegt |
Nun ist der Rest eigentlich ganz einfach. C1 und C6 werden zusammen über den Spannungsregler mit den 5V versorgt. C2 wird an Data Line 1, C3 an Data Line 2, und C7 wird an Pin 13 angeschlossen. Wer einen Schalter an der Kontaktiereinheit hat, der kann diesen mit Pin 14 und am Ausgang mit Masse verbinden, so weiß der Computer ob eine Karte eingelegt ist.
Hier nochmal zur Erinnerung die Belegung der Schnittstelle.
Die Programmierung
Jetzt kommt der etwas schwierigere Teil der Programmierung:
Dazu sollte man sich zunächst das Diagramm zur Ansteuerung ansehen:
Nach Anlegen der Versorgungsspannung wird der Reset-Eingang auf High gesetzt. Danach folgen ein Low und ein High beim Clock-Eingang, das zur Kontrolle invertiert auf der I/O-Leitung ausgelesen werden kann. Nun folgt wieder ein Clock-Signal und an der I/O-Leitung können die Bits bis 127 ausgelesen werden (das ergibt also 128 Bits, die eine Telefonkarte gespeichert hat). Die genaue Erläuterung zu den einzelnen Bits folgt. Wer sich selber im Programmieren üben will, dem sei gesagt, dass keine große Frequenz von nöten ist (bei mir bekomme ich etwa alle 0,1 Sekunden ein Bit). Die richtigen Leseeinheiten arbeiten da wesentlich schneller (sie haben die Karte in etwa 0,3 Sekunden komplett ausgelesen).
Jetzt also zu den Tabellen, die die Bits erläutern:
Bit | Anzahl der Bits | Bedeutung |
0-15 | 16 | Answer To Reset |
16-23 | 8 | Füllbits (besitzen alle den Wert 1) |
24-27 | 4 | Herstellerkennung (entspricht erster Stelle der Seriennummer) |
28-31 | 4 | Prüfsumme |
32-35 | 4 | Neuwert der Telefonkarte |
36-39 | 4 | Hersellungsjahr (2. Stelle der Seriennummer) |
40-43 | 4 | Herstellungsmonat (3. und 4. Stelle der Seriennummer) |
44-47 | 4 | 9. Stelle der Seriennummer |
48-51 | 4 | 8. Stelle der Seriennummer |
52-55 | 4 | 7. Stelle der Seriennummer |
56-59 | 4 | 6. Stelle der Seriennummer |
60-63 | 4 | 5. Stelle der Seriennummer |
64-71 | 8 | aktueller Wert der Karte: Multiplikator A |
72-79 | 8 | aktueller Wert der Karte: Multiplikator B |
80-87 | 8 | aktueller Wert der Karte: Multiplikator C |
88-95 | 8 | aktueller Wert der Karte: Multiplikator D |
96-103 | 8 | aktueller Wert der Karte: Multiplikator E |
104-127 | 24 | Füllbits (besitzen alle den Wert 1) |
So und jetzt die näheren Bedeutungen zu den einzelnen Bits: Diese 16 Bits haben bei allen Chipkarten dieselbe Bedeutung, welche der Norm TnISO 7816 Teil 1-3 ensprechen. Zur zeit produzieren folgende Hersteller Telefonkarten für den Deutschen Bereich:
Hersteller | Seriennummer 1 | Bit 27 | Bit 26 | Bit 25 | Bit 24 |
ORGA | 0 | 0 0 | 0 | 0 | |
GDM | 1 | 0 0 | 0 | 1 | |
ODS | 1 | 2 | 0 0 | 1 | 0 |
Gemplus | 3 | 0 0 | 1 | 1 | |
Solaic | 4 | 0 1 | 0 | 0 | |
reserviert | - | 0 1 | 0 | 1 | |
reserviert | - | 1 1 | 1 | 1 |
Die Herstellungsnummer Stellt auch gleich die erste Stelle der Seriennummer dar. Noch sind nur die ersten 5 Nummern belegt, die restlichen stehen noch zur Verfügung. Die nachfolgende Tabelle zeigt das Guthaben, das auf einer Karte gespeichert sein kann:
Neuwert | Bit 35 | Bit 34 | Bit 33 | Bit 32 |
1,50 € | 0 | 0 | 0 | 0 |
6,00 € | 0 | 0 | 0 | 1 |
12,00 € | 0 | 0 | 1 | 0 |
60,00 € | 0 | 0 | 1 | 1 |
reserviert | 0 | 1 | 0 | 0 |
reserviert | 0 | 1 | 0 | 1 |
Hier kämen jetzt eigentlich die Herstellungsjahre und Monate. Da meine Quelle aber noch von vor der Jahrtausendwende stammt weiß ich jetzt nicht mehr, wie es jetzt ist, also müsst ihr euch selber umschauen. Dch was jetzt noch folgt ist die Bestimmung des Restwertes der Karte mit hilfe der bereits gesehenen Multiplikatoren:
Die Bits 64 bis 103 enthalten den aktuellen Wert. Je acht Bits stellen dabei einen von fünf Multiplikatoren A bis E dar. Die Anzahl der auf Eins gesetzten Bits entspricht dem Wert des Multiplikators. Der Restwert der Karte in Cent (Pfennigen) errechnet sich dann mit folgender Formel:
Restwert = A * 4096 + B * 512 + C * 64 + D * 8 + E
Ich habe euch einmal meine Sammlung von Basicprogrammen zusammengestellt, mit denen man über das besagte Gerät die Karte auslesen kann. Eventuell müssn noch einige OUT werte geändert werden, aber wie das geht steht in den Programmen selbst. Ein weiteres Programm ist für die sogenannte Future Library geschrieben. Diese Library ist eine Erweiterung für QuickBasic und ermöglich nun unter vielem anderen auch Bildschirmauflösungen bis zum Maximum der Grafikkarte unterstütz. Ebenso ist ein Wave-spieler integriert, Maus und die Möglichkeit auf XMS und EMS zu schreiben und auszulesen. Ein weiteres Feature ist Scrolling und Pageing (z.B. für Animationen). Der Haken an der Sache st, dass es nur noch unter Win95/98 funktioniert (genauso verhält es sich übrigens auch mit allen Programmen, die ich hier geschrien habe, da WinXP durch seine schlechte DOS-Emulution nicht alle Befehle an die prallele Schnittstelle weitergibt. Also das hier ist nur etwas für Rechner bis etwa Jahrgang 2000. Aber wer hier so begeistert bastelt wird bestimmt noch so einen alten PC irgendwo rumstehen haben und sonst steht sowas auch oft am Sperrmüll. Das Programm, das mit der Library läuft verwendet die sogenannte VESA-Schnittstelle, die eben leider nur noch unter DOS und Win95/98 Verwendung findet. Das diese Library verwendet hab ich auch schon mal im kompellierten Zustand in das ZIP gesteckt, damit man nicht erst die Future Library downloaden und installien muss. Auch für die mit Win2000/XP hab ich ein Screenshot dazugetan. Die anderen Programme laufen ohne die Library und sind kommentiert (nur das VESA-Programm müsst ihr euch selber zusammenreimen).
Basicprogramme im Zip