µC gesteuertes RFID Zeiterfassungsterminal, Hartmann, Marc

Transcription

µC gesteuertes RFID Zeiterfassungsterminal, Hartmann, Marc
Dokumentation Technikerarbeit 2009/10
µController RFID Zeiterfassungsterminal
Bearbeiter:
Hartmann, Marc Bo
Berlinerstraße 8
78467 Konstanz
Kontakt:
[email protected]
Ausbildungsstätte:
Zeppelin Gewerbeschule Konstanz
Pestalozzistraße 2
78467 Konstanz
Betreuer:
Herr Gross
Versionsstand Änderungen
V1.0
Urzustand
Freigabedatum
12.04.2010
Vorwort
Nach erfolgreichem Abschluss meiner Ausbildung zum Mechatroniker und anschließenden
Arbeitseinsätzen im In- und Ausland reifte in mir der Entschluss, meinen beruflichen Werdegang
durch weiterführende Ausbildungen zu vervollständigen. Deshalb begann ich im September 2008 mit
der Ausbildung zum Techniker an der Zeppelin Gewerbeschule in Konstanz. Diese beabsichtige ich
Mitte dieses Jahres erfolgreich abzuschließen, um anschließend ein Studium zu beginnen.
II
Inhaltsverzeichnis
Vorwort ................................................................................................................................................... II
Abbildungsverzeichnis ............................................................................................................................ IV
1
Einleitung ......................................................................................................................................... 1
1.1
Motivation ............................................................................................................................... 1
1.2
Projektbeschreibung ............................................................................................................... 1
1.3
Blockschaltbild Schaltplan ....................................................................................................... 2
1.4
Schaltplan ................................................................................................................................ 3
2
RFID Radio frequency identification ................................................................................................ 4
3
Hardware Detailbeschreibung......................................................................................................... 6
3.1
Grafik LCD ................................................................................................................................ 6
3.1.1
3.2
Touch Folie .............................................................................................................................. 8
3.3
RFID Readereinheit .................................................................................................................. 9
3.3.1
4
Textausgabe im Grafikmodus .......................................................................................... 7
Der Transponder............................................................................................................ 10
3.4
Serielle Schnittstelle UART .................................................................................................... 10
3.5
I2C Bausteine ......................................................................................................................... 11
3.5.1
RTC ................................................................................................................................. 11
3.5.2
EEPROM extern ............................................................................................................. 12
3.6
Relais ..................................................................................................................................... 13
3.7
Das Außenterminal ................................................................................................................ 13
Softwarebeschreibung .................................................................................................................. 14
4.1
Speicherorganisation ............................................................................................................. 14
4.1.1
Globale Variablen .......................................................................................................... 15
4.2
Portkonfiguration .................................................................................................................. 15
4.3
Interrupts............................................................................................................................... 16
4.4
Das Statuswort ...................................................................................................................... 16
4.5
Wartungsmodus .................................................................................................................... 17
4.6
GLCD Treiber.......................................................................................................................... 18
4.7
Manchesterdecodierungen ................................................................................................... 22
4.8
weitere Funktionen ............................................................................................................... 23
4.9
Benutzerverwaltung PC-Seite................................................................................................ 28
5
Arbeitsprozessbericht.................................................................................................................... 35
6
Zusammenfassung ......................................................................................................................... 42
6.1
Zeitaufwand........................................................................................................................... 42
III
6.2
Material und Kosten .............................................................................................................. 42
6.3
Résumé .................................................................................................................................. 45
6.4
Selbständigkeitserklärung ..................................................................................................... 46
6.5
Quellenangaben .................................................................................................................... 46
6.6
Inhalt der beigelegten Projekt CD ......................................................................................... 46
Abbildungsverzeichnis
ABBILDUNG 1 BLOCKSCHALTBILD ........................................................................................................................... 2
ABBILDUNG 2 SCHALTPLAN .................................................................................................................................... 3
ABBILDUNG 3 UNTERSCHEIDUNGSMERKMALE RFID .............................................................................................. 4
ABBILDUNG 4 TEXTAUSGABE IM GRAFIKMODUS ................................................................................................... 7
ABBILDUNG 5 AUSZUG AUS DEM FILE FONTS.A51 ................................................................................................. 7
ABBILDUNG 6 TOUCHFOLIE MIT TREIBERSCHALTUNG ........................................................................................... 8
ABBILDUNG 7 EM4095 READER IC .......................................................................................................................... 9
ABBILDUNG 8 BESCHALTUNG EM4095 ................................................................................................................... 9
ABBILDUNG 9 SPEICHERORGANISATION DES TRANSPONDERCHIPS EM4102 ...................................................... 10
ABBILDUNG 10 SIGNALAUSZUG DER SERIELLEN SCHNITTSTELLE RS232 .............................................................. 10
ABBILDUNG 11 SPEICHERORGANISATION DES KALENDERBAUSTEINS DS1307 .................................................... 11
ABBILDUNG 12 TREIBERSCHALTUNG DES RELAIS ................................................................................................. 13
ABBILDUNG 13 INNENLEBEN DES AUßENTERMINALS .......................................................................................... 13
ABBILDUNG 14 SPEICHERORGANISATION NICHTFLÜCHTIGE SPEICHER ............................................................... 14
ABBILDUNG 15 PORTKONFIGURATION ................................................................................................................. 15
ABBILDUNG 17 INHALTE DES STATUSWORTES ..................................................................................................... 16
ABBILDUNG 16 INTERRUPTSYSTEM ...................................................................................................................... 16
ABBILDUNG 18 AUSZUG AUS DEM GLCD-TREIBER ............................................................................................... 18
ABBILDUNG 19 AUSZUG AUS DEM MANCHESTERCODIERTEN BITSTROM ........................................................... 22
ABBILDUNG 20 STRUKTOGRAMM INITIALISIERUNG............................................................................................. 23
ABBILDUNG 21 STRUKTOGRAMM MAIN .............................................................................................................. 24
ABBILDUNG 22 STRUKTOGRAMM ISR SERIELLE SCHNITTSTELLE .......................................................................... 25
ABBILDUNG 23 STRUKTOGRAMM ADMESSUNG .................................................................................................. 26
ABBILDUNG 24 STRUKTOGRAMM GETXY ............................................................................................................. 26
ABBILDUNG 25 STRUKTOGRAMM ERFASSUNGSALGORITHMUS .......................................................................... 27
ABBILDUNG 26 PC-SOFTWARE BENUTZERVERWALTUNG .................................................................................... 28
ABBILDUNG 27 LOGFILE.TXT ................................................................................................................................. 32
ABBILDUNG 28 BENUTZERLISTE.TXT ..................................................................................................................... 32
ABBILDUNG 29 ZEITLICHER VERLAUF BEIM SCHREIBZYKLUS ................................................................................ 35
ABBILDUNG 30 TESTAUFBAU ................................................................................................................................ 38
ABBILDUNG 31 ZEITAUFWAND ............................................................................................................................. 42
ABBILDUNG 32 MATERIALAUFLISTUNG ................................................................................................................ 44
IV
1 Einleitung
Der erfolgreiche Abschluss zum staatlich geprüften Techniker setzt die eigenständige Durchführung
einer Technikerarbeit voraus. Diese umfasst die Informationsbeschaffung, der Erstellung der Hardund Software und die Behebung eventueller Fehler. Anschließend folgt die Anfertigung einer
Dokumentation und die Präsentation des Projektes. Die Rahmenbedingungen wurden durch mein
Pflichtenheft vorgegeben. Dieses Pflichtenheft schreibt meine Umsetzung des Produktes vor.
1.1 Motivation
Zum Schluss des ersten Jahres der Technikerschule war es Zeit die ersten Vorschläge für die
Technikerarbeit einzureichen. Damals hatte ich die Idee einen 256 farbigen RGB LED Bildschirm zu
bauen. Eine Option war, dass das Display durch eine rotierende Zeile entsteht. Dabei dreht sich die
Zeile mit einer hohen Geschwindigkeit um einen Mittelpunkt und der µController sorgt dafür, dass
die LEDs zum richtigen Zeitpunkt leuchten. Dadurch wirkt das Bild statisch. Die zweite Option war das
Display auf einer Ebene aufzubauen. Da jede LED einzeln angesteuert werden muss, bleibt hier nur
die Möglichkeit zum Multiplexen.
Dies schien mir zum Erlernen der µController Funktionen jedoch nicht die richtige Möglichkeit zu
sein. Also suchte ich weiter nach einem richtigen Thema. Da mich die Informationsübertragung über
das Medium Luft besonders faszinierte, kam ich auf die Idee ein Projekt mit RFID zu gestalten. Jetzt
musste ich nur noch einen Einsatzzweck finden, mit dem ich RFID verbinden kann. Da lag die Idee
nahe ein Zugangskontrollsystem zu erstellen.
1.2 Projektbeschreibung
Mein Produkt ist ein Zeiterfassungsterminal. Es ermöglicht kleineren Firmen mit bis zu 50
Mitarbeitern den Zugang zu ihrem Geschäftsgebäude zu kontrollieren und bei einem gewährten
Zugang die jeweiligen Stempelzeiten aufzunehmen. Diese können bei Bedarf mit einem PC
ausgelesen werden. Die Identifikation der Mitarbeiter erfolgt durch einen RFID Transponder auf dem
sich eine Unikate Seriennummer befindet, die einem Mitarbeiter zugeordnet ist.
Das System besteht aus zwei Komponenten. Zum einem aus dem Hauptterminal, welches im Inneren
des Gebäudes platziert ist. Es ist das Herzstück des Systems und trifft letztendlich die Entscheidung
ob einem Mitarbeiter der Zutritt gewährt wird oder nicht. Es werden zwei potentialfreie Kontakte
herausgeführt die bei gewährtem Zutritt geschlossen werden und somit der Gebäudetechnik die
Information geben um eine Tür oder Pforte zu öffnen. Das Hauptterminal speichert alle
aufgenommen Benutzer, sowie deren Stempelzeiten. Mit dem Hauptterminal erfolgt die
Kommunikation mit der PC Software. Es enthält keine mechanischen Taster. Die gesamte Bedienung
erfolgt über die Touchoberfläche des Grafikdisplays.
Die zweite Komponente ist das Außenterminal, welches im Außenbereich zum Einsatz kommt. Es hat
lediglich die Funktion, bei anlegen eines Transponders die Identifikationsnummer aufzunehmen und
über die serielle Schnittstelle an das Hauptterminal zu senden, der die Weiterverarbeitung
Übernimmt.
1
1.3 Blockschaltbild Schaltplan
Abbildung 1 Blockschaltbild
2
1.4 Schaltplan
IC3
TX2-5V
D2
+
K5
Rel1
7805
+5V
SM4007
1N5822
100NF
100µF
K
C2
-
OUT
GND
IN
+A
C4
D1
MKDS1,5/2
T1
R5
+5V
LD-1117V33
+3,3V
R4
100NF
10µF
C1
GND
OUT
+
C5
2,2K
IN
100K
IC5
BC817-40SMD
GND
R9
R7
+5V
TX1
GND
100K
BC807-40SMD
1,5K
K2X04_BUCHSE
Q1
VCC
WP
SCL
SDA
GND
AT24C512
C21
TY1
R12
R13
200
R8
100K
1,5K
P0.2
P0.3
P0.4
P0.5
VDD
P0.6
P0.7
R10
+3,3V
A0
A1
NC
GND
P2.7
P2.6
P0.1
P2.0
P2.1
P0.0
P1.7
P1.6
P1.5
VSS
P3.1
P3.0
P1.4
P1.3
C22
IC2
BC807-40SMD
R6
IC7
100NF
DS1307
GND
R3
X2
VBAT
GND
K1
P1.0
P1.1
P2.5
P2.4
P1.2
P2.2
P2.3
Batteriehalter
VCC
SQW
SCL
SDA
100NF
F1
32,768KHzX1
R1
5,6K
5,6K
+5V
IC6
200
100K
LPC SMD PLCC
GND
R11
+5V
100K
RSER
CDEC-OUT
CDEC-IN
FCAP
DC2
100K
R15
+5V
VDD
DVDD
VSS
DVSS
AGND
GND
+5V
+
C23
DMOD-IN
RDY/CLK
SHD
DMOD-OUT
MOD
CSRC
10µF
C13
ANT1
ANT2
C12
CDEC
C18
CDV2
K1X20_BUCHSE
100K
R14
IC4
C16
CRES
C19
CDV1
K6
K2
C17
CRES1
R2
ANT
1µF
+
C9
C10
+
C1+
C1C2+
C2-
1µF
T1IN
T2IN
R1IN
R2IN
C11
CAGND
C14
CDC2
EM4095
C15
CFCAP
C7
+
IC1a
GND
V+
V-
C8
1µF
+
GND
K3
1µF
T1OUT
T2OUT
R1OUT
R2OUT
MAX232(DIL)
GND
1µF
SUB-D_9POL_BUCHSE_LIEGEND
+
C20
IC1P
+5V
GND
Abbildung 2 Schaltplan
3
2 RFID Radio frequency identification
RFID ist ein Akronym und steht für Radio-frequency identification. Hierbei erfolgt die Identifizierung
eines Objektes kontaktlos mit Hilfe von Elektromagnetischen Wellen, in diesem Fall über das Medium
Luft.
Die Hauptbestandteile eines RFID Systems sind der Transponder-häufig auch als Tag bezeichnet-und
die Readereinheit. Üblicherweise erfolgt eine induktive Kopplung beider Systeme. Dabei erzeugt eine
Induktionsspule ein elektromagnetisches Feld. Befindet sich ein Transponder in diesem Feld so wird
in ihm eine Spannung induziert. Diese Spannung wird gleichgerichtet und dient als
Spannungsversorgung des Transponders. Für die Informationsübertragung wird sehr häufig das
Verfahren der Feldschwächung verwendet. Da die Induzierte Spannung im Transponder die gleiche
Frequenz hat wie die der Induktionsspule, ruft eine Belastung im sekundärkreis (Transponder) eine
Erhöhung des Stromes in Primärkreis (Readereinheit) hervor. Wo soll die Energie auch sonst
herkommen. Somit kann durch eine gezielte Belastung im Transponder seine Identifikationsnummer
übermittelt werden ohne selbst etwas zu senden.
Der Einsatz von RFID ist vielfältig. Größten Anklang findet es im Logistikbereich zur Verfolgung und
Identifizierung von Gütern. Weitere Einsatzgebiete sind:
Identifizierung und Nachverfolgung von Sendungen
Erfassung der LKW-Maut
Kreditkarte
Reisepass ab 2005
Warensicherung in Kaufhäusern
Grundsätzlich werden RFID Systeme nach den folgenden Merkmalen unterschieden:
Frequenzbereich
LF:
30–500 kHz
HF:
3–30 MHz
UHF:
433 MHz, 850–
950 MHz
SHF:
2,4–2,5 GHz,
5,8 GHz und darüber
Eigenschaften
Meistens Read-only Systeme, günstig in
der Anschaffung, vielfältige Bauformen.
Mittlere Übertragungsgeschwindigkeit
und mittlere bis günstige Preisklasse.
Häufiger Einsatz von Smart Tags (Folien
Antennen, meist 13,56 MHZ)
Hohe Lesegeschwindigkeit. Einsatz von
semi-aktiven Tags für erhöhte
Reichweite
Sehr hohe Lesegeschwindigkeit z.B. für
vorbeifahrende Fahrzeuge
Reichweite
bis 50cm bei passiven Tags
bis 1m bei passiven Tags
bis 6m bei passiven Tags
bis 100m bei semi-aktiven Tags
bis 6m bei semi-aktiven Tags
über 10m bei aktiven Tags
Abbildung 3 Unterscheidungsmerkmale RFID
4
Desweiteren gibt es mehrere Unterscheidungsmerkmale der Transponder
Energieversorgung:
Passiv. Die gesamte Energie zum betrieb passiver Transponder muss dem elektrischen Feld
entnommen werden.
Aktiv. Aktive Transponder enthalten eine Batterie, welche die Energie zum Betrieb des Mikrochips
zur Verfügung stellt.
semi-aktiv. Bei semi-aktiven Transpondern erfolgt ein aufwecken aus dem Ruhemodus sobald sich
der Transponder in einem elektrischen Feld befindet. Somit wird die Lebensdauer der Batterie
erheblich gesteigert.
Datenmenge:
1Bit. Zur Erkennung ob ein Tag präsent ist. Einsatz beim verlassen von Kaufhäusern zur Erkennung
von unbezahlter Ware.
wenige Bytes. Enthält meisten einfache Seriennummer die schon bei der Chipherstellung
aufgebracht wird und nicht verändert werden kann (Read Only).
mehrere kBytes. Hier können Benutzerspezifische Daten auf dem Tag hinterlegt werden (Read
Write). Bei programmierbaren Systemen müssen die Schreib- und Lesezugriffe durch eine „innere
Logik“ des Datenträgers gesteuert werden.
Bauformen:
Ausschlaggebend für die Größe des Transponders ist hauptsächlich die Größe und Form der Antenne.
Diese ist abhängig von der Frequenz bzw. der Wellenlänge des verwendeten Systems. Je höher die
Frequenz desto kleinere Bauformen der Antenne sind möglich.
Glasgehäuse. Wird für die Identifizierung von Tieren eingesetzt. Hierbei wird der Glastranspondern
unter die Haut des Tieres injiziert. Um die nötige Induktivität zu erhalten wird die
Spule um einen Ferritkern gewickelt. Für die mechanische Stabilität sind die
inneren Komponenten in einen Weichkleber eingebettet.
Schlüssel und Schlüsselanhänger. Für Türschließsysteme mit hohen
Sicherheitsanforderungen oder Wegfahrsperren werden Transponder in mechanischen
Schlüsseln integriert. Für Zutrittssystemen zu Büroräumen oder z.B. Fitnessstudios hat sich
der Einsatz von Schlüsselanhängern als sehr beliebt erwiesen.
Chipkarten. Die durch Kredit- und Telefonkarten bekannte Bauform kommt in RFIDSystemen eine immer größer werdende Bedeutung. Diese eigenen sich
hervorragend als Werbeträger und können mit künstlerisch gestalteten
Aufdrucken versehen werden. Trotz der maximalen Dicken von 0,8mm
ergeben sich große Spulenfläche und dadurch hohe Reichweiten.
Smart Labels. Darunter versteht man papierdünne Folien auf denen eine
hauchdünne Transponderspule aufgebracht wird. Diese wird häufig mit einer Papierschicht
laminiert und auf der Rückseite mit einem Kleber beschichtet. Diese werden dann als
Selbstklebeetiketten geliefert und sind dünn und flexibel genug, um auf Gepäckstücke,
Pakete und Waren aller Art aufgeklebt werden zu können.
Neben diesen Wichtigsten Bauformen gibt es noch eine Vielzahl anwendungsspezifischer Bauformen,
da sie in allen nichtmetallischen Baustoffen untergebracht werden können. Die beiden unteren
Transponder sind entweder durch eine Senkschraube oder einem
Klebestreife auf einem Produkt befestigbar.
5
3 Hardware Detailbeschreibung
3.1 Grafik LCD
Bei der verwendeten Anzeigeeinheit handelt es sich um ein grafikfähiges LC-Display vom Hersteller
DataVision mit der Typenbezeichnung DG-16080-11. Es hat eine Auflösung von 160x80 Bildpunkten
bei einer Farbtiefe von 1 Bit. D.h. es können nur schwarz-weiße Bilder ohne Graustufen dargestellt
werden. Die Versorgungsspannung beträgt 5V. Das Display besitzt einen internen Wandler, um die
Kontrastspannung von-5V zu erzeugen.
Auf der Platine sitzt ein Display-Controller, der über zwei Treiber-ICs jeweils ein 80x80 Pixel großes
Feld ansteuert. Er speichert die Daten, die vom µController gesendet wurden in einem Display RAM
und erzeugt Signale für den jeweiligen Treiber, die ihren Inhalt auf dem Display ausgeben.
Das Display besitzt einen Textmodus und einen Grafikmodus. Im Textmodus werden die im Display
RAM gespeicherten Daten als ASCII Zeichen interpretiert und mit dem im internen ROM
gespeicherten Zeichensatz mit einer Auflösung von 8x8 Pixel ausgegeben. Somit können 10 Zeilen zu
je 20 Zeichen ausgegeben werden.
Im Grafikmodus erzeugt jedes Bit im Display RAM bei einer logischen 1 einen schwarzen Bildpunkt
und bei einer 0 einen weißen Bildpunkt auf dem Display. Die Bildpunkte können entweder Byteweise
gesetzt werden, also acht hintereinanderliegende Pixel oder jedes Pixel für sich.
Die Ansteuerung erfolgt ausschließlich im 8bit Modus (D0-D7) über die Leitungen Register Select
(RS), Read/Write (R/W) und Enable (E).
Eine Anweisung an das Display erfolgt durch sequentielles Schreiben in das Befehlsregister
(Instruction) bzw. Datenregister (Data) Register. Somit können alle relevanten Befehle ausgeführt
werden, von der Initialisierung des Display bis zum schreiben in den Display RAM.
Damit das Display betriebsbereit ist müssen der Anschluss Chip Select (/CS) auf low-Pegel und der
Anschluss Reset (RST) auf high-Pegel gelegt werden.
6
3.1.1
Textausgabe im Grafikmodus
Da der Textmodus nicht mit dem Grafikmodus kombinierbar ist, aber Textausgaben in Grafiken für
die Darstellung notwendig waren, wurden die Zeichen als Grafik auf dem Display aufgebaut. Dazu
bediente ich mich einer Sammlung von Zeichensätzen aus dem Forum von mikrocontroller.net. Mit
dieser Sammlung aller ASCII Zeichen ist es möglich den kompletten Zeichensatz im Grafikmodus
nachzustellen. Hier sehen sie die Textausgabe auf dem Bildschirm „Hallo Welt“ in Kombination mit
einem Auszug aus dem File „Fonts.a51“ und eine nähere Betrachtung des Zeichens „A“, das dem HexWert 0x41 entspricht.
LSB
MSB
0x0C
0x1E
0x33
0x33
0x3F
0x33
0x33
0x00
Abbildung 4 Textausgabe im Grafikmodus
Abbildung 5 Auszug aus dem File Fonts.a51
Der Aufbau des Zeichens erfolgt von oben nach unten und von rechts nach links. D.h. als erstes wird
das Byte „0x0C“ in das Display geschrieben, wobei das high nibble „0“ dem rechten Teil und das low
nibble„C“ dem linken Teil entspricht. Als nächstes folgt eine Zeile darunter das Byte „0x1E“ und so
fort bis „0x00“, welches eine leere Zeile darstellt.
Somit kann ein Text wahlfrei im Grafikmodus positioniert und ausgegeben werden.
7
3.2 Touch Folie
Auf dem Display ist eine resistive Touchfolie angebracht, über die die gesamte Bedienung erfolgt. Sie
hat vier Anschlüsse, von denen jeweils zwei der X- und Y-Achse zugeordnet sind. Der
Gesamtwiderstand jeder Achse setzt sich aus der Summe, der zwei Teilwiderstände zusammen
dessen Verhältnis durch die Position des „Mittelpunktes“ bestimmt wird. Die Summe beträgt stets
450 Ω in X-Achse und 350 Ω in Y-Achse. Bei Nichtberührung haben die zwei Teilwiderstände etwa den
gleichen Wert, also in X-Achse jeder ca. 225 Ω und in Y-Achse 175 Ω. Wird das Display berührt, so
verschiebt sich der “Mittelpunkt“ und mit ihm die Widerstandsverhältnisse der Achsen. Legt man
eine Spannung an eine Achse, kann man die Position des Berührungspunktes dieser Achse durch
messen der resultierenden Spannung des Spannungsteilers an einem Anschluss der anderen Achse
erfassen. Somit kann der Berührpunkt durch ein aufeinanderfolgendes Ausmessen des
Spannungswertes an beiden Achsen bestimmt werden.
xmin
xmax
ymin
max
ymax
max
Abbildung 6 Touchfolie mit Treiberschaltung
Eine Messung wird in vier Schritten durchgeführt.
1.
2.
3.
4.
P0.4 und P0.2 werden auf Masse geschaltet. Dadurch wird T1 leitend und zwischen den
beiden blauen Anschlüssen liegt eine Spannung von 3,3 V an.
P0.3 wird auf Tristate geschaltet. Dadurch sperrt T2 und der Emitter Anschluss wirkt
hochohmig. AD Messung wird an AD10 durchgeführt (Y-Wert).
P0.3 und P0.1 werden auf Masse geschaltet. Dadurch wird T2 leitend und zwischen den
beiden roten Anschlüssen liegt eine Spannung von 3,3 V an.
P0.4 wird auf Tristate geschaltet. Dadurch sperrt T1 und der Emitter Anschluss wirkt
hochohmig. AD Messung wird an AD11 durchgeführt (X-Wert).
Da die Bildschirmgrenzen einen eigenen Widerstandswert besitzen wird bei einer Berührung des
Displays auf der linken Grenze nicht ein Wert von 0V gemessen wie angenommen, sondern etwas
darüber. Diese Abweichung muss bei der Positionsbestimmung berücksichtigt werden, und wird bei
der Kalibrierung unter den Bezeichnungen xmin, xmax aufgenommen. Die Differenz der beiden
Werte entspricht dem Nutzbaren Bereich.
8
Um nun den absoluten Wert bezogen auf die Auflösung von 160*80 Pixel zu bekommen müssen
noch weiter Schritte durchgeführt werden.
Beispielrechnung X-Achse:
Dazu setzen wir den gemessenen AD Wert in Relation zur horizontalen Auflösung des Displays von
160 Pixeln ergibt sich folgende Formel mit Einbeziehung der Bereichsgrenzen (xmin, xmax):
Nun folgt die Umstellung auf den gesuchten Wert
3.3 RFID Readereinheit
Zur Realisierung der RFID Readereinheit kommt der EM4095 Chip der Firma
EM Microelectronic zum Einsatz. Dieser bietet mir die optimalen
Voraussetzungen zur Umsetzung meines Projektes. Der Chip ist ausgelegt für
eine Frequenz von 125kHz, Arbeitet jedoch auch von 100 - 150Khz.
Abbildung 7 EM4095 Reader IC
Hier ist die Beschaltung des Chips zu sehen.
Die Induktivität (La) der Spule und die Kapazität (Cres) des
Kondensators bilden einen Reihenschwingkreis. Die
Resonanzfrequenz kann am Pin2 (RDY/CLK) abgegriffen
werden und ergibt sich aus der Formel:
Abbildung 8 Beschaltung EM4095
Das Amplitudenmodulierte Signal wird über den kapazitiven Spannungsteiler CDV1 und CDV2 auf den
Pin8 (Demod in) eingespeist. Dort gelangt es zur Samplereinheit. Vom Ausgang der Samplereinheit
gelangt es über den Kondensator Cdec, der das Signal von Gleichspannungsanteilen entkoppelt in
den Eingang des Filters. Dieser bildet mit dem Kondensator Cdc2 einen Bandfilter. Das nun gefilterte
Signal wird über einen Komperator als Bitstrom an Pin13 (Demod out) ausgegeben.
Über den Pin12 (Mod) kann zwischen Lese-und Schreibmodus gewählt werden.
Bei einem low Pegel an Pin14 (SHD) wird der IC aus dem Schlafmodus geholt und ist Betriebsbereit.
9
3.3.1
Der Transponder
Der Transponder welcher zur Identifikation der Mitarbeiter dient muss natürlich zu der Readereinheit
passen. Es handelt sich um einen passiven Transponder. Er stammt ebenfalls von der Firma EM
Microelectronic, trägt die Typenbezeichnung EM4102 und ist in einem Schlüsselanhänger
untergebracht.
Befindet sich der Transponder in einem elektromagnetischen Feld, das seinem Frequenzbereich
entspricht, so wird der 64Bit Speicherinhalt durch gezielte Belastung des inneren Schaltkreises
übermittelt. Dieser 64Bit Speicherinhalt setzt sich aus 9Startbits, 1Byte Herstellernummer und 4Byte
Datenbits zusammen. Um etwaige Störungen bei der
Übermittlung zu erkennen enthält jeder 4Bit Block
und jede Reihe bestehend aus jeweils einem Bit des
Blockes ein Paritätsbit. Ist die Anzahl der gesetzten
Bits in einer Reihe oder Spalte ungerade ist das
Paritätsbit gesetzt, bzw. bei gerader Anzahl nicht
gesetzt. Der Empfänger kann dies Überprüfen und
somit eine Fehlerhafte Übermittlung feststellen.
Die Übermittlung des Speicherinhalts erfolgt solange,
bis der Transponder wieder aus dem
Abbildung 9 Speicherorganisation des Transponderchips
EM4102
elektromagnetischen Feld entfernt wird.
3.4 Serielle Schnittstelle UART
Die Verbindung des Hauptterminals mit dem PC oder dem Außenterminal erfolgt über eine serielle
Schnittstelle. Dazu wird der interne UART Baustein des µControllers verwendet. Typisches Merkmal
bei der Verbindung über die serielle Schnittstelle ist der Spannungspegel von ± 15V. Für den
µController ist jedoch nur ein Spannungspegel bis +5V zulässig. Ein Pegelwandler des Typs MAX232
nimmt die Pegelwandlung des Txd-und Rxd Signals vor.
Als Übertragungsparameter werden die allgemein gebräuchlichen Werte verwendet:
Baudrate:
9600 Bit/s
Bytegröße:
8Bits
Parität:
keine
Stoppbits:
1
Hier sehen sie serielle Übertragung im TTL Signal des Zeichens „5“, welches in der ASCII Tabelle dem
Hexadezimalwert 0x35. Die Übertragungsgeschwindigkeit beträgt bei einer Baudrate von 9600 Bit/s
pro Bit 104µs also dem Kehrwert von 9600. Zunächst befindet sich die Leitung in der Ruhephase also
hat einen high Pegel. Ist ein Zeichen in Anmarsch, so wird die mit einem Startbit signalisiert, dass den
Wert 0 hat. Daraufhin folgen die 8 Datenbits und ein Stoppbit mit dem Wert 1. Nach einer kleinen
Ruhepause kann diese Prozedur von neuem beginnen.
104
µs
Ruhephase Start
bit
1
0
1
0
1
1
0
0 Stopp Ruhephase
MSB
LSB
Daten 0x35
Abbildung 10 Signalauszug der seriellen Schnittstelle RS232
bit
10
3.5 I2C Bausteine
Der I2C-Bus ist ein serieller Bus, der von der Firma Phillips entwickelt wurde. Er ist für kurze
Distanzen ausgelegt und wird vorzugsweise auf Platinen verwendet. Der I2C Bus wird mit zwei
Busleitungen betrieben, wodurch er von einigen Herstellern als TWI (Two Wire Interface) bezeichnet
wird. Die Leitungen werden unterscheiden in Taktleitung (SCL) und Datenleitung (SDA). Beide
Leitungen werden mit Pull up Widerständen auf high-Pegel gelegt. Sie können durch Schalten von
Transistoren auf einen low-Pegel gezogen werden. Somit wird die Portkonfiguration als Open Drain
vorgeschrieben. Es können mehrere Bausteine verschiedenster Art an den I2C Bus angeschlossen
werden. Sie werden durch die Slave Adresse unterschieden, die entweder fest vorgeschrieben ist
oder teilweise per Hardware festgelegt werden kann. Dabei kennzeichnet das letzte Bit (LSB) der
Slave Adresse die Übertragungsrichtung ( 1“ für Lesen, “ 0“ für Schreiben).
3.5.1
RTC
Die Real Time Clock ist ein Kalenderbaustein der Firma Dallas mit der Typenbezeichnung DS1307 und
wird über den I2C-Bus betrieben. Sie besitzt die Slave Adresse 0xD0 bzw. 0xD1. Damit der Baustein
funktioniert muss ein Uhrenquartz extern angeschlossen werden. Dieser versorgt den Baustein mit
einer Frequenz von 32.768 khz. Zusätzlich ist eine Knopfzellenbatterie angeschlossen, welche dafür
sorgt, dass der Takt weiterläuft und der Baustein am Leben bleibt auch wenn keine
Versorgungspannung gegeben ist. Der interne SRAM hat eine Speicherkapazität von 56Byte, wobei
nur die ersten 7Byte für die Funktion benötigt werden. Der Rest dient als Zusatz und kann beliebig
verwendet werden. Slave Adr.
Die Daten werden wie folgt im Speicher abgelegt:
RAM
Adresse/Bit
0
1
2
3
4
5
6
7
6
5
4
10er Sekunden
10er Minuten
10er Stunden
10er Datum
10er Monate
10er Jahre
3
2
1
0
Sekunden
Minuten
Stunden
Tag in der Woche
Datum
Monat
Jahr
Bereich
0-59
0-59
0-23
1-7
1-31
1-12
0-99
Abbildung 11 Speicherorganisation des Kalenderbausteins DS1307
Liest man beispielsweise die Uhrzeit am 24.07.2010 um 17:23:00 Uhr aus und legt sie in einem
Vector unter dem Namen time ab sieht es folgendermaßen aus:
time:
[0] 0x00
[1] 0x23
[2] 0x17
[3] 0x06
[4] 0x24
[5] 0x07
[6] 0x10
11
Dies scheint bei erster Betrachtung in Hexadezimaler Schreibweise korrekt, jedoch nicht als
Dezimalzahl und ist für die Weiterverarbeitung nicht geeignet. Daher ist für jeden Wert eine
Umrechnung erforderlich, die im folgenden Beispiel näher beschrieben wird.
Umrechnung der Hexadezimalzahl 0x23 (entspricht dezimal 35), in die Dezimalzahl 23.
1. Schritt
2. Schritt
3. Schritt
Ergebnis1 = 35/16*10
ergibt 20
Ergebnis2 = 35%16
ergibt 3
Dezimalzahl = Ergebnis1 + Ergebnis2
Im ersten Schritt wird die Zahl, hier 35, durch 16 geteilt und mit 10 multipliziert. Daraus erhält man
die Zehnerpotenz der Dezimalzahl. Hier die 20.
Im zweiten Schritt wird die Zahl wieder durch 16 geteilt, aber es wird diesmal der Rest der Division
durch 16 zugeteilt. Daraus erhält man die Einerpotenz der Zahl. Hier die 3.
Im dritten Schritt werden die beiden vorherigen Ergebnisse addiert. Also 20 + 3. Dies ergibt dann 23
3.5.2
EEPROM extern
Als Speichererweiterung dient ein EEPROM Baustein, der über den I2C Bus angesprochen wird. Die
Betriebsspannung beträgt 5V.
Die Anschlüsse A1 und A0 sind auf Masse geschalten. Über die beiden Anschlüsse wird dem EEPROM
eine Slaveadresse zugewiesen. Das EEPROM hat einen vorgegeben Adressenteil, und über A0 und A1
wird die Adresse vervollständigt, indem die Anschlüsse auf ein high-Pegel oder ein low-Pegel gelegt
werden. Entsprechend dem Pegel bildet sich dann eine fest zugeordnete Slaveadresse, über die
genau der Baustein angesprochen werden kann. Über die Adressierung ist es möglich bis zu 4
verschieden EEPROM an einem I2C-Bus anzuschließen und unabhängig voneinander anzusprechen.
Die Anzahl entspricht den Variationsmöglichkeiten von A0 und A1, nämlich 2²
Beschaltungsmöglichkeiten. In meinen Fall erhielt der Baustein die Slave Adresse 0xA0 zum schreiben
und 0xA1 zum lesen.
Der Baustein hat eine Kapazität von 64KByte. Jede 8Bit große Speicherzelle wird über 2Byte,
bestehend aus einem lower Byte und einem higher Byte, adressiert. Der Speicherinhalt bleibt auch
bei Trennung der Versorgungsspannung erhalten.
12
3.6 Relais
Das Relais dient zur Signalisierung der Zugangsfreigabe. Erhält ein Benutzer den Zugang von oder
zum Gebäude so werden zwei Kontakte des Relais geschlossen. Die Verhältnismäßig hohen Ströme
die beim Einschalten des Relais benötigt werden können durch den Porttreiber nicht erbracht
werden. Hierzu habe ich eine Transistorschaltung die zur Verstärkung dient verwendet.
Liefert der µController ein high-Signal, führt
dies zum durchschalten der Collector-Emitter
Strecke des Transistors T1. Somit wird die
Spule angeregt und das Relais zieht an. Jetzt
besteht ein Kontakt zwischen Pin3 und Pin5
des Relais. Spannungsspitzen beim
vom
wiederausschalten durch Selbstinduktion
µC
werden durch die Freilaufdiode vermieden.
3.7 Das Außenterminal
Abbildung 12 Treiberschaltung des Relais
Um von einem externen Punkt des Gebäudes
Zugang zu ermöglichen, muss von dort die ID erfasst
werden können. Diese Aufgabe erledigt das
Außenterminal. Es bedient sich bei der
Spannungsversorgung einer 9V-Blockbatterie.
Zwei Festspannungsregler setzen die 9V auf 5V
und 3,3V um. Damit werden der µController, der
Pegelumsetzer MAX 232 und die RFID
Readereinheit EM4095 mit Spannung versorgt.
An die 2polige Klemme (grüne Phoenix Klemme)
wird die Spule der RFID Readereinheit
angeschlossen.
den
Das Außenterminal besteht aus den folgenden
Abbildung 13 Innenleben des Außenterminals
Baugruppen. Da diese hauptsächlich dem
Hardware- und Softwareteilen des Hauptterminals entnommen worden sind entfällt eine
ausführlichere Beschreibung.
Spannungsversorgung
µController LPC 935
RFID Readereinheit
Serielle Schnittstelle
Signalisierung durch zwei LEDs
Die Funktion des Außenterminals besteht darin, auf das erscheinen eines Transponders zu warten,
ihn zu entschlüsseln, und bei einer erfolgreichen Entschlüsselung über die serielle Schnittstelle zu
senden. Dies wird durch das kurzzeitige erleuchten beider LEDs signalisiert.
13
4 Softwarebeschreibung
4.1
Speicherorganisation
I 2 C E E p r o m 6 5 5 3 5 B y te
A d r e s s b e r e ic h 0 x 0 0 0 0 – 0 x F F F F
1 . M ita r b e ite r 4 7 B y te
B e n u tz e r v o r n a m e
B e n u tz e r n a c h n a m e
B e n u tz e r id e n tifik a tio n
2 . M ita r b e ite r
n . M ita r b e ite r
Adresse
0x000
0x007
0x010
0x1FE
D a ta E e p r o m 5 1 2 B y te
A d r e s s b e r e ic h 0 x 0 0 0 – 0 x 1 F F
Adresse
0x0000
0x09F3
5 0 . B e n u tz e r
A n z a h l B e n u tz e r
A n z a h l D a te n w e r te lo w e r b y te
A n z a h l D a te n w e r te h ig h e r b y te
P IN
1 . B e n u tz e r 8 B y te
B e n u tz e r n u m m e r
B e n u tz e r id e n tifik a tio n
B e r e c h tig u n g
S ta tu s
2 . B e n u tz e r
n . B e n u tz e r
1 . D a te n s a tz 8 B y te
B e n u tz e r n u m m e r
Z e itp u n k t
E vent
2 . D a te n s a tz
n . D a te n s a tz
3 8 4 0 . D a te n s a tz
1 . M e n u e b ild 1 6 0 0 B y te
2 . M e n u e b ild
5 0 . B e n u tz e r
0x0A00
0x09FFE
n . M e n u e b ild
1 5 . M e n u e b ild
0xA000
0xFDC0
Abbildung 14 Speicherorganisation nichtflüchtige Speicher
Für die Speicherung sensibler Daten, die nach einem Programmabsturzes oder versagen der
Versorgungsspannung erhalten bleiben sollen wird ein nicht flüchtiger Speicher (EEPROM)
verwendet. Ein Teil konnte im internen EEPROM des µControllers untergebracht werden. Hierzu
gehören z.B. die Anzahl der Benutzer und die wichtigsten Daten der Benutzer. Somit muss nicht jedes
Mal beim Suchen eines Benutzers ein externer Baustein angesprochen werden. Außerdem wurde
noch der PIN im internen Speicher hinterlegt, da dieser fest zum Programm gehört, und nicht
verloren gehen darf, was beim auswechseln des EEPROMs passieren könnte.
Natürlich war klar, dass nicht annähernd der gesamte Speicherbedarf durch das interne EEPROM
gedeckt werden würde. Hierfür leistet ein externes EEPROM, das über den I2C-Bus betrieben wird
Abhilfe. Hier werden die Daten abgelegt die große Datenmengen verursachen.
Der externe Speicher enthält
die kompletten Daten jedes Benutzers
die aufgenommenen Datensätze
die Bitinformationen der Menübilder
14
4.1.1
Globale Variablen
Variablen, die für mehrere Funktionen verfügbar sein mussten habe ich Global über ein Header File
im Hauptprogramm angelegt. Dazu wählte ich gezielt den externen RAM (xdata), da ich schon
ziemlich früh Probleme mit der Speicherkapazität des internen RAMs bekam wegen eines Überlaufs
des Stacks. Das Header File global-var.h enthält folgende Variablen:
xdata unsigned char xpointer, ypointer;
xdata unsigned char xmin = 0x19, xmax = 0xFA, ymin = 0x1D, ymax = 0xF8;
xdata char xoffset = 0, yoffset = 0;
xdata char anzahl_benutzer;
xdata unsigned int anzahl_datenwerte;
xdata unsigned char time[7], time_set[7], id1[5], id2[5], id_hilf[10][5], pin_ist[4] = {0, 0, 0, 0},
pin_eingabe [4];
xdata struct { char nummer;
char id [5];
char nachname [21];
char vorname [21];
char berechtigung;
char status;} puffer;
xdata char statuswort = 0;
4.2 Portkonfiguration
Die Portkonfiguration jedes einzelnen Portpins ergibt sich aus der angeschlossenen Komponente und
deren Eigenschaften. Die Konfiguration der Ports ist der erste Schritt des Programmablaufes und
ermöglicht erst eine Kommunikation mit der Außenwelt des µControllers.
Die Ports wurden auf folgende Werte konfiguriert:
Port 0
.0
.1
.2
.3
.4
.5
.6
.7
GLCD Enable
Touch AD (Y-Werte)
Touch AD (X-Werte)
Touch Treiber (X-Achse)
Touch Treiber (Y-Achse)
Relais Treiber
unbelegt
unbelegt
Modus
Quasi bid.
Input
only
Push pull
Input
only
Port 1
.0
.1
.2
.3
.4
.5
.6
.7
Txd MAX232
Rxd MAX232
SCL I2C
SDA I2C
DMODOUT EM4095
unbelegt
GLCD RS
GLCD R/W
Modus
Quasi
bid.
Open
Drain
Input
Only
Quasi
bid.
Port 2
.0
.1
.2
.3
.4
.5
.6
.7
Modus
GLCD D0
GLCD D1
GLCD D2
GLCD D3
GLCD D4
GLCD D5
GLCD D6
GLCD D7
Alle
Quasi
bid.
Abbildung 15 Portkonfiguration
15
4.3 Interrupts
Interrupts dienen dazu unvorhersehbare Ereignisse während des Programmablaufs zu erfassen und
die durch das Erscheinen der Ereignisse nötigen Aufgaben mit einer Funktion abzuarbeiten.
Da das Hauptprogram permanent mit dem
entschlüsseln und vergleichen des
Manchestercodes ist, war der Einsatz
folgender Interrupts von Nöten:
Serial Receive:
Ermöglicht den empfang einer ID vom
Außenterminal.
Ermöglicht die Kommunikation mit der PC
Software, vorausgesetzt der µController
befinden sich im richtigen Menüpunkt.
Erhält eine erhöhte Priorität.
ADC1 Boundary:
Ermöglicht das anwählen des
Wartungssymbols und der damit verbundene
Zugang zu PIN Eingabe.
Abbildung 16 Interruptsystem
4.4 Das Statuswort
Um während des Programmablaufs Informationen über zuvor geschehene Ereignisse oder
Entscheidungen zu bekommen legte ich ein Statuswort an, das folgende Informationen besitzt:
Displaymodus:
Gibt an in welchem Modus das Display initialisiert wurde. Gibt dem
Displaytreiber Information ob er nur den Wert eines Zeichens übergeben
muss, ober das Zeichen als Grafik nachbilden muss.
Schriftgröße:
War ursprünglich gedacht für die Unterscheidung zum Aufbau eines Textes
mit großer- oder kleiner Schriftgröße. Wird nicht verwendet.
Error Flag decodierung: Dieses Flag zeigt einen Error bei der Decodierung des Manchestersignals an.
Erfolgt bei der Codierung eine bestimmte Zeit kein Signalwechsel so wird die
Codierung abgebrochen und das Flag gesetz.
ID Außenterminal:
Zeigt an, dass eine ID vom Außenterminal vorliegt und dient dem
Erfassungsalgorithmus zur Entscheidung der Verarbeitung von der ID.
Benutzerverwaltung: Zeigt an ob das Programm sich im Menüpunkt Benutzerverwaltung befindet.
Dient der Freigabe von Anfragen der PC-Software für die Verwendung von
Funktionen der Benutzerverwaltung
unbenutzt
7
6
5
BenutzerID Außenverwaltung terminal
4
3
Aktiv
Erfasst
Inaktiv
Error Flag
decodierung
2
gesetzt
Nicht gesetzt
Schriftgröße
1
Gross
Klein
Display
Modus
0
Text
Grafik
Bezeichnung
Bit/Zustand
1
0
Abbildung 17 Inhalte des Statuswortes
16
4.5 Wartungsmodus
PIN OK
PIN Falsch
Wird auf dem Home Bildschirm eine Berührung ausgeübt die etwa im Bereich des Wartungssymbols
liegt wird über den BoundaryCheck ein Interrupt ausgelöst und man gelangt zur PIN Eingabe. Ist die
eingegebene PIN korrekt (im Auslieferungszustand 0000) befindet man sich nun im Wartungsmodus.
Dort hat man die Auswahl zwischen folgenden Menüpunkten:
Benutzerverwaltung: Ermöglicht die Kommunikation mit einem PC und der
entsprechenden Software. Dabei können alle für die
Benutzerverwaltung relevanten Maßnahmen
durchgeführt werden.
PIN Ändern:
Ändert die PIN, die den Zugang zum Wartungsmodus
ermöglicht.
Status:
Gibt die Anzahl der angelegten Benutzer und erfassten
Datensätze an.
Touch Calibration:
Zeigt die aktuellen Werte der Kalibrierung an. Die
korrekte Kalibration kann über ein Zeichenfeld
überprüft werden. Stimmen die Werte nicht können
die Bereichsgrenzen neu festgelegt werden und ein
Offset der x und y Achsen vorgenommen werden.
Zeit Datum:
Zeigt das aktuelle Datum und die Uhrzeit an und
ermöglicht eine neue Eingabe.
ESC:
Springt zurück zum Home Bildschirm.
17
4.6 GLCD Treiber
Den GrafikLCD-Treiber habe ich Anfangs an den Zeilentreiber aus der Schule angelehnt, doch fast
keine dieser Funktion entspricht ihm noch. Die größte Ähnlichkeit ist das laden der Zeichen eines
Strings aus dem Codespeicher in der Funktion print_glcd.
Für den Treiber ist ein Vorhandensein der externen Variablen xpointer, ypointer und statuswort
nötig. Außerdem benötigt er das Label fontklein und die darauf nachfolgenden Zeichensatzcodes.
Die Variablen xpointer und ypointer geben die aktuelle Position des Cursors im Display an. Sie
werden benötigt um einen Text im Grafikmodus auszugeben.
Es werden nachfolgende Funktionen bereitgestellt. Auf den nächsten Seiten finden sie eine
Beschreibung zu den einzelnen Funktionen.
Abbildung 18 Auszug aus dem GLCD-Treiber
18
Da das Display ausschließlich im Grafikmodus betrieben wird beschränke ich mich auf die
Beschreibung deren Relevanten Funktionen.
Name:
init_grafik
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
Mit dieser Funktion werden dem Display seine Betriebswerte festgelegt. Dies muss vor jeglicher
Ausgabe geschehen, da er sonst nicht Betriebsbereit ist.
Das Display wird mit folgenden Werten initialisiert:
Mode Control Register:
Display on, Master mode, Graphic Mode
Das Display wird aktiviert, fungiert als Master und wird im Grafik
Modus betrieben.
Character Pitch Register:
Vertical Pitch 8, Horizontal Pitch 8
Ein Zeichen hat im Charakter Modus die Ausmaße von 8x8 Pixel.
Diese Einstellung hat im Graphik Mode keine Auswirkungen.
Character Number Register:
20 bytes in the horizontal direction
Es werden pro Zeile 20 Bytes angezeigt (20 * 8pixel/Byte = 160 Pixel).
Time Division Register:
1/80 Display duty
Die Multiplexrate beträgt 80. Das bedeutet, dass der Bildschirminhalt
jede 1/80 sekunde (12,5 ms) neu aufgebaut wird.
Display Start Address:
Set RAM Start Address 0
Das erste Zeichen im Display wird von der RAM Adresse 0 angezeigt.
Cursor Address Counter:
Set Cursor Address 0
Setzt den RAM Zähler auf 0. Es wird bei der Adresse 0 begonnen in
das Display RAM zu schreiben.
Name:
commando
Returnwert:
keiner
Übergabewerte:
unsigned char commando, unsigned char daten
Beschreibung:
Übergibt dem Display ein Befehl. Dies erfolgt nach Angabe des Instruction Registers mit der
Übergabe der entsprechenden Daten. Die Funktion dient als Basis für alle anderen Funktionen. Bei
schreiben von Daten in den Display RAM wird der xpointer erhöht. Befindet er sich an der letzten
Stelle, so wird der ypointer erhöht und der xpointer zurückgesetzt.
19
Name:
adresse_setzen
Returnwert:
keiner
Übergabewerte:
unsigned char x, unsigned char y
Beschreibung:
Setzt den Zeiger des Display RAMs. Erwartet jeweils einen unsigned char wert für die Positionierung
der X- und Y-Achse auf der das nächste Zeichen angezeigt werden soll. Führt nun daraus die
Berechnung durch, auf der die absolute Display-RAM Adresse gesetzt werden muss. Grundlagen
dafür ist, dass der Display-RAM fortlaufend ist. D.h. auf die RAM Adresse des letzten Zeichens einer
Zeile folgt die RAM Adresse des ersten Zeichens der nächsten Zeile.
Name:
print_glcd
Returnwert:
keiner
Übergabewerte:
unsigned char code *
Beschreibung:
Gibt ein String auf dem Display aus. Erwartet einen Zeiger auf das erste Zeichen des Strings aus dem
Codespeicher. Übergibt die Zeichen solange an die Funktion printchar, bis der String terminiert ist,
also mit dem Wert „\0“ abgeschlossen ist.
Name:
printchar
Returnwert:
keiner
Übergabewerte:
unsigned char
Beschreibung:
Gibt ein Zeichen auf dem Display aus. Dient außerdem als Grundlage für die Funktionen print_glcd
und print_hex. Überprüft über das Statuswort ob das Display im Grafik- oder Textmodus betrieben
wird. Organisiert den Aufbau eines Zeichens im Grafikmodus.
20
Name:
print_hex
Returnwert:
keiner
Übergabewerte:
unsigned char
Beschreibung:
Gibt ein Zeichen in hexadezimaler Schreibweise auf dem Display aus. Die Funktion nimmt die
Erstellung der beiden Hex-Ziffern vor und übergibt sie jeweils der Funktion printchar.
Name:
loeschen_grafik
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
Löscht den Bildschirminhalt. Hierzu wird zunächst die Adresse auf die linke-obere Position gesetzt.
Darauf Folgt die Ausgabe von 1600 Zeichen mit dem Wert 0x00. Dadurch erscheint auf dem Display
ein leerer Inhalt.
Name:
pixel_setzen
Returnwert:
keiner
Übergabewerte:
unsigned char x, unsigned char y
Beschreibung:
Setzt ein Pixel auf dem Display. Nimmt die Berechnung des zur Angabe des Befehls benötigten 2Byte
Wertes aus den Werte X und Y vor. Der Wert X hat einen Gültigkeitsbereich von 0-159. Der Y-Wert
hat einen Gültigkeitsbereich von 0-79.
Name:
pixel_loeschen
Returnwert:
keiner
Übergabewerte:
unsigned char x, unsigned char y
Beschreibung:
Löscht ein Pixel auf dem Display. Bedient sich der gleichen Berechnung wie bei der Funktion
pixel_loeschen. Die Werte haben die gleichen Gültigkeitsbereiche.
21
4.7 Manchesterdecodierungen
Bei der Manchesterdecodierung gilt es den Bitstrom vom EM4095 Reader IC zu Erfassen und daraus
die eigentliche Information zu entschlüsseln.
Würde ein Taktsignal zur Verfügung stehen das die gleiche Frequenz hätte, wie das
Manchestercodierte Signal, könnte die Entschlüsselung durch eine Exklusiv-Oder Verknüpfung der
beiden Signale erfolgen. Da der EM4095 aber kein Taktsignal liefert, dass dem Manchestersignal
frequenzmäßig entspricht muss ein Verfahren eingesetzt werden dass mit nur einer Leitung
auskommt.
Die Kennzeichnung der Bit-Information steckt im
Signalwechsel. Generell kommt es während eines Bits
immer zu einem Signalwechsel.
Eine positive Flanke kennzeichnet eine logische 1.
Eine negative Flanke kennzeichnet eine logische 0.
1
1
1
0
0
0
1
Wenn man sich das Signal genauer ansieht erkennt man, dass zwei gleiche Bits hintereinander ein
Signalverlauf zu folge haben, bei dem die breite des Rechtecksignals stets gleich ist. Kommt es jedoch
zu einem Wechsel des Bits, hat das Rechtecksignal die doppelte Breite, weil es die Ausgangsposition
zu dem Flankenwechsel ändern muss. Auf ein breites Rechtecksignal, dass einen low Pegel hat folgt
eine 1. Auf ein breites Rechtecksignal mit high Pegel logischerweise eine 0.
Diese Eigenschaft habe ich mir zu nutze gemacht um einen Referenzpunkt festzulegen, ab dem ich
das Signal abtasten kann. Nun wird durch eine, durch die Signalbreite, bestimmte Verzögerungszeit
auf die hintere hälfte des Signals gesprungen .Da dieser Pegel den logischen Zustand des Bits darstellt
wird der Wert aufgenommen. Wird eine folge vom neun hintereinanderliegenden Einsen
aufgenommen, so wurde der Kopf mit 9Startbits erfasst. Darauf folgt die Erfassung der 40 Daten- und
der jeweiligen Paritätsbits.
1
1
1
1
1
1
1
1
1
1
9 Startbits
0
1
1
1
Parity
Bit
0
1
0
0
1
Parity
Bit
1
0
0
0xD9
Abbildung 19 Auszug aus dem Manchestercodierten Bitstrom
22
1
Parity
Bit
4.8 weitere Funktionen
Name:
Initialisierung
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
Nimmt alle Konfigurationen vor, die für die Verbindung mit der Peripherie notwendig sind. Dies
beinhaltet die Portkonfiguration, die Konfiguration der Schnittstellen I2C und UART und das
konfigurieren der Interrupts.
Initialisierung
Display Ports auf quasi bidirektional
Touch-treiber Ports auf Input only
Relais-treiber Port auf Push Pull
I2C Ports auf Open drain
UART Ports auf quasi bidirektional
Port vom RFID Reader auf Input only
I2C Taktgenrator auf 100KHz setzen
I2C Hardw are aktivieren
Anw eisung
Die UART Hardw are in die Betriebsart 8-Bit mit variabler Baudrate setzen und den Empfänger freigeben
Den Baudratengenerator auf 9600 Baud/s setzen
Baudratengenerator aktivieren
Display im Grafik Modus Initialisieren
Interruptfreigabebit für die serielle Schnittstelle setzen
Interruptpriorität der seriellen Schnittstelle auf die höchste Stufe setzen
Abbildung 20 Struktogramm Initialisierung
23
Name:
main
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
Führt zunächst die Initialisierungsroutine und die Konfiguration, Aktivierung des Boundarychecks
durch. Anschließend wird dauerhaft nach, durch die symblolische Konstante VERSUCHE vorgegeben
Anzahl, gleichen ID-Blöcken gesucht. Ist dies der Fall wird die Funktion Erfassungsalgorithmus
aufgerufen. Anschließend erfolgt wieder die Erfassung der ID-Blöcke.
main
Einbinden der Globalen Variable aus dem Header File global-var.h
Setze die symbolische Konstante VERSUCHE auf 5
Aufruf der Initialisierungsroutine
Ausführung der Kalibrierungsroutine der Touchfolie
Ausgabe des Home Bildschirmes auf dem Grafik Dis play
Kontinuierliche AD Messung an AD10 zur horizontalen Messung der Displayfolie
Setzen der Bereichsgrenzen des Boundarychecks zum Auslösen eines Interrupts bei Berührung des Dis play im oberen Viertel
Zurücksetzen des Boundarycheck-Interruptflag
Löschen der EEPROM und AD Interruptflags da sie den Boundarycheck Interrupt auslösen w ürden
Interruptfreigabebit für den Boundarycheck setzen
Allgemeine Interruptfreigabe aktivieren
Endlosschleife
Alle Werte der Hilf svariablen zur Ablegung der erfassten IDs Initialisieren
Endlosschleife
Erfassung des aktuellen ID Blocks (5 Byte)
Kopiere den ersten ID Block der Hilfsvariablen in den zw eiten Block der Hilfsvariablen, den zw eiten in den dritten...
und so fort bis Anzahl VERSUCHE
Kopiere den erfassten ID Block in den ersten ID Block der Hilfvariablen
J
Ensprechen alle ID Blöcke der Hilfsvariablen mit der erfassten ID
überein?
N
Springe aus der Schleife raus
Allgemeine Interruptfreigabe löschen
Statusw ort: Bit ID Hauptterminal erfasst setzen
Aufrufen des Erfassungsalgorithmusses
Statusw ort: Bit ID Hauptterminal erfasst zurücksetzen
Löschen der EEPROM und AD Interruptflags
Zurücksetzen des Boundarycheck-Interruptflag
Ausgabe des Home Bildschirmes auf dem Grafik Dis play
Allgemeine Interruptfreigabe aktivieren
Abbildung 21 Struktogramm main
24
Name:
ISR serielle Schnittstelle
Returnwert:
Übergabewerte:
keiner
keine
Beschreibung:
Der serielle Interrupt wird ausgelöst wenn eine Zeichen
empfangen wurde. Das erste Zeichen gibt an, welche Aktion
darauf folgt. Das Zeichen 0x01 kennzeichnet, das eine ID vom
Außenterminal erfasst wurde, und die Übertragung der ID
folgt. Die Zeichen 0x02-0x09 kennzeichnen die Anfrage der
PC-Software eine Funktion auszuführen. Dies geschieht
jedoch nur wenn das Hauptterminal im richtigen Modus war
(gekennzeichnet durch das Statuswort). Wenn das der Fall ist
wird in die entsprechende Funktion gesprungen.
Das Zeichen 0xA0 dient der PC-Software zur Signalisierung ob
der µController angeschlossen ist und sich im richtigen
Modus befindet.
Abbildung 22 Struktogramm ISR serielle Schnittstelle
25
Name:
ADMessung
Returnwert:
keiner
Übergabewerte:
unsigned char * x,
Admessung
Alle Ports des Touch-Treibers zunächst auf Input Only stellen
unsigned char * y
Beide Ports der X-Achse auf Open Drain stellen
AD11 freigeben
Beide Ports der X-Achse auf Masse legen
(Spannung an X-Achse legen)
Beschreibung:
Messung des X-Wertes an AD11 starten
Führt zunächst die Konfiguration der Ports
für die Messung des AD Wertes der X-Achse
durch. Anschließend wird die Spannung auf
die X-Achse gegeben und die Messung am YAnschluss durchgeführt. Dieselbe Prozedur
wird für die Messung des Y-Wertes
durchgeführt. Anschließend werden die
aufgenommenen Werte an die Übergebenen
Beide Ports der Y-Achse auf Open Drain stellen
Warten bis Messung beendet ist und Flag zurücksetzen
Adressen geschrieben.
Beide Ports der X-Achse auf Input Only stellen
AD10 freigeben
Beide Ports der Y-Achse auf Masse legen
(Spannung an Y-Achse legen)
Messung des Y-Wertes an AD10 starten
Warten bis Messung beendet ist und Flag zurücksetzen
gemessenen X-Wert in die übergebene Adresse schreiben
gemessenen X-Wert in die übergebene Adresse schreiben
Abbildung 23 Struktogramm ADMessung
Name:
getxy
Returnwert:
keiner
Übergabewerte:
unsigned char * x, unsigned char * y, char modus
Beschreibung:
Die Funktion getxy gibt den absoluten Wert der X-und Y-Achse bei Berührung des Displays an. Es
kann zwischen drei Modis gewählt werden. Entweder der Wert wird nur gemessen, oder der Wert
wird gemessen und viermal auf gleichheit überprüft, oder der Wert wird gemessen viermal auf
gleichheit überprüft und es wird gewartet bis das Display wieder losgelassen wird. Anschließend
werden errechneten Werte an die übergebenen Adressen geschrieben
getxy
AD Messung durchführen
Den viertletzten Wert an den fünftletzten Wert zuw eisen
Den drittletzten Wert an den viertletzten Wert zuw eisen
Den zw eitletzten Wert an den drittletzten Wert zuw eisen
Den letzten Wert an den zw eitletzten Wert zuw eisen
Den gemessenen X-Wert an den letzten Wert zuw eisen
Solange Modus mit 4facher Bestätigung gew ählt w urde und der gemessene X-Wert ungleich der fünfletzten Werte ist
Führe Berechnung zur Bestimmung des X-Wertes auf dem Display aus dem gemessenen X-Wert aus
Führe Berechnung zur Bestimmung des Y-Wertes auf dem Display aus dem gemessenen Y-Wert aus
Den berechneten X-Wert an die übergebene Adresse schreiben
Den berechneten Y-Wert an die übergebene Adresse schreiben
J
Wurde Modus "bis loslassen" gew ählt
N
Warten bis losgelassen w urde
Abbildung 24 Struktogramm getxy
26
Name:
AD Positionsbestimmung
Returnwert:
keiner
Erfassungsalgorithmus
Anzahl der Benutzer auslesen und Benutzernummer zuw eisen
Übergabewerte:
keine
Solange Benutzernummer ungleich null ist
Benutzerdaten auslesen (ID, Berechtigung, Status)
Beschreibung:
Der Erfassungsalgorithmus wird nach der
Erfassung einer ID vom Haupt- oder
Außenterminal aufgerufen. Mit der erfassten ID
wird anschließend nach dem passenden
Mitarbeiter gesucht. Wurde dieser nicht
gefunden wird eine Fehlermeldung ausgegeben
und es wird zurückgesprungen. Ansonsten wird
überprüft ob dem erfassten Benutzer der
Dienstleistungsstatus zugewiesen wurde. Wen
ja wird das Relais für 3 Sekunden geschlossen
und es wird zurückgesprungen. Wenn nein
folgen weitere Abbruchkriterien wie z.B. wenn
ein Benutzer gegangen ist aber dennoch
ausstempeln will. Ist dies nicht der Fall wird die
aktuelle Uhrzeit ausgelesen und in Kombination
mit dem Benutzername und dem Event in dem
Festwertspeicher abgelegt. Anschließend wird
das Relais für 3 Sekunden geschalten.
Ist die erfasste ID gleich der
BenutzerID
J
N
Springe aus der Schleife
Benutzernummer um eins verringern
Ist Benutzernummer null ?
J
J
N
Vom Hauptterminal
erfasst
Fehlerausgabe
Innenbereich
Fehlerausgabe
Außenbereich
Rücksprung aus dem
Unterprogramm
Rücksprung aus dem
Unterprogramm
N
Berechtigung ohne Zeitaufnahme
J
N
Potentialfreier Kontakt für 3 sec
schließen
Rücksprung aus dem
Unterprogramm
Ist der Mitabeiter gegangen und der
Status ist gegangen
J
N
Ausgabe Fehlermeldung
Innenbereich falscher
Status
Rücksprung aus dem
Unterprogramm
Ist der Mitabeiter gekommen und der
Status ist gekommen
J
N
Ausgabe Fehlermeldung
Außenbereich
Rücksprung aus dem
Unterprogramm
Aktuelle Zeit auslesen
Anzahl der Datenw erte auslesen, um eins erhöhen und
aktualisieren
Datensatz im Speicher ablegen mit
Benutzername
Uhrzeit
Event (gekommen, gegangen)
Benutzerstatus aktualisieren
Vom Hauptterminal erfasst ?
J
N
Abschiedsmeldung und Namen
ausgeben
Potentialfreier Kontakt für 3 sec schließen
Abbildung 25 Struktogramm Erfassungsalgorithmus
27
4.9 Benutzerverwaltung PC-Seite
Abbildung 26 PC-Software Benutzerverwaltung
Die Software auf dem PC ermöglicht es dem Bediener die Verwaltung der Angestellten
durchzuführen. Sie erzeugt bei der ersten Benutzung ein File mit dem Namen comconfig.dat in dem
die aktuellen Parameter der seriellen Schnittstelle hinterlegt sind. Damit müssen diese nicht bei
jedem Programmstart neu eingegeben werden.
Folgende Funktionen korrespondieren mit dem µController und dem PC
Menuepunkt1: Benutzer anlegen
PC-Seite:
Prüft zunächst ob das Hauptterminal angeschlossen ist, sich im richtigen Modus befindet, und ob der
COM-Port geöffnet wurde. Ermöglicht die Eingabe des Benutzervor- und Nachnamens. Anschließend
wird der Bediener aufgefordert die ID durch anlegen des Transponders an das Hauptterminal zu
erfassen. Dieser Vorgang kann durch drücken einer beliebigen Taste abgebrochen werden und man
gelangt zurück zum Hauptmenü. Wurde der ID vom Hauptterminal erfasst, so kann für den Benutzer
zwischen Angestellter und Dienstleister gewählt werden. Sind alle Eingaben korrekt, so werden sie
durch Eingabe der Enter Taste übernommen. Bei einer anderen Taste werden sie verworfen.
µController-Seite:
Name:
administration_neu
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
Gibt zu Beginn die nächstfreie Mitarbeiternummer an, unter der bei Erfolg der Mitarbeiter angelegt
wird. Wartet anschließend auf die Erfassung einer ID. Dieser Vorgang kann durch eine Meldung vom
PC abgebrochen werden. Wird eine ID erfasst, so folgt ein vergleich mit den bereits hinterlegten IDs
von angelegten Benutzern. Ist diese ID bereits vorhanden, so kann sie dem Mitarbeiter nicht mehr
zugewiesen werden. Der µController sendet der PC-Software eine Fehlermeldung und der Vorgang
wird abgebrochen. Ist die ID noch nicht vorhanden, wird sie der PC-Software übermittelt.
Anschließend wartet der µController auf einen Befehl, ob die in der PC-Software eingegebenen
Daten gespeichert, oder verworfen werden sollen. Kommt es zu einer positiven Entscheidung werden
die eingegebenen Daten vom der Software empfangen und im Festwertspeicher abgelegt. Ansonsten
kommt es zu einem Abbruch der Funktion.
28
Menuepunkt2: Benutzer aendern
PC-Seite:
Prüft zunächst ob das Hauptterminal angeschlossen ist, sich im richtigen Modus befindet, und ob der
COM-Port geöffnet wurde. Anschließend kann eine Auswahl getroffen werden, wie der Benutzer der
geändert werden soll gesucht wird. Dazu gibt es drei Auswahlmöglichkeiten:
Suchen durch Eingabe des Nachnamens
Suchen durch Erfassen des zugewiesenen Transponders
Suchen durch auswählen aus einer Liste
Jeder dieser Vorgänge kann abgebrochen werden, was einen Rücksprung zum Hauptmenü zur Folge
hat. Wurde nun ein Benutzer gewählt, so werden nochmal die kompletten Daten angezeigt, und der
Bediener gefragt, ob er den Benutzer wirklich ändern will. Wird dies durch die Eingabe der Enter
Taste bejaht erfolgt die Eingabe der neuen Daten wie im Punkt administration_neu beschrieben. Sind
alle Eingaben korrekt wird der Benutzer mit den neuen Daten aktualisiert, ansonsten werden sie
verworfen.
µController-Seite:
Name:
administration_aendern
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
In die Funktion administration_ändern wird erst gesprungen wenn feststeht welcher Benutzer
geändert werden soll. Die Suche des Benutzers erfolgt durch die Funktion administration_suchen.
Zunächst werden alle Daten des zu ändernden Benutzers aus dem Festwertspeicher geholt und an
die PC-Software gesendet. Anschließend auf eine Bestätigung der Daten vom PC gewartet. Ist dieser
positiv wird gewartet bis eine ID erfasst wurde. Dieser Vorgang kann durch eine Meldung vom PC
abgebrochen werden. Diese wird mit den bereits hinterlegten IDs anderer Benutzer verglichen. Ist
die ID bereits vorhanden, und gehört sie nicht dem zu ändernden Benutzer erfolgt ein Abbruch des
Vorgangs und eine Fehlermeldung wird der PC-Software übermittelt. Ist die ID noch nicht vorhanden
oder gehört sie dem zu änderndem Benutzer wird sie der PC-Software übermittelt. Anschließend
wird auf eine Bestätigung, der über die PC-Software eingegebenen Daten gewartet. Fällt die
Entscheidung den Benutzer zu ändern werden die neuen Daten empfangen und unter der Position
des alten Benutzers im Festwertspeicher abgelegt. Ansonsten erfolgt ein Abbruch der Funktion.
Menuepunkt3: Benutzer ansehen
PC-Seite:
Prüft zunächst ob das Hauptterminal angeschlossen ist, sich im richtigen Modus befindet, und ob der
COM-Port geöffnet wurde. Gibt anschließend die bereits aufgenommenen Benutzer in einer Liste
aus. Diese enthält jeweils die Nummer, dem Vor- und Nachnamen, den Beschäftigungsgrad und die
zugewiesene Identifikationsnummer des Benutzers.
µController-Seite:
Name:
administration_ansehen
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
Übermittelt zunächst die Anzahl der hinterlegten Benutzer an die PC-Software, damit diese weiß, wie
viele Benutzer in der Liste angezeigt werden sollen. Darauf erfolgt das senden der Nummer, des Vorund Nachnamens, des Beschäftigungsverhältnisses und der zugewiesene Identifikationsnummer
jedes einzelnen hinterlegten Benutzers.
29
Menuepunkt4: Benutzer loeschen
PC-Seite:
Prüft zunächst ob das Hauptterminal angeschlossen ist, sich im richtigen Modus befindet, und ob der
COM-Port geöffnet wurde. Anschließend kann eine Auswahl getroffen werden, wie der Benutzer der
gelöscht werden soll gesucht wird. Dazu gibt es drei Auswahlmöglichkeiten:
Suchen durch Eingabe des Nachnamens
Suchen durch Erfassen des zugewiesenen Transponders
Suchen durch auswählen aus einer Liste
Jeder dieser Vorgänge kann abgebrochen werden, was einen Rücksprung zum Hauptmenü zur Folge
hat. Wurde ein Benutzer gewählt, so wird zunächst sein kompletter Datensatz angezeigt und es wird
zu einer Bestätigung des Löschvorgangs aufgefordert. Erfolgt diese kommt es zur Löschung des
Benutzers und es wird gewartet bis der µController mit dem Löschvorgang beendet ist. Ansonsten
kommt es zum Abbruch um man landet wieder im Hauptmenü.
µController-Seite:
Name:
administration_loeschen
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
In die Funktion administration_loeschen wird erst gesprungen wenn feststeht welcher Benutzer
gelöscht werden soll. Die Suche des Benutzers erfolgt durch die Funktion administration_suchen.
Vorerst werden alle Daten des zu ändernden Benutzers aus dem Festwertspeicher geholt und an die
PC-Software gesendet. Anschließend wird auf eine Bestätigung des Löschvorgangs des Benutzers
gewartet. Wird dieser bestätigt kommt es zur Löschung der Daten des Benutzers indem die in der
Benutzerliste dahinterliegenden Benutzer um eins nach vorne gerückt werden. Dadurch entsteht
keine Lücke in der Liste. Zum Schluss wird der PC-Software eine Meldung übermittelt, dass der
µController fertig mit dem „verrücken“ ist.
30
Menuepunkt5: Datensätze ansehen
PC-Seite:
Prüft zunächst ob das Hauptterminal angeschlossen ist, sich im richtigen Modus befindet, und ob der
COM-Port geöffnet wurde. Gibt anschließend die bereits aufgenommenen Datensätze in einer Liste
aus. Diese enthält jeweils den Vor- und Nachnamen des erfassten Benutzers, den Event (gekommen,
gegangen) und den Zeitpunkt an dem der Datensatz aufgenommen wurde.
µController-Seite:
Name:
administration_zeigedatensätze
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
Übermittelt zunächst die Anzahl der hinterlegten Datensätze an die PC-Software, damit diese weiß,
wie viele Datensätze in der Liste angezeigt werden sollen. Darauf erfolgt das senden jedes
aufgenommenden Datensatzes bestehend aus Vor- und Nachnamen des erfassten Benutzers, dem
Event und dem Zeitpunkt an dem der Datensatz aufgenommen wurde.
Menuepunkt6: Initialisieren
PC-Seite:
Prüft zunächst ob das Hauptterminal angeschlossen ist, sich im richtigen Modus befindet, und ob der
COM-Port geöffnet wurde. Gibt dem Bediener die Auswahlmöglichkeit ob nur die aufgenommenen
Datensätze, oder die Benutzer und damit verbunden auch die Datensätze gelöscht werden sollen. Die
Auswahl kann durch drücken der ESC Taste abgebrochen werden und man landet im Hauptmenü.
Wird jedoch einer der beiden Punkte gewählt, wird die Auswahl an den µController übergeben und
der Löschvorgang ausgeführt.
µController-Seite:
Name:
administration_initialisieren
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
Je nach Auswahl auf der PC-Software wird entweder die Anzahl der Datensätze, oder die Anzahl der
Benutzer und die Anzahl der Datensätze auf null gesetzt.
31
Menuepunkt7: Logfile erzeugen
PC-Seite:
Gibt dem Bediener die Auswahlmöglichkeit ob eine Benutzerliste oder ein Logfile in einer Textdatei
ausgegeben werden soll. Die Auswahl kann durch drücken der ESC Taste abgebrochen werden und
man landet im Hauptmenü. Wird eine Auswahl getroffen, werden die benötigten Daten eingelesen
und in der entsprechenden Datei ausgegeben, was durch erscheinen einer Meldung bestätigt wird.
Die PC-Software bedient sich hierbei den Funktionen administration_zeigedatensätze oder
administration_ansehen. Es wird jeweils die aktuelle Systemzeit, an dem die Datei erstellt wurde mit
eingefügt. Die Dateien haben die folgende Form:
Abbildung 27 Logfile.txt
Abbildung 28 Benutzerliste.txt
32
Menuepunkt8: COM-Port Konfiguration ändern
PC-Seite:
Ermöglicht das Ändern der Schnittstellenkonfiguration. Zeigt zunächst die aktuelle Konfiguration an.
Anschließend erfolgt die Eingabe der folgenden Parameter
COM Port Nummer (Auswahlmöglichkeiten 0-9)
Baudrate (Auswahlmöglichkeiten 1200 – 19200bit/s)
Bytegrösse (Auswahlmöglichkeiten 7 oder 8 Bit)
Parität (Auswahlmöglichkeiten keine, ungerade, gerade, mark oder space)
Stoppbits (Auswahlmöglichkeiten 1, 1,5 oder 2 Stoppbits)
Nun werden diese Parameter in dem File comconfigura.dat abgelegt und beim nächsten Öffnen des
COM-Ports verwendet.
Menuepunkt9: COM-Port öffnen
PC-Seite:
Der COM-Port muss geöffnet werden damit jeglichen Kommunikation mit dem µController erst
stattfinden kann. Dazu wird zunächst geschaut ob der COM-Port bereits geöffnet ist. Ist dies der Fall
wird der weitere Verlauf gestoppt und es wird zurück in das Hauptmenü gesprungen. Ansonsten wird
der COM-Port mit den im File comonfigura.dat vorgegebenen Parametern geöffnet. Kommt es dabei
zu Komplikationen erfolgt ein Abbruch und eine Fehlermeldung wird ausgegeben.
Subfunktionen µController:
Name:
administration_suchen
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
Wird benötigt für die Funktionen Benutzer aendern und Benutzer loeschen der PC-Software. Es gibt
drei Auswahlmöglichkeiten für das suchen eines Benutzers
1. Suchen durch Eingabe des Nachnamens
Nach empfangen des Nachnamens von der PC-Software wird dieser unter allen angelegten
Benutzern gesucht. Wurde der Benutzer gefunden wird seine Benutzernummer an die PCSoftware übermittelt. Ansonsten wird ein Fehlercode übermittelt.
2. Suchen durch erfassen eines Transponders
Ermöglicht das suchen über erfassen des zugewiesenen Transponders eines Benutzers.
Nähere Beschreibung in der Funktion sende_id.
3. Suchen durch auswählen aus einer Liste
Zeigt eine Liste aller angelegten Benutzer an. Daraus kann der Bediener nun einen Benutzer
wählen durch Eingabe der entsprechenden Benutzernummer.
33
Name:
empfangestruct
Returnwert:
keiner
Übergabewerte:
keine
Beschreibung:
Empfängt über die serielle Schnittstelle Vorname, Nachname und Zugangsberechtigung von der PCSoftware und stellt sie als Globale Variablen zur Verfügung.
Name:
sendestruct
Returnwert:
keiner
Übergabewerte:
char nummer
Beschreibung:
Sendet über die serielle Schnittstelle Nachname, Vorname, ID und Zugangsberechtigung der
Benutzernummer des übergebenen Wertes.
Name:
sendeevent
Returnwert:
keiner
Übergabewerte:
int nummer
Beschreibung:
Sendet über die serielle Schnittstelle Nachname, Vorname, Zeit und Event des Datensatzes des
übergebenen Wertes.
Name:
sende_id
Returnwert:
char nummer
Übergabewerte:
keine
Beschreibung:
Erfasst die ID eines Transponders. Dieser Vorgang kann durch drücken einer Taste auf der PCSoftware Oberfläche gestoppt werden. Danach wird gesucht ob die ID bereits von einem angelegten
Benutzer verwendet wird. Ist dies der Fall wird ein Fehlercode an die PC-Software übermittelt,
andernfalls wird die ID über die serielle Schnittstelle gesendet. Der Returnwert entspricht der
erfassten ID oder dem Fehlercode.
34
5 Arbeitsprozessbericht
August 2009
Ende des ersten Schuljahres begannen die ersten Schritte mit den µController Boards. Mit vagen
Kenntnissen wurden wir in die Sommerferien geschickt. Jetzt war es an der Zeit die passenden
Komponenten für das im Pflichtenheft vorgegebene Projekt zu finden und die ersten Gehversuche
mit der Programmierung durchzuführen. Mein Mitschüler Sebastian Meiss rief mich in den Ferien an
und sagte er habe ein günstiges Grafikdisplay gefunden. Da mir die Idee gefiel die Bedienung ohne
mechanischen Knöpfe über eine Touchfolie zu lösen, teilte ich ihm mit er solle mir auch eins
bestellen. Nun war es an der Zeit erste Informationen über das Display zu gewinnen. So ging die
Recherche im Internet los. Bald fanden wir ein Datenblatt eines ähnlichen Typs mit Auszügen zur
Beschreibung des Display Controllers. Bald erhielten wir die bestellten Displays in den Briefkasten
ein. Also machte ich mich auf den Weg zum Hr. Meiss und wir versuchten ein erstes Lebenszeichen
von dem Display zu bekommen. Jedoch war dieser nicht gerade von Erfolg gekrönt und es kam
lediglich ein Flackern zum Vorschein. Hr. Meiss lieh mir eine seiner Adapterpaltinen, damit ich das
Display an das Experimentierboard anschließen konnte. Am nächsten Tag studierte ich nochmal
genauer das Datenblatt des Display Controllers und machte mich abends ans Werk. Dabei spielte der
zeitliche Verlauf der Steuersignale bei einem Schreibzugriff eine große Rolle.
Abbildung 29 Zeitlicher Verlauf beim Schreibzyklus
Dazu berechnete ich die benötigten Warteschleifen zur Einhaltung der benötigten
Verzögerungszeiten.
Danach probierte ich eine Initialisierungsroutine zu schreiben. Dabei halfen mir sehr die
Vorkenntnisse die ich durch den Display-Zeilentreiber gewonnen habe, den wir vor den Ferien im
Unterricht durchgenommen hatten. Als ich dann nach einigen Versuchen die Initialisierungsroutine
durchlaufen ließ war das Display komplett gelöscht und es flackerte auch nicht mehr. Das war mal ein
gutes Zeichen, und ein erstes Erfolgserlebnis. Danach probierte ich ein Zeichen auf dem Display im
Textmodus dazustellen aber es erschien nur ein merkwürdiges Muster auf dem Display. Ich ließ es für
den Tag gut sein. Am nächsten Tag kam mir die Idee, dass ich das Display in den falschen Modus
gesetzt haben muss und überprüfte die Werte. Tatsächlich hatte ich die Werte verwechselt. Nach
korrigieren dieses Fehlers versuchte ich es erneut und im Display erschienen die eingegebenen
Zeichen. Natürlich musste ich sofort den Herrn Meiss darüber berichten und schickte ihm die Codes.
Die nächsten Tage war ich beschäftigt den Display-Zeilentreiber auf das Display anzupassen. Im Laufe
der Sommerferien experimentierte ich noch mit dem Grafikmodus, und fügte weitere Funktionen
dem Treiber hinzu.
35
September Oktober 2009
Nach den Ferien machte ich es mir zur Aufgabe die Bedienung über die Touchfolie in Angriff zu
nehmen. Dabei war das erste Problem das Abgreifen der Anschlüsse an der Folie. Ein Versuch
Leitungen an die Anschlüsse zu Löten scheiterte, und somit war das Erste Display defekt, und nur
noch zum Testen der Text- und Grafikausgabe zu gebrauchen. Besser funktionierte es mit einer
Klemme vom Herrn Meiss. Nach Ausmessen der Achsen stellte ich mir die Frage ob die Touchfolie
überhaupt direkt an den µController anschließbar ist. Es ergab sich folgendes Problem:
Der Widerstandswert der x Achse beträgt ca. 450 Ohm, der Y Achse 350 Ohm. Wird die Y Achse mit
der Ausgangsspannung des µControllers von 3,3 V beschalten ergibt sich hierbei ein Strom von
9,4mA der aus dem Port heraus durch die Y Achse der Folie und wieder in einem Port wieder hinein
fließen würde. Dabei stößt man bei der Verwendung eines µControllers der LPC93x Serie an seine
Grenzen. Der maximale Strombetrag der aus dem Port herausfließen kann ist im Push-Pull Modus 3,2
mA. Eine Möglichkeit wäre durch einen Vorwiderstand an den Ports den Strom auf 3,2 mA zu
begrenzen. Das hat jedoch zur Folge, dass dieser zusätzliche Widerstand auch einen Spannungsabfall
verursacht, und man dadurch bei einer Auflösung des AD Wandlers von 8 Bit nur einen kleinen
Messbereich hat.
Um diese Probleme in den Griff zu bekommen musste ich eine Treiberschaltung für die Touchfolie
entwerfen. Die Anforderungen an die Treiberschaltung waren eine Spannungsteilung auf 3,3V, da der
Messbereich des AD Wandler von 0-3,3V ist, ein maximaler Strom von 3,2mA zum Anlegen der 3,3V
auf eine Achse der Folie und ein hochohmiger Widerstand bei nicht geschalten an den Anschlüssen
der Touchfolie. Die entstandene Schaltung testete ich im Labor in der Schule und sie funktionierte
einwandfrei. Sie ist im Kapitel Touch Folie zu sehen.
November 2009
Als nächsten Schritt war es die AD Wandlung durchzunehmen. Damit haben wir uns in der Schule zu
diesem Zeitpunkt noch nicht befasst. Eine Beschreibung dazu fand ich unter der Seite www.c51.de im
Internet. Mithilfe dieser Beschreibung begann ich einfache AD Messungen am Experimentierboard
durchzuführen. Anschließend erfolgte die Erstellung einer Funktion zur Messung des X- und Y-Wertes
und die Umrechnung der gemessenen Werte auf die berührte Position auf dem Display bezogen auf
die Pixel. Somit war vorerst das Kapitel Display abgeschlossen.
Langsam war es an der Zeit sich mit dem Thema RFID auseinanderzusetzen. In den Sommerferien
hatte ich mich schon über RFID Informiert, doch irgendwie schien mir die Informationsvielfalt zu
verwirren. Ich bestellte mir ein RFID Reader System bei Ebay und hoffte dabei weitere Informationen
zu gewinnen. Leider war das System komplett in Hartgummi gegossen und ich konnte keine Schlüsse
daraus ziehen wie das Gerät funktionierte. Noch immer wusste ich nicht für welches System ich mich
entscheiden sollte. Schließlich entschloss ich mich bei der Firma EM Microelectronic Marin aus der
Schweiz eine Anfrage zu stellen, dass sie mir mehrere Reader ICs zur Verfügung stellen. Die
passenden Transponder bestellte ich bei Ebay. Einen Hardwareaufbau und Beschreibung zu dem Chip
fand ich auf der Seite www.emagu.de. Bei der Beschaltung des Chips und den Bauteilwerten hielt ich
mich an die Angaben auf der Seite. Mit diesen Informationen machte ich mich an das Layout einer
Testplatine. Dabei verwendete ich konventionelle Bauteile aus dem Lager der Schule.
36
Bei der Erstellung der Spule musste ein Wert von 780 µH erreicht werden. Doch wie
sollte ich diesen Wert messen? Glücklicherweise bekam ich von einem
Klassenkameraden ein Messgerät ausgeliehen, dass die Induktivität einer Spule
messen kann. Damit konnte ich die passende Spule anfertigen. Der Einsatz von
Elektrolytkondensatoren war anscheinend ein Fehler, denn ein Transponder wurde
nicht erkannt. Somit war der Reader Chip anscheinend kaputt gegangen. Sofort gab
ich eine Bestellung der erforderlichen Bauteile in SMD Form auf und fang an das
Layout der Platine auf SMD umzugestalten. Die Bauteile in SMD Technik brachten Erfolg und ich
konnte am Demod out Pin des EM4095 einen Manchestercodierten Bitstrom messen. Auf der
erwähnten Internetseite fand ich ein Verfahren zur Entschlüsselung des Manchestercodes zur
Gewinnung des Nutzsignals. Dabei wird der Manchestercodierte Bitstrom mit einem Taktsignal,
welches die gleiche Breite des Rechtecksignals hat Antivalenz verknüpft (Exclusiv oder- zwei
ungleiche Signale ergeben eine 1). In der Theorie funktioniert dieses Verfahren sehr gut, doch der
EM4095 stellt lediglich ein Taktsignal zur Verfügung, das verglichen mit dem Manchestercodiertem
Signal eine etwa 60-mal höhere Frequenz hat. Nun tappte ich im Dunkeln und bat meinen
Klassenlehrer Hr. Gross um Hilfe. Bei einem Gespräch gab er mir den Anstoß dazu, wie ich aus dem
Kodierten Signal die Nutzdaten erhalten konnte. Nach näherem betrachten kristallisierten sich die
wesentlichen Eigenschaften heraus und ich hatte Ansatzpunkte zur Erstellung der Decodierung. Nun
konnte die ID der Transponder entschlüsselt werden.
Dezember 2009
Dann kam das Thema Speichererweiterung ins Spiel. Hier war es naheliegend einen
externen EEPROM Baustein, der über den I2C Bus betrieben wird einzusetzen wie
ich es im Pflichtenheft geplant hatte. Dies erforderte jedoch Kenntnisse über den
seriellen I2C-Bus. Also besorgte ich mir das Kapitel I2C-Bus von der Seite
www.c51.de. Die Beispiele zu verstehen fiel mir Anfangs nicht gerade leicht. Doch
nach einigen Durchläufen im Einzelschrittmodus unter der Beobachtung des Status
Registers konnte ich den Verlauf nachvollziehen.
Nachdem ich die Routine zum Auslesen und Schreiben des EEPROMs
fertiggestellt hatte konnte ich in den Zugriff auf den Kalenderbaustein
realisieren.
Zunächst hatte ich vor, das Außenterminal ebenfalls über den I2C Bus mit
dem Hauptterminal zu verbinden. Die Tatsache der maximalen Leitungslänge
von 3m machte mir etwas Sorgen. Zusätzlich müsste ich bei erhöhter Leitungslänge mit der
Übertragungsfrequenz weiter nach unten gehen, welches mir auch den Bildaufbau aus
dem EEPROM verlangsamen würde. Das konnte nicht die richtige Lösung sein. Demzufolge
wählte ich dafür die RS232 Schnittstelle. Um die serielle Schnittstelle testen zu können
bestellte ich mir ein USB auf RS232 Kabel. Über die Erklärung im Keil Buch und der
Ausübung mehrerer Beispiele konnte ich bald Zeichen über das Hyperterminal senden und
empfangen.
37
Langsam nahm das Projekt Formen an und ich fügte allmählich alle Teilfunktionen zusammen und
erstellte eine Menüstruktur. Dadurch konnte ich Bilder aus dem externen EEPROM auf dem Display
darstellen, Menüpunkte über die Touchfolie bedienen, Benutzer per Tag erfassen, anzeigen und die
die aktuelle Uhrzeit anzeigen, verändern.
Auf dem Bild erkennen sie die einzelnen Komponenten:
Serielle Schnittstelle
zum PC
I2C Bausteine
Speichererweiterung
und Kalenderbaustein
RFID Readereinheit
mit Spule
Abbildung 30 Testaufbau
Grafik Display
Touch-Treiberschaltung
38
Januar 2010
Um die Benutzerverwaltung durchzuführen benötigte ich eine zusätzliche Software auf dem PC. Die
Programmierung erfolgte in der Programmiersprache C, über die ich im ersten Schuljahr Erfahrungen
sammeln konnte. Das Erstellen eines Menüs und das Ablegen der Portkonfiguration in einer Datei
war schnell erledigt. Der Zugriff auf Schnittstellen war mir jedoch unbekannt. Um dies zu erlernen
bekam ich von Hr. Gross das Buch „I/O Projekte für den PC“ ausgeliehen. In diesem Buch befanden
sich einige Hard- und Softwarebeispiele über verschiedenste Ports des PCs. Allerdings waren die
meisten Beispiele in der Programmiersprache Basic geschrieben. So suchte ich im Internet nach
Beispielen und stieß dabei auf das Microsoft Developer Network, kurz MSDN. Dort war ein Tutorial in
englischer Sprache, mit dessen Hilfe ich die serielle Schnittstelle konfigurieren und steuern konnte.
Somit konnte ich erste Zeichen von meinem Konsolenprogramm senden und empfangen. Nach und
nach kamen immer mehr Menüpunkte zum Programm dazu. Damit sich das Konsolenprogramm mit
der µController-Software verständigen konnte musste ich die korrespondierenden Funktionen auf
dem µController erstellen. Zahlreiche Versuche waren nötig bis der Verlauf der Kommunikation
klappte und Bedienungsfehler weitestgehend abgefangen wurden.
Februar 2010
Allmählich schien das Zusammenspiel aller Komponenten gut zu funktionieren und ich begann das
Layout für das Hauptterminal zu erstellen, die Platine in der Schule zu ätzen und zu bestücken.
Natürlich wollte ich sie sofort zu Hause testen.
Als ich dann die Platine an das Netzteil anschloss kontrollierte ich alle Spannungen, die von den
Festspannungsreglern auf die ICs gingen. Die Ausgangsspannung des 5V Festspannungsreglers war
nicht annähernd 5V. Sofort trennte ich die Platine vom Netzteil und kontrollierte die Leiterbahnen
um festzustellen ob es zu einem Kurzschluss gekommen war. Dabei bemerkte ich, dass der
Festspannungsregler sehr heiß geworden war. Bei genauerer Betrachtung fiel mir auf, dass der
Festspannungsregler für die Versorgungsspannung des µControllers falsch beschaltet war. Ich
trennte die abgehenden Leiterbahnen auf und lötete die neuen Leitungen an richtiger Stellung an.
Damit war das Problem ausgebessert.
Das sollte nicht das letzte Problem auf der Platine gewesen sein.
Damit ich das Display testen konnte bespielte ich den µController mit einem Testprogramm, das mir
einen Text ausgeben sollte. Doch auf dem Display erschien vorerst nichts. Etwas anderes hatte ich
auch nicht erwartet. Um die Funktionalität der Ports zu überprüfen schrieb ich ein Testprogramm,
welches die Ports des µControllers im Sekundentakt toggeln ließ. So konnte ich feststellen, dass der
Portpin der zum Enable Eingang des Displays führte defekt war. Also tauschte ich den µController aus
und auf dem Bildschirm erschien der Text.
Die Inbetriebnahme der seriellen Schnittstelle brachte die nächste Überraschung. Beim
Senden von Zeichen über das Hyperterminal kam keine Übermittelung zustande. Meine
Information, dass nur die Leitungen Rxd, Txd und Masse beschaltet werden müsste war also
falsch. Das Problem lag letztlich darin, dass der PC auf eine Sendeanfrage (Request to send)
eine Bestätigung benötigt ob der µController Empfangsbereit ist (Clear to send) diese jedoch
nicht gegeben war. Also verband ich die beiden Anschlüsse und die Verbindung stand.
39
Um die Funktionalität des Relais zu testen, schloss ich einen Durchgangsprüfer an die Schaltkontakte
an und steuerte das Relais mit einem Takt von einer Sekunde an. Es war bei jedem Schaltvorgang ein
leichtes Knacken zu hören. Ich hatte den Eindruck, dass der Schaltstrom des Transistors zu gering war
und darum das Relais nicht richtig anziehen würde. Also änderte ich die Portkonfiguration auf Push
Pull und führte den Vorgang erneut durch. Doch das Knacken blieb und der Durchgangsprüfer
signalisierte auch kein Schließen des Kontaktes. Ich entlötete das Relais und
probierte es mit den 5V vom Experimentierboard zum schalten zu bringen.
Plötzlich ertönte das Signal des Durchgangsprüfers. Da war mir klar ich hatte
die Steuerkontakte im Layout vertauscht. Wiederum musste ich die
Kontakte zum Relais auf der Platine auftrennen und neue Drähte einlöten.
Jetzt funktionierte es auch auf der Platine.
März 2010
Allmählich wurde die Zeit knapp und ich hatte noch nicht alle Komponenten zusammen, um das
gesamte System auszutesten. Mir fehlte noch das Außenterminal. Für die Software konnte ich die
bereits bestehenden Funktionen verwenden. Und auch die Hardware lief von Anfang an. Ich wickelte
eine neue Spule deren Form ich an das Gehäuse anpasste. Das Senden der ID vom Außenterminal lief
mit dem selbstgemachten Nullmodemkabel problemlos. Doch das Hauptterminal machte mir noch
einige Schwierigkeiten. Durch die neue Spule und der geänderten Induktivität änderte sich auch die
Breite des Rechtecksignals des Manchestercodes. Die Zeit war so eingestellt, dass im letzten Drittel
des Rechtecksignals abgetastet wurde. Mit der neuen Spule wurde anscheinend schon beim
nächsten Bit abgetastet und ich bekam jedes Mal eine unterschiedliche ID entschlüsselt. Nach
mehrmaliger Kontrolle des Treibers kam mir ein Gedankenblitz und ich schaute mir den Bitstrom
noch einmal auf dem Oszilloskop an. Da wurde mir klar, dass ich die Zeiten ändern musste und die
IDs waren wieder einheitlich.
Ich schloss alles zusammen, um die Tags vom Außen- und Hauptterminal zu erfassen und sie auf dem
Display auszugeben. Der Bildaufbau stockte auf einmal, der µController musste in einer Schleife
hängen geblieben sein. Vom Außenterminal konnte noch kein Zeichen gesendet worden sein, also
musste ein Interrupt vom EM4095 ausgelöst worden sein, auch wenn kein Tag erfasst wurde. Eine
Messung mit dem Oszilloskop am Demodout-Pin des EM4095, der zum externen Interrupt führte
zeigte ein Flackern des Signals zwischen high und low Pegel. Eigentlich sollte dieses Signal konstant
bei 5V sein und bei Erfassen eines Tags den Manchestercodierten Datenstrom senden mit dem ein
Interrupt ausgelöst wird und das Signal entschlüsselt werden kann, doch jetzt hatte ich ein Störsignal
und das Programm hing in einer Schleife weil der Treiber nicht einen Manchestercode empfing
sondern ein Störsignal.
40
Jetzt war guter Rat teuer, denn es war nur noch knapp eine Woche hin bis zur Abgabe. Weil ich das
Problem offensichtlich nicht selber in den Griff bekam kontaktierte ich Hr. Gross. Etwa Mitte der
Woche trafen wir uns um das Problem zu lösen. Er empfahl mir den Massebezug von empfindlichen
Eingängen des Analogteils auf einen Punkt zusammenzulegen und eine getrennte
Spannungsversorgung für den IC zu verwenden. Das machte mir wieder Hoffnung und ich führte
diese Änderungen am nächsten Tag durch. Bedauerlicherweise verbesserte dies nichts und die
Störung war immer noch präsent. Nun war es schon Wochenende und ich konnte die Technikerarbeit
unter keinen Umständen so abgeben. Doch wie konnte ich mit dieser Störung die ID ordentlich
entschlüsseln? Ein erster Schritt dieses Problem zu lösen war es den externen Interrupt
auszuschalten, damit ich wenigstens den Rest vom Menü vorführen konnte. Doch dann kam mir doch
noch eine Idee. Das Hauptprogramm musste die ganze Zeit damit beschäftigt sein das Signal vom
Reader IC zu entschlüsseln und mit vorherigen zu vergleichen. Wurde hintereinander zehn Mal die
gleiche ID entschlüsselt so sollte dies auch die Richtige sein. Also dachte ich mir einen Algorithmus
aus der diese Aufgabe erledigte. Da das Hauptprogramm jetzt nicht mehr in der Lage war auf einen
Druck des Displays zu warten musste ich dafür ebenfalls noch eine Lösung finden. Dazu hatte ich
noch in Erinnerung, dass bei außerhalb liegenden Werten zweier Bereichsgrenzen des AD Wandlers
ein Interrupt ausgelöst werden konnte, der Boundarycheck. Nun wurde die AD Messung im
Hauptprogram angestoßen und lief im Hintergrund während im Hauptprogramm der Datenstrom
vom RFID Reader IC decodiert wurde, um mehrere gleiche Exemplare zu finden. Wurde nun das
Display im oberen Bereich berührt so erfolgte eine Unterschreitung der Bereichsgrenzen und das
Hauptprogramm wurde unterbrochen, welches die Eingabe einer PIN zum Wartungsmodus
ermöglichte. Eine Programmunterbrechnung konnte außerdem durch das Empfangen eines Zeichen
über die serielle Schnittstelle ausgelöst werden. Es war bereits Sonntag und ich konnte nur hoffen,
dass diesmal alles funktionierte. Nach kleinen Optimierungen des Codes konnte ich nach dem
Anlegen der Benutzer mit dem PC Datensätze vom Außen- und Hauptterminal aufnehmen. Nach ein
paar Versuchen mit der Ausgabe der Logfiles und Benutzerliste zeigte meine Uhr 3AM an. Ich fertigte
noch eine Skizze über das Projekt an und war doch noch bereit mein Projekt am Stichtag zu
präsentieren.
41
6 Zusammenfassung
6.1 Zeitaufwand
40 Std. Informationsbeschaffung
140 Std. Software µC
50 Std. Treiberentwicklung
70 Std. Software PC
20 Std. Hardware
20 Std. Fehlerbehebung
40 Std. Dokumentation
Summe 380 Stunden
Abbildung 31 Zeitaufwand
6.2 Material und Kosten
Hauptterminal
Spannungsversorgung
Artikel
Hohlstecker
µA 7805 Festspannungsregler 5V
LF33CV Festspannungsregler 3,3V
AX100/25 Elektrolytkondensator 100µF 25V
X7R-G1206 100N SMD Vielschichtkeramikkondensator 100nF
X7R-G1206 10/16 SMD Vielschichtkeramikkondensator 10µF
Shottkydiode 1N5822
Anbieter
Preis/Stück Stückzahl
Conrad.de
0,61
Reichelt.de
0,25
Reichelt.de
0,55
Reichelt.de
0,16
Reichelt.de
0,05
Reichelt.de
0,07
Reichelt.de
0,21
1
1
1
1
2
1
1
Gesamtpreis
0,61
0,25
0,55
0,16
0,1
0,07
0,21
I²C
Artikel
ST24C512BN6 64kByte EEPROM seriell DIP-8
DS 1307 Real Time Clock seriell 56Byte NV SRAM DIP-8
KZH 12-1 Knopfzellenhalter für Ø12mm
BR1216 Lithium Knopfzelle 3Volt 25 mAh
0,032768 Mini Uhrenquartz 32.768 kHz TC 38
SMD ¼ W 5,6K SMD Chip Widerstand
X7R-G1206 100N SMD Vielschichtkeramikkondensator 100nF
Anbieter
Preis/Stück Stückzahl
Reichelt.de
1,1
Reichelt.de
1,85
Reichelt.de
1,05
Reichelt.de
1,15
Reichelt.de
0,35
Reichelt.de
0,1
Reichelt.de
0,05
1
1
1
1
1
2
2
Gesamtpreis
1,1
1,85
1,05
1,15
0,35
0,2
0,1
42
UART
Artikel
MAX 232 CPE RS232 Driver DIL-16
X7R-G1206 100N SMD Vielschichtkeramikkondensator 100nF
GS16P IC Sockel 16 Polig
D-SUB 9-Polig liegend
X7R-G1206 1,0/50 SMD Vielschichtkeramikkondensator 1uF
Anbieter
Preis/Stück Stückzahl
Reichelt.de
0,39
Reichelt.de
0,05
Reichelt.de
0,22
Reichelt.de
0,25
Reichelt.de
0,17
Gesamtpreis
1
0,39
1
0,05
1
0,22
1
0,25
4
0,68
EM4095
Artikel
X7R-G1206 100N SMD Vielschichtkeramikkondensator 100nF
SMD ¼ W 68 SMD Chip Widerstand
X7R-G1206 10/16 SMD Vielschichtkeramikkondensator 10uF
X7R-G1206 10N SMD Vielschichtkeramikkondensator 10nF
NPO-G1206 1,0N
NPO-G1206 47P
Phoenix Klemme 2 polig
EM4095 Chip wurde gestellt
Anbieter
Preis/Stück Stückzahl
Reichelt.de
0,05
Reichelt.de
0,1
Reichelt.de
0,1
Reichelt.de
0,02
Reichelt.de
0,05
Reichelt.de
0,05
Labor
0
0
3
1
1
2
3
1
1
1
Gesamtpreis
0,15
0,1
0,1
0,04
0,15
0,05
0
0
GLCD
Artikel
DG16080
SMD ¼ W 100K
BL1x20G8 2,54
Anbieter
Preis/Stück Stückzahl
Pollin.de
6,95
Reichelt.de
0,1
Reichelt.de
0,29
1
2
1
Gesamtpreis
6,95
0,2
0,29
Touch
Artikel
SMD ¼ W 1,5K
SMD 1/4W 100K
Spindeltrimmer 200 Ohm
BC 807-40W
Anbieter
Preis/Stück Stückzahl
Reichelt.de
0,1
Reichelt.de
0,1
Labor
0
Reichelt.de
0,04
2
2
2
2
Gesamtpreis
0,2
0,2
0
0,08
Relais
Artikel
BC 807-40W
SMD 1N4001
Phoenix Kontakt
NA 05WK Relais 5V
Anbieter
Preis/Stück Stückzahl
Reichelt.de
0,04
Reichelt.de
0,04
Labor
0
Reichelt.de
1,15
1
1
1
1
Gesamtpreis
0,04
0,04
0
1,15
Restliche Bauteile
Artikel
LPC936
PLCC 28 SMD Sockel
Platinenmaterial
Gehäuse
Kleinmaterial
Anbieter
Preis/Stück Stückzahl
Franell.de
4,34
Reichelt.de
0,32
Labor
0
Ebay.de
7,5
2
Gesamtpreis
1
4,34
1
0,32
1
0
1
7,5
1
2
43
Außenterminal
Spannungsversorgung
Artikel
µA 7805 Festspannungsregler 5V
LF33CV Festspannungsregler 3,3V
9V Blockbatterie
Batterieclip
X7R-G1206 100N SMD Vielschichtkeramikkondensator 100nF
X7R-G1206 10/16 SMD Vielschichtkeramikkondensator 10µF
Anbieter
Preis/Stück Stückzahl
Reichelt.de
0,25
Reichelt.de
0,55
Reichelt.de
1,6
Reichelt.de
0,15
Reichelt.de
0,05
Reichelt.de
0,1
1
1
1
1
2
1
Gesamtpreis
0,25
0,55
1,6
0,15
0,1
0,1
EM4095
Artikel
X7R-G1206 100N SMD Vielschichtkeramikkondensator 100nF
SMD ¼ W 68 SMD Chip Widerstand
X7R-G1206 10/16 SMD Vielschichtkeramikkondensator 10uF
X7R-G1206 10N SMD Vielschichtkeramikkondensator 10nF
NPO-G1206 1,0N
NPO-G1206 47P
Phoenix Klemme 2 polig
EM4095 Chip wurde gestellt
Anbieter
Preis/Stück Stückzahl
Reichelt.de
0,05
Reichelt.de
0,1
Reichelt.de
0,1
Reichelt.de
0,02
Reichelt.de
0,05
Reichelt.de
0,05
Labor
0
0
3
1
1
2
3
1
1
1
Gesamtpreis
0,15
0,1
0,1
0,04
0,15
0,05
0
0
UART
Artikel
MAX 232 CPE RS232 Driver DIL-16
X7R-G1206 100N SMD Vielschichtkeramikkondensator 100nF
GS16P IC Sockel 16 Polig
D-SUB 9-Polig liegend
X7R-G1206 1,0/50 SMD Vielschichtkeramikkondensator 1uF
Anbieter
Preis/Stück Stückzahl
Reichelt.de
0,39
Reichelt.de
0,05
Reichelt.de
0,22
Reichelt.de
0,25
Reichelt.de
0,17
1
1
1
1
4
Gesamtpreis
0,39
0,05
0,22
0,25
0,68
Restliche Bauteile
Artikel
Led 5mm rot
Led 5mm grün
LPC935
PLCC 28 SMD Sockel
SMD ¼ W 1,5K SMD Chip Widerstand
Anbieter
Preis/Stück Stückzahl
Reichelt
0,06
Reichelt
0,06
Reichelt.de
2,25
Reichelt.de
0,32
Reichelt
0,1
1
1
1
1
2
Gesamtpreis
0,06
0,06
2,25
0,32
0,2
Abbildung 32 Materialauflistung
Die Gesamtkosten des Materials belaufen sich auf 41,06 Euro.
44
6.3 Résumé
Die Durchführung der Technikerarbeit erfolgte zum Großteil Zuhause. Dort hatte ich durch den
Einsatz des Experimentierboards die Möglichkeit alle Programmierarbeiten selbständig
durchzuführen. Ich bin froh, dass ich fast über den gesamten Zeitraum ein digitales Oszilloskop zur
Verfügung gestellt bekommen habe, welches sehr hilfreich zur Fehlersuche war. Kleinere Lötarbeiten
waren durch das ausleihen einer Lötstation auch kein Problem.
Es kam mir bei der Technikerarbeit darauf an eine kostengünstige, aber Interessante Arbeit
abzuliefern, die mir Potenzial lieferte möglichst viele Inhalte des µControllers zu erlenen.
Im Nachhinein hat mich die Technikerarbeit einiges mehr Zeit gekostet als ich am Anfang gedacht
habe. An manchen Nächten habe ich mich gefragt ob es überhaupt ein Ende nehmen würde. Doch
würde ich nochmals vor der Entscheidung stehen dieselbe Technikerarbeit durchzuführen würde ich
mich wieder dafür entscheiden. Durch das selbständige erlernen der seriellen Schnittstellen I2C und
UART sowie des AD-Wandlers und der Vertiefung der Programmiersprachen Assembler und C fiel es
mir um einiges einfacher die im Unterricht befassten Themen aufzufassen.
Das Zeiterfassungsterminal hat noch die ein oder andere Macke, und sieht durch Zeit verursachte
Probleme nicht besonders ansprechend aus. Doch darauf war auch nicht das Hauptaugenmerk von
mir aus gerichtet.
Wenn ich das Zeiterfassungsterminal noch erweitern und verbessern könnte, würde ich die Störung
des EM4095 probieren in den Griff zu bekommen, eine visuelle Oberfläche zur Bedienung der
Benutzerverwaltung gestalten und das Gerät in ein richtiges Gehäuse einlassen.
Bedanken möchte ich mich bei den Lehrern Hr. Gross, Hr. Eisenmann und Hr. Karrer für die
selbstverständliche und unkomplizierte Unterstützung sowie die Bereitstellung von jeglichen
Hilfsmitteln. Außerdem geht ein Dank an einige Klassenkameraden, die mir durch das zu Verfügung
stellen spezifischer Bauteile oder Messgeräte weitergeholfen haben.
45
6.4 Selbständigkeitserklärung
Hiermit versichere ich, Marc Bo Hartmann, dass die vorliegende Technikerarbeit von mir selbständig
geplant, erarbeitet und angefertigt wurde. Es wurden dabei nur die angegebenen Hilfsmittel benutzt,
Textstellen, die dem Wortlaut oder dem Sinn nach aus anderen Werken entnommen wurden sind
durch Angabe der Quellen kenntlich gemacht.
<Ort>, <Datum> ......................................
Unterschrift:.........................................
6.5 Quellenangaben
Weblinks:
http://de.wikipedia.org/wiki/Radio_Frequency_Identification
http://www.emagu.de/rfid_mit_em4095.htm
http://www.mikrocontroller.net/
http://msdn.microsoft.com/en-us/library/aa913128.aspx
http://c51.de/
Literatur:
Keil C51 / Phillips LPC900, Hardware – Software - Toolchain
6.6 Inhalt der beigelegten Projekt CD
Quellcodes µController mit Projektdatei
Quellcode PC-Software
Datenblätter der verwendeten Bausteine
Dokumentation als PDF-File
46