Elektronik und Roboterbau
AVR, avr-gcc, CAN, CPLD, Elektronik, Mikrocontroller, MSP430, PIC, Roboter, Schaltungen, Sensoren, Software, Testboards
Tags: AVR,
Schaltungen,
CAN
Stand: 7. September 2008, 19:04
36 Kommentar(e)
Ein kleiner Adapter um auch einen CAN Bus bei 1 MBit mit voller Auslastung mithören zu können.
ACHTUNG: Durch die vielen SMD Bauteile ist die Platine sicher nichts für Löteinsteiger. Mit ein bisschen Übung sollte es aber kein Problem sein.
Die Bauteile kosten mit Gehäuse insgesamt ca. 36 Euro bei Reichelt (Bestückungsplan & myReichelt-Warenkorb gibt’s unten). Allerdings bekommt man den ADUM1201 nicht bei Reichelt, den müsste man zum Beispiel über Farnell oder ähnliche beziehen.
Will man die galvanische Trennung nicht nutzen, so kann man den ADUM1201 und den DC/DC-Wandler auch weglassen bzw. überbrücken.
Der Taster den man unten auf den Bildern sieht dient zum Umschalten zwischen Betriebsmodi sowie zum Starten des Bootloadermodus. Er wird auf Position 2 (näher zur USB Buchse) des Jumper JP1 angeschlossen und sollte im gedrückten Zustand die beiden Pins kurzschließen.
JP4 hat nur historische Bedeutung, dort konnte (zusammen mit JP1) ein DIP-Schalter eingelötet werden. Allerdings erwies der sich als eher unpraktisch, daher wird JP4 jetzt nicht mehr verwendet.
Als erstes wäre zu überprüfen ob der FTDI Chip korrekt arbeitet, beim Einstecken des Adapter sollte er als neuer COM Port erkannt werden. Für Windows braucht man allerdings noch einen Treiber dafür, unter Linux ist der ab 2.6.9 im Kernel enthalten, braucht also nicht mehr extra installiert zu werden.
Dann wird der Bootloader programmiert:
Als erstes muss die Datei stk500boot.hex per ISP aufspielt werden (das ist eine auf den CAN Debugger angepasst Version des stk500v2-Bootloader von Peter Fleury).
ACHTUNG:
Der Lötjumper SJ1 muss in Richtung des AT90CAN128 gebrückt werden um ihn programmieren zu können. Erst dann ist die Reset Leitung des ISP-Steckers mit des AT90CAN128 verbunden. Lötet man den Jumper auf die andere Position, so kann der AT90CAN128 die Reset-Leitung aktiv bedienen. Damit wäre es möglich den Adapter auch als USB Programmer zu verwenden, es bisher allerdings noch keine Firmware dazu.
Danach die Fusebits setzen:
| Fusebyte | Wert |
|---|---|
| hfuse | 0xD8 |
| lfuse | 0xFF |
| efuse | 0xFD |
Per avrdude geht dies zum Beispiel über folgende drei Kommandos:
avrdude -p at90can128 -P xxx -c yyy -u -U hfuse:w:0xD8:m
avrdude -p at90can128 -P xxx -c yyy -u -U lfuse:w:0xFF:m
avrdude -p at90can128 -P xxx -c yyy -u -U efuse:w:0xFD:m
Damit wäre der Bootloader einsatzbereit und man kann den ISP Programmer weglegen. Hält man jetzt beim anstecken des CAN Debuggers an den USB Port den Taster gedrückt sollten die beiden Status-LEDs rot leuchten und der Bootloader startet.
Jetzt kann der CAN Debugger direkt über das STK500v2 Protokoll (z.B. per AVRStudio oder avrdude) programmiert werden. Für avrdude würde das folgendermaßen aussehen:
$ avrdude -P xxx -p at90can128 -c stk500v2 -U flash:w:can_debugger.hex
Nach einem abziehen und neu anstecken des Adapters sollten danach alle LEDs kurz aufblinken und dann nur eine der Status-LEDs sowie die Power-LED an bleiben. Der CAN Debugger ist damit einsatzbereit.
Um die Firmware dann später zu erneuern einfach wieder beim einstecken den Taster gedrückt halten und der Bootloader ist wieder bereit um den AVR neu zu programmieren.
Über den Taster kann man zwischen den verschiedenen Modi umschalten. Dazu hält man ihn gedrückt bis eine der Status LEDs zu blinken anfangt. Mit jedem weiteren Druck auf den Taster schaltet man jetzt zwischen den Modi hin und her.
Nach ungefähr vier Sekunden ohne Aktion hört die LED auf zu blinken und der neue Modus wird übernommen.
Das Projekt steht unter der GPL und darf unter deren Bedingungen frei verwendet werden. Eine Kopie der GPL liegt dem Projekt bei.
http://www.mictronics.de/?page=can_bus
http://martinsuniverse.de/projekte/caninterceptor/caninterceptor.html
Kommentare
# Reinhard W. meinte am 20. Oktober 2008, 14:16 dazu:
Hallo, also respekt zu diesen und natürlich auch deinen ganzen anderen Projekten, find ich top. Mal ne frage zu der platine auf edn Bildern, also die ohne lötstopplack, hast du die selbst gemacht? Wenn ja wie bekommt man solche durchkontaktierungen als hobbybastler her? Wo lässt du die platinen fertigen?
Vielen Dank!
# Fabian Greif meinte am 20. Oktober 2008, 15:56 dazu:
Nein, die Platinen sind nicht selbst geätzt. Ich habe sie genauso wie die mit Lötstopplack bei PCB-Pool fertigen lassen.
# Florian meinte am 14. Januar 2009, 08:16 dazu:
Hallo, da der Debugger ja Lawicel CAN232/CAN2USB kompatibel ist gehe ich mal davon aus das er auch mit CANHacker kompatiebel ist, oder? Kann er nur Höhren oder auch Senden?
# Fabian Greif meinte am 14. Januar 2009, 11:37 dazu:
Ich gehe davon das er CANHacker kompatibel ist, habe das aber noch nie ausprobiert. Würde mich da über Rückmeldungen freuen!
Der Debugger kann natürlich auch senden.
# Florian meinte am 14. Januar 2009, 16:33 dazu:
Na dann… werde ich mal ne platte machen und berichten
# Guido meinte am 14. Januar 2009, 19:35 dazu:
http://www.analog.com/en/interface/digital-isolators/adum1201/products/product.html
unten wo Samples steht ;-) ging echt schnell ~4 Tage.
!Nur auf die Verfügbarkeit achten!
Vielen Dank und tolle Arbeit!
# Benedikt Patt meinte am 23. Januar 2009, 11:03 dazu:
Ich habe den Can Debugger erfolgreich mit CANHacker unter Windows getestet. Zumindest den Datenempfang, Beim senden konnte ich nicht testen ob wirklich was gesendet wird, ich gehe aber davon aus ;)
Der Aufbau und das Einspielen der Firmware haben wirklich reibungslos geklappt.
Danke für das tolle Projekt!!
Achso, den ADUM1201 habe ich auch als kostenloses Muster bestellt, das ging fast schneller als die Reichelt Bestellung :)
# Peter meinte am 19. März 2009, 22:49 dazu:
Ich habe ein paar Probleme den Debugger in Betrieb zu nehmen. Der Aufbau und das Flashen waren problemlos. Der PC erkennt ein neue serielle Schnittstelle. Beim Anstecken gehen kurz alle LEDs an. Danach leuchten Die LEDs für Betriebsanzeige und Modi. Die Modi lassen sich auch wie gewünscht umschalten. Ich habe in den Hardware-Einstellungen zur seriellen Schnittstelle bereits verschiedene Einstellungen versucht. Mein Terminal (Docklight) zeigt jedoch nur im Reset-Moment etwas Müll an und wenn ich den Debugger an ein CAN-Netz hänge (dann nur für wenige Augenblicke). Jedoch leider nichts sinnvolles. Auch Versuche mit der Software CANHacker blieben erfolglos (Es wurde kein Device erkannt). Habe ich vielleicht irgendwelche Einstellungen vergessen?
# Peter meinte am 20. März 2009, 11:34 dazu:
Heute bin ich dazu gekommen den CANDebugger über JTAG zu debuggen. Ich stelle im Shell-Modus fest, dass z.B. Chars wie ‘V’ oder ‘v’, die über ein Terminal an den Controller gesendet werden als ‘W’ und ‘w’ dort ankommen. Darauf hin habe ich sogar neue Treiber von FTDI installiert - aber der gleiche Effekt. Die Daten der seriellen Schnittstelle sind auf 9K6 8N1 und kein Handshaking eingestellt. Andere Varianten habe ich auch schon probiert. Langsam werde ich ratlos.
# Peter meinte am 20. März 2009, 12:11 dazu:
Ok, noch ein Nachtrag: Ich habe mir mal das Alphabet und Zahlen 0 bis 9 im Programmcode an den PC senden lassen. Das Ergebnis ist dubios. Gesendet: a b c d e f g h i j k l m o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9. Empfangen: a c c e e g g i i k k m m … 1 3 3 5 5 usw. Auch wenn ich die Reihenfolge der Zeichen ändere, werden immer für die gleichen Zeichen das nächste Zeichen im Ascii-Code verwendet. Es werden also nur ungerade Ascii-Zeichen korrekt übertragen!
# Peter meinte am 20. März 2009, 12:58 dazu:
Hallo Fabian. Du kannst meine letzten Mails löschen. Ich hab den Fehler. PIN51 des AT90CAN128 war nicht richtig verlötet. Deshalb war BIT0 immer 1 (“hing in der Luft”) und es kamen nur ungerade ascii-Zeichen an. Schönes Projekt.
# Thomas meinte am 23. April 2009, 12:08 dazu:
Habe leider auch Probleme bei der Inbetriebnahme. Aufbau und Flashen war problemlos, allerdings leuchten beim Einschalten die Led 2 und 3 nicht kurz auf. Signal vom CAN-Bus kann ich bis zum Prozessor verfolgen, allerdings kommt auf der PC-Seite nichts an, Led 2 und 3 bleibt dunkel. Im Terminalmodus bekomme ich auf ein ?V? die Antwort ?1213?. Wo kann und sollte ich weitersuchen?
# John meinte am 26. April 2009, 22:55 dazu:
Könnte man den CAN Debugger auch ohne viel Aufwand mit einem SD-Karten-Slot zu einem autonomen CAN Logger erweitern? Bis zu welcher CAN-Bus Geschwindigkeit könnte man dann mitloggen?
# Fabian Greif meinte am 29. April 2009, 15:53 dazu:
Hallo John,
Das sollte machbar sein. Auf dem Programmierstecker liegt ja die SPI Schnittstelle, dort hat man alle Signale die man für eine SD Karte benötigt. Man bräuchte lediglich noch Pegelwandler und eine Spannungsversorgung.
Mit einer der diversen MMC/SD Bibliotheken für AVRs die im Internet kursieren sollte auch die Software relativ einfach zu machen sein, Flash ist ja genügend vorhanden, nur mit dem RAM muss man schauen. Allerdings kann man einige Puffer kleiner wählen, dann ist auch dort genügt freier Platz.
Bei einer Schreibrate von 40 kB/s sollte man einen Bus mit 50-125 kBit mitloggen können wenn man ein Ascii Format nimmt, bei binären Daten eventuell mehr. Ist jetzt allerdings nur grob überschlagen, man müsste das mal wirklich nachrechnen.
Grüße Fabian
# Dirk E meinte am 20. Mai 2009, 10:19 dazu:
Kurz Info für alle die den Debugger nachbauen, mit der Software CANHACKER für Windows kann man Senden und empfangen. Ist ganz praktisch für die ersten Test, besonders wenn man sich noch nicht sicher ist ob man die Platinen richtig aufgebaut hat.
Gruß
Dirk
# Nils meinte am 22. Mai 2009, 13:55 dazu:
Kurzer Erfahrungsbericht, da ich ein paar Probleme bei der Inbetriebnahme hatte:
Anfangs wurde immer ein unbekanntes USB Gerät gefunden und die PC-Kommunikation klappte nicht (Win XP). Es stellte sich heraus, dass ich von Reichelt keine 47pF sondern etwas deutlich größeres (ca. 200nF) geliefert bekommen hatte. Nach entfernen von C8 und C9 wurde das Gerät auch ohne 47pF richtig erkannt.
Der Bootloader verhält sich bei mir nicht wie beschrieben. Halte ich den Taster beim Anstecken gedrückt, leuchten keine LEDs. Die Funktion des Bootloaders konnte ich nicht testen.
Das Programm und die Fuses lassen sich aber natürlich auch per ISP einspielen/einstellen.
Im Shellmodus z.B. in Verbindung mit HTerm muss “send on enter CR” eingestellt werden, sonst tut sich gar nichts. Standardmäßig ist kein Filter eingetragen und es wird nichts empfangen. Ein “help” oder “?” liefert eine kleine Hilfe. Für eine schönere Ausgabe im “Received Data” Fenster sollte man noch “Newline at CR” einstellen. Das stoppen der Nachrichten mit dem Befehl “stop” funktioniert nicht und scheint nach einem Blick in den Code auch nicht implementiert zu sein. Ein Auslesen der eingestellten Bitrate per “get bitrate” fehlt.
Erfolgreiches Empfangen und Senden mit CANhacker V2.00.00 Dort unter “Settings” den Comport und die Bitrate einstellen und dann auf “Connect” klicken. Im “Tracer-Mode” muss erst auf den roten Punkt (record) geklickt werden, um Nachrichten sehen zu können.
Ich habe den Transistor zum Schalten des Abschlusswiderstandes durch einen echten Schalter ersetzt, um den Widerstand auch im USB-Modus zuschalten zu können. Evtl. mach ich den Transistor wieder rein und lege diese Funktionalität mit auf den Taster.
Alles in allem ein schönes Projekt. Dankeschön!
# Nils meinte am 26. Mai 2009, 18:06 dazu:
Nachtrag:
Mit CANHACKER empfange ich nur etwas, wenn ich bei “Settings” den Haken bei “listen only” wegmache!!!
# Nils meinte am 31. Juli 2009, 23:24 dazu:
Nachtrag 2:
Aus aktuellem Anlass habe ich mich noch einmal mit der Bootloaderproblematik beschäftigt. Das Problem waren die fehlenden Kondensatoren C8 und C9. Mangels 47pF habe ich es mit 33pF probiert und es funktioniert.
Halte ich beim Anstecken des Debuggers den Taster gedrückt, leuchten nun die beiden Status-LEDs rot. Anschließend kann der Debugger mit dem AVR-Studio über USB programmiert werden. Dazu wählt man im “Connect Dialog” das STK500 als Programmer und den passenden Comport aus. Jetzt hat man anscheinend genau einmal die Möglichkeit mit dem AVR zu kommunizieren. Flashe ich sofort das Programm, dann klappt es. Lese ich aber zuerst die Signatur aus, kann ich danach nicht mehr programmieren. Dies klappt erst wieder nach einem reconnect.
Wahrscheinlich hat keiner Probleme mit dem Bootloader gehabt, da direkt passende Kondensatoren verwendet wurden, aber vielleicht hilft dieser Hinweis ja noch jemandem weiter…
Übrigens habe ich die Software jetzt so modifiziert, dass man mit einem kurzen Tastendruck das Relais schalten kann.
# Ronny M. meinte am 19. August 2009, 14:27 dazu:
Hallo Fabian,
kann man deinen CAN-Debugger auch fertig bestückt kaufen? Habe leider beim löten 2 linke Hände und zittere und traue mir das mit den SMD nicht zu.
Wäre toll, wenn du mir helfen könntest, da ich das mit dem Bootloader einfach klasse finde.
Danke schon mal im voraus.
# Fabian Greif meinte am 24. August 2009, 15:49 dazu:
Du solltest eine E-Mail bekommen haben.
# funnyfrish meinte am 27. August 2009, 16:14 dazu:
Hi Fabian,
super Arbeit hast du da geleistet. Wirklich Interessant. Nur bin ich was löten angeht nicht so geduldig :)
Ich hätte auch interesse an einem fertigen CAN-Debugger (bestückt).
Würde mich auch über eine E-Mail mit Info freuen.
Danke
# Frank B meinte am 17. September 2009, 00:27 dazu:
Hi Fabian,
bin zufällig auf deine klasse Seite aufmerksam geworden und finde hier die Lösung für ein schon lange “gehegtes” Problem. Es gilt erstmal, die gesamte Buskommunikation mitzuhören, um die interessanten IDs herauszufinden und später möglichst nur noch diese per HW-Filter zu lesen, geschrieben werden muß nichts. Meine Domäne liegt eher bei größeren embedded Systemen und dein Projekt ergänzt meines optimal. Ich hätte auch Interesse an einem fertig bestückten CAN Debugger, würde es ansonsten aber auch nur mit der Platine versuchen.
Danke in jedem Fall für dieses Projekt, Frank
# Jan meinte am 24. September 2009, 16:49 dazu:
Hi Fabian, zufällig bin ich auf dein Projekt gestoßen. Mich interessiert insbesondere der Bootloader, den ich bei mir bis heute nicht zum funktionieren bekomme. könntest du mir dein Makefile schicken? Wenn ich bei mir die Bootloaderadresse auf ?BOOTLOADER_ADDRESS =1FC00? einstelle, und ?make? ausführe, erhalte ich jedes Mal ein Error
# Fabian Greif meinte am 24. September 2009, 22:17 dazu:
In dem Ordner vom Bootloader ist das Makefile welches ich verwende.
Was für einen Fehler denn?
# Jan meinte am 25. September 2009, 09:22 dazu:
Hallo Fabian, das Makefile in dem Ordner muss ja aber noch angepasst werden und es wäre nett wenn du mir die angepasste version schicken könntest. Der Fehler:
# Fabian Greif meinte am 25. September 2009, 23:01 dazu:
Du versuchst einen Bootloader der 1818 Bytes benötigt (gerade hier ausprobiert) in eine 512 words (=1024 Byte) große Section zu verschieben. Das kann nicht funktionieren, daher beschwert sich der Linker auch das es nicht passt. Du musst da schon mindestens 1024 words spendieren.
Unter Downloads liegt jetzt auch die von mir für den CAN-Debugger angepasste Version.
Grüße Fabian
# Jan meinte am 29. September 2009, 11:21 dazu:
Vielen Dank für die Info, aber irgendwie bekomme ich den Bootloader immer noch nicht zum laufen. Im stk500-File steht, dass noch Lockbits gesetzt werden müssen? Was ist die Konsequenz, wenn ich dies nicht tue
# Fabian Greif meinte am 29. September 2009, 15:44 dazu:
Hi,
Die müssen nicht gesetzt werden, zumindest habe ich das bisher noch nie getan. Die Lockbits dienen ja nur dazu den Zugriff auf den Controller zu sperren.
Die Fusebits hingegen müssen natürlich passend eingestellt werden, insbesondere die Größe der Bootloadersektion ist entscheidend.
Grüße Fabian
# Jan meinte am 30. September 2009, 10:46 dazu:
Vielen Dank für die Antwort. Wenn ich die Fuse-Bits wie oben im Text einstelle, wird der JTAG deaktiviert. Ich habe jedoch leider keinen ISP-Programmer, darum muss ich es aktiviert lassen. Könnte es vieleicht daran liegen, das der Bootloader nicht funktioniert?
# funnyfrish meinte am 6. Oktober 2009, 18:00 dazu:
Gibt es zu diesem Projekt auch ein Beispielprogramm mit Quellcode um CAN Nachrichte zu verschicken/empfangen über ein GUI?
Am besten ein Visual Studio Projekt in C/C++/C#
# Fabian Greif meinte am 7. Oktober 2009, 16:41 dazu:
Nein, bisher nicht. Eigene Projekte sind aber immer herzlich willkommen.
# Frank meinte am 9. Oktober 2009, 03:12 dazu:
Hallo,
ich habe den Debugger jetzt aufgebaut. Was muss ich bei PonyProg für die Efuse eingeben? LByte und HByte ist soweit klar. Hat das was mit Lock2 zu tun? Muss da ein Häckchen hin?
Gruss Frank
# Fabian Greif meinte am 9. Oktober 2009, 13:06 dazu:
Zu PonyProg kann ich dir nichts sagen, da ich das schon sehr lange nicht mehr verwendet haben.
In Extended-Fuse-Byte (EFuse) muss “BODLEVEL0” programmiert werden, die anderen (TA0SEL, BODLEVEL1, BODLEVEL2) nicht. “Lock2” ist sicher nicht Teil des EFuse-Bytes, das gehört vermutlich zu den Lock-Bits. Die sollten nicht programmiert werden.
Auf dem Fuse-Bit-Calculator kann man sich das auch nochmal grafisch anschauen. Einfach bei “Current settings” die oben angegebenen Werte für L-,H- und EFuse eingegeben.
Grüße Fabian
# Frank meinte am 17. November 2009, 20:11 dazu:
Hallo, ich versuche gerade den Can-Bus von meinem Opel auszulesen. Dazu brauch ich eine Geschwindigkeit von 95,2 Kbps. Wie kann ich das bei deinem Can Debugger einstellen/ändern? Danke und Gruss Frank
# Fabian Greif meinte am 18. November 2009, 11:43 dazu:
Hallo Frank,
du müsstest dir im Datenblatt des AT90CAN128 die Sektion zur Berechnung der CAN Bitrate raussuchen und schauen wir man für 95,2 Kbps die Register CANBT1-3 einstellen muss. Im schlechtesten Fall kommt man mit 16 MHz gar nicht auf diese Geschwindigkeit, dann müsstest du einen anderen Quarz im Debugger einlöten.
Wenn du die Werte hast musst du sie in der Datei at90can.c der CAN-Bibliothek eintragen, am einfachsten ist es einen der vorhandenen Einträge ersetzen. Dann die Bibiothek neu übersetzen und dann damit die CAN Debugger Software neu compilieren.
Einen einfacheren Weg gibt es leider nicht.
Grüße Fabian
# Tobias meinte am 25. November 2009, 17:41 dazu:
Hallo,
Ich habe eine Frage an die CAN-Experten hier welche Software nutzt ihr zum CAN debuggen? Also einfach nur zum mithören. Am liebsten wäre mir ein Linux Tool welches mit dem hier vorgestellen CAN-Debugger zusammen läuft.
Vielen Dank schonmal Tobias
Deine Meinung: