July 22nd, 2017

Unterschiede der CAN Transceiver im Highspeed-Betrieb2

Vor einiger Zeit habe ich in einem Beitrag die Unterschiede zwischen dem MCP2551 und dem PCA82C250 aufgelistet. Ich hatte ebenfalls geschrieben, dass sie bis auf Kleinigkeiten keine nennenswerte Unterschiede haben. Das muss ich an der Stelle revidieren.

Beim CAN-Bus im Highspeed-Betrieb müssen die Leitungen CAN-H und CAN-L auf die Referenzspannung von 2,5V gezogen werden (5V CAN). Der große Unterschied ist, dass der MCP2551 das intern macht, der 82C250 jedoch nicht. Dort muss man das selbst bei den Knoten implementieren. Erkennen kann man das in den Block-Diagrammen der Chips im Datenblatt und beim Oszilloskopieren des Signals. Meiner Meinung nach ist das nicht nur gut zu wissen, sondern auch ein gravierender Entscheidungspunkt bei der Entwicklung eines eigenen Systems.

Tags:


Galerie und Lightbox1

Nichts ist so beständig wie die Veränderung! Jeder kennt den Satz – so ist es auch bei mir. Ab sofort sind alle Bilder, die in Beiträgen verwendet wurden und werden, in einer Flickr Galerie zu sehen. Neben dem Home-Button ist nun ein neuer Button “Galerie” entstanden. Dort kann man sich alle Bilder nach Alben sortiert ansehen.

Des Weiteren werden die Bilder nun etwas schöner geöffnet, wenn man diese anklickt. Dafür ist das Tool Lightbox im Einsatz. Die Beiträge enthalten selbstverständlich weiterhin Bilder, wie ich sie einfüge werde ich noch sehen. Evtl. werden sie direkt aus Flickr mit dem Tool Flickr4Writer eingefügt und so direkt mit der Galerie verlinkt. Die bestehenden Beiträge werde ich nicht verändern.

Tags: , ,


Flickr4Writer0

Schon länger benutze ich den recht komfortablen Windows Live Writer um meine Beiträge für das Blog zu erstellen, da mich ein Freund darauf gebracht hatte. Seit kurzer Zeit probiere ich Flickr und Lightbox aus um ein paar Veränderungen durchzuführen, es hieß jedoch immer, dass man im Windows Live Writer keine Flickr Bilder einfügen kann.

Tim Heuer hat dafür genau das richtige Plug-In entwickelt. Sein Flickr4Writer integriert sich perfekt bei den Writer Plug-Ins und arbeitet tadellos! Man gibt einfach sein Flickr Benutzername ein und autorisiert das Plug-In – fertig. Eine Upload Funktion hat es nicht.

Tags: ,


Externe Interrupts mit dem AVR leicht gemacht3

Die Unterschiede zwischen Polling und Interrupt sind in einem älteren Beitrag schon aufgelistet. Theorie findet man jedoch sehr oft. Hier findet ihr ein einfaches Beispiel wie man einen Taster per Interrupt eine Aktion ausüben lässt. Das Beispiel ist für einen AT90CAN128 mit folgender Hardwarekonfiguration:

  • - Taster an PORT E, PIN 7
  • - LED an PORT E, PIN 6

Beim Initialisieren aktiviert man die Interrupts und konfiguriert wann dieser ausgelöst werden soll:

//  Init Taster
DDRE  &= ~_BV(7);    // PORT E, PIN 7 als Eingang definieren

EIMSK |= _BV(INT7);  // Interrupt fuer Pin 7 aktivieren
EICRB |= _BV(ISC50); // steigende Flanke erzeugt einen INT
EICRB |= _BV(ISC51);

//  Init LED
DDRE  |= _BV(6);     // PORT E, PIN 6 als Ausgang definieren

sei();    //activate global interrups

In der ISR für Signal 7 kann dann eine Aktion erfolgen oder ein selbst erstelltes Flag (in einer Variablen) gesetzt werden.

//  ISR Taster
SIGNAL(SIG_INTERRUPT7)
{
  // LED an
  PORTE |= _BV(6);

  // entprellen
  delay_ms(100);
}

Die beiden Dateien stehen hier zur Verfügung.

Tags: , , ,


Beispiel CAN Bus Testapplikation für AT90CAN1289

at90can128 Ich habe es in letzter Zeit oft erlebt, dass sich angehende Mikrocontrollerprogrammierer mit dem AT90CAN beschäftigen wollen oder müssen um eine CAN Anwendung zu entwickeln. Dabei stößt man immer auf folgendes Problem: Man wird in den Wald geworfen und weiß nicht welchen Baum man zuerst studieren soll. Wenn man nach einfachen Testanwendungen sucht, dann findet man meist ausgeklügelte Bibliotheken oder Anwendungen wo man zunächst nicht durchsieht. Außerdem sind die meist viel zu umfangreich und können auch beide CAN 2.0 Standards. Diesem Problem mache ich heute ein Ende, hier folgt eine einfache Anwendung für den AT90CAN und eine kleine Einführung in die Software. Es sind alle Derivate des AT90CAN verwendbar (32, 64, 128), man muss selbstverständlich beim Kompilieren darauf achten den Richtigen einzustellen.

Beginnen wir mit der Struktur der Software:

- main.c Hauptdatei, Aufruf der Funktionen
- at90can.c Sourcedatei für CAN-Funktionen, inkl. ISR
- at90can.h Headerdatei für CAN, Definition der Struktur, Geschwindigkeiten
- utils.h Korrekte Definitionen für True/False und nützliche Dinge

Für die Variablen in denen CAN-Nachrichten gespeichert werden sollen wurde eine Struktur CAN_messageType erstellt. Die im Datenblatt empfohlenen Einstellungen für die Geschwindigkeiten sind in einem Feld (array) in der at90can.h hinterlegt. Die Applikation besteht nun darin, dass in der main-Funktion zunächst die Initialisierung aufgerufen wird und anschließend eine CAN-Botschaft testweise gesendet wird. Die Empfangenen Nachrichten werden nur in der globalen Variable recMsg abgespeichert, jedoch nicht weiter verarbeitet. Bei jeder Operation mit MObs muss die CANPAGE auf das entsprechende gesetzt werden.

Wichtig ist zunächst die korrekte Initialisierung. Der CAN-Controller muss zum konfigurieren in den config-mode versetzt werden um Geschwindigkeit und Interrupteinstellungen zu ändern. Die globalen Interrupts sollte man erst nach der Konfiguration aktivieren, denn sonst könnte mitten in der Konfiguration beim aktivieren der einzelnen Interrupts ein kommender die Konfiguration verfälschen. Zur Initialisierung des CAN-Controllers gehört das aktivieren des config-mode, die Einstellungen der Interrupts und das Setzen der Busgeschwindigkeit. Die Konfiguration der einzelnen MObs kann auch in gesonderten Funktionen erledigt werden.

Bei einem Empfang einer Nachricht wird in der entsprechenden Interrupt-Service-Routine (ISR) die CAN-Botschaft aus den Registern ausgelesen und in eine globale Variable gespeichert. Variablen die in einer ISR beschrieben werden sollen, müssen als volatile deklariert werden. Nach dem speichern der Daten muss der Interrupt durch readmodwrite resetet werden. Ebenso muss das Bit CONMOBn gesetzt werden, um erneut Empfangsbereitschaft zu signalisieren.

Zum Senden einer Nachricht werden die gewünschten Daten und ID in einer Variable gespeichert und die Funktion can_tx aufgerufen werden. Diese kopiert die Daten in die Register des Controllers und setzt das Bit CONMOBn des als Sender konfigurierten MOb.

Fragen, Anregungen oder Verbesserungsvorschläge können gerne als Kommentare erfolgen!

Tags: , , ,


Imhotep theme designed by Chris Lin. Proudly powered by Wordpress.
XHTML | CSS | RSS | Kommentare-RSS