Upload
vunguyet
View
226
Download
0
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
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