Forum: Mikrocontroller und Digitale Elektronik CAN Kommuikation ATmega328P


von Philipp V. (brain_pain)


Angehängte Dateien:

Lesenswert?

Hallo liebe Community,

ich würde gerne mit einem ATmega328P eine CAN Kommunikation ermöglichen. 
Damit das klappt habe ich auf meinem Breadbord meinen µC um einen 
MCP2515 erweitert und die CAN-Lib vom Kreativen-Chaos eingebunden und 
vorher konfiguriert.
Die Breadboardmontage habe ich als KiCad Zeichnung angehangen sowie die 
Main.c, Config.h und Can.h.
Im Makefile habe ich die CPU Frequenz auf 8MHz gesetzt und in der Config 
MCP2515_CS auf B,1 und MCP2515_INT auf B,0 gesetzt.

Leider kann ich bis auf einen 5V Pegel auf meinem INT Ausgang an Pin B0 
des ATmegas nichts weiteres mit meinem Oszilloskop messen. Auch ein CLK 
Signal wird nicht ausgegeben.

Ich Hoffe ihr könnt mir ein paar Tipps geben wie ich an meine CAN 
Kommunikation komme.

Viele Grüße und danke im Voraus!

von Anonym (Gast)


Lesenswert?

An RX und TX müsste eigentlich noch ein Transceiver hängen, wenn du 
einen echten CAN-Bus willst. Wahrscheinlich brauchst du einen Pull up 
oder Pull down an den Pins wenn du keinen Transceiver hast.

von Philipp V. (brain_pain)


Lesenswert?

Die Beschaltung am Ausgang des MCP2515 habe ich erstmal vernachlässigt, 
da bevor dort etwas raus kommt ja erstmal etwas reinkommen müsste oder?
Soweit ich weiß ist der Transceiver auch nur ein Pegelwandler der meine 
CAN Nachricht auf den richtigen Pegel bring oder?

von STK500-Besitzer (Gast)


Lesenswert?

Philipp V. schrieb:
> Die Beschaltung am Ausgang des MCP2515 habe ich erstmal vernachlässigt,
> da bevor dort etwas raus kommt ja erstmal etwas reinkommen müsste oder?
> Soweit ich weiß ist der Transceiver auch nur ein Pegelwandler der meine
> CAN Nachricht auf den richtigen Pegel bring oder?

Nö.
Er liefert auch einen definierten Pegel an den CAN-Controller.

Andererseits kannst du den CAN-Controller in den Loop-Back-Modus setzen, 
wodurch keine weiteren CAN-Komponenten notwendig sind.

von Nicht Gast (Gast)


Lesenswert?

Wenn ich das richtig verstehe, hakt es ja schon bei der 
SPI-Kommunikation zwischen ATmega und MCP2515.
Da müsste man schauen, was can_init so macht.

von Philipp V. (brain_pain)


Lesenswert?

Also ich habe jetzt einen Transceiver (MCP2551) angeschlossen und habe 
noch das gleiche Ergebnis.
Hat jemand schon einmal mit der Universellen CAN Bibliothek gearbeitet? 
Mich lässt das Gefühl nicht los, das meine Konfiguration des µCs nicht 
ganz korrekt ist...

von Philipp V. (brain_pain)


Lesenswert?

1
can_init(can_bitrate_t bitrate);

Das ist in der can.h zu can_init zu finden, bzw. das habe ich bis jetzt 
gefunden.

Scheinbar überträgt diese Funktion nur die angegebene Bitrate in can.h

: Bearbeitet durch User
von Nicht Gast (Gast)


Lesenswert?

In der CAN.h steht bei can_init:
1
 * \return  false falls das CAN Interface nicht initialisiert werden konnte,
2
 *      true ansonsten.

Was gibt es denn zurück?

von Thomas F. (igel)


Lesenswert?

Philipp V. schrieb:
> Die Breadboardmontage habe ich als KiCad Zeichnung angehangen

Der MCP2515 hat in deiner Zeichnung gar keine Taktquelle. Die braucht er 
aber um überhaupt zu arbeiten.

von Jubel (Gast)


Lesenswert?

Bevor man solche Schaltungen angeht, muss man sich in das Thema 
einarbeiten und das jeweilige Datenblatt der diversen Komponenten 
durchlesen.

Mach das mal.

von das Übliche (Gast)


Lesenswert?

Jubel schrieb:
> Bevor man solche Schaltungen angeht, muss man sich in das Thema
> einarbeiten

... und ich gebe jetzt schon mal vorsorglich die Warnung aus:

Wer Mikrokontroller-Schaltungen ohne Abblock-Kondensatoren aufbaut,
nachmacht oder verfälscht, insbesondere bei existierenden
Schaltungen die Abblock-Kondensatoren weglässt oder falsch
verschaltet oder selbst solche Schaltungen entwirft, in Verkehr
bringt und/oder aufbaut ohne Abblock-Kondensatoren nach Hersteller-
Empfehlungen zu verwenden, wird mit Zugangs-Ausschluss vom
Mikrokontroller-Forum nicht unter zwei Jahren bestraft.

von Philipp V. (brain_pain)


Lesenswert?

Jubel schrieb:
> Bevor man solche Schaltungen angeht, muss man sich in das Thema
> einarbeiten und das jeweilige Datenblatt der diversen Komponenten
> durchlesen.

Offensichtlich sind da noch ein paar Wissenslücken zu füllen.
Dann setz ich mich mal vor die gegebenen Datenblätter und werde diese 
studieren.

Danke erstmal für eure Hilfe

von Peter D. (peda)


Lesenswert?

Philipp V. schrieb:
> Im Makefile habe ich die CPU Frequenz auf 8MHz gesetzt

Dann solltest Du auch dafür sorgen, daß der MC 8MHz bekommt. Für CAN ist 
ein Quarz oder Quarzoszillator notwendig.
Den MCP2515 kann man an CLKO anschließen.

von H.Joachim S. (crazyhorse)


Lesenswert?

Und den Interruptausgang des MCP2515 solltest du auf INT0 oder 1 des 
ATMega legen.

von Philipp V. (brain_pain)


Lesenswert?

Peter D. schrieb:

> Dann solltest Du auch dafür sorgen, daß der MC 8MHz bekommt.
Laut Datenblatt läuft der ATmega328 doch nach entfernen der 
entsprechenden fuse mit 8MHz oder?

von npn (Gast)


Lesenswert?

Philipp V. schrieb:
> Laut Datenblatt läuft der ATmega328 doch nach entfernen der
> entsprechenden fuse mit 8MHz oder?

Der RC allein reicht nicht. Quarz muss sein.

von Philipp V. (brain_pain)


Lesenswert?

Auf die Gefahr hin, dass es ne dumme Frage ist: kann man die 
Taktfrequenz eines Quarzes bspw. halbieren?
Ich habe hier noch ein paar 16MHz Quarze rumfliegen, der MCP2515 ist 
allerdings mit max. 10MHz angegeben, wenn ich mich nicht irre.
Deshalb nehme ich mal an, dass ich mit meinen Quarzen nicht weit komme

von Programmierer (Gast)


Lesenswert?

Viel einfacher wäre es, einen Mikrocontroller zu verwenden, welcher den 
CAN-Controller mitgeliefert hat. Da fällt ein IC und das SPI weg und 
damit eine Reihe an Fehlerquellen. Dann kann man auch Mikrocontroller 
und CAN-Controller aus einem Quarz versorgen. In Form des STM32F103C8T6 
kriegt man das nachgeworfen, in Form des STM32-Olimexino komplett fertig 
aufgebaut mit Transceiver, Schutzschaltung usw (aber etwas teurer). 
Nebenbei ist das Ganze debug-bar und man kann sich Schritt für Schritt 
im Programmcode anschauen wo es hapert.

Der 120Ohm Terminierungswiderstand kommt an die CANH/CANL Leitungen, 
aber doch nicht an RX/TX; wenn die Treiber da drin zu schwach sind wäre 
es kein Wunder dass es so nicht klappt...

von npn (Gast)


Lesenswert?

Philipp V. schrieb:
> der MCP2515 ist allerdings mit max. 10MHz angegeben,

Nein, den darfst du sogar mit 20MHz laufen lassen.
Deine 16MHz sind also völlig okay.

von Philipp V. (brain_pain)


Lesenswert?

Programmierer schrieb:
> Viel einfacher wäre es, einen Mikrocontroller zu verwenden, welcher den
> CAN-Controller mitgeliefert hat.

An sowas habe ich auch schon mal gedacht, allerdings habe ich schon 
einiges an Code für den mega geschrieben und müsste das ganze ja dann 
irgendwie auf diese STM Plattform konvertieren



> Der 120Ohm Terminierungswiderstand kommt an die CANH/CANL Leitungen,
> aber doch nicht an RX/TX;

Hab ich auch gesehen und sofort geädert.

von Thomas F. (igel)


Lesenswert?

Philipp V. schrieb:
> Ich habe hier noch ein paar 16MHz Quarze rumfliegen, der MCP2515 ist
> allerdings mit max. 10MHz angegeben

Wo steht denn sowas?
Ich lasse alle MCP2515 mit 16MHz Quarz laufen. Das ist die übliche 
Frequenz mit dem auch die meisten Softwarebibliotheken arbeiten.

Ob du den Atmega328 mit Quarz oder internen Oszillator betreibst ist für 
deine Anwendung erst mal egal.

von Philipp V. (brain_pain)


Lesenswert?

Thomas F. schrieb:
> Wo steht denn sowas?
> Ich lasse alle MCP2515 mit 16MHz Quarz laufen. Das ist die übliche
> Frequenz mit dem auch die meisten Softwarebibliotheken arbeiten.
Direkt auf Seite 1 im Datenblatt steht bei den Features: High-Speed SPI 
(10MHz). Später im Datenblatt findet mann dann unter dem Punkt 
Oszillator, dass bis zu 20MHz möglich sind.
War auf den ersten Blick etwas irreführend für mich dargestellt.

von Peter D. (peda)


Lesenswert?

Philipp V. schrieb:
> An sowas habe ich auch schon mal gedacht, allerdings habe ich schon
> einiges an Code für den mega geschrieben

Es gibt den ATmega64M1-AU mit CAN.
Auf DIP gibt es Adapter:
https://www.amazon.de/SSOP32-Adapter-Converter-DIP-Adapterplatte-drehen/dp/B07JVRK6YQ

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.