Forum: Mikrocontroller und Digitale Elektronik PIC: CAN-Bus(?) via Assembler ansteuern


von Julian W. (julian-w) Benutzerseite


Lesenswert?

Hallo,
hab jetzt schon einige Erfahrung in Sachen PIC gesammelt. Und nun geht 
es zu einem neuen Thema: dem CAN-Bus.

Dazu hab ich auch gleich ein paar Fragen:
- Wie kann ich mittels Assembler den CAN-Bus steuern? Welcher PIC 
benutzt
  wird, ist egal. Sollte nur ein PIC16F... oder PIC18F... sein.
- Hat jemand Code-Bsp. mit Schaltplänen (wegen Trancreciver etc.)?
- Stimmt es, dass es keinen Master/Slaves gibt, sonder nur Nodes (im
  Standard-Modus), die dann ein Signal aussenden und der der PIC,
  den es interessiert, es abfängt und auswertet?

Dass wären meine Fragen. Jedoch frag ich mich auch, ob dieser Bus 
überhaupt nötig ist. Will ein System ähnlich eines Haus-Buses bauen, 
jedoch nicht so komplex. Es gibt:
- 2 Nodes (A und B) mit 2x16 Bildschirm + LED'S
- 1 Node (C) mit 2x16 Bidlschirm + LED's + Tasten
- 1 Node (D), dass nur mit einem PC in Verbindung steht

Gesedet wird meistens von den Node D zu den anderen und von den 
entsprechenden Nodes wieder zurück. Jedoch kann es später auch 
vorkommen, dass Kommunikation zwischen den Nodes (z.B. A und C) 
stattfindet. Evtl. wird das System (je nachdem, wie gut es jetzt 
klappt), noch größer. Könnten am Ende bis zu 20 Nodes werden (im 
Idealfall). Sollte das Alternativ-Protokoll auch nicht ins schleudern 
bringen. Datenraten von bis zu 500kbits sollte das Alternativ-Protokoll 
auch beherschen.

Gibt es eigentlich Alternativen zum CAN-Bus in diesem Bsp?

Bisher habe ich zum CAN-Bus nur Info's auf sprut gefunden, aber leider 
keinen Code.

Wäre über Hilfe erfreut!

MfG
Julian

von Meister E. (edson)


Lesenswert?


von Harald A. (embedded)


Lesenswert?

Kurze Antworten zu deinen Fragen:

- Meinst Du CAN Ansteuerung ohne CAN-Baustein, d.h. Protokoll 'zu Fuß' 
abarbeiten? Ist theoretisch möglich, ist aber absolut sinnfrei. Entweder 
man nimmt einen Controller mit integrierten CAN oder man nimmt einen 
externen CAN-Controller wie den MCP2515 von Microchip. Dazu einen 
Bustransceiver wie den TJA1040, AT6660 oder MCP2550. Beispiele zur 
Ansteuerung findet man einige im Netz, ist recht einfach. Voraussetzung 
ist aber eine gewisse Grundkenntnis des CAN-Bus, aus deinen Ausführungen 
entnehmeich da gewisse Defizite.

- Wie gesagt, lese Dir die Grundlagen durch (zu Hauf im Netz), da wird 
einem auch relativ schnell klar, dass alle Busteilnehmer 
gleichberechtigt sind. Man spricht von Nodes, das ist richtig.

- Alternative wäre der RS485-Bus, ist vielleicht für den Anfang besser 
zu durchschauen. Allerdings muß man hier selber für Ordnung auf dem Bus 
sorgen (wer darf wann was senden), was die Sache schon wieder 
kompliziert macht. Hat man beim CAN-Bus die grundsätzliche Kommunikation 
funktionierend ist die Implementation hier SEHR einfach. Vorausgesetzt 
man muss nicht irgendwelchen Normen entsprechen.

- Sowohl RS485 als auch CAN können mit 500kbit arbeiten, in einer 
Ausbreitungslänge eines Hauses finde ich die Baudrate dann aber schon 
grenzwertig. Man muss schon sehr auf korrekte Abschlüsse und ordentliche 
Busverlegung achten. Weniger Probleme würden niedrigere Baudraten 
machen. Warum so hoch, was soll da denn noch drübergehen? Oder hast Du 
Angst wegen der Latenzen? Wäre unberechtigt, selbst bei 50kbit bekommst 
annehmbare Verzögerungszeiten für dein dargestelltes System (wie gesagt, 
wenn nicht gerade nebenher MP3s darüber versendet werden)

von Julian W. (julian-w) Benutzerseite


Lesenswert?

Die 500kbits wären für mein geplantes System schon nötig. Zwar im 
aktuellen Status NOCH nicht, später dann eben doch.

Gut, varianten gibt es ja viele.
Könnte mir aber keiner ein fertiges Beispiel posten. Kann von mir aus 
auch in C sein. Ich finde einfach nix passendes :(
Würde mir nämlich mal gerne eine fertige Programmstruktur ansehen.

Bsp. für Can-Bus (egal, ob extern Controler oder interner) für den PIC 
in C oder Assembler, kennt keiner soeine Seite.
Kann ruhig (bzw. ist besser) sehr einfach gehalten sein.

Das einzigste, was ich gefunden habe, ist:
http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515

Leider aber für den AVR :(

von Julian W. (julian-w) Benutzerseite


Lesenswert?

Bin wieder fündig geworden:
http://www.mput.de/projects/electronic/can/Verteilte-TemperaturRegelung-CAN.html


werde doch leider nicht so schlau daraus, wie die das angestellt haben.
Könntet ihr mir das kurz erklären und sich evtl. einer erbaremen, ein 
ganz einfaches Code-Bsp. zu schreiben?

von Harald A. (embedded)


Lesenswert?

Die Vorlage von www.kreatives-chaos.com habe ich auch verwendet, um 
damit den MCP2515 anzusteuern, ebenfalls mit einem PIC unter C. In 
erster Näherung kann man das 1:1 übernehmen. Meine Sources kann ich Dir 
aber nicht geben, sind kommerziell verwertet...

von Julian W. (julian-w) Benutzerseite


Lesenswert?

Könntest du mir evtl. ein paar Punkte sagen, die man ändern müsste.

von Harald A. (embedded)


Lesenswert?

Wie gesagt, im ersten Ansatz erstmal nur die SPI-Routinen, die müssen 
auf den PIC übertragen werden. Der Rest kann 1:1 so bleiben, wirklich!

von holger (Gast)


Lesenswert?


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.