Für diese Übung brauchen wir ein CAN Board mit dem USB_CAN.hex Programm (board 1) und ein zweites CAN Board (board 2). Board 2 ist Board 1 ähnlich, jedoch wurde es noch nicht programmiert. Wir nutzen außerdem ein USB-CAN-Terminal Programm um die CAN Kommunikation zu visualisieren.
Bild 1.21: Setup und Alternative
Das linke Bild zeigt ein Setup dass wir für diese Aufgaben nutzen werden. CAN-Messages werden mit dem CAN-USB Terminal Programm dargestellt. Das rechte Bild zeigt ein alternatives Setup. CAN-Messages können auch auf dem LCD angezeigt werden. Wichtig: Den Anweisungen in “Das Board testen”, bezüglich der Stromquellen, müssen unbedingt gefolgt werden! Jumper TERM an Board 2 muss genutzt werden um den Abschlusswiderstand zu nutzen! Jumper JP1 an Board 1 und Board 2 muss genutzt werden um Board 2 über deen CAN-Bus mit Strom zu versorgen.
Aufgabe: Nutze den 10-Wege Flachbandkabel um die beiden Boards zu verbinden. Stelle sicher, dass die Anschlüsse richtig angebracht sind, wie bei bei “1” am Board gezeigt wird. Das rote Kabel muss mit dem Pin “1” verbunden werden. Programmiere den ATmega32 an Board 2 so, dass eine frei wählbare Message gesendet wird. Nutze den “Beispielcode um eine CAN Message zu schicken”. Kompiliere den Sourcecode und flash das Programm in den ATmega32. Nutze das CAN-USB Terminal Programm wie im Kapitel “Das CAN-USB-Terminal nutzen” beschrieben um jegliche Messages welche von Board 1 empfangen werden aufzuzeichnen.
#include <avr/io.h> #include <avr/pgmspace.h> #include <util/delay.h> #include "can.h" int main(void) { // insert your code here while (1) { // insert your code here } }
Für diese Übung brauchen wir ein CAN Board mit dem USB_CAN.hex Programm (board 1) und ein zweites CAN Board (board 2), genau wie in Übung 1. Aufgabe: Programmiere den ATmega32 an Board 2 so, dass er CAN Messages empfangen kann. Nutze das CAN-USB Terminal Programm um CAN Messages von Board 1 zu Board 2 zu senden. Erstelle eine Struktur des Types “can_t” for die empfangende Message. Nutze passende Methoden welche von “can.h” vorgegeben werden, wie z.B “can_check_message” und “can_get_message” um den Inhalt der CAN message in der Struktur zu speichern. Nutze die Methode “getled”, welche in “led.h” gegeben wird und auch im “Beispielcode für LED” vorkommt, um eine beliebige LED an zuschalten, je nach Inhalt der empfangenden Nachricht. Die Header-Datei “led.h” nicht vergessen!
Beispiel: Board 1 sendet eine CAN Message “aabb”. LED 1 an Board 2 wird eingeschaltet. Board 1 sendet eine CAN Message “ccdd”. LED 1 on board 2 wird ausgeschaltet.
Für diese Übung nutzen wir zwei CAN Board, welche nicht an den PC angeschlossen werden. Einfach den USB Kabel ziehen und den AC/DC-Adapter nutzen um das Board mit Strom zu versorgen. Die Boards bleiben per Flachbandkabel verbunden. Board 2 wird indirekt über Board 1 mit Strom versorgt.
Aufgabe: Füge die Programme von Übung 2 mit dem von Übung 1 zusammen, so dass es sowohl Senden als auch Empfangen kann. Die Aufgabe ist es, beide Boards mit dem gleichen Programm zu flashen, und eine Verbindung zwischen denen herzustellen. In der “while-loop” Funktion des Hauptprogramms, hole den Status der Pins D6 und PD7 um zu überprüfen ob KEY1 oder KEY2 gedrückt werden. Stelle sicher, die Pull-Up Widerstände an diesen Pins (außerhalb des while-loop) zu aktivieren. Sonst sind die Pins “floating” ohne einen definierten Status. Wenn Knopf KEY1 gedrückt wird, sende eine CAN-Message, welche die LED an dem anderen Board aktiviert. Wenn KEY2 gedrückt wird, sende eine CAN-Message, welche die LED am anderen Board deaktiviert.
Beispiel:
Board 1 sendet eine CAN Message “aabb”. LED 1 an Board 2 wird eingeschaltet.
Board 1 sendet eine CAN Message “ccdd”. LED 1 an Board 2 wird ausgeschaltet.
Board 2 sendet eine CAN Message “aabb”. LED 1 an Board 1 wird eingeschaltet.
Board 2 sendet eine CAN Message “ccdd”. LED 1 an Board 1 wird ausgeschaltet.