µ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: Hartmann_M@gmx.de 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