Ist ganz einfach, ich wurde gefragt.
Ein guter Freund (Toddy) brauchte für einen Wettkampf (Nordsee Fire Fight
) eine Zeiterfassung. Und wie das Leben so spielt, sollte das dann auch noch so wenig wie möglich Kosten. Da bin ich dann ins Spiel gekommen.
Die gesammte Stoppuhr besteht aus zwei Teileinheiten. Zum einen der Steuereinheit, in der die Funktionstansten, die Ansteuerung der Sensoren, die Ansteuerung eines Displays für die Schiedsrichter und zwei serielle Schnittstellen untergebracht sind. Zum anderen ein abgesetztes Display, damit auch die Zuschauer wissen was die Zeit geschlagen hat.
Das Ergebnis:
Als Grundlage für die Steuereinheit dient das hier im Wiki vorgestellte Board (Hardware Rev2) mit dem MSP430F2618. Es wurde hierfür aber um einige Funktionen erweitert. An Port 1 des MSP ist das Tastenkreuz für die Bedienung der Stoppuhr angeschlossen. Weiterhin sind hier auch die externen Eingänge für die Auswertung der beiden Lichtschranken und des Tasters für die Fernauslösung angschlossen (diese natürlich über Optokoppler). Das Display ist jetzt an die Schnittstelle „USCI B1“ angeschlossen, um zusätzlich zwei serielle Schnittstellen und einen I2C - Bus bedienen zu können. Die Hintergrundbeleuchtung kann jetzt stufenlos gedimmt werden. Dazu ist die Ansteuerung der zugehörigen Transistoren an Port 4.1…4.3 verlegt worden. Damit vorgenommene Einstellungen an der Software dauerhaft erhalten bleiben, wurde an den SPI - Bus ein FRAM einegfügt. Neben der SPI - Schnittstelle werden wie bereits erwähnt zei serielle Schnittstellen durch den Prozessor bedient. Die Schnittstelle „USCI A0“ stellt über einen USB - Seriell - Wandler (FT232RL) die Verbindung zu einem Rechner her. Die zweite serielle Schnittstelle dient zur Kommunikation mit der LED - Anzeige. Für die ansteuerung externer Geräte (akustischer Signalgeber) sind jetzt zwei Relais vorhanden (wenn da nich ein Stecker zu groß oder das Gehäuse zu klein wäre, wären es zwei. So ist es erstmal nur eines.
)
Die bisher auf dem Demoboard genutzte Stromversorgung wurde durch zwei Schaltregler ersetzt. Diese erzeugen die 3,3V und die 5V Betriebsspannungen auf der Steuereinheit.
Geschrieben habe ich wie immer in „c“.
Bei der Erstellung der Software stand ich zu Beginn vor einem Problem. Wie stelle ich es an, alle Funktionen unterzubringen und dabei die Stoppuhr möglichst genau laufen zu lassen. als erstes habe ich die Stoppuhrfunktionalität in ein eigenes Untermenü gepackt. Die zugehörigen Teilfunktionen werden im Hauptprogramm immer als erstes ausgeführt und alle anderen Funktionen (die nicht Stoppuhr sind) gehen einfach nicht. Damit war das erste Problem gelöst. Als Zeitgeber verwende ich den Timer A, der mir einen Millisekundenimpuls zur Verfügung stellt. Dieser wird zur Generierung des Zehntelimpulses (kleinste Zeitauflösung der Stoppuhr in der Steuereinheit) genutzt. Alle anderen im System genutzten Zeitbasen werden ebenfalls vom Takt des Timers A abgeleitet (Tasterentprellung, Einschaltdauer der Relais, usw.).
Ein weiteres Problem stellte die Aktualisierung des Bildschirminhaltes während der Zeitmessung dar. Jedesmal den ganzen Bildschirm zu schreiben dauert hier einfach zu lange. Deshalb wird hier die aktuelle Zeit direkt in das Display geschrieben, ohne das Grafikram zu nutzen. Für die Darstellung aller anderen Displayinhalte, wird weiterhin das RAM manipuliert und anschließend der Inhalt an das Display übertragen. Die Hintergrundbeleuchtung der Anzeige kann stufenlos zwischen 0% und 100% eingestellt werden. Damit hier keine Softwareresourcen verbraucht werden, erfolgt die Erzeugung der PWM in Hardware durch den Timer B des MSP430. Die Software der Steuereinheit stellt auch die Daten für die LED - Anzeige (die kann eigentlich nix selber) zusammen, die dann sekündlich aktualisiert wird.
Für die Zeiterfassung werden zwei Lichtschranken ausgewertet. Sobald eine Lichschranke unterbrochen wurde, wird die aktuelle Zeit zwischengespeichert (im Bild schirm wird weiter gezählt). Erfolgt innerhalb der nächsten 2 Sekunden keine erneute Auslösung, so wird die gespeicherte Zeit als gewertete Zeit interpretiert und die Messung ist beendet. Der Bildschirm wird ebenfalls auf die gewertete Zeit eingestellt. Dies ist notwendig, weil laut den Wettkampfregeln das Ziel komplett durchschritten werden muss. Da ein Mensch nunmal 2 Beine und im Wettkampf auch noch ne Puppe mit sich führt, müssen diese Mehrfachauslösungen berücksichtigt werden.
Stelle ich ein sobald die wichtigsten offenen Punkte abgearbeitet sind.
Das Ergebnis:
BILD
Die beiden Anzeigen sind zusammen ca. 1,5m breit und ca. 18cm hoch. Die einzelnen Ziffern sind aus LED - Streifen (Internethandel aus China) zusammengesetzt, die auf GFK - Platten aufgeklebt wurden. Die Ansteuerung erfolgt im Multplexbetrieb durch einen MSP430F2132. Dieser übernimmt die Ansteuerung der Zeilen- und Spaltentransistoren. Ebenso ist an ihn das Leistungsnetzteil und eine serielle Schnittstelle angeschlossen. In dem Displaygehäuse (hat Toddy gebaut) ist weiterhin ein 24V Netzteil untergebracht. Aus diesen 24V werden die 12V Versorgungsspannung für die LED's und die 3,3V für den Prozessor erzeugt.
Geschrieben habe ich wie immer in „c“. Wobei ich derzeit das Problem habe, mit gdb-proxy auf den Prozessor zugreifen zu können!?
Auch hier wird durch den Timer A ein Millisekundenimpuls erzeugt, von dem alle anderen verwendeten Zeitbasen abgeleitet werden. Jede Millisekunde wird zwischen den einzelnen Ziffern umgeschaltet. Die darzustellenden Zeitinformationen werden über die angeschlossene serielle Schnittstelle empfangen und ausgewertet. Es gibt derzeit nur 3 Befehle die unterstützt werden. Die anmeldung der Steuereinheit bei der Anzeige, die Zeitinformation für die linke und rechte Seite und der Steuerbefehlt zum Dunkeltasten der entsprechenden Seite.
Stelle ich ein sobald die wichtigsten offenen Punkte abgearbeitet sind.