Hallo Zusammen
Ich stelle hier meinen sehr einfachen Code zur Verfügung, mit dem es
möglich ist, eine bestimmte CAN-Botschaft zu empfangen und deren Daten
über den UART zu schicken.
Grundlage für den Code war die CAN-Bibliothek von Jürgen Harms:
http://www.mikrocontroller.net/articles/CAN_Bibiliothek_f%C3%BCr_AT90CAN_Prozessoren
Diese hat auch auf Anhieb funktioniert, war aber mit der Datenrate am
CAN-BUS meines Toyota RAV4 3. Generation total überfordert. Die
Datenrate des CAN-BUS der über OBD herausgeführt ist liegt bei ca. 1100
Botschaften/s @ 500kbit. Dies entspricht allerdings nur ca. 20% Buslast
( alle Daten mit Vector CanAlyzer ermittelt).
Aus diesem Grund habe ich die Bibliothek stark vereinfacht und an meine
Bedürfnisse angepasst.
Die ursprüngliche CAN-Bibliothek von J. Harms bildet ein rudimentäres
Multitasking-System nach und behandelt neben dem Empfangen von
Botschaften auch das Senden von Botschaften und Fehlererkennung.
Dies war aber für meinen Fall alles zu aufwändig und überladen, daher
habe ich das Programm so konfiguriert, dass nur auf eine bestimmte
Nachricht gewartet wird (Identifier 0x25), und wenn diese empfangen
wurde werden deren Daten ausgewertet (DLC, Datenbytes) und über UART
geschickt. Dabei werden die Interrupt-Fähigkeiten des CAN-Moduls nicht
genutzt, der Empfang der Botschaft wird durch Polling ermittelt.
Da ich erst nach langem Studium von Jürgens Quellcode und des Datenblatt
hinter fast alle Mechanismen des in die AT90CANxx integrierten
CAN-Controllers gekommen bin und ich leider für mein einfaches Problem
keinen Quellcode hier im Forum gefunden habe, will ich euch meinen
Quellcode zur Verfügung stellen, vielleicht kann es ja jemand
gebrauchen.
Und wozu benötige ich den Code? An meinem Toyota RAV4 3. Generation ist
eine Rückfahrkamera verbaut. Die hat allerdings den Nachteil, dass in
das Bild der Kamera keinen Lenkwinkel-abhängigen Linien eingeblendet
werden, womit der Fahrer abschätzen kann wo das Auto beim aktuellen
Lenkradeinschlag hinfährt. Mit Vector CanAlyzer hab ich relativ einfach
die CAN-Botschaft ausgemacht, die den Lenkwinkel überträgt. Die
Datenbytes in denen der Lenkwinkel codiert ist, war auch nicht schwer zu
finden. Mit dem hier vorgestellten Quellcode wird diese eine Botschaft
aus dem Datenstrom herausgefiltert, der Lenkwinkel berechnet und dieser
über UART0 einem ATMega88 zur Verfügung gestellt. Dieser modifiziert das
Videosignal der Rückfahrkamera und blendet lenkwinkelabhängig die Linien
ein. Das Einblenden der Linien erfolgt mit einem umgebauten Bausatz von
ELV:
http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=22054&flv=1&bereich=&marke=
Vielleicht kann ja jemand etwas mit meinem Quellcode anfangen. Wer
Fragen hat meldet sich einfach, ich versuche diese dann nach bestem
Wissen und Gewissen zu beantworten.
Viele Grüße,
Felix
Hallo Felix,
danke für Deinen Code - was mich besonders interessiert:
Wie genau blendest Du mit dem modifizierten ELV-Bausatz die Linien in
das Signal der Rückfahrkamera ein ?
Das wäre ein Feature, welches ich auch sehr gerne hätte !
Gruss Otto
Hallo Otto
Wenn du auf den ELV-Link von oben klickst kommst du zu der
Produktbeschreibung des Bausatzes. Dort findest du weiter unten die
Bauanleitung als PDF. In der Bauanleitung findest du die Schaltung des
Bausatzes und einer meiner Meinung nach sehr gute Erklärung der
Schaltung. Den Analogteil der Schaltung hab ich zwar nicht zu 100%
verstanden aber das ist auch nicht so wichtig. Wichtig ist der Teil, der
aus dem analogen Videosignal zwei digitale Signale ableitet, den V-Sync
und den H-Sync.
Beide digitalen Signale gehen als externer Interrupt in den ATMega88.
Das V-Sync-Signal signalisiert den Beginn eines neuen Frame, also
sozusagen der Beginn der ersten Zeile eine Bildes. Das V-Sync-Signal
kommt also bei PAL mit ca. 50Hz.
Das H-Sync-Signal kommt immer dann wenn eine neue Zeile beginnt. Das
bedeutet, dass bei 320 übertragenen horizontalen Zeilen der H-Sync im
62,5us-Raster kommt.
Wenn man die beiden Signale hat ist der Rest eigentlich nicht mehr
schwer. Mit V-Sync weiß der Controller ab wann ein neues Bild beginnt
und kann dann ab diesem Zeitpunkt die H-Sync-Signale mitzählen und weiß
somit immer in welcher Zeile sich das Videosignal befindet. Der
Bildaufbau erfolgt von oben nach unten zeilenweise fortlaufend von links
nach rechts.
Mit Hilfe von PINB3 und PIND1kann dann der Controller das Videosignal
(welches im Normalfall einfach nur durchgeleitet wird) auf schwarz oder
weiß umschalten. Wenn also der Controller weiß, er ist z.B. in Zeile 160
und dann 30us nach dem H-Sync-Signal für 2us erst auf Schwarz schaltet,
dann 4us auf weiß und anschließend wieder 2us auf schwarz und das Ganze
die nächsten 30 Zeilen wiederholt, so hast du also schlussendlich
ungefähr in der Mitte des Bildes einen kurzen senkrechten Strich der in
der Mitte weiß ist und links und rechts schwarze Streifen hat. Diese Art
von Strich kann man auf jedem Hintergrund erkennen, der Kontrast ist
sehr hoch.
Ich hab die Schaltung nur minimal geändert, z.B. sind die
Controller-Ausgänge für schwarz und weiß nicht mehr PINB3 und PIND1.
Sind jetzt andere Pins, welche genau muss ich erst nochmal nachsehen,
aber diese lassen sich dann mit meinem Programm besser und schneller
programmieren.
Praktisch ist auch, dass auf der Platine von ELV (SMD-Bauteile inkl.
Controller sind schon vorbestückt) gleich der SPI-Programmieranschluß
vorbereitet ist, da muss man nur noch ein paar Kabel anlöten. Die
Pinbelegung (MISO, MOSI, RST etc.) muss man aber mit einem Multimeter
und dem Controller-Pinout aus dem Datenblatt selber rausfinden.
So ich hoffe ich konnte dir erstmal weiterhelfen.
Gruß, Felix
Hallo Felix,
vielen Dank für Deine exakten Ausführungen - wahrscheinlich habe ich
mich falsch ausgedrückt - eine "echte" Rückfahrkamera bzw. das
Toyota-IPA-System blendet (einfach ausgedrückt) Linien ein, welche
anzeigen, ob und wie wie der PKW mit dem momentanen Lenkwinkel in die
Parklücke gelangen kann.
Welche Information gibt der von Dir eingeblendete kontrastreiche weisse
Strich - nur den Lenkwinkel ?
Über eine weitere Antwort würde ich mich sehr freuen
Viele Grüsse
Hallo Otto
Ich weiß nicht genau was du mit Toyota-IPA-System meinst, aber das
Original-Toyota-Navigationssystem inkl. Rückfahrkamera welches bei mir
eingebaut ist bietet lediglich den Blick nach hinten. Außer dem
Schriftzug "Prüfen sie ihre Umgebung" wird nichts eingeblendet, auch
keine starren Hilfslinien.
Bei mir soll es dann ungefähr so aussehen:
http://www.conexx-video.de/audi_mmi_kamera.jpg
Abhängig vom Lenkwinkel schwenken dann die Linien an ihrem oberen Ende
nach links oder Rechts und zeigen an wo das Fahrzeug langfährt.
Gruß, Felix
Hallo Felix,
vielen Dank für Deine Antwort. IPA = "Intelligent Park Assist" - das
Fahrzeug kann eigenständig einparken siehe:
http://www.priuswiki.de/wiki/Einparkautomatik
Automatisches Einparken ist natürlich nicht mein Ziel - bei meiner
nachgerüsteten Rückfahrkamera fehlen die Linien, da es bisher eine rein
analoge Lösung ist (NTSC-Kamera auf Multifunktionsdisplay).
Jedoch habe ich wie Du den CAN angezapft und hätte so die Möglichkeit
mittels des ELV-Bausatzes Linien einzublenden.
Hast Du evtl. Fotos von Deinem Monitor mit eingeblendeten Linien?
Gruss Otto
Hallo euch allen,
ich bin schon seit einiger Zeit auf der Suche nach einem CAN-Bootlader
für den AT90CAN. Leider konnte ich dazu aber kein fertiges Projekt
finden.
Genauere Informationen gibt es unter fogendem Link:
Titel - Beitrag "CAN BUS Bootloader AT90CAN"
Ich hoffe es finden sich einige um dieses Projekt zu realisieren oder
die dabei helfen können.
Grüße martin