44
Dokumentation Technikerprojekt V1.2 Dokumentation Technikerarbeit Motorradtachometer mit Touchdisplay und dreifacher TripMasterfunktion Jonas Böttinger 1/44

Dokumentation Technikerarbeit Jonas B ttinger - ZGK · Jonas Böttinger 16/44. Dokumentation Technikerprojekt

Embed Size (px)

Citation preview

Dokumentation Technikerprojekt V1.2

DokumentationTechnikerarbeit

Motorradtachometer mit

Touchdisplay und dreifacher

TripMasterfunktion Jonas Böttinger 1/44

Dokumentation Technikerprojekt V1.2

Inhaltsverzeichnis

Deckblatt Seite 1Inhaltsverzeichnis Seite 2Eidesstattliche Erklärung Seite 3Vorwort Seite 4 Blockschaltbild Seite 5Gesamtschaltplan Seite 6Hardware

Display Seite 7...USB-Programmierboard Seite 9µController Seite 10...Spannungsversorgung Seite 11...Temperatursensoren Seite 12...Radlaufsensor Seite 13...Platinen Seite 14...

Projektverlauf Start des Projektes Seite 17...Werteberechnung Seite 18...Timer Seite 19...Kommunikation der Bauteile Seite 21...

Seite 27...Zeit und Kosten Seite 23

Installation und Bedienung Installation der Sensoren Seite 24Einbau des Dispalys Seite 25Bedienungsanleitung Seite 26

SoftwareFunktionen in C (LPC) Seite 27...Makroprogrammierung des eDIP240-7 Seite 41...Befehlsaufbau eDIP240-7 Seite 43

Jonas Böttinger 2/44

Dokumentation Technikerprojekt V1.2

Eidesstattliche Erklärung

Hiermit versichere ich, Jonas Böttinger, die nachfolgend dokumentierteTechnikerarbeit eigenständig entwickelt und den Prototyp selbst angefertigt zu haben.Auszüge aus Fremdquellen, z.B. Datenblättern, sind deutlich als solche zu erkennen.

Radolfzell den 17.04.2009

Jonas Böttinger 3/44

Dokumentation Technikerprojekt V1.2

Vorwort

Das Themenfeld Kommunikation und Datenverarbeitung ist derart weit gefächert,dass es mir anfangs schwer fiel, mich für ein konkretes Projekt zu entscheiden. Sogroß die Wahl der verschiedenen Fachrichtungen ist, so groß war die „Qual“ derFestlegung auf ein spezielles Thema. So begann ich, als Entscheidungshilfe ersteinmal Kriterien zu entwickeln, denen das später auszuwählende Projekt genügensollte, um den Entscheidungsprozess in eine definierte Richtung zu treiben und demspäter zu erstellenden Produkt einen gewissen Rahmen zu geben. Das zuentwickelnde Produkt sollte so hardwarearm wie möglich zu realisieren sein, um dieentstehenden Kosten unter Kontrolle zu halten. Es sollte eine Neuerung auf seinemGebiet darstellen und nicht nur ein Nachbau eines bereits kommerziell vertriebenenProdukts sein. Wichtig war mir auch, dass es nach einer einfachen Anleitung leichtnachzubauen und einfach am Einsatzort zu installieren ist. Nach der Installation solltedas Produkt einfach, selbsterklärend und intuitiv zu bedienen sein. KomplizierteBedienung musste in jedem Fall vermieden werden. Zu guter Letzt sollte das Projektmit meinem Hobby, dem Motorradfahren zusammenhängen, um vorhandenesFachwissen zu nutzen und um bei zu erwartenden Motivationsengpässen nochReserven mobilisieren zu können. Dass das Entwickeln von Hard- undSoftwarekomponenten einen solchen Spaß macht, wusste ich zu diesem Zeitpunktnoch nicht. Auf Suche nach einem Thema oder einem zu lösenden Problem stieß ich in diversenInternetforen auf einen Touchscreen der Firma Electronic Assembly. Schnell entstanddie Idee, einen Motorradtachometer zu entwickeln, dessen Funktionen sich über dasBerühren der Bildschirmoberfläche steuern lassen. Somit war das Thema der Technikerarbeit gefunden, und ich konnte beginnen, mirGedanken über den Umfang des Projekts zu machen. Ich entschloss mich, dieGeschwindigkeit, zwei Temperaturen aus dem Motorbereich und dieAußentemperatur sowie drei voneinander unabhängige Tripmaster auf demBildschirm anzuzeigen. Außerdem sollten die Tripmaster durch Berührung des Anzeigefeldes rücksetzbar sein, und es musste eine Möglichkeit geben, dieDisplaybeleuchtung an das Umgebungslicht anzupassen.

Diese Dokumentation soll nicht nur eine Bedienungsanleitung für das fertige Produktsein, sondern auch ein Leitfaden und eine Motivation, den Aufbau des Projekts zudurchdringen und vielleicht auch den Nachbau zu wagen. Quelltexte,Dokumentationen und Leiterplattenlayouts, die von mir erstellt wurden, dürfen freiverteilt und modifiziert werden, sofern die Modifikationen/Verbesserungen wiederumfrei zur Verfügung gestellt werden und friedlichen Zwecken dienen.

Jonas Böttinger 4/44

Dokumentation Technikerprojekt V1.2

Blockschaltbild

Jonas Böttinger 5/44

Dokumentation Technikerprojekt V1.2

Gesamtschaltplan

Jonas Böttinger 6/44

Dokumentation Technikerprojekt V1.2

Das Display

Bei dem Display handelt es sich um das eDIP240-7 der Firma Electronic Assembly(www.lcd-module.de). Das Display verfügt über eine eigene Logik mit 32kbCodespeicher, eigene vorgefertigte Grafikfunktionen, acht eingebaute Schriftarten,die Möglichkeit, eigene Schriften und Grafiken zu erstellen, Zoom undDrehfunktionen, drei verschiedene Kommunikationsinterface onboard (RS232, I²C,SPI), hohe Auflösung (240x128/4.2''), 5V Versorgungsspannung, Beleuchtung perSoftware regelbar und eine eigene Programmiersprache.

Abb. 1 Display mit Standardschriften

Die Standardschriften können wie hier (Abb.1) verwendet oder um andere Schriftenerweitert werden. Es ist auch möglich, eigene Schriften zu erstellen, wobei dies fürmeine Zwecke nicht nötig war. Ich kam mit den mitgelieferten Schriftarten aus.

Die Baugröße des Bildschirms ist ausreichend, um gute Ablesbarkeit zu garantierenund mehrere Werte gleichzeitig darzustellen. Außerdem erlaubt die einstellbareBeleuchtung des Displays, den Betrieb unter verschiedenenBeleuchtungsumgebungen, was für einen Motorradtachometer von Vorteil ist.

Jonas Böttinger 7/44

Dokumentation Technikerprojekt V1.2

Abb. 2 Maße Display

Abb. 3 Steckerbelegung Displaycontroller

Jonas Böttinger 8/44

Dokumentation Technikerprojekt V1.2

Das USB Programmierboard EA eDIP240-7

Um die für das Display geschriebene Software in die displayeigene Steuerlogikschreiben zu können, benötigte ich zusätzlich noch ein USB Programmierboard derFirma Elektronic Assembly (www.lcd-module.de). Das USB Programmierboard stelltdie Hardwareschnittstelle zwischen dem Computer und der Entwicklungsoberflächedes eDIP Programmers (Entwicklungsumgebung der eDIP Software) dar.

Abb 3.1 USB Programmierboard passend zu Abb.3 Steckerbelegung Display

Jonas Böttinger 9/44

Dokumentation Technikerprojekt V1.2

Der LPC 935er

Der P89LPC 935 bietet alles, was ich zur Umsetzung meines Projektes benötige. Erbesitzt 2 externe Interrupts, eine serielle Schnittstelle, ein internes EEPROM undinterne Taktversorgung. Die Ports sind TTL-Pegel fähig, was sowohl die spätereAnbindung der Temperaturmessung über I²C-Bus, als auch die direkteKommunikation über die serielle Schnittstelle ohne Verwendung eines MAX232Bausteins ermöglicht.

Abb. 4 Blockschaltbild LPC 935

Jonas Böttinger 10/44

Dokumentation Technikerprojekt V1.2

Ich entschied mich für die PlCC28 Bauform, da dies ermöglicht, den Baustein,leicht austauschbar, in einem bedrahteten (THT) Sockel unterzubringen. Dies gab mirdie Möglichkeit, den LPC bei Bedarf schnell zu tauschen und jederzeit ohne großenAufwand neue Software zu flashen.

Abb. 5 P89LPC935FA Bauform PLCC28

Die Spannungsversorgung

Zwei verschiedene Spannungen werden zum Betrieb des Tachometers benötigt, zumeinen 3.3V zur Spannungsversorgung des P89LPC935 und zum anderen 5.0V zurSpannungsversorgung des Displays, zur Spannungsversorgung der DS1621Temperatursensoren und um sowohl die Kommunikationsleitungen der seriellenSchnittstelle als auch den I²C-Bus auf 5.0V zu pullen. Um möglichst stabileVersorgungsspannungen zu erreichen und im Schadensfall einen schnellen,preiswerten und unkomplizierten (da modularen) Austausch zu ermöglichen,entschied ich mich, DC/DC-Wandler zu verwenden, die aus den, an einerMotorradbatterie üblichen, 11...14V stabile 5.0V bzw. 3.3V erzeugen.

Jonas Böttinger 11/44

Dokumentation Technikerprojekt V1.2

Abb. 6 AIMtec 1205SZ und 1203SZ

Meine Wahl fiel auf die beiden DC/DC-Wandler von AIMtec, 1205SZ und 1203SZ,da diese mit 1W Ausgangsleistung ohne weiteres in der Lage sind, auch das mit190mA doch recht stromhungrige Display ausreichend zu versorgen. Außerdemwerden beide Komponenten in der Bauform SO-8 geliefert, was sich später beimErstellen der Platine noch als Vorteil herausstellen sollte.

Die Temperatursensoren

Zur Aufnahme der 3 Temperaturen entschied ich mich ohne lange zu überlegen fürdie bereits im Unterricht behandelten DS1621 Temperatursensoren. Zum einendecken diese den von mir benötigten Temperaturbereich (-55°C...125°C) ab, und zumanderen sind sie ohne großen Aufwand auszulesen, da sie direkt I²C fähig sind. Ichbeschloss, die Bauteile auf von mir vorgefertigte Platinen mit fertiger, durch dasRouting festgelegter Adressierung zu verbauen. Dies soll einen einfachen Austauschdefekter Teile (Überhitzung) ermöglichen.

Jonas Böttinger 12/44

Dokumentation Technikerprojekt V1.2

Abb. 7 DS1621 Temperatursensoren links Schrumpfschlauch offen auf Trägerplatine/rechts mit Schrumpfschlauchwasserdicht gekapselt

Der Radlaufsensor

Um eine einfache Handhabung, einen schnellen Einbau und eine hoheZuverlässigkeit der Geschwindigkeitsmessung über das Vorderrad des Motorrads zuerhalten, entschied ich mich, einen Reedkontakt der Firma SIGMA zu verwenden, umdie Drehung des Vorderrades zu ermitteln. Die Aufnahme der Drehung geschieht hierüber das Schalten eines Reedschalters beim Vorbeiführen eines Magneten, welcher aneiner der Speichen des Vorderrades oder an einer Schraube an der Radnabe befestigtwerden kann. Alternativ ist es auch möglich, in einer der Innensechskantschraubender Bremsscheibe einen Rundmagneten zu versenken oder den Magneten an eineLeichtmetallfelge anzukleben.

ACHTUNG!Hierbei ist jedoch zu beachten, dass der Kleber eine hohe Festigkeit bietet, um einAbschleudern des Magneten zu verhindern. Ausserdem sollte das Vorderrad nachAnkleben eines Magneten mit hoher Masse neu ausgewuchtet werden, da es beiHochgeschwindigkeitsfahrten zu Vibrationen bis hin zum gefürchteten Shimmy(Lenkradflattern) führen kann.

Jonas Böttinger 13/44

Dokumentation Technikerprojekt V1.2

Abb. 8 Reedkontakt-Radlaufsensor der Firma Sigma (www.sigmasport.com)

Platinen

Die Hauptplatine trägt das Display, die Spannungsversorgung, den LPC935, eineKlemmleiste zum Anschluss der Sensoren und die für das Bussystem und denReedsensor benötigten Pullup Widerstände. Die Sensorplatinen tragen ausschließlichdie DS1621 Bausteine, deren fest verdrahtete I²C Adresse und eine Zugentlastung fürdie Anschlussleitungen. Die Platinenlayouts wurden von mir mit TARGET 3001 v14erstellt. Die Platinen entstanden im Ätzraum der Technikerschule Konstanz. Das inAbb.9 und Abb.10 dargestellte Leiterplattenlayout ist die vorerst finale Version. Ichplane allerdings, das Motorradtachometerprojekt nach Abschluss der Technikerarbeitweiter zu entwickeln, sodass man den derzeitigen Projektstand als Prototyp 1.0betrachten kann, auf dem ich je nach Zeit und natürlich auch eigenem Bedarf anFunktionen, weiter aufbauen werde. Angedacht und bereits in Bearbeitung ist z.B. eine kleinere Hauptplatine, auf der die Anschlussleiste, die Spannungsversorgung undder LPC unter das Display wandern, wodurch die Platine dann in den Außenmaßennur noch der Größe des Displays entspricht.

Jonas Böttinger 14/44

Dokumentation Technikerprojekt V1.2

Abb. 9 Bestückungsplan Hauptplatine

Abb. 10 Hauptplatine Layout

Jonas Böttinger 15/44

Dokumentation Technikerprojekt V1.2

Die Sensorplatinen wurden (um Platz und Zeit in der Herstellung zu sparen )mit festgelegter Adressierung für die DS1621 Temperatursensoren entworfen, die Adressierung reicht von 0...5 (000...101bin). Die einzelnen PCB´s des links dargestellten Nutzens tragen jeweils die Binäradresse, die das Layout dem jeweils bestückten DS1621 vorgibt. Die zusätzlichen, nicht verwendeten, Bohrungen in der Platine dienen der Zugentlastung der einzelnen Adern. Über die beiden untersten Bohrungen (hier auf Platine 100bin mit einem Verbindungsbogen markiert) kann

Abb. 11 Bestückung Sensorplatinen bei Bedarf die gesamte Leitung über einen Kabelbinder fixiert werden. Alternativ ist es auch möglich sich nur auf die Zugentlastung der Einzeladern zuverlassen und die Bohrungen zum festschrauben am Messort zu verwenden.

Die einzelnen Sensorplatinen sollten nach dem Ätzen durch Sägen, Fräsen oder Stanzen voneinander getrennt werden. Die Adressen der verwendeten Sensoren müssen im Programm des LPC 935 eingetragen werden.

Die Anschlussbelegung der hier dargestellten Sensorträgerplatinen lautet von links nach rechts GND, SCL, SDA, VCC. Natürlich ist es für den Nachbau aber auch möglich, DS1621

Abb. 12 Sensorplatine Layout Sensorbausteine auf andere Weise, z.B. nur durch Verdrahtung oder auf einer

anderen selbst erstellten Platine zu realisieren. Die Belegung der einzelnenAnschlüsse muss dann aus dem Datenblatt des DS1621 entnommen werden. DieRohdaten, Bestückungspläne und Leiterplattenlayouts des gesamten Projektes stelleich natürlich Jedem zu den im Vorwort genannten Bedingungen zu Verfügung.

Jonas Böttinger 16/44

Dokumentation Technikerprojekt V1.2

Der Projektverlauf

Als ich mich wie bereits beschrieben für ein konkretes Projekt entschieden hatte, ginges an die Realisierung. Aber wo anfangen? Von Programmierung im Allgemeinenhatte ich wenig Ahnung. Ob ich mit dem eDIP240-7 Display zurechtkommen würde,wusste ich nicht und den LPCXXX kannte ich auch nur vom Namen her. Ichbeschloss, erst einmal ins Blaue hinein vorzubereiten, wovon ich glaubte, dass es mirim späteren Projektverlauf von Nutzen sein könnte. Als erstes stellte ich mir einegrobe Liste von Baugruppen zusammen, aus denen der fertige Prototyp einmalbestehen sollte.

1. Sensorplatinen, um die Temperatursensoren fachgerecht an Busleitungenanschließen zu können.

2. Sensorleitungen. Ich musste herausfinden, welche Leitungen einerseits denBetrieb des I²C Bus ermöglichen und andererseits den Einsatz an einemMotorradmotor überstehen (Öl, Schmutz, Vibration, Temperatur).

3. Ich brauchte ein Netzteil, das die Versorgungsspannungen für die einzelnenBaugruppen des Projekts liefern konnte.

4. Eine stabile Trägerplatine für das eDIP240-7 Touchdisplay musste gefundenwerden.

5. Auch der LPC brauchte eine „Heimat“, an der ich das Bussystem, denGeschwindigkeitssensor, evtl. ein EEPROM und die Displayplatineanschließen konnte.

6. Ein Gehäuse oder eine Trägerplatte schwebte mir als Trägersystem für dieEinzelteile des Prototypen vor.

Da wir bei Herrn Sperling im Unterricht gerade angefangen hatten, uns mit demDS1621 Temperatursensor zu beschäftigen, entschloss ich mich als erstes, dieTemperatursensorträgerplatinen zu erstellen. Nach einigen Stunden am Zeichenbrett(Target 3001 v13) hatte ich eine Leiterplatte entworfen, die ich damals als erstenVersuch bezeichnete. Im Nachhinein stellte sich heraus, dass dieser (Abb. 13) wohlein Treffer war, denn die kleinen Leiterplatten erwiesen sich als äußerst praktisch undrobust. Nachdem ich zwei von ihnen mit Schrumpfschlauch ummantelt hatte,überstanden sie sogar kochendes Wasser. Für den späteren Einsatz plane ich, sie inelektrisch isolierendes 2K-Wärmeleitepoxit zu gießen. Nachdem ich die fertigenSensorträgerplatinen an der von Herrn Sperling als Übung in Auftrag gegebenenHeizungssteuerung getestet hatte, begann ich mit den ersten Versuchen, mehrereSensoren via I²C Bus an das µController Versuchsboard anzuschließen und diegemessenen Temperaturen auf dem kleinen LC-Dispay des Versuchsboardsanzuzeigen. Nachdem dies einwandfrei funktionierte, begann ich mich mit dem

Jonas Böttinger 17/44

Dokumentation Technikerprojekt V1.2

Abb. 13 Layout Sensornutzen und fertiger Sensor in Schrumpfschlauch mit Adresse 000bin beschriftet

Thema „Interrupts“ auseinander zu setzen (Abb. 14). Um die Radumdrehungen zumessen, wollte ich einen externen Interrupt des LPC verwenden, da es, würde ich dieDrehimpulse des Rades per polling überwachen, zu nicht erkannten Raddrehungenhätte kommen können, was eine korrekte Geschwindigkeitsberechnung unmöglichmachte. Da die Geschwindigkeit aus Weg pro Zeit besteht, musste ich noch einenZeittakt erzeugen. Ich entschied mich erst einmal eine Woche abzuwarten, denn dasThema „Timer“ war von Herrn Sperling für die nächsten Wochen angekündigtworden. In der Zwischenzeit stellte ich folgende Formeln zur Berechnung derGeschwindigkeit und der Wegstrecken auf :

Die so errechneten Werte sollten dann später auf dem Display angezeigt werden. Diefür die Tripmasterfunktion errechneten Kilometerstände wollte ich anschließend ineinem EEPROM speichern, damit sie nach dem Ausschalten des Gerätes erhaltenbleiben.

Jonas Böttinger 18/44

Umdrehung / s∗3600∗Radumfang /m1000

=Geschwindigkeit km /h

Umdrehungen∗Radumfang /m∗1000=gefahrene Strecke km

Dokumentation Technikerprojekt V1.2

Abb. 14 Darstellund Interrupts P89LPC935FA

TimerIch entschied mich, auch aufgrund der einfacheren Verwendung der obenaufgeführten Formel, zur timergesteuerten Erzeugung eines 10ms Taktes (100Hz),den ich per Software einmal auf einen ¼ Sekunden- (4Hz) und einmal auf einenSekundentakt (1Hz) herunter teilte. Im Viertelsekundentakt wird anhand derUmdrehungen des Rades, die auf eine Viertelsekunde errechnete Geschwindigkeit ineinem fünf Werte umfassenden Array abgespeichert. Im Sekundentakt wird dann die

Jonas Böttinger 19/44

Dokumentation Technikerprojekt V1.2

tatsächlich anzuzeigende Geschwindigkeit aus den letzten 1¼ Sekunden errechnet.Dies verhindert ein stetiges Flackern/Umspringen des Geschwindigkeitswertes beikonstant ungeraden Radumdrehungen pro Sekunde. Gleichzeitig wird deranzuzeigende Geschwindigkeitswert über 1¼ Sekunden interpoliert, was unrealistischstarke Wertesprünge in der Anzeige des Geschwindigkeitswertes verhindert. Da alleerhobenen und berechneten Werte bis zu diesem Zeitpunkt auf dem kleinen LCD(zum Schluss hin, wegen der Menge der Daten, im Sekundentakt wechselnd) desVersuchsboards angezeigt werden mussten, wurde es nun Zeit, sich um dieEinbindung des eDIP240-7 Touchdisplays zu kümmern.

Das eDIP240-7 Taochdisplay oder„Eine teure Methode sich mit einfachsten Mitteln das Leben schwer zu machen“

Zum Einstieg und zur Vorbereitung las ich mir mehrfach das Datenblatt deseDIP240-7(www.lcd-module.de) durch. Da ich schon die Temperatursensoren via I²CBus eingebunden hatte, bot es sich an, auch das Display über den I²C Bus zu steuern.Also entwarf ich eine Trägerplatine (Abb. 15.1), die

1. das Display mit den benötigten 5V versorgte,2. die äußere Beschaltung zur Einstellung des I²C Bus Modus am Display (siehe

datenblatt) realisierte,3. dem Display eine feste Unterlage bot,4. die notwendigen Busleitungen (SCL, SDA) zum Anschluss an den LPC

herausführte.

Außerdem, sah ich auf der nun zu erstellenden Leiterplatte gleich noch ein externesEEPROM (M24C04) vor, so musste ich dieses später nicht einzeln anbinden. Um denspäteren Versuchsaufbau zu beschleunigen, wählte ich 7 polige mini-DIN Buchsen,an die ich verschieden adressierte Temperatur- und Radlaufsensoren einsteckenkonnte. Es entstand also die erste Trägerplatine für das Display (Abb. 15.1).

Abb. 15 Touchdisplay Front- und Rüchansicht

Jonas Böttinger 20/44

Dokumentation Technikerprojekt V1.2

Abb. 15.1 Erster Aufbau der Displayträgerplatine noch mit selbst erstellten Netzteilen (unten rechts und Mitte),einem externen EEPROM (links) und mini-DIN Steckern (rechter Rand)

Die Kommunikation P89LPC935FA<-->eDIP240-7 Touchdisplay

Nachdem tagelange Versuche das Display zuerst über den I²C Bus, später über denSPI Bus anzusprechen scheiterten, blieb einzig die serielle Schnittstelle, um Daten andas eDIP240-7 zu senden. Zur Befehlserkennung und zur Datenübermittlungverwendet das eDIP240-7 ein sogenanntes Smart Protokoll. Dies bedeutet, dass jedergültige Terminalbefehl (siehe Datenblatt eDIP240-7 www.lcd-module.de) vor demVersenden via serieller Schnittstelle in ein Smart Protokoll „Paket“ verwandeltwerden muss. Die maximale Paketlänge ist hierbei auf 64 Byte beschränkt. DieSoftwarefunktion, die dieses „Einpacken“ erledigt, wird später im Kapitel Softwarenoch einmal eingehend beschrieben. Um Touchereignisse des Displays an den LPC935 zurück zu senden, werden vierPortleitungen verwendet, von denen eine (OUT4 siehe Abb. 16) am LPC935 einenexternen Interrupt auslöst, woraufhin dieser dann die Zustände der restlichenPortleitungen (OUT1...3 siehe Abb. 16) auswertet und somit acht (2³) verschiedeneTouchereignisse erkennen kann. Mit einer möglichen Erweiterung dieser Methode

Jonas Böttinger 21/44

Dokumentation Technikerprojekt V1.2

auf die sieben zur Verfügung stehenden Portleitungen ließen sich so 64 verschiedene Touchereignisse unterscheiden.Nachdem der LPC die Zustände der Portleitungen ausgewertet hat, sendet er via serieller Schnittstelle an das Display eine Kette von Befehlen, die den Signalzustand der Portleitungen und die gesetzte Interruptleitung zurüchsetzen.

Abb. 16 Portleitungen eDIP240-7 Im folgenden Kommunikationsbeispiel (Abb. 17) wird in einem kleinen

Ausschnitt dargestellt, was an Kommunikation zwischen LPC und Display abläuft,wenn z.B. das Touchfeld „Dunkler“ berührt wird (ab Zeile 3, Abb. 17). DerNormalablauf der Kommunikation ohne Touchereignis besteht aus der Übergabe deranzuzeigenden Werte des LPC an das Display, ein mal pro Sekunde.

1 P89LPC935FA Anzeigedaten serielle Schnittstelle -----> eDIP240-7

2 P89LPC935FA Anzeigedaten serielle Schnittstelle -----> eDIP240-7

3 P89LPC935FA Anzeigedaten serielle Schnittstelle -----> eDIP240-7

4 P89LPC935FA <----- Portleitungen Touchereignis eDIP240-7

5 P89LPC935FA <----- Portleitungen Interrupt eDIP240-7

6 P89LPC935FA Portresetbefehl serielle Schnittstelle -----> eDIP240-7

7 P89LPC935FA Beleuchtungswert serielle Schnittstelle -----> eDIP240-7

8 P89LPC935FA Display löschen serielle Schnittstelle -----> eDIP240-7

9 P89LPC935FA Anzeigemakro serielle Schnittstelle -----> eDIP240-7

10 P89LPC935FA Anzeigedaten serielle Schnittstelle -----> eDIP240-7

11 P89LPC935FA Anzeigedaten serielle Schnittstelle -----> eDIP240-7Abb. 17 Kommunikationsbeispiel

Wie in Abb.17 zu erkennen, wird durch die Berührung eines der Touchfelder desDisplays die normale Kommunikation kurze Zeit unterbrochen (Zeile 4 Abb. 17) undnach Abarbeitung des Ereignisses wieder aufgenommen (Zeile 10 Abb. 17). DieseUnterbrechung dauert nur ein paar hundert Millisekunden, weshalb für den Bedienerder Eindruck entsteht, der Bildschirminhalt bliebe unverändert, nur dieBeleuchtungsstärke habe abgenommen.

Jonas Böttinger 22/44

Dokumentation Technikerprojekt V1.2

Insgesamt habe ich ca. 375 größtenteils schöne Stunden mit der Technikerarbeitverbracht. Weniger erfreulich sind die entstandenen Kosten.

Kostenaufstellung Technikerarbeit Elektronic Assembly eDIP240-7 kit + USB-Programmieradapter 199,00 €

P89LPC935FA 2,93 €

PLCC28 Sockel 0,41 €

2x Aimtec DC/DC Wandler 10,50 €

3x DS1621 Temperatursensoren 15,66 €

Sigma Radlaufsensor 0,00 €

2x 1X20 Buchsenleisten 0,00 €

Kleinteile (5 Wiederstände, Leitungen, 3 Kondensatoren) 5,00 €

Gesamtkosten 233,50 €

Jonas Böttinger 23/44

7520%

10027%

359%

9525%

7019%

Zeitaufwand der Technikerarbeit in Stunden/Prozent

Softwareentwick-lung LPCSoftwareentwick-lung eDIP240-7Hardware entwerfen und erstellenInformations-beschaffungKommunikation zwischen eDIP240 und LPC

Dokumentation Technikerprojekt V1.2

Installations- und Bedienungsanleitung

Die Installation des touchdisplaygesteuerten Motorradtachometers gestaltet sicheinfach und ist auch ohne großen Sachverstand zu erledigen.

Installation der Temperatursensoren Die drei Temperatursensoren werden mit 2K-Wärmeleitepoxit an die Messstellengeklebt. Um die Öltemperatur aufzunehmen, bietet es sich an, den entsprechendenSensor (egal ob Trocken- oder Naßsumpfschmierung) an der Ölpumpe anzubringen.Der Wassersensor kann am Eingang der Kühlwasserpumpe angeklebt werden, undder Außentemperatursensor ist irgendwo am Rahmen fernab des Motors und den sichim Betrieb erwärmenden Lager gut aufgehoben. Er muss nicht angeklebt werden.Installationsvorschläge siehe Abb. 18.

Abb. 18 Installationsvorschläge für die DS1621 Temperatursensoren

Installation des Sigma RadrehzahlaufnehmersDer Sigma Reedschalter wird einfach mit einem O-Ring an einem der Gabelholmeder Vordergabel des Motorrads befestigt(Abb. 20). Der Magnet wird, wie im BereichHardware beschrieben, entweder an eine Speiche geklebt oder geclipt (Abb. 19)

Abb.19 Anbringung des Sigma Raddrehzahlaufnehmers

Jonas Böttinger 24/44

Dokumentation Technikerprojekt V1.2

Installation des Displays Das Display kann je nach Platz und Geschmack des Fahrers im Cockpit überall imSichtfeld des Piloten angebracht werden. Es ist zu beachten, dass das Display gut mitden Fingern zu erreichen sein sollte, um die Touchfunktion nutzen zu können. (Abb. 20)

Abb. 20 Anbaubeispiel an einer Yamaha XTZ660 Tenere. Hier noch ohne Gehäuse

Anschließen des DisplaysUm das Tachometer in Betrieb zu nehmen, muss es nun nur noch nach derAnschlusstabelle (Abb.21) angeschlossen werden. Die Anschlüsse 1 (+12V) und 2(GND) dienen der Spannungsversorgung des Tachometers. An die Anschlüsse 3 und4 wird der Sigma Raddrehzahlaufnehmer angeschlossen. Die Polung ist beliebig. DieAnschlüsse 5...8 sind für die Verbindung jeglicher I²C Busteilnehmer (in diesem Falldie DS1621) geeignet.

Anschlussnummer Bezeichnung Funktion

1 12V Versorgungsspannung. Geschaltene Betriebsspannung desMotorrads. Kann am Zündschloss abgegriffen werden.

2 GND Masse. An Batteriemasse oder Rahmen anschließen.

3 Sigma Eine Leitung des Radlaufsensors. Polung beliebig.

4 Sigma Die andere Leitung des Radlaufsensors. Polung beliebig.

5 5V Versorgungsspannung (VCC) der I²C Busteilnehmer.

6 SDA I²C Bus Datenleitung.

7 SCL I²C Bus Taktleitung.

8 GND Versorgungsspannung (GND) der I²C Busteilnehmer.

Abb. 21 Anschlussbelegung Klemmleiste

Jonas Böttinger 25/44

Dokumentation Technikerprojekt V1.2

Bedienungsanleitung

Die Bedienung und das Ablesen der Werte des Tachometers gestaltet sich sehreinfach. Hier anhand Abb. 22 eine kurze Funktionsbeschreibung. Im großen mit „km/h“ gekennzeichneten Feld links oben wird die gemessene Geschwindigkeit angezeigt.Wird keine Geschwindigkeit gemessen, so bleibt die Anzeige leer. Rechts neben derGeschwindigkeitsanzeige befindet sich der dreistellige Tripmaster (erweiterterTageskilometerzähler). In den drei mit „km“ bezeichneten Zeilen wird diezurückgelegte Strecke seit dem letzten Wertreset angezeigt. Die Streckenwerte lassensich reseten, indem man mit dem Finger, dem Handschuh oder einem anderenGegenstand den Kilometerwert berührt, den man löschen will. Während derBerührung leuchtet kurz ein weiß hinterlegtes „Reset“ auf. Wird das Touchfeldwieder losgelassen, so erscheint, wie auch hier dargestellt, das „km“. Kilometerwertewerden erst wieder angezeigt, wenn mindestens 1 km zurückgelegt ist. Unter denbeiden eben beschriebenen Anzeigegruppen befinden sich die Anzeigefelder „°C Oil“(Öltemperatur), „°C Wat“ (Wassertemperatur) und „°C Air“ (Außentemperatur). Hierwerden die von den drei Temperatursensoren gemessenen Werte in °C angezeigt. Inder untersten Tastenzeile befinden sich drei Steuertasten.Über die mit „Heller“ und„Dunkler“ bezeichneten Touchfelder lässt sich die Hintergrundbeleuchtung desDisplays in 10 Stufen von 10...100% einstellen. Ein Druck auf die mit „Inv.“beschriftete Taste bewirkt eine Invertierung der gesamten Anzeige.

Abb. 22 Leeres Display ohne Werte

Jonas Böttinger 26/44

Dokumentation Technikerprojekt V1.2

Die Software

Die von mir erstellte und hier beschriebene Software gliedert sich in zwei Bereiche.Zum einen in die in C geschriebenen Quelltexte zum Betrieb des µControllers. DieseTexte umfassen das Messen, Auslesen, Berechnen und Versenden von Werten. Zumanderen in das in der EADisplay-Sprache geschriebene Programm auf der Logik deseDIP240-7, welches Portsetzbefehle und Anzeigemakros enthält. Die gesamteSoftware liegt dieser Dokumentation auf einem Datenträger bei. Teile der Softwarestammen nicht aus meiner Feder, sondern sind aus von Herrn Sperling im Unterrichtbereitgestellter Treibersoftware entnommen. Speziell genannt seien hier der I²CSoftwaretreiber und die Quelltextpassagen, die ich nutze, um das interne EEPROManzusprechen. Alle hier nachfolgend beschriebene Software stammt von mir.

Funktionen µController

Serieller Interrupt Diese Funktion empfängt das vom eDIP240-7 nach jedem gültigen Datenempfanggesendete ACK (0x06h), ohne zu speichern. Nach dem Empfang wird dasEmpfangsflag rückgesetzt.

Abb. 23 Struktogramm serieller Interrupt

Funktion Bright (char)Die Funktion Bright fügt den übergebenen Beleuchtungswert in den BefehlsstringSET_Bright ein.

Abb. 24 Struktogramm Bright

Jonas Böttinger 27/44

void Bright (char br)

In den Befellsstring Set_Bright wird die an die Funktion übergebene Helligkeit eingefügt

Serieller Interrupt void Int_Ser(viod)

J Nist das Empfangsflag gesetzt?

das Empfangsflag wird rückgesetzt

Dokumentation Technikerprojekt V1.2

Funktion PlaceValue (char, char)Die Funktion PlaceValue trägt die X und Y Koordinaten in die BefehlsstringsSET_LValue, SET_CValue und SET_RValue ein. Über diese Koordinaten wirdausgewählt, wo der an das Display gesendete Wert angezeigt werden soll.

Abb. 25 Struktogramm PlaceValue

Funktion SET_Font (char)Die Funktion SET_Font schreibt den übergebenen Wert in den Befehlsstring Font

Abb. 26 Struktogramm SET_Font

Funktion TerminalDC1 (char*)Die Funktion TerminalDC1 ist eine der Schlüsselfunktionen des gesamten Projekts.Hier werden die, von den Funktionen fillout und filloutValue in den outstringaneinandergereihten Terminalbefehle, in das von eDIP240-7 erwartete SmartProtokoll umgesetzt und anschließend gesendet.Wie im nachfolgenden Struktogrammdargestellt, wird der outstring erstmal auf seine Länge überprüft. Anschließend wirder um zwei Stellen in Richtung Stringende verschoben, um Platz für den „Kopf“ desSmart Protokolls zu schaffen. Dieser „Kopf“ besteht aus der Befehlsebene, in diesemFall DC1 und der Länge des folgenden Bytestrangs. Anschließend wird über dasgesamt zu sendende Datenpaket eine Prüfsumme gebildet. Die Prüfsumme wird dannvor dem Senden des Datenstrangs hinten angehängt. Nach dem Senden der Datenwird der outstring mit 0x00h initialisiert. Abb. 27.

Jonas Böttinger 28/44

void PlaceValue (char x, char y)

In den String Set_LValue wird die übergebene X-Variable übergeben.

In den String Set_CValue wird die übergebene X-Variable übergeben.

In den String Set_RValue wird die übergebene X-Variable übergeben.

In den String Set_LValue wird die übergebene Y-Variable übergeben.

In den String Set_CValue wird die übergebene Y-Variable übergeben.

In den String Set_RValue wird die übergebene Y-Variable übergeben.

Set_Font (char nr)

Die gewählte Schriftnummer wird in den Schriftbefehlsstring eingefügt

Dokumentation Technikerprojekt V1.2

Abb. 27 Auszug aus dem Datenblatt des eDIP240-7 Smart Protokoll

Durch das Schließen des Jumpers J2 kann die Verwendung des Smart Protokollsausgeschaltet werden. Ich entschied mich, dies nicht zu tun, da man durch dieVerwendung des Smart Protokolls eine hohe Datensicherheit erhält. Wenn derEmpfänger des eDIP240-7 ohne Verwendung des Smart Protokolls aus dem Taktkommt, bricht der sinnvolle Datenaustausch ab und das Display füllt dieTerminalanzeige mit sinnlosen kryptischen ASCII-Zeichen.

Abb. 27.1 Aufbau eines Smart Protokoll Pakets

Jonas Böttinger 29/44

Dokumentation Technikerprojekt V1.2

Abb. 28 Struktogramm TerminalDC1

Funktion fillout (char)Die Funktion fillout fügt den ihr aus dem XData oder dem Codespeicher übergebenenBefehlsstring in den outstring. Erst wird der outstring auf seine Länge überprüft,anschließend wird der Befehl in den String geschrieben. Stehen im outstring bereitsBefehle, wird der neue Befehl hinten angehängt. Abb. 29.

Jonas Böttinger 30/44

TerminalDC1 (char* out)

Die am Ende des Befehls zu übergebende Prüfsumme wird zurückgesetzt

Die Zählvariable "i" wird mit 0 initialisiert

Solange der inhalt des Outstrings nicht "0x00" ist

Die Länge des Befehlsstrings wird in Abhängigkeit des IfVal Flag mit "i" oder "i+1" gespeichert

Die Zählvariable "i" wird mit 48 initialisiert

Solange "i" größer oder gleich 0

Die erste Stelle des Befehlsstrings wird mit dem DC1 Befehl (0x11) gefüllt

Die zweite Stelle des Befehlsstrings wird mit der Länge des Befehls gefüllt

Die Zählvariable "i" wird mit 0 initialisiert

Solange die Zählvariable "i" kleiner Befehlslänge plus zwei

Prüfsumme wird mit der Prüfsumme modulo 256 gefüllt

Die Prüfsumme wird ans Ende des Befehls geschreiben

Die Zählvariable "i" wird mit 0 initialisiert

Solange die Zählvariable "i" kleiner Befehlslänge plus drei

Das Flag, das anzeigt, ob der Befehl Werte enthielt, wird zurückgesetzt

Die Zählvariable "i" wird mit 0 initialisiert

Solange "i" kleiner 64 ist

Die mit "i" bezeichnete stelle des Outstrings wird mit "0x00" überschrieben

Die Zählvariable "i" wird inkrementiert

Sendebuffer wird der mit "i" bezifferten Stelle des Befehlsstrings gefüllt

Solange das Sendeflag nicht gesetzt ist

Sendeflag wird zurückgesetzt

Die Zählvariable "i" wird inkrementiert

Prüfsumme wird um die mit der Zählvariablen bezeichneten Stelle im Befehlsstring erhöht

Die Zählvariable "i" wird inkrementiert

Die einzelnen Zeichen des Befehlsstrings werden um 2 Stellen nach rechts verschoben

Die Zählvariable "i" wird dekrementiert

Die Zählvariable "i" wird inkrementiert

Dokumentation Technikerprojekt V1.2

Abb. 29 Struktogramm fillout

Funktion SET_Makro (char)In der Funktion SET_Makro wird die übergebene Makronummer in dieMakrobefehle für Normal-, Touch- und Menümakros geschrieben.

Abb. 30 Struktogramm SET_Makro

Funktion Bit (char)Hier wird das anzusprechende Portbit des eDIP240-7 ausgewählt.

Abb. 31 Struktogramm Bit

Funktion Portreset ()Die Funktion Portreset dient dazu, nach einem Touchereignis, welches überPortleitungen an den LPC mitgeteilt wurde, das Display anzuweisen, diePortleitungen wieder zurückzusetzen. Zuerst werden die Signalportleitungenzurückgesetzt (High), dann die Interruptportleitung. Abb. 32.

Jonas Böttinger 31/44

fillout (char*fil)

Die Zählvariable "i" wird mit 0 initialisiert

Solange der inhalt des Outstrings nicht "0x00" ist

Die Länge des Befehlsstrings wird gespeichert

Die Zählvariable "i" wird mit 0 initialisiert

Solange das Stringende des Befehlsstrings nicht erreicht ist und "i" kleiner 50 ist

der Outstring wird mit dem nächsten Zeichen des Befehls gefüllt

Die Zählvariable "i" wird inkrementiert

Die Zählvariable "i" wird inkrementiert

Set_Makro (char nr)

Der N_Makro Befehlsstring wird mit dem übergebenen Wert gefüllt

Der T_Makro Befehlsstring wird mit dem übergebenen Wert gefüllt

Der M_Makro Befehlsstring wird mit dem übergebenen Wert gefüllt

Bit (char)

SET_Bit und INV_Bit werden mit der übergebenen Variablen gefüllt

Dokumentation Technikerprojekt V1.2

Abb. 32 Struktogramm Portreset

Fuktion REC_Port ()Die Funktion REC_Port wertet, aufgerufen durch ein externes Interruptereignis, denÜbergabewert der Portleitungen OUT1...3 aus und schreibt den ermittelten Wert indie Variable IN_Port.

Abb. 33 Struktogramm REC_Port

Funktion BrightUp ()Die Funktion BrightUp ermittelt den aktuellen Beleuchungswert derHintergrundbeleuchtung des Displays. Ist der Wert kleiner 91%, wird er um 10%erhöht und der neue Beleuchtungswert wird an das Display übermittelt.

Jonas Böttinger 32/44

Portreset

Die Zählvariable "r" wird mit 1 initialisiert

Solange "r" kleiner 5

TerminalDC1 (outstring)

Bit (r)

fillout (SET_Bit)

Zählvariable "r" inkrementieren

REC_Port

Variable In_Port wird mit 0x00h initialisiert

J NIst In1 high

J NIst In2 high

J NIst In3 high

Variable IN_Port wird um 4 erhöht

Variable IN_Port wird um 2 erhöht

Variable IN_Port wird um 1 erhöht

Dokumentation Technikerprojekt V1.2

Abb. 34 Struktogramm BrightUp

Funktion BrightDown ()Die Funktion BrightDown ermittelt den aktuellen Beleuchungswert derHintergrundbeleuchtung des Displays. Ist der Wert größer 10%, wird er um 10%verringert, und der neue Beleuchtungswert wird an das Display übermittelt.

Abb. 35 Struktogramm BrightDown

Funktion FloatToASCII (float, char)In der Funktion FloatToASCII werden vom µController berechnete Floatwerte (z.B.Geschwindigkeitswerte, Kilometerwerte) in einen String mit ASCII Zahlenwertenumgesetzt. Der Floatwert wird zunächst durch eine Million geteilt. Das Ergebnisdieser Division wird in der ersten Stelle des Ergebnisstrings gespeichert.Anschließend wird die Multiplikation der Million mit dem ersten Wert desErgebnisstrings vom Floatwert abgezogen. Dann wird der verbleibende Floatwertdurch hunderttausend dividiert und das Ergebnis in die zweite Stelle desErgebnisstrings gespeichert. Nun wird das Ergebnis der Multiplikation aus

Jonas Böttinger 33/44

Brightup

J NWenn der Helligkeitswert kleiner 91 ist

Bright (BrightVal)

fillout (BrightVal)

SET_Makro (0x00)

fillout(N_Makro)

TerminalDC1 (output)

Helligkeitswert wird um 10 erhöht

Brightup

J NWenn der Helligkeitswert größer 10 ist

Bright (BrightVal)

fillout (BrightVal)

SET_Makro (0x00)

fillout(N_Makro)

TerminalDC1 (output)

Helligkeitswert wird um 10 gesenkt

Dokumentation Technikerprojekt V1.2

hunderttausend und der zweiten Stelle des Ergebnisstrings vom Floatwert abgezogenusw.. So erhält man z.B. aus dem Floatwert 123.4 den Ergebnisstring{0x00,0x00,0x00,0x01,0x02,0x03}. Nachkommastellen werden abgeschnitten.Anschließend werden die Werte auf darstellbaren ASCII-Code angepasst, indem zujedem Wert „0x30h“ addiert wird. Aus {0x00,0x00,0x00,0x01,0x02,0x03} wird{0x30,0x30,0x30,0x31,0x32,0x33}. Nun werden durch Linksverschiebung, noch dieführenden Nullen abgeschnitten. Man erhält einen Zahlenstring, der via seriellerSchnittstelle versandt werden kann.

Abb. 36 Struktogramm FloatToASCII

Funktion SET_Speed (float)Die Funktion SET_Speed bekommt den Geschwindigkeitswert übergeben und gibtdiesen auf das Display aus. Die Schriftart der Geschwindigkeitsanzeige wird gewählt,der Anzeigeort wird festgelegt, der alte Geschwindigkeitswert wird gelöscht und dieUmwandlung des Floatwertes in eine Reihe ASCII-Zeichen wird veranlasst.

Jonas Böttinger 34/44

FloatToASCII (float FloatValue, char* erg)

Variablen "i2" und "mul" deklarieren

Laufvariable "i" wird mit 0 initialisiert

Solange "i" kleiner 10

Laufvariable "i" wird mit 0 initialisiert, die Teilervariable "mul" wird mit 1000000 initialisiert

Solange "i" kleiner 7

Laufvariable "i" wird mit 0 initialisiert

Solange die mit "i" bezeichnete Stelle des Ergebnisstrings 0x30h ist und "i" kleiner 10 ist

Laufvariable "i2" wird mit 0 initialisiert

Solange "i2" kleiner 7

Der Ergebnisstring wird um "i" nach links verschoben

Laufvariable "i" wird inkrementiert

Laufvariable "i" wird inkrementiert

Die mit "i" bezeichnete Stelle des Ergebnisstrings wird mit der Division von "FloatVal" durch"mul" gefüllt

Die in den Ergebnisstring eingetragene Summe wird von der Startsumme abgezogen

die Ergebnisstelle wird um 0x30h erhöht um den Zeichenwert auf ASCII-Niveau anzuheben

"mul" wird durch 10 geteilt

Laufvariable "i" wird inkrementiert

Die mit "i" bezeichnete Stelle des Ergebnisstrings wird mit 0 überschrieben

Laufvariable "i" wird inkrementiert

Dokumentation Technikerprojekt V1.2

Anschließend wird der mit den vorbereiteten und angepassten Terminalbefehlengefüllte outstring zur Sendung an die Funktion TerminalDC1 übergeben.

Abb. 37 Struktogramm SET_Speed

Funktion SET_TripDa es zu jedem der drei Tripwerte eine eigene Funktion gibt, sich diese Funktionenaber bis auf die Offsetwerte gleichen, wird hier als Beispiel nur eine beschrieben. DieFunktion SET_Trip bekommt den Streckenwert übergeben und gibt diesen auf dasDisplay aus. Die Schriftart der Kilometeranzeige wird gewählt, der Anzeigeort wirdfestgelegt und der alte Kilometerwert wird überschrieben. Die Umwandlung desFloatwertes in eine Reihe ASCII-Zeichen wird veranlasst. Anschließend wird der mitden vorbereiteten und angepassten Terminalbefehlen gefüllte outstring zur Sendungan die Funktion TerminalDC1 übergeben.

Abb. 38 Struktogramm SET_Trip

Jonas Böttinger 35/44

Set_Speed (float speed)

Eine Floatvariable wird mit dem Übergabewert geladen

SET_Font (0x07)

fillout (Font)

PlaceValue (130,7)

fillout (CLR_Speed)

fillout (SET_RValue)

FloatToASCII (Floatvariable, Value)

filloutValue (Value)

TerminalDC1 (output)

Set_Trip (float trip)

Eine Floatvariable wird mit dem Übergabewert geladen

SET_Font (0x06)

fillout (Font)

PlaceValue (210,4)

fillout (SET_RValue)

FloatToASCII (Floatvariable, Value)

filloutValue (Value)

TerminalDC1 (output)

Dokumentation Technikerprojekt V1.2

Funktion SET_TempDa es zu jedem der drei Temperaturwerte eine eigene Funktion gibt, sich dieseFunktionen aber bis auf die Offsetwerte gleichen, wird hier als Beispiel nur einebeschrieben. Die Funktion SET_Temp bekommt den Temperaturwert übergeben undgibt diesen auf das Display aus. Die Schriftart der Temperaturanzeige wird gewählt,der Anzeigeort wird festgelegt, der alte Temperaturwert wird überschrieben und dieUmwandlung des Floatwertes in eine Reihe ASCII-Zeichen wird veranlasst.Anschließend wird der mit den vorbereiteten und angepassten Terminalbefehlengefüllte outstring zur Sendung an die Funktion TerminalDC1 übergeben.

Abb. 39 Struktogramm SET_Temp

Externer Interrupt DisplayDie Interruptroutine interpretiert nach der fallenden Flanke des externen Interruptsdie an Portpins anliegende Information. Hier wird in Abhängigkeit der Porteingängedie zugehörige Funktion aufgerufen. Dann werden die Porteitungen des Displaysrückgesetzt. Anschließend wird das Bild des Displays neu aufgebaut.

Jonas Böttinger 36/44

Set_Temp ()

Eine Floatvariable wird mit dem Temperaturwert geladen

SET_Font (0x06)

fillout (Font)

PlaceValue (194,80)

fillout (SET_RValue)

FloatToASCII (Floatvariable, Value)

filloutValue (Value)

TerminalDC1 (output)

Dokumentation Technikerprojekt V1.2

Abb. 39 Stuktogramm externer Interrupt Display

Funktion GETandSET_TempsIn dieser Funktion werden die Temperaturen aus den DS1621 Temperatursensorenausgelesen und zur Anzeige an das Display gesendet.

Jonas Böttinger 37/44

v_int1

REC_Port ()

J NIst IN_Port 1

J NIst IN_Port 2

J NIst IN_Port 3

J NIst IN_Port 4

J NIst IN_Port 5

Portreset()

SET_Temp1()

SET_Temp2()

SET_Temp3()

SET_Speed()

BrightDown()

BrightUp ()

Trip 3 rücksetzen

Trip 2 rücksetzen

Trip 1 rücksetzen

Dokumentation Technikerprojekt V1.2

Abb. 40 Stuktogramm GETandSET_Temps

Externer Interrupt RadlaufsensorBei jedem Radumlauf werden vier Werte inkrementiert.

Abb. 41 Struktogramm externer Interrupt Radlaufsensor

TimerinterruptDer Timer 1 zählt in 10ms Schritten jeweils auf ¼ Sekunde bzw. Sekunde und setztSekunden- und Viertelsekundenflags, die aus einer Dauerschleife im Hauptprogrammausgewertet und rückgesetzt werden.

Jonas Böttinger 38/44

GETandSET_Temps

Adresse des anzusprechenden Temperatursensors wird ausgewählt

rdtemp(&temparray, devicenummer)

Temperaturwert wird in "wert" gespeichert

Kommawert wird ausgewertet

Temperaturwert wird zwischengespeichert

SET_Temp1 (Temperaturwert)

Adresse des anzusprechenden Temperatursensors wird ausgewählt

rdtemp(&temparray, devicenummer)

Temperaturwert wird in "wert" gespeichert

Kommawert wird ausgewertet

Temperaturwert wird zwischengespeichert

SET_Temp2 (Temperaturwert)

Adresse des anzusprechenden Temperatursensors wird ausgewählt

rdtemp(&temparray, devicenummer)

Temperaturwert wird in "wert" gespeichert

Kommawert wird ausgewertet

Temperaturwert wird zwischengespeichert

SET_Temp3 (Temperaturwert)

v_Int0

Umdrehungszähler inkrementieren

Trip1 inkrementieren

Trip2 inkrementieren

Trip3 inkrementieren

Dokumentation Technikerprojekt V1.2

Abb. 42 Struktogramm Timer 1

Das HauptporgrammDas Hauptprogramm startet mit der Initialisierung der Ports, der Einstellung derInterrupts und der allgemeinen Interruptfreigabe. Dann werden der outstring und derWertestring mit „0x00“ initialisiert. Anschließend wartet der LPC eine Sekunde ab,um dem eDIP240-7 die nötige Zeit zum Hochfahren zu verschaffen, bevor die serielleSchnittstelle des LPC konfiguriert und in Betrieb genommen wird. Nachdem eineAnzeigeinitialisierung an das Display gesendet ist, werden die DS1621Temperatursensoren konfiguriert. Die Kilometerwerte des Dreifachtripmasterswerden aus dem EEPROM gelesen und in das zugehörige Wertearray geschrieben.Das Hauptprogramm führt von diesem Zeitpunkt eine Dauerschleife aus, die

1. die Kilometerwerte fortlaufend neu berechnet,2. in Abhängigkeit des ¼ Sekundenflags die Geschwindigkeit berechnet und

interpoliert,3. in Abhängigkeit des Sekundenflags die Anzeigefelder des Displays aktualisiert,4. die neu ermittelten Kilometerwerte des Dreifachtripmasters ins EEPROM

schreibt.

Diese Dauerschleife wird im Normalbetrieb nur noch durch den Timerinterrupt oderdie beiden externen Interrupts (Radlaufsensor oder Displaytouchereignis)unterbrochen.

Jonas Böttinger 39/44

v_timerInt

Reloadwerte für Timer auf 10ms Stellen

"ccount" inkrementieren

"ccount1" inkrementieren

J Nist "ccount" gleich "sec" (ist die Sekunde um)

J N

ist "ccount1" gleich "sec/4" (ist eine viertel Sekundeum)

"ccount1" rücksetzen

Viertelsekundenflag setzen

"ccount" rücksetzen

Sekundenflag setzen

Dokumentation Technikerprojekt V1.2

Abb. 43 Struktogramm Hauptprogramm

Jonas Böttinger 40/44

main

Ports konfigurieren

Interrupts einstellen und initialisieren

Alle Interrupts freigeben

Die Zählvariable "i" wird mit 0 initialisiert

Solange "i" kleiner 64 ist

Die Zählvariable "i" wird mit 0 initialisiert

Solange "i" kleiner 10 ist

Warten bis das Sekundenflag das erste mal gesetzt wird

Sekundenflag zurücksetzten

Voreinstellungen der seriellen Schnittstelle vornehmen

Seriellen Interrupt freigeben

EEPROM Chipadresse wählen

liesEA (tripwerte aus dem EEPROM lesen)

SET_Makro (0x00)

filloutValue (N_Makro)

TerminalDC1 (output)

Konfigurationswort auf 0x02 setzen

Nummer der Sensoren einstellen

wrconfig (Bausteine konfigurieren)

wrcommand (kontinuierliche Messung starten)

Laufvariable "ucx" wird mit 0 initialisiert

solange "ucx" kleiner 12

Dauerschleife

Tripwerte berechnen

J NIst das Sekundenflag aktiv?

J NIst das Viertelsekundenflag aktiv?

Laufvariable "ucx" mit 0 initialisieren

Solange "ucx" kleiner 12

EEPROMwrite (Tripwerte werden fortlaufend ins EEPROM gespeichert)

GETandSET_Temps ()

SET_Speed ()

SET_Trip1 ()

SET_Trip2 ()

SET_Trip3 ()

Viertelsekundenflag rücksetzen

Geschwindigkeitswerte über die letzten 5 Werte interpolieren und abspeichern

Sekundenflag rücksetzen

Werte werden byteweise aus dem Lesepuffer über die Tripwerte geschrieben

Die Zählvariable "ucx" wird inkrementiert

Die mit "i" bezeichnete Stelle des Valuestrings wird mit "0x00" überschrieben

Die Zählvariable "i" wird inkrementiert

Die mit "i" bezeichnete Stelle des Outstrings wird mit "0x00" überschrieben

Die Zählvariable "i" wird inkrementiert

Dokumentation Technikerprojekt V1.2

Software eDIP240-7

Die Programmiersprache des eDIP240-7 basiert auf Makros. Nach dem Einschaltenwird ein PowerOnMakro ausgeführt. Von diesem Zeitpunkt an wartet derDisplaycontroller auf das Aufrufen eines weiten Makros. Makros können durchTouchereignisse oder Terminalbefehle ausgelöst werden. Hier eine Liste der Makrosdie im vorliegenden Projekt verwendung fanden.

MnPowerOn = 0ButtonPress = 1ButtonUp = 2Tripreset1 = 3Tripreset2 = 4Tripreset3 = 5

TempTouch1 = 11TempTouch2 = 12TempTouch3 = 13BrightTouchUp = 14BrightTouchDown = 15BrightTouch = 16INV = 17 Kilometer = 18TempWat = 19TempOil = 20

Abb. 44 Liste der verwendeten Makros

Um mehr als die Standardschriften zur Anzeige verwenden zu können, müssen vorAusführung des PowerOnMakros noch externe Fonts eingebunden werden. DieFont-Dateien sollten nach Möglichkeit im Ordner des zu kompilierendenQuelltextes liegen, andernfalls muss der Pfad des Fontordners angegeben werden.

;PATH: <..\..\FONTS\>FONT: 6 , <geneva18.FXT> FONT: 7 , <BIGZIF57.FXT>FONT: 8 , <6x8.FXT>FONT: 9 , <Times26.FXT>

Abb. 45 Einbindung zusätzlicher Schriftarten

Jonas Böttinger 41/44

Dokumentation Technikerprojekt V1.2

Aus Makros heraus können andere Makros gestartet oder Touchfelder definiertwerden, die Makros auslösen. Im Nachfolgenden Quelltextauszug (Abb.46) einesPowerOnMakros werden mehrere Touchfelder definiert, die wiederum Makrosstarten (Abb.47).

PowerOnMakro : ; wird nach dem Einschalten ausgeführt #MN MnPowerOn

MAKRO: MnPowerOn ; Power-On/Reset Makro #AF 6 #TC 0 #AT 1, 1, 150 , 75, ButtonPress, ButtonUp " "

#AF 6 #TC 0 #AT 152 , 1, 238 , 24, Tripreset1, ButtonUp "R km "

#AF 6 #TC 0 #AT 152 , 26, 238 , 49, Tripreset2, ButtonUp "R km ".........

Abb. 46 Auszug aus PowerOnMakro

TouchMakro : ButtonPress #ZF 1 #ZL 5, 20, "" #YW 1, 0 #YW 2, 0 #YW 3, 0 #YW 4, 0

Abb. 47.1 TouchMakro ButtonPress

Jonas Böttinger 42/44

Dokumentation Technikerprojekt V1.2

TouchMakro : ButtonUp

#MN MnPowerOn Abb. 47.2 TouchMakro ButtonUp führt Normalmakro MnPowerOn aus

TouchMakro : Tripreset1 #RL 153 , 2, 237 , 22 #ZF 6 #ZL 170 , 5 "Reset" #YW 1, 1 #YW 2, 0 #YW 3, 0 #YW 4, 0

Abb. 47.3 TouchMakro Tripreset1 zeichnet das Resetfeld und setzt die Portleitungen

Sich in die Programmiersprache des eDIP240-7 einzuarbeiten dauert anfangs zwarEtliches an Zeit und Nerven. Hat man die ersten frustrierenden Stundenüberstanden, geht es jedoch schnell voran. Jede Funktion hat einen eigenen Befehl.Hat man die wichtigsten der über einhundert verschiedenen Anweisungen einmalim Kopf, muss immer seltener in der unübersichtlichen Befehlstabelle (Abb. 48)nachgesehen werden.

Abb. 48 Auszug aus der Befehlstabelle des eDIP240-7

Anhand des Auszuges aus der Befehlstabelle kann gut erklärt werden, wie sich dieBefehle der Displayprogrammiersprache aufbauen. Jeder ausführbare Befehl beginntmit ESC oder #. Als nächstes folgt die Befehlsfamilie, z.B. ein Z für Zeichenkette.Dann ein Befehlsattribut, z.B. L für linksbündig. Nun folgen die Koordinaten undder Textinhalt. Demnach sieht der fertige Befehl folgendermaßen aus:

#ZL 170 , 5 "Hallo Welt!"

Jonas Böttinger 43/44

Dokumentation Technikerprojekt V1.2

Notizen und Anmerkungen

Jonas Böttinger 44/44