logo
connection






Home
scs
scsProjekt
scsBilder
feedback
arcad
pc-lcd
Linux
links
Matthias
Michael


Stand: 05.11.2003
Design mit und für Mozilla



Kontakt:
MailAddress




LinuxHQ

Heise




BordComputer




Neu: Feedback erbeten!
Bitte schreibt mir was euch gefällt, oder man noch besser machen könnte in folgendes Formular: Feedback Formular


Kfz Bordcomputer für einen Audi 80


Das erste mal kam ich 1993 auf die Idee mir einen Bordcomputer auf Basis eines Siemens/Infineon 80c535 Microcontrollers zu basteln. Allerdings blieb ich damals recht schnell an den ersten großen Hürden hängen, und hatte auch nicht den nötigen Ergeiz für solch ein Projekt.

Anfang 1996 bin ich irgendwie wieder über die Sache gestolpert als ich einen günstigen Pascal Cross-Compiler für 8051 Controller entdeckte. Und da für mich auch immer das eigene Hardwaredesign wichtig war, hatte ich mich sofort daran gemacht ein eigenes Board zu "entwickeln". Dieser Versuch ging dann schon etwas weiter. Zumindest wurde das Gerät + Display einmal in meinem damaligen Auto getestet. Viel geleistet hatte diese Version aus heutiger Sicht nicht, denn es wurde nur die Bordspannung gemessen. Dafür war der Einsatz eines 80c535 natürlich Overkill. Aber ich war trotzdem Stolz auf meine "Eigenentwicklung".

Dann waren für ein paar Jahre wieder andere Dinge wichtig. Vor allem konzentrierte sich mein Hobby ab 1996 verstärkt auf Linux und das Internet. Ende 1999 bin ich dann durch zufall bei einem Streifzug durch das Internet auf einen Freeware C Compiler für 8051 Controller gestossen, der zudem noch unter Linux lief. SDCC von Sandeep Dutta. Da musste man doch was machen, unbedingt! Schnell war die Software installiert, und das erste kleine Testprogramm zum toggeln eines Portpins geschrieben. Allerdings war der download des Programmes zum Controllerboard etwas mühselig, da es mir nur unter DOS mit der speziellen Monitorsoftware des Pascal Compilers möglich war. Bald war die Sache wieder vergessen.

Ende 2001 hat es mich dann wieder gepackt. (Autsch! Nicht schon wieder! ;-) ) Das kann doch nicht so schwer sein. Im Internet gab es mittlerweile einen schier unerschöpflichen Fundus an Informationen über Hard- und Software für Microcontroller Anwendungen. Sofort habe ich mich auf die Suche begeben wie ich denn nun den Programmcode unter Linux zu meinem Controllerboard senden könnte. Mittlerweile war ich ein absoluter Linuxianer. Nach kurzer Recherche entdeckte ich Paulmon2 von Paul Stoffregen. Plattform unabhängig und somit für Linux geeignet. Dann kam der Entschluss erst ein vernünftiges Hardwaredesign zu entwerfen (wobei ich das Rad natürlich nicht neu erfunden habe).



Die Controllereinheit sollte folgende Features besitzen:

- Einseitige Platine
- Einsetzbar im Kfz Bordnetz. (DSE FAQ zum Kfz-Bordnetz)
- 80c535 Controller. (Hatte ich noch welche)
- Flash Programmspeicher (EPROMs in der Sonne zu löschen dauerte immer so lange ;-) )
- Externes RAM (Für Betrieb mit Monitorsoftware nötig)
- EEPROM (Speichern von Settings)
- Echtzeituhr inkl. Batterie Backup (Da spart man sich Resourcen auf dem Controller)
- 2 Optokopplereingänge (Zum Schutz der Portpins und Pegelanpassung)


Der erste Entwurf(Bild) funktionierte zwar, allerdings waren so viele Dinge zu verbessern das sich die Mühe für eine Version 2 lohnte. Die aktuelle Version besitzt nun folgende Austattung:

- Einseitige Platine im Euroformat
- 80c535 Microcontroller 12Mhz
- 128kByte Flash-Speicher 28F010 (Über Jumper in vier 32kByte Blöcke geteilt)
- 32kByte NVRAM (ZeroPower)
- 8kByte EEPROM 28C64
- Epson RTC72421
- MAX690 Batt. Switchover(für RTC) und Resetgenerator
- MAX232
- CNY17 Optokoppler
- 12er Tastatur über I2C Baustein PCF8574
- I2C Temp. Sensor
- LCD Display 20x2 (Bild des Displays)


Das Kerndesign ist natürlich 8051-Standard. Mit zwei 7400 Bausteinen wurde folgende Speichereinteilung erstellt (A14, A15, PSEN und RD signal entsprechend Verknüpft):

Programmspeicherzugriffe(/PSEN)
0x0000h - 0x7FFFh    Flash (Einer der vier Blöcke, je nach Jumper)
0x8000h - 0xFFFFh    NVRAM (Im Monitor Betrieb RAM als Programmspeicher nutzen)

RAM Zugriffe(/RD und /WR Signal)
0x0000h - 0x3FFFh    RTC
0x4000h - 0x7FFFh    EEPROM
0x8000h - 0xFFFFh    NVRAM


Durch die Verwendung des grösseren Flash Bausteines ist es möglich immer mehrere Versionen der Software auf dem Controllerboard zu halten. A15 und A16 des Flash werden über zwei Jumper konfiguriert. So steht z.B. in einem 32k Block immer  der Monitor Paulmon um mal schnell was neues zu testen.

Der MAX690 sichert die Versorgung der RTC beim abschalten der Betriebsspannung über einen 3,6V Akku. Zusätzlich wird noch ein Reset am Controller ausgelöst, um so durch den internen Resetalgorithmus des C535 immer eine "saubere" Abschaltung zu gewährleisten. Sonst könnte es passieren das ein Schreibvorgang ins RAM einfach abgebrochen wird, und dort "Müll" hinterlassen wird.



Software in C

Mitte 2002 machte ich mich dann an die ersten Schritte mit dem "Betriebsystem" des Rechners. Verwendet wurde natürlich SDCC. Da ich mit der Programmiersprache C bis zu diesem Zeitpunkt nicht sehr viel Erfahrung hatte, besorgte ich mir erst mal ein vernünftiges Buch. Softwareentwicklung in C (ISBN: 3-540-41958-6
) von Klaus Schmaranz war ein Volltreffer. Ein wirklich sehr gutes Buch das einem die vielen Stolpersteine bei einem Softwareprojekt klar aufzeigt. Um den Weg meiner Entwicklung etwas strukturierter zu gestalten, enschied ich mich gleich noch dazu, die Sourcen via CVS zu verwalten. Wäre eigentlich bei dem geringen Umfang nicht nötig gewesen, aber dabei lernt man ja schon wieder was.



Audi Adaption

Etwas mühselig war auch das finden der zu messenden Signale (Tachosignal, Drehzahlsignal und Verbrauchssignal) in meinem Auto. Aber nichts ist eben wirklich unmöglich. Und zum Glück sind bei einem Audi schon alle nötigen Signale vorhanden, so das auf den Einbau von zusätzlichen Sensoren verzichtet werden konnte (und das obwohl die Kiste schon 11 Jahre alt ist). Hilfe war in Meckis FAQ zum Audi80 zu finden. Auch lese ich seit 1999 ab und zu in der www.audi80.com Community mit. Solch spezielle Dinge werden dort allerdings nicht oft Diskutiert.


Die Wertigkeit der Signale habe ich bei einer jewiligen Referenzmessung selbst ermittelt.

Tachosignal:
Das Tachosignal liefert ca. 4192 Impulse je km. Damit kann nun die Strecke aufsummiert werden. Eine Messung auf Zeitbasis ergibt die  aktuelle Geschwindigkeit. Der Signalgeber besitz wohl einen sehr hohen Innenwiederstand. Ich konnte damit keinen Optokoppler direkt treiben. Also eben über eine Transistor als Verstärker.

Drehzahlsignal:
Ein Impuls je 1/2 Motorumdrehung. Hier ist eine Berechnung der Umdrehungen pro Minute einfach möglich. Zeitmessung zwischen den Impulsen.

Verbrauchssignal:
Dabei handelt es sich um ein PWM Signal bei dem die Pulsweite proportional zur eingespritzten Kraftstoffmenge ist. Ich konnte das Signal sehr genau entschlüsseln, durch aufsummieren aller Impulse während eine Tankfüllung leergefahren wurde. (Natürlich nicht an einem Tag,  ;-) sondern während dem Alltagsbetrieb.) Ich errechnete dann eine Quantisierung von 26ul Kraftstoff je ms Pulsweite. Mit diesem Wert kann nun sehr einfach alles weitere berechnet werden.


Aktuell beinhaltet der Bordcomputer nun folgende Funktionen:

- Motordrehzahl
- Geschwindigkeit in Km/h (nun sehe ich mal wie der Serientacho "lügt")
- Gefahrene Strecke in Km
- BordSpannung anzeigen
- Tankanzeige (Noch nicht auf den Tank abgeglichen)
- Kraftstoff-Verbrauchsanzeige (Durchschnitts-Verbrauch und verbrauchte Menge auf ml genau)

In der Praxis hat sich gezeigt das die vielen Informationen mit denen man sich versorgen kann zwar recht nett sind, aber wirklich wichtig ist für mich eigentlich nur die genaue Anzeige der Kraftstoffverbrauchsdaten. Darauf werde ich mich auch bei den weiteren Updates der Software konzentrieren.
Geplant sind noch einfache Funktionen wie z.B. km bis zum nächsten Ölwechsel, automatisches Rücksetzen des Tageskilometerzählers nach dem tanken, oder anzeigen der aktuell noch vorhandenen Kraftstoffmenge im Tank. Eine Berrechnung der aktuelle Reichweite in Km ist auch noch wünschenswert.

Eine neue Version der Platine wäre auch mal wieder nötig, da sich nun schon wieder ein paar "Zusatzplatinchen" und jede Menge workaround Kabel angesammelt haben.



Grafik LCD (neu 18.05.2003)

Da die Möglichkeiten mit dem bisher verwendeten Alphanummerischen Display sehr eingeschränkt waren, habe ich mich nun etwas mit der Ansteuerung eines Grafikdisplays beschäftigt. Vor ein paar Jahren hatte ich mal ein Grafik-LCD als Restposten erstanden, welches allerdings keinen integrierten Grafik-Controller besaß. Solch ein Display anzusteuern ist sehr aufwendig. Also habe ich mich nach einem Display mit Controller umgeschaut. Weit verbreitet sind heute Displays mit dem T6963c Grafik-Controller von Toshiba. Solch eines habe ich mir dann angeschafft. Nach ein paar Stunden Einarbeitung mit dem Toshiba Datenblatt in die Ansteuerung des Controllers waren dann erste Erfolge zu sehen.

Grafik-LCD
Erstes Erfolgserlebnis!
(Das Bild ist leider etwas unscharf. Kommt in echt viel besser!)


Im moment steht noch aus, eine Schriftart mit 16x16 pixel für das Display zu erstellen, und das Display an einem geeigneten Ort im Auto einzubauen. Etwas Sorgen mache ich mir noch wegen den hohen Temperaturen die im Sommer im Auto entstehen können. Dabei könnte das Display eventuell "sterben". Wir werden sehen. ;-) Auf jeden Fall hat das Alphanummerische LCD einen Sommer im Auto überlebt, obwohl es laut Datenblatt nur bis Max. 50 Grad Celsius betrieben werden darf.



Neue Version mit Grafikdisplay 128x48 Pixel (neu 15.06.2003)

So nun habe ich wieder etwas Zeit gefunden mein kleines Projekt zu erweitern.

Ein geeigneter Einbauort für das Display und ein paar Taster war schnell gefunden. Da ich die mittleren Lüftungsschächte sowieso immer geschlossen hatte konnte ich darauf gut verzichten. Auserdem ist die Lage in dem oberen Berreich der Mittelkonsole vom Fahrersitz aus sehr gut einsehbar.

Beim zerlegen der Mittelkonsole stellte ich zu meiner Überaschung fest das sich der Umbau so gestalten lies, das später ein verlustfreier Rückbau möglich ist. Audi sei Dank! Das Stellrad zum öffnen und schließen der Lüftung ist nun von der inneren Klappe abgehängt. Die Klappe ist mit einer Schraube "hart" geschlossen.

Dann habe ich noch schnell die Software Funktionen zur Ausgabe der Daten an das neue Display angepasst. Der t6963 Controller besitzt einen im ROM abgelegten ASCII Zeichensatz mit 8x8 Pixel Schrift. Diese kann sehr einfach für Standardausgaben genutzt werden. Wichtige Informationen sollten aber Gross und schnell auffindbar im Display dargestellt werden. Dazu habe ich mit Gimp alle Ziffern mit 16x16 Pixel entworfen und diese als echte "Bitmap" (Weißer Pixel = 0, Schwarzer Pixel = 1) im Programmspeicher des Bordcomputers abgelegt. Eine Softwarefunktion überträgt nun bei bedarf die jeweilige Ziffer in den Grafikspeicher des Displays. So wird auch das Startbild mit 128x48 Pixel ausgegeben.

Hier die einzelnen Ziffern mit 16x16 pixel. Erscheinen nur im Browser etwas klein.

0123456789punkt


Eine Frontplatte zur Abdeckung der neuen Öffnung habe ich aus Aluminium angefertigt. Leider noch sehr auffällig.

11
Ist im moment noch sehr auffällig. Am besten ist es wenn ich das Teil noch Matt-Schwarz lackiere.



Eine neue Version der Platine ist nun wirklich überfällig. Die ständigen Erweiterungen und Anpassungen haben einen ziemlichen "Kabelhaufen" entstehen lassen.



Anzeige des Momentverbrauches und der aktuellen Reichweite (neu 22.10.2003)

Die für mich noch wichtige Anzeige des Momentanverbrauches ist nun implementiert. Eine schöne Funktion, da man nun die "Schluckgewohnheiten" bei den verschiedenen Lastzuständen besser kennenlernt.
Es wird jetzt auch die aktuelle Reichweite in km basierend auf dem Durchschnittsverbrauch und Tankinhalt berrechnet. Auch der Tankinhalt in Liter wird angezeigt. Allerdings mit der Einschränkung das Reichweite und Tankinhalt nur korrekt angezeigt werden wenn vollgetankt wurde. Für mich kein Problem, da ich nicht zu den 20 Mark, ähm, 10 Euro Tankern gehöre.


Stand der Bordcomputer Funktionen:

- Motordrehzahl
- Geschwindigkeit in Km/h
- Gefahrene Strecke seit Motorstart in Km
- Gefahrene Strecke seit seit reset Tageszähler in Km
- Gefahrene Strecke seit dem letzten Tanken in Km
- Batteriespannung in Volt
- Tankanzeige auf ml genau
- Durchschnittsverbrauch L/100
- Momentanverbrauch L/100
- Verbrauchte Menge seit Motorstart in ml
- Verbrauchte Menge seit Tanken in ml


Jetzt folgt noch die Optimierung der Darstellung auf dem Display und eine Verbesserung der Bedienung. Auch eine Tankwarnung bei weniger als 6 Liter im Tank werde ich noch implementieren.




Wenn sich wieder etwas Zeit findet, wird die Sache fortgesetzt. Das kann aber dauern, denn 10 Jahre habe ich ja bis zum heutigen Stand benötigt. ;-)



Hinweis zu Internet-Links:
Hiermit distanziere ich mich ausdrücklich von allen Inhalten aller gelinkten Seiten auf dieser Homepage/Internetpräsenz und machen mir diese Inhalte nicht zu eigen! Diese Erklärung gilt für alle auf meinen Seiten angebrachten Links.
Hinweis zu Warenzeichen:
Die auf dieser
Homepage/Internetpräsenz genannten Soft- und Hardwarebezeichnungen sowie sonstige Markennamen und -zeichen sind in den meisten Fällen auch eingetragene Warenzeichen und unterliegen als solche den gesetzlichen Bestimmungen.