Elektronik und Roboterbau
AVR, avr-gcc, CAN, CPLD, Elektronik, Mikrocontroller, MSP430, PIC, Roboter, Schaltungen, Sensoren, Software, Testboards
Tags: AVR,
Software,
CAN,
avr-gcc
Stand: 21. November 2007, 18:53
2 Kommentar(e)
Die Bibliothek ist für den Roboterclub Aachen e.V. entstanden. Vor zwei Jahren stand ein Wechsel des internen Bussystems an, die Wahl fiel dabei auf den CAN-Bus, da er eigentlich ideal für diese Anwendung ist.
Es gab nur leider keine Open-Source Bibliotheken für die Ansteuerung der gebräuchlichsten CAN-Controller, so dass selbst schreiben angesagt war.
Die Bibliothek ist jetzt seit einiger Zeit in Gebrauch und wurde dabei vom MCP2515 auf die anderen CAN-Controller erweitert.
Die Bibliothek braucht ca. 1500 Byte Flash mit allen Funktionen. Verwendet man keine dynamischen Filter sind es 370 Byte weniger.
Für den MCP2515 gibt es zwei Arten die Masken und Filter anzusprechen, zum einen “statisch” mit einer Liste die zur Compile-Zeit angelegt wird oder “dynamisch” während der Laufzeit, dann aber mit größerem Flash Verbrauch.
Die AT90CANxxx kennen nur die dynamischen Filter.
Gleiches gilt für den SJA1000. Dieser bietet zwar theoretisch zwei Filter für Standard-Nachrichten bzw. einen für Extended-Nachrichten, in der Praxis sind diese aber mehr oder weniger unbrauchbar.
Zuerst einmal muss die Bibliothek erstellt werden: Dazu ändert man die Datei ‘config.h’ für seine Konfiguration ab und stellt im Makefile den verwenden AVR-Typ ein.
Dann kann die Bibliothek gebaut werden:
make lib
Jetzt sollte eine Datei ‘libcan.a’ entstanden sein. Zusammen mit der Headerdatei ‘can.h’ können diese beiden Dateien jetzt in das eigene Projektverzeichnis kopiert werden.
Um die Funktionen wirklich nutzten zu können muss nur noch den Linker mitgeteilt werden, dass der die Bibliothek einbinden soll. Bei dem Standard-WinAVR-Makefile muss dazu die folgende Zeile hinzugefügt werden (um Zeile 266ff):
...
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
LDFLAGS += -L. -lcan # hinzufügen
Der Linker sucht dann automatisch im aktuellen Verzeichnis nach der Datei libcan.a und fügt die benötigten Funktionen (und nur die) in den Quellcode ein.
Ein Program was einfach eine Nachricht per CAN verschickt könnte folgendermaßen aussehen:
In der Datei can.zip gibt es außerdem im demo-Ordner ein fertiges Programm für das CAN-Testboard, welches am Anfang eine Nachricht verschickt und danach alle Nachrichten die es empfängt mit einem um Eins vergrößertem Identifier zurückschickt.
Die Bibliothek steht unter einer BSD-Lizenz und darf damit frei verwendet werden.
Wenn jemand Änderungen vornimmt würde ich bitten mir oder jemand anderem aus dem Roboterclub diese zukommen zu lassen, damit wir sie gegebenenfalls in die Software einbauen können, so dass dann alle etwas davon haben.
2.1.08:
Kommentare
# Wolfram meinte am 21. März 2008, 18:26 dazu:
Hallo Fabian, sehr schöne CAN Lib. Funktioniert auf Anhieb mit ATMEGA 644
Grosses LOB !!! !!! !!! BEAR WARE License ist Dir sicher ;-)
# Christoph meinte am 21. März 2008, 20:03 dazu:
Ich bin begeistert!
Da ich in naher Zukunft Prozessstraßen für die Industrie entwickeln (und verkaufen) werde, die als Baukastensysteme über CAN vernetzt sind, wird mir diese Bibliothek viel Arbeit abnehmen. Wenn ich Verbesserungen habe, werde ich mich auf jeden Fall melden.
Und selbstverständlich gibt es bei den ersten verkauften Geräten eine entsprechende Spende an den Roboterclub der RWTH. Wenn ich nicht schon mehr als genug Arbeit hätte - autonome Roboter wären ein tolles Betätigungsfeld.
Nochmal ein herzliches Dankeschön für die Bibliothek und vielen Grüße aus der Eifel,
Christoph
Deine Meinung: