Ich möchte euch eine neue / alternative Stoppuhr vorstellen (siehe auch Stoppuhr auf Basis von Siebensegment-Anzeigen). Im Gegensatz zu meiner ersten Variante einer Stoppuhr habe ich mich bei dieser Variante der Stoppuhr für ein LC-Display als Anzeigeeinheit entschieden. Da auch diese Stoppuhr einen flexiblen / örtlich unabhängigen Betrieb über Batterien / Akkus ermöglichen sollte, wurde besonders auf einen möglichst stromsparenden Betrieb geachtet. So wurde beispielsweise auf eine Hintergrundbeleuchtung für das LC-Display verzichtet. Das Display an sich benötigt somit gerade mal 250 µA. Damit sich jedoch mehr als nur die Art und Weise der Anzeige im Vergleich zur “alten” Stoppuhr ändert, habe ich zusätzlich eine USB-Schnittstelle vorgesehen, damit gemessene Zeitwerte über den PC ausgelesen und weiter verarbeitet werden können. Gespeicherte Zeitmessungen können wahlweise automatisch oder manuell im EEPROM (auch über Spannungsverlust hinaus) gespeichert werden.
Schaltplan
Nachfolgend ist der Schaltplan zur LCD-Stoppuhr zu sehen. Das Herzstück der PICLCD-Stopwatch ist der PIC18F13K22
. Es handelt sich hierbei mit 8KB
Programmspeicher um einen eher kleineren Vertreter der PIC18F-Reihe. Nichts desto trotz ist der kleine Kerl mit 20 Pins ordentlich mit zusätzlicher Peripherie ausgestattet und hat alles nötige an Board um sich der Aufgabe als Hirn unserer Stoppuhr gegenüber zu stellen. Zur Seite gestellt bekommt er einen nicht-flüchtigen Speicher (siehe U2
) sowie einem FTDI-Chip um über USB mit einem Host-PC in Verbindung zu treten (siehe U3
). Der Low-Drop-Regler (U4
) in Form eines MCP1702
gesellt sich dazu und stellt die Versorgungsspannung für die gesamte Schaltung (mit Ausnahme von U3
bereit). Ein Steckkontakt (J1
) dient zum Anschluss für weitere Peripherie (Details im Abschnitt Board). Zu guter letzt ist noch das LC-Display (siehe LCD1
) auf dem Schaltplan zu finden, dass durch ein einzeiliges Display mit acht Zeichen von electronic Assembly ausgeführt wird. Hinzu gesellet sich hier und da etwas “Hühnerfutter” in Form von Widerständen, Abblock- und Pufferkondensatoren. Voilà fertig ist der Schaltplan 🙂
Auf den Schaltplan klicken für volle Auflösung
Board
In den nachfolgenden zwei Abbildungen seht ihr eine Vorschau auf die Leiterplatte als Resultat des Layouts in Eagle. Die erste Abbildung zeigt die Leiterplatte von der Vorderseite, während die zweite Abbildung die Leiterplatte von der Rückseite zeigt (siehe auch jeweils die Bildunterschrift). Die Vorderseite wird ganz eindeutig durch das einzeilige LC-Display dominiert, das acht vergleichsweise große Zeichen darstellen kann. Zusätzlich ist auf der linken Seite ein fünf-poliger PicoBlade Anschluss vorgesehen (Ground, PushButton, User, Spannungseingang und 3,3V Ausgang). Dieser wird zum Anschluss der Batterien/Akkus sowie für den Multifunktionsbutton verwendet (Details zur Bedienung folgen weiter unten). Vier M2.5 Durchgangslöcher bieten volle Flexibilität zur Montage der Leiterkarte auf einem entsprechenden Träger.
Vorderseite
Da das LC-Display plan auf der Vorderseite aufliegt, ist dort (unter dem Display) kein Platz für weitere Bauelemente. Diesen mussten aus diesem Grund alle (mit Ausnahme des PicoBlade-Anschlusses) auf der Rückseite platziert werden. Wir finden auf der Rückseite neben dem PIC18F13k22 Controller zusätzlich den EEPROM Chip und den FTDI-USB Chip sowie die mittig platzierte Micro-USB-Buchse zur Verbindung mit dem PC zwecks Datenaustausch. Darüber hinaus sind fünf Kontaktierungs-/Messpunkte vorgesehen (siehe VCC
, GND
, PGD
, PGC
und VPP
), die zum händischen Programmieren/Debuggen des PIC-Mikrocontrollers vorgesehen sind. Der Grundgedanke ist, dass lediglich der Bootloader auf den PIC geladen wird, der dann weitere Firmware über das USB-Interface entgegen nehmen kann.
Rückseite
Bei der Bestellung der Platinen wollte ich dieses Mal etwas neues Ausprobieren. Ich habe mir den Hersteller OSHPARK herausgesucht. Ein erster kleiner Vorteil bei diesem Anbieter: Man muss das Eagle-Boardfile (*.brd
) nicht zuvor ins Gerber-Format exportieren, sondern kann direkt die *.brd
Datei hochladen. Alles weitere wird einem abgenommen. Das Exportieren von Gerber-Dateien ist zwar nicht wirklich kompliziert aber wenn ich mir den Schritt sparen kann, warum nicht? Die Bestellung der Platinen ist somit super einfach und ist in wenigen Minuten abgeschlossen. Die Preise sind im Vergleich zu ITEAD, bei denen ich schon oft bestellt habe und stets sehr zufrieden war, etwas höher. Dafür ist die Qualität der Platinen aber auch auf einem anderen Niveau, siehe:
Schon allein das ENIG ist deutlich hochwertiger als HASL bei ITEAD (Anmerkung: ENIG ist bei ITEAD gegen Aufpreis von 20$ auch möglich – beim OSHPARK jedoch inklusive). Eine kleine Besonderheit der Platinen vom OSHPARK, sind die “Nasen” an den Rändern der Platine, die aufgrund des Paneling entstehen. Der Hersteller sieht allerdings entsprechende Sollbruchstellen vor, so dass man die Nasen recht einfach und sauber entfernen kann. Sehr markant ist darüber hinaus natürlich auch noch der lila Lötstopplack 🙂
Spannungsversorgung
Der Hauptanschluss der LCD-Stoppuhr befindet sich auf der Vorderseite links. Über einen fünfpoligen PicoBlade-Connector werden alle Anschlüsse realisiert. Die nachfolgende Tabelle beschreibt die Belegung des Connectors (diese ist zusätzlich auch direkt auf der Platine aufgedruckt).
Bezeichnung | Funktion |
Ground (GND) | Masseanschluss der Versorungsspannung |
Push-Button (PB) | Schaltkontakt ( ) für den externen Pilztaster (zweiten Kontakt mit 3V3 / verbinden) |
User (USR) | Momentan nicht genutzter zusätzlicher Schalteingang |
Voltage-IN (VIN) | Spannungsversorung Eingang |
3,3 Volt (3V3) | Signalspannung für externe Schaltkontakte ( ) |
Der 3,3V Ausgang
ist zusammen mit dem Push-Button
Anschluss für den Taster vorgesehen, der beim Betätigen einen High-Pegel am PIC-Controller erzeugt, der im Ruhezustand auf Low-Pegel (GND) liegt. Der Spannungseingang
hingegen dient zur Spannungsversorung der LCD-Stoppuhr. Zur Versorgung werden drei in Reihe geschaltete Zellen verwendet. So ergibt sich die Gesamtspannung am Eingang zu etwa 4,2V (für drei in Reihe geschaltete voll geladene NiMh Akkus) beziehungsweise circa 3,4V, wenn sich die Akkus dem Ende zuneigen. Für Batterien beträgt die Spanne etwa 4,7V bis 3,4V (die Spannung der Batterie fällt noch weiter ab, jedoch sinkt die Gesamtspannung dann unter das minimale Niveau um die Stoppuhr noch versorgen zu können). Daher ist mein Tipp: Versorgt die Stoppuhr mit drei in Reihe geschalteten Mignon-Akkus.
Bedienung
Die LCD-Stoppuhr wird über einen einzigen Taster bedient (z.B. über einen “Hot-Buzzer”, siehe auch das Foto des Aufbaus von meiner Siebensegment-Stoppuhr). In diesem Abschnitt möchte ich nun kurz beschreiben, wie die jeweiligen Funktionen der Stoppuhr über den Taster bedient werden.
Aufwecken der Stoppuhr
Um Strom zu sparen begibt sich der PIC-Controller nach 15 Sekunden Inaktivität in den SLEEP
Modus. In diesem Zustand werden alle Taktquellen ausgeschalt, der Stromverbrauch des PIC reduziert sich in diesem Zustand auf 34 nA. Kurz bevor sich der PIC-Controller in den SLEEP
Modus begibt, schaltet er zuvor noch das LC-Display aus um zusätzlich Strom zu sparen. So ist es möglich die maximale Laufzeit aus den ggf. genutzten Akkus oder Batterien herauszuholen.
Lange Rede kurzer Sinn: Wenn das Display ausgeschalret beziehungsweise der PIC im SLEEP
Modus ist, muss er zunächst durch einmaliges Tippen des Tasters aufgeweckt werden. Der PIC verlässt durch einmaliges drücken des Tasters den SLEEP
Modus und aktiviert das Display. Auf dem Display wird eine kurze Animation zur Begrüßung angezeigt bevor die Zeitanzeige auf den Startwert 00:00:00
umspringt. Jetzt ist die Stoppuhr bereit eine neue Messung zu starten.
Starten / Stoppen einer Messung
Nachdem die Stoppuhr aus dem SLEEP
Modus aufgeweckt und bereit für eine neue Zeitmessung ist (Display zeigt 00:00:00
), kann eine neue Messung über einmaliges Tippen des Tasters gestartet werden. Alternativ ist die Stoppuhr nicht gerade erst aufgeweckt worden, sondern hatte zuvor gerade erst eine Zeitmessung durchlaufen, dessen Ergebnis noch immer auf der Anzeigt dargestellt wird (z.B.: 09:46:12
) – in dem Fall kann durch einmaliges Tippen zurück zum Ausgangszustand gewechselt werden. Nun kann durch einmaliges Tippen direkt eine neue Zeitmessung gestartet werden. Die Anzeige zeigt live die verstrichene Zeit auf dem Display an. Die Zeitdarstellung auf dem Display erfolgt in <M><M>:<s><s>:<ms><ms>
, somit würde eine Darstellung von 09:46:12
einer Zeit von 9 Minuten
, 46 Sekunden
und 120 Millisekunden
entsprechen.
Eine laufende Messung wird über erneutes Betätigen des Tasters gestoppt, nachdem die Messung zuvor gestartet wurde (siehe live Anzeige der verstrichenen Zeit auf dem Display). Die Zeitmessung wird gestoppt und das Ergebnis für 10 Sekunden auf dem Display angezeigt. Sofern die letzte Messung einen neuen Rekord darstellt (kürzeste gemessene Zeit / vergleich mit im EEPROM gespeicherten Messwerten), wird der Hinweis Record!
für 10 Sekunden blinkend auf dem Display eingeblendet. Im Anschluss wechselt die Anzeige wieder auf kontinuierliche Darstellung des Messwertes. Wenn innerhalb von 15 Sekunden keine neue Zeitmessung gestartet oder der zuletzt gemessene Wert gespeichert wird (siehe Beschreibung im Abschnitt Store), begibt sich die Uhr wieder zurück in den SLEEP
Modus (Display wird ausgeschaltet).
Speichern eines Ergebnisses
Nachdem eine Zeitmessung beendet wurde (und die Stoppuhr noch nicht wieder in den IDLE
Modus übergegangen ist), kann ein Messergebnis in das externe EEPROM (nicht flüchtiger Speicher) gespeichert werden um diese Zeitmessung später mit Hilfe eines PCs auszulesen und die Resultate z.B. in Excel weiter zu verarbeiten. Im Anschluss an eine Zeitmessung wird das Ergebnis für 10 Sekunden auf dem Display angezeigt (zum Beispiel 09:46:12
). Solange das Ergebnis angezeigt wird, kann dieses nun mit einem Drücken & Halten des Tasters für drei Sekunden gespeichert werden. Auf dem Display wird eine kurze Bestätigung angezeigt: -> #0049
. Hier wurde das letzte Messergebnis in den Slot mit der Nummer 49
gespeichert. Der Speicher ist fortlaufend organisiert, so dass der nächste Messwert an die Position 50
gespeichert werden würde (solange der Speicher nicht zuvor gelöscht wurde). Es können maximal 1000 Messergebnisse im EEPROM gespeichert werden. Wenn der Speicher voll ist, wird das älteste Messergebnis überschrieben und geht somit verloren.
Löschen des Speichers
Von Zeit zu Zeit kann es vorkommen, dass ihr den Speicher des EEPROMS vollständig löschen möchtet. Das könnt ihr wahlweise über das PC-Tool erledigen oder direkt an der Stoppuhr. Um den Speicher direkt an der Stoppuhr zu löschen, drückt und haltet ihr den Taster für 5 Sekunden. Im Anschluss erscheint die Meldung Erase?
auf dem Display.
Wenn ihr euch sicher seid, dass der Speicher vollständig gelöscht werden soll, bestätigt noch einmal mit einem erneuten Tipp auf den Taster. Das Löschen alle Messergebnisse wird mit Erased!
auf dem Display bestätigt. Die Anzeige verschwindet nach weiteren drei Sekunden wieder vom Display.
Fernsteuern via PC
Über den PICLCD Stopwatch Reader kann die Stoppuhr vom PC ferngesteuert werden. Außerdem bietet das kleine PC-Tool, das in Java geschrieben wurde, die Möglichkeit die im externen EEPROM gespeicherten Messwerte in eine Comma-Seperated-Value Datei (CSV) auszulesen. Somit können die Daten auf einfache Weise von der Stoppuhr exportiert und zum Beispiel in Microsoft Excel grafisch aufbereitet werden. Bei der Entwicklung des PC-Tools wurde wert darauf gelegt eine möglichst leicht zu bedienende und übersichtliche Oberfläche zu gestalten. Im Reiter Settings
wird die Verbindung zur PICLCD Stopwatch konfiguriert. Letztendlich wird hier einfach nur der COM-Port ausgewählt, an dem die PICLCD Stopwatch angeschlossen ist. Über einen Button kann die Liste der verfügbaren COM-Ports aktualisiert werden, wenn die PICLCD Stopwatch z.B. erst an den PC angeschlossen wurde, nachdem das Reader-Tool gestartet wurde. Über den Ping-Test
Button kann dann der ausgewählte COM-Port geprüft werden. Es wird, wie der Name schon sagt ein Ping an die PICLCD Stopwatch gesendet. Wenn daraufhin das Echo empfangen wird, war der Test erfolgreich und die PICLCD Stopwatch kann entsprechend ferngesteuert werden (siehe weitere Reiter des Tools).
Im Tab Data
können einige Informationen zur PICLCD Stopwatch ausgelesen werden. Sowohl das Datum als auch die Nummer des Builds der geflashten Firmware
werden über den Button mit dem kleinen ausgelesen. Die Daten werden im Anschluss in den Textfeldern angezeigt (siehe Firmware-Version und Buildnumber). Wenn zusätzlich noch die Daten des externen EEPROM
von Interesse sind, können diese ebenfalls ausgelesen werden. Nachdem der Button zum Auslesen der EEPROM Informationen gedrückt wurde, werden die Anzahl
der gespeicherten Messungen im EEPROM sowie der aktuelle Rekord
angezeigt. Weiterhin können alle gespeicherten Messungen in eine CSV-Datei exportiert
werden. Wenn hingegen alle gespeicherten Messungen aus dem EEPROM gelöscht
werden sollen, kann der Button mit dem Besen genutzt werden.
Im Remote
Tab kann die PICLCD Stopwatch ferngesteuert werden. Über den Start
Button wird eine Messung auf der Stopwatch gestartet und über den Stop
Button entsprechend wieder gestoppt. Das Ergebnis
der Messung wird im Anschluss an eine Messung (Stop
Button betätigt) im dunkel hinterlegten Testfeld dargestellt. Die Formatierung entspricht hierbei der des Displays der Stopwatch (<m><m>:<s><s>:<ms>ms>
). Sofern die letzte Messung einen neuen Rekord
darstellt, wird etwas Konfetti für eure hervorragende Leistung geworfen 🙂 Sofern ein neuer Rekord erreicht wurde, wird dieses Ergebnis automatisch ins EEPROM gespeichert. Wenn die letzte Messung kein neuer Rekord ist, kann das Ergebnis manuell ins EEPROM gespeichert werden. Aber Vorsicht: Nach Ablauf von 10 Sekunden nachdem die Messung beendet wurde, verfällt die letzte Messung.
Hier nun noch ein Beispiel eines Exports der Messungen. Zum Zeitpunkt des Exports waren acht Messungen im EEPROM gespeichert. Die PICLCD Stopwatch Remote speichert die exportieren Messungen immer in der Datei Measurements.csv
, die direkt neben dem Tool abgelegt wird (der Pfad, in dem ihr die Exe der PICLCD Stopwatch Remote abgelegt habt). In der ersten Zeile sind die Titel/Beschreibungen für darunter liegenden Daten angeführt. Im Anschluss findet ihr pro Zeile ein Messergebnis. Achtung: Die Datei wird bei jedem neuen Export überschrieben!
Number,Minutes,Seconds,Milliseconds 1,00,09,57 2,00,07,68 3,00,06,23 4,00,04,50 5,00,05,04 6,00,01,80 7,00,07,19 8,00,11,13
Was ist noch zu tun?
Nun, verbessern lässt sich eine Software eigentlich immer, doch die Entwicklung der Firmware für die PICLCD Stopwatch ist überwiegend abgeschlossen. Was ich jedoch noch machen muss:
- Strombedarf messen
Die Uhr ist sehr stromsparend designed und auch programmiert (regelmäßiger gebrauch des Sleep-Mode, geringer Strombedarf durch Auswahl der Bauelemente …). Nichts desto trotzt möchte ich nun natürlich auch wissen wie viel Strom sie denn nun wirklich benötigt und wie lange aufgrund dessen die Batterien halten werden. Diese Info werde ich in den nächsten Tagen an dieser Stelle nachliefern.
Stückliste
In der Vergangenheit habe ich oft einen Warenkorb als Reichelt-Link oder als PDF zur Verfügung gestellt. Da sich Bestellnummern hin und wieder mal ändern, möchte ich stattdessen dazu übergehen stattdessen eine Stückliste anzugeben. Anhand dieser sollten sich die Bauteile dann auch leicht beim Distributor eurer Wahl finden lassen.
Bauteil | Wert | Gehäuse | Kommentar |
C1, C2, C3, C4, C5 | Kondensator 100nF | SMD 0805 | Abblockkondensator |
C6, C7, C8, C10 | Kondensator 1µF | SMD 0805 | Pufferkondensator |
D1 | Schottkydiode SK36A | SMA/DO-214AC | Entkopplung USB / Batterie |
J1 | PicoBlade Molex-Buchse | MOLEX-SD-53398-0571 | |
Krimpkontakte + Steckergehäuse | MOLEX 50079-8100 + MOLEX 510210500 | Ruhig etwas Reserve einplanen, da relativ klein 😉 | |
J2 | Micro-USB-Buchse | USB-B-MICRO-SMD USB Type | Beispielfoto |
LCD1 | LC-Display von electronic assembly | EA_DOGM081 | Schutzfolie auf beiden Seiten entfernen |
LED1 | Signal-LED | LEDKA-3528ASYC | LED mit etwa 2,5V / 10mA |
R1, R2, R6 | Widerstand 10k | SMD 0805 | |
R3, R4, R5 | Widerstand 470R | SMD 0805 | |
R7 | Widerstand 56R | SMD 0805 | LED Vorwiderstand |
U1 | Mikrocontroller PIC18F13K22 | PIC18F13K22-I/SS | Auf I/SS achten (erhältlich z.B. bei Voelkner) |
U2 | 256K SPI EEPROM | 25LC256-I/SN | |
U3 | FT232RL | SSOP28 | USB zu Seriell Wandler |
U4 | MCP1702T-3302E | SOT23 | LDO Regler |
Download
Falls ihr einen Nachbau der LCD-Stoppuhr plant, findet ihr hier die notwendigen Daten. Ich biete euch hier neben dem reinen Source-Code zusätzlich die aktuellste Firmware als HEX-Datei sowie darüber hinaus den Bootloader und natürlich auch die PCB-Dateien um die Platine ggf. beim Platinenhersteller eures Vertrauens fertigen zu lassen sowie den entsprechenden Reichelt-Warenkorb.
- Source-Code auf GitHub
- Bootloader (HEX) Download
- Firmware
v2018-08-30-00157
Download HEX-File (ZIP) - Eagle-Boardfile v1.1 Download
- Source-Code Remote PC-Tool auf GitHub
- Remote PC-Tool
v1.0.33
Download Exe-File (ZIP)