Forum: Mikrocontroller und Digitale Elektronik Wo anfangen? Wie programmiere ich den Datenbus (CAN)


von Can C. (ican)


Lesenswert?

Hallo mikrocontroller Forum,

ich schreibe in der Hoffnung das ich hier die Erlösung meines Problems 
finde.

Das Problem: Ich möchte mich endlich mit Hardwarenaher Programmierung 
beschäftigen. Nun weiss ich nicht wo ich ansetzen soll. Hardwarenahe 
Programmierung ist allerdings ein zu allgemeiner Bereich.

Bis jetzt habe ich mich nur auf software Ebene beschäftigt. D.h. ich 
kann programmieren sei es in C, C++ und ganz besonders in Java.

Ganz speziell ist meine Frage zum CAN bus. Da geht es schon los. Ich 
kann mir darunter nichts vorstellen.

Was ist ein CAN bus? Ist es eine Steckkarte die ich beispielsweise an 
einem PCI Steckplatz an einem PC einsetze?

Was ist eine Spezification des CAN busses? Ist es eine Vorschrift für 
die Hardwareimplementierung um den CAN bus zu realisieren? Wenn ja, was 
sind das für Hardwareeinheiten?

Ist es ein CAN bus wenn ich beispielsweisen 3 pc's (Teilnehmer) mit 
jeweils CAN karten miteinander verbinde?

Wie sende ich die Signale/Daten untereinander? Gibt es da zu jeder Karte 
Treiber die mir das ansprechen der CAN Karte erlauben und ich dann bits 
und bytes senden kann? Reicht ein C code dann aus um dies umzusetzen?

Ihr merkt schon, dass ich vor lauter Bäumen den Wald kaum sehe... 
Vielleicht zeigt mir jemand ein Weg, wie ich da herausfinde.

Danke

von Robert Teufel (Gast)


Lesenswert?

Na denn willkommen in der Welt der Firmware.
Bei CAN wirst Du Dich mit Bits auseinandersetzen muessen anstellen von 
Parent and Child prozessen ;-)
Aber nun Spass beseite, es gibt einige recht gute Seiten ueber CAN.

Mein Favorit: http://www.canbus.us/ allerdings alles in Englisch.
Hier gibts dann Online Training, fuer umsonst.
http://www.esacademy.com/myacademy/

Schau Dir als erstes das CAN-Protokoll an, denn die Inhalte des 
Protokolls werden Dich bei CAN ueberallhin verfolgen.

Hoffe das hilft erst mal ueber die Anfangshuerden.
Die CAN Spezifikation von Bosch schreibt die Logik vor, nicht die 
Hardware. Sie gibt allerdings Empfehlungen fuer die Hardware. Bei der 
Software gibt es dann ein paar Protokolle, z.B. CAN-Open aber auch viele 
Firmen-interne.

Robert

von Blob! (Gast)


Lesenswert?

also can nimmt man i.d.R. NICHT um PC's miteinander zu vernetzen, 
vielmehr bietet CAN eine Grundlage um verschiedenste Steuer-, 
Erfassungs- und Regeleinheiten zusammen zu binden.

Z.B. Eine Steuerung von einer großen Maschine (z.B. eine "kleine" 
Spritzgußmaschine oder aber eine ganze Fertigungslinie bei BMW die ein 
komplettes Auto baut) spricht also über CAN die unterschiedlichsten 
Geräte von unterschiedlichen Herstellern an, Drehgeber die irgendwelche 
Messwerte erfassen, Roboterarme, Displays für Bediener....

CAN ist in soweite normiert, dass es einen Dachverband gibt welcher mal 
vor einiger Zeit das Datenprotokoll festgelegt hat, die Hardware muss 
natürlich dann auch bei allen geräten gleich sein.

CAN wurde soweit ich weiß von Bosch und Mercedes entwickelt, alternativ 
dazu gäbe es noch den Profibus von Siemens, dessen Nachfolger Profinet 
(auch von Siemens) oder nun neuere Feldbusse wie z.B. Powerlink oder 
Ethernet/IP.
Alle haben aber eines gemeinsam, sind sind lediglich eine Normierung 
damit Geräte für Maschinen in der gleichen Sprache kommunizieren könne.

Die Normierung für das (hauptsächlich in Europa) verwendete 
CAN-Protokoll ist das CANopen, in den USA dagegen wird eher das 
DeviceNET-Protokoll verwendet, beides über die Schnittstelle des 
Controller Area Network - CAN ;)

Wenn Du eine Spezifikation suchst, müsstst Du diese bei der "CAN in 
Automation" suchen, diese Unterlagen kosten aber etwas! (ähnlich wie die 
DIN-Norm)

Die elementaren Grundlagen findest Du aber auch so im Netz, z.B. bei den 
oberen zwei links


Als Hardware wir im "Bastlerbereich" gerne ein µC beliebiger Art 
zusammen mit dem Phillips CAN-Controller SJA1000 verwendet, dazu 
benötigst Du dann noch eine (Hardware-)Treiber (z.B. auch von 
Phillips/NXP den 82C251)

Es gibt aber auch µC's die einen CAN-Controller integriert haben, dann 
reicht ein µC und der entsprechende Treiber.

Wenn Du Dich wirklich mit CAN beschäftigen willst, ließ Dir die obere 
Lins durch und/oder schau Dir das Datenblatt des SJA1000 an, da wird 
auch recht viel "drum herum" erklärt! ;)

Und noch was: wenn Du aus der PC-Welt kommst - Hardwarenah wird in der 
Regel sequentiell prorammiert, damit hatte ich am Anfang Probleme das zu 
verstehen weil ich eben auch viel mit C++ und Objektorientiert geproggt 
habe, bevor in in die µC-Welt einstieg!

Und jetzt viel Spaß!

von Peter D. (peda)


Lesenswert?

Can Can wrote:
> Ist es ein CAN bus wenn ich beispielsweisen 3 pc's (Teilnehmer) mit
> jeweils CAN karten miteinander verbinde?

Eher nicht.
Der CAN-Bus dient dazu, daß sich Mikrocontroller direkt miteinander 
unterhalten ohne großen Protokoll-Wasserkopf und ohne Betriebssystem.

Wenn Du was mit CAN machen willst, solltest Du also erstmal mit MCs 
anfangen.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.