CAN mit ATmega

Da ich bei der Arbeit viel mit dem CAN-Bus arbeite, wollte ich es zuhause auch mal mit den ATmegas ausprobieren.

Verwendet wurden:

  • ATmega8
  • MCP2515 (CAN-Controller)
  • MCP2551 (CAN-Pegelwandler)
  • Lego Kreuzung

Als Aufgabe habe ich mir eine Ampelsteuerung gestellt:

  • 1x Master
  • 4x Ampel mit
    • Fahrzeugampel
    • Fußgängerampeln
    • Taste für Fußgänger mit Blinkanzeige

Der Master steuert alle Ampelschaltungen. Die Ampeln haben keine Logik, sie reagieren nur auf die Befehle des Masters.
Wenn die Taste von den virtuellen Fußgängern gedrückt wird, wird dies über den CAN-Bus zum Master gemeldet und erschaltet wiederrum die Blinkanzeigen der Tasten an.So ist auch eine Multimaster Komponente enthalten. Es können alle Teilnehmer jederzeit auf dem CAN senden. Dazu sollte die CAN-Bus-Auslastung unter 50% liegen. Datenkollisionen, CRC-Prüfung der Daten, erneutes Anfordern der Daten übernimmt der MCP2515 autonom.
Dies ist der große Vorteil gegenüber RS485, RS232, I²C usw.

Ampel CAN

 

 

 

 

Folgende Botschaften werden auf dem CAN geschickt:

  • 4x Kommando-Botschaft [Master -> Ampel1-4]
    • Fahrzeug: Rot, Rot-Gelb, Gelb, Grün aktivieren
    • Fußgänger1: Rot, Grün aktivieren
    • Fußgänger2: Rot, Grün aktivieren
    • Blinklicht Taste Fußgänger
  • 4x Status-Botschaft [Ampel1-4 -> Master]
    • Status Fahrzeugampel
    • Status Fußgänger1
    • Status Fußgänger2
    • Taste Fußgänger gedrückt, nicht gedrückt

Der Master sendet immer einen Befehl aus und wartet max. 200ms ob sich der Status der Ampel wunschgemäß ändert hat.
Sollte sich der Status nicht korrekt ändern, wird alles zyklisch auf rot geschaltet.

Der erste Aufbau war auf 5 Steckbrettern. die 4 Ampel-Steckbretter waren identisch aufgebaut. Der einzige unterschied ist die CAN-Adresse in der Software.

Steckbrett Ampel

Der finale Aufbau ist mit geäzten Platinen und einer Lego-Kreuzung. Bild folgt.

You may also like...