Grafische Anzeige CAN
Aus Prius Wiki
Inhaltsverzeichnis |
Einleitung
Fünf Hauptaspekte sprechen für den Einsatz dieses Basic - Computers:
1) das hier in einem Chip sowohl die komplette Videosignalerzeugung (in NTSC) UND der eigentliche Basic - Rechner integriert ist.
2) Änderungen jederzeit im Fahrzeug ohne Entwicklungssystem möglich und sofort wirksam sind.
3) das für die Änderung der Grafikgestalltung keine weitere Umgebung benötigt wird.
4) das die Platine mit ihren I/O-Möglichkeiten praktisch wie für diesen Zweck gemacht ist.
5) und "last but not least": vor allem die Kosten
Warnhinweise
Das Projekt ist noch nicht fertig und weitere Arbeit daran notwendig, jedoch hat zeigt der heutige Stand, dass es funktionieren wird!
Realisierungsstand (28.07.2007)
- Auswertung beliebiger CAN-ID aus einer Liste (Eintrag ID und Byte-Nr.)
- Optimierte Basic - Routinen
- Optimiertes Assembler - Programm
- Anschluss über RGBS (Farbdarstellung)
Offene Punkte (28.07.2007)
- RTC
Realisierungsstand zum Priustreffen (24.06.2007)
- Anzeige der Uhrzeit im (24h-Format), Innentemperatur und Bordnetzspannung (Grundanzeige)
- Auswertung einer ID ( $52C = Kühlwassertemperatur ).
- Bei Verzicht auf Unteranzeigen oder des Fahrtenbuches konnten auch mehrere CAN-ID ausgewertet werden.
- Bei Optimierung der Basic - Routinen "passen" alle o. g. Funktionen in die 4x51 Zeilen.
- Vier weitere Unteranzeigen (Spannung, Innen-, Kühlwassertemperatur, Verbrauch) der letzten Stunde
- Fahrtenbuch (zur Zeit 25 Einträge Datum und Uhrzeit Fahrtbegin und Ende)
- Konfigurationsmenü (Uhrzeit, Datum, CAN, Demo-Betrieb)
- Anzeige der eintreffenden CAN-ID (LOG)
- Menü zum Löschen des EEPROM
- CAN - Initialisierung zu Debug - Zwecken
Mängel zum Priustreffen (24.06.2007)
1. Uhrzeit z. Zt. nur Software - weicht daher zu stark ab - es wird eine "I2C - RTC" (= Hardware - Uhr) nachgerüstet.
2. Die Basic - Programme müssen optimiert werden, damit mehrere CAN - ID ausgewertet werden können.
3. Das Assembler - Programm des "RS232-Umsetzers" muß geringfügig geändert werden (Debug-Informationen entfernen).
4. Der Hardwareanschluß: bisher nur SW-Darstellung und Spannungsversorgung "CAN232" ungünstig gewählt.
Basic-Computer
Den Basic Computer von Joerg Wolfram kann man nicht kaufen, er muss selbst gebaut werden. Dafür ist die Software "Public Domain".
Die aktuelle Version kann unter www.mikrocontroller.net BASIC-Computer mit Mega32 heruntergeladen werden.
ACHTUNG:
Immer die letzte Version laden! In dem "gezippten" Archiv befindet sich Software, Schaltpläne, Platinenlayout und "Handbücher".
Für das Programmieren des "Atmel-Controller" ist weiterhin ein Programmiergerät erforderlich.
Die Vorteile:
- Nach dem Einschalten sofort betriebsbereit ("booten" entfällt)
- Keine mechanischen Laufwerke (Festplatte) erforderlich
- Geringe Stromaufnahme (ca. 150 mA)
- Geringe Größe
- NTSC oder PAL über Jumper wählbar (MFD benötigt NTSC)
- Autostart über Jumper aktivierbar
- Programme werden im "Flash" des Controller gespeichert
- Interpreter - Programme können sofort gestartet und müssen nicht "compiliert" werden
- Basic - Befehle können abgekürzt werden (z. B. "XC" anstelle "XCALL" oder das klassische "?" für "PRINT)
- Daten können im EEPROM des Controller gespeichert werden
- 8 Eingänge wahlweise als Analog- oder Digitaleingang nutzbar
- I2C - Schnittstelle zum Anschluss von LM75 Temperatursensoren
- Programmaustausch zum PC über RS232 - Schnittstelle (1200 BAUD)
Die Nachteile:
- Weder "PC", "MAC" noch "C64" kompatibel
- Programme können z. Zt. nicht am PC sondern müssen auf dem Basic - Computer erstellt werden
- Keine Stringverarbeitung
- Serielle Schnittstelle (RS232) NUR 1200 BAUD
Beschreibung
Dieses Projekt dient zur (frei konfigurierbaren) Anzeige von Daten auf dem MFD.
Die Ziffern- und Balkenanzeigen können fast beliebig nach eigenem Geschmack angeordnet werden, die Balken können z. B. sowohl vertikal (auf und ab) als auch horizontal (von links nach rechts) programmiert werden.
Die "Hardware" besteht aus einem von Joerg Wolfram entwickelten Einchip - Basic - Computer und einem zweiten selbst programmierten Atmel - Controller, der die Anbindung des CAN (z. Zt. über einen "CAN232" - später durch direkten Anschluß eines CAN-Transceiver - Chips ) übernimmt - im Folgenden "I2C zu RS232 - Umsetzer" genannt.
Die "Software", also die verschiedenen "Bildschirme" und deren "Parametrierung" und "Datenversorgung", sind in "BASIC" programmiert und können relativ einfach eigenen Vorstellungen angepasst werden - die Programmierung des Controllers zur "CAN-Anbindung" erfolgte in "Assembler" (AVR-Studio).
Das "BASIC" entspricht ungefähr dem wohl fast jedem "Computerfreak" noch von "C64" bekannten Umfang, jedoch fehlt (leider) eine "Stringverarbeitung" komplett, die die Programmierung wesentlich vereinfacht hätte.
Dafür sind umfangreiche I/O - Befehle vorhanden und das Basic ist "rasend schnell".
Für die "Grundfunktion" ist keine weitere Bedienung erforderlich, jedoch wird zur Einstellung der Uhrzeit einmalig eine beliebige "MF-2" Tastatur benötigt.
Idee
Anzeige der Uhrzeit im 24-Stunden-Format, Innentemperatur, Bordnetzspannung und weiterer Betriebsdaten auf dem MFD.
Vergleich einer grafischen mit einer Alphanumerischen Visualisierung
Weitere Anzeigemöglichkeiten
- Anzeige l/100 km während der Fahrt oder l/h im Stand
- Türkontrollanzeige im Klartext oder Grafik
- DTC- Anzeige im Klartext
- Stoppuhr
- Restreichweite
Realisierungsansätze
1. Der Einsatz eines OSD (On-Screen-Display) IC wurde verworfen, da z. T. abgekündigt oder schwer erhältlich.
2. Einbau eines "CAR-PC" wurde aus mehreren Gründen verworfen: hohe Kosten, Dauer Bootvorgang, ungenügender Bauraum
3. Als geeignet wurde "AVR-Chipbasic" von Joerg Wolfram befunden (Stromaufnahme ca. 150 mA).
4. Zunächst wurde das direkte Abgreifen der relevanten Fahrzeugsignale angedacht aber schnell verworfen.
5. Es gibt einige handelsübliche "CAN-Interfaces" - für den Einsatz mit "AVR-Chipbasic" ist der "CAN232" von LAWICE geeignet.
6. Erstes Problem: Die serielle Schnittstelle des "Chipbasic" ist nicht über die UART realisiert und kann NUR 1200 BAUD
7. Zweites Problem: Das "CAN232" von LAWICE kann minimal mit 2400 BAUD betrieben werden.
8. Als Lösung wurde ein 2. Atmel-Controller programmiert, der eine Umsetzung von I2C auf RS232 mit 57,6 kBAUD realisiert.
9. Anbindung an das MFD - für eine Farbdarstellung wird der Anschluß über RGBS oder bei FBAS ein zusätzlicher Chip benötigt.
10. Es muss noch ein "Signalumschalter" in die Hardware integriert werden.
11. Für die Bedienung weiterer "Features" könnte eine kleine Tastatur verwendet oder der "Touchscreen" eingebunden werden.
Praktische Ausführung
Wie so oft im Leben, gibt es verschiedene Ausführungsmöglichkeiten:
1. Aufbau auf Lochrasterplatine - verworfen.
2. Aufbau auf zwei Platinen von Joerg Wolfram ( Chipbasic und RS232-Umsetzer) - für den "Prototypen" geeignet.
3. Layout einer eigenen kompakten Platine: Chipbasic, CAN-Controller und MFD-Umschaltung erfolgt im Anschluß
Erste Ergebnisse
Zunächst wurde eine Platine komplett bestückt, um die Möglichkeiten zu prüfen - in dieser Zeit gab es mehrere "Updates" der "Firmware" - die aktuelle läuft auf einem "ATMEGA32" und kann 4 Programme mit je 51 Zeilen aufnehmen.
Der CAN - Anschluss
Als nächstes war der Anschluss an den CAN des Prius zu realisieren.
Der CAN ist ein Zweidraht - Bus (CAN_L und CAN_H) und wird am am "OBD2" - Stecker des Prius angeschlossen.
Er "arbeitet" beim Prius mit 500 kBAUD und "11-bit Identifiern" ( somit von $000 bis $7FF).
Achtung:
CAN - Nachrichten sind am OBD2 - Stecker erst ab "Stufe 2" (= Kontrolllampen an) bis ca. 10s nach dem Abschalten vorhanden.
Im Gegensatz zu einfachen Protokollen, wie z. B. RS232, ist beim CAN keine einfache "Softwareschnittstelle" zu realisieren.
Daher wird wird beim Prototypen zur Anbindung ein "CAN232 - CAN-Dongle" von LAWICE - erhältlich beim "Elektronikladen" - verwendet.
Dieses wird über "ASCII" - Kommandos (z. B. auch beliebiges Terminalprogramm) gesteuert und sendet die empfangenen Daten ebenfalls im "ASCII-Format" zurück.
Das "CAN - Dongle" muß vom "Basic - Programm" parametriert und initialisiert sowie um eine akzeptable Datenmenge zu erreichen, "Akzeptanzfilter" (Das sind dann die ID, welche "durchgelassen werden) gesetzt werden.
Somit besteht die Initialisierung aus:
- CAN - BAUD - Rate setzen
- Akzeptanzfilter (Code und Maske) setzen
- CAN - Kanal öffnen
Nach dem Senden einer Anforderung an den "CAN232" sendet dieses mit 57,6 kBAUD alle ID, die das Akzeptanzfilter durchlässt an den 2. Controller.
Die empfangenen Daten treffen im 2. Controller ein und werden bis zur zyklischen Abholung über den "I2C-Bus" im internen RAM (1kB - für "Insider" abzüglich "Stack") gepuffert.
Später wird der 2. Controller (wahrscheinlich) direkt einen (preisgünstigen) "SJA1000 CAN-Controller" ansteuern, was den nötigen Bauraum weiter minimiert und die Kosten um ca. 80 Euro verringern wird.
Im "Basic-Programm" werden die Daten in ein "Array" geschrieben und der Inhalt mit den auszuwertenden ID verglichen.
Aus diesen Nachrichten werden die Bytes, die die gewünschten Informationen enthalten ausgefiltert, normiert und in Variablen geschrieben, die dann an die Balkengrafik "weitergereicht" werden.
Das BASIC - Programm (im BASIC - Computer)
Das BASIC - Programm wertet die Daten vom CAN aus, berechnet die benötigten Daten und schreibt die Zeichen und Grafiken auf den Bildschirm.
Zur Zeit gibt es einen "Grundbildschirm" (siehe oben), 4 weitere Grafikanzeigen ( Batteriespannung, Innentemperatur, Verbrauch und Kühlmitteltemperatur jeweils der letzten Stunde. Diese Werte werden in das eeprom geschrieben und stehen daher auch nach dem Aus- und Wiedereinschalten zur Verfügung) und die Aufzeichnung der Fahrtparameter ("Fahrtenbuch").
Zusätzlich noch ein "Konfigurationsmenü" für die Grundeinstellung.
Das ASSEMBLER - Programm (im "I2C zu RS232-Umsetzer")
Keine Angst - man muß nicht wissen, wie es funktioniert - nur für jene, die es interessiert
Das Assembler - Programm wandelt die über den I2C-Bus (bzw. TWI = two wire interface) gesendeten Zeichen unverzögert und ungepuffert in RS232-Signale (57 kBAUD) um.
Die vom CAN232 empfangenen Zeichen (57kBAUD) werden im internen SRAM des 2. Controllers gepuffert, bis sie über den I2C-Bus abgeholt werden.
Im Detail passiert folgendes:
1. Das Programm parametriert die TWI - Hardware des Controller als Slave mit der Adresse "$40" und
2. die UART auf 8 bit, 2 Stopbit, keine Parität, 57 kBAUD.
3. Nach dieser Initialisierung läuft das Programm in einer Endlosschleife, die die Ladungspumpe ansteuert.
4. Ist ein Zeichen an der UART (RS232) eingetroffen, wird ein Interrupt ausgelöst und das Zeichen im SRAM gespeichert.
5. Wird ein Zugriff auf das TWI detektiert, wird ebenfalls ein Interrupt ausgelöst und ein Zeichen aus dem SRAM gesendet.
6. Dies passiert solange, bis (im Normalfall) alle Zeichen abgeholt oder
7. der Pointer (auf die Zeichen im SRAM) durch einen Schreibzugriff zurückgesetzt wird.
Auf diese Weise wird erreicht, dass kein Zeichen verloren geht - ähnlich einem "Multitasking".
Dadurch, dass während eines Interrupts bestimmte Register "gerettet" und anschliessend "restauriert" werden müssen, ist das Programm etwas umfangreicher.
Hier mal in kleine (leicht verdauliche) Häppchen verpackt:
Ideen zur Bedienung
Grundsätzlich muss ein Umschalter zwischen der jeweils "normalen" und der neuen Anzeige nachgerüstet werden z.B.:
- Nachrüstung eines Original - Toyota - Tasters z.B. neben "EV-Modus" (s.u.)
- Eigenbau - Bedienteil mit weiteren (s.u.) Tastern z. B. unter der vorderen Getränkedosenklappe
- Infrarotfernbedienung
- Zeit- oder funktionsgesteuert (Digitalausgang des "Basic-Computers" schaltet ein, dann z.B. alle 10s Wechsel)
Für die Umschaltung zwischen den Modi der Grafischen Anzeige:
- Ein- und Fortschaltung über einen Taster ( jede Betätigung wechselt zur nächsten Anzeige )
- kleine PC-Tastatur (z. B. "Keypad")
- Taster auf Eigenbau - Bedienteil (s.o.)
- Infrarotfernbedienung
- Auswertung des MFD - Touchscreen
Ein Tastenfeld könnte z. B. "widerstandsskodiert" aufgebaut und dann über nur 2 Leitungen an einen Analogeingang des Basic - Computers angeschlossen werden. Die Auswertung erfolgt dann über die unterschiedlichen Spannungswerte.
Aufbau
Wer nicht warten möchte, kann gerne die Platine von Joerg Wolfram aufbauen, eigene "Experimente" durchführen und ggf. mit dem gewonnenen "know-how" zum Projekt beitragen.
Platinen
Das Platinenlayout wird mit einem (geeigneten) Drucker auf eine (geeignete) Folie gedruckt und die (geeignete) Fotopostitiv - Platine damit belichtet. Anschließend wird diese entwickelt, geätzt und gebohrt.
Zur Zeit wird die Platine doppelt benötigt:
- "Basic - Computer" (bis auf nicht benötigte Stecker voll bestückt)
- "I2C zu RS232 Umsetzer" (nur ATMEGA und Schaltungsteil für RS232 mit 1 zusätzlichem Transistor bestückt)
Bestückung
Basic-Computer:
Gemäß Bestückungsplan von Joerg Wolfram vor Bestückung der Stecker muss überlegt werden, ob diese wirklich im Fahrzeug benötigt werden - weitere Hinweise siehe unter Material.
I2C-RS232-Umsetzer:
Nur Controller, Quarz, Abblockkondensatoren (100nF) und alle Teile der RS232-Schnittstelle - zusätzlich muß "RxD" und "TxD" an die UART verdrahtet und ein weiterer Transistor, der RxD invertiert, eingelötet werden. Die Stromversorgung (5V) erfolgt über den I2C-Bus vom Basic-Computer.
Basic - Interpreter
Die "Hex - Datei" mit dem "Basic - Interpreter" wird mittels eines geeigneten Programmiergerätes (z. B. STK500) in den Controller geladen ( = "geflasht"). Das controllerinterne EEPROM muß nicht programmiert werden.
Erster Anschluss
Bei der ersten Inbetriebnahme sollte der Controller nicht gesteckt sein und zuerst die 5V-Versorgungsspannung kontrolliert werden.
Anschliessend Stromversorgung abschalten und den Controller richtig herum (Markierung) und mit allen Pins in die Fassung stecken.
Für die ersten Versuche kann der "BASIC - Computer" anschliessend an den heimischen Fernseher entweder über BAS (schwarz/weiss) oder SCART (Farbe)
sowie zur Stromversorgung an ein 12V - Netzteil oder einen Motorrad - Akku angeschlossen werden.
Bei Verwendung eines nicht NTSC - tauglichen Fernsehgerätes muß der NTSC - Jumper abgezogen werden.
Weiteres folgt
Einbau
Bei Einschleifen in das Signal des Navigationssystems ist der Einbau in ein Trittschutzgehäuse und die Montage desselben auf dem Navigationssystem oder JBL-Verstärker sinvoller.
Anschluss an Bordcomputer
Bei Einschleifen in das Signal des "Bordcomputer" ist der Einbau unter dem "Center - Speaker" denkbar - hier muß dann nur noch der CAN (2 Drähte) und das Bedienteil angeschlossen werden.
Weiteres folgt
Anschluss
Modelljahr bis Ende 2005
Zum Anschluß an das MFD mit Farbwiedergabe kann das Signal entweder in das RGBS Signal des "Bordcomputers" oder des Navigationssystems eingespeist werden - es wird weiterhin ein Umschalter benötigt, der z. B. über ein Relais (4 x UM) realisiert werden kann.
Prinzip der Signal - Umschaltung:
[[Bild:Grafische Anzeige Umschalter.JPG[[
Anmerkung: Es gibt Spezial-IC, die auch zwischen mehreren RGBS-Signalen umschalten können -
leider sind diese schwer erhältlich, recht teuer und dazu SMD.
Modelljahr ab 2006
Zum Anschluß an das MFD in "schwarz/weiss" kann ein Kameraeingang (wenn vorhanden) direkt verwendet werden. Die Umschaltung kann über einen Schalter ( 1 x UM) erfolgen.
Für Farbwiedergabe über den Kameraanschluss wird eine weitere Schaltung (CPLD) benötigt: FBAS -Encoder. Die Umschaltung kann ebenfalls über einen Schalter ( 1 x UM) erfolgen.
Alternativ dazu Einspeisung in den RGBS - Signalweg des "Bordcomputers". Es wird dann ebenfalls ein Umschalter benötigt, der z. B. über ein Relais (4 x UM) realisiert werden kann.
Weiteres folgt
Material
Weiteres folgt
Ausblicke
Der Befehlssatz und speziell Grafikauflösung und die Anzahl der Farben wurde von Joerg Wolfram im Laufe der Entwicklung verbessert - er postete vor kurzer Zeit, dass mit einem leistungsfähigeren Controller noch einiges möglich sei.
Joerg Wolfram hat heute (12.07.2007) eine neue Version angekündigt:
- anderer Controller + Quarz aber kompatibel zur bisherigen Hardware
- 4 Programme a 99 Zeilen
Linksammlung
www.mikrocontroller.net BASIC-Computer mit Mega32
Hardware "AVR-Chipbasic" von Joerg Wolfram
Basic - Befehle "AVR-Chipbasic" von Joerg Wolfram
Informationen zum verwendeten "ATMEGA32"
WIRD FORTGESETZT
--ksb 20:22, 27. Jun 2007 (CEST)