Gast
#1559623
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