Forum: Mikrocontroller und Digitale Elektronik ATmega328p (Uno) mit MCP2515 CAN-Shield


von Helge M. (helge_m)


Angehängte Dateien:

Lesenswert?

Guten Morgen,

ich hätte eine Frage an die Community bzgl. des ATmega328p und des 
MCP2515, da ich wirklich etwas am verzweifeln bin. Meine persönlichen 
Erfahrungen in der µC Programmierung sind überschaubar, was ich gerne 
ändern möchte. Kritik und Feedback zu allem ist gerne gesehen, danke! 
Ich habe die letzten Tage viel recherchiert, aber nicht "die" Lösung 
finden können.

Zunächst möchte ich kurz den Hintergrund der Frage schildern:

Im Rahmen eines kleinen privaten Projekts konnte ich mir ein paar 
größere, ältere E-Motoren beschaffen. Die Motoren sind aktuell mit einem 
dsPIC33FJ128MC706 bestückt und sind ebenso mit einer funktionfähigen 
Software geflasht. Via CANbus kann mit den Motor-Controlern interagiert 
werden. Ich möchte diese Motoren gerne in Zukunft als Antriebsmotoren 
nutzen. Die Sollwert-Berechnung der zu stellenden Drehzahl soll 
vorläufig auf meinen herumliegenden Atmega328p erfolgen, welche mittels 
eines MCP2515 CAN-Shields mit dem Motor-Controler agieren soll. Beide 
Komponenten stammen von AZ-delivery 
(https://www.az-delivery.de/en/products/mikrocontroller-board, 
https://www.az-delivery.de/en/products/mcp2515-can-bus-modul). Mit der 
Arduino IDE und gegebener Bibliothek stellt sich das versenden/empfangen 
von Nachrichten nicht als Problem dar. Für mich heißt das zumindest, 
dass ich Kabel richtig miteinander verbinden kann.

Die Herausforderung für mich liegt darin, dass ich bereits viele 
(getestete) Funktionen in C-Code vorliegen habe und es wohl auch noch 
mehr werden. Daher möchte ich von der Arduino IDE wegkommen. Da mir das 
Projekt der E-Motoren als MPLab X v3.15 vorliegt, möchte ich gerne die 
Software für den Atmega328p ebenfalls in MPLab X (v6.00) aufsetzen, als 
reines C-Projekt. Aktuell is der XC8 compiler von microchip im Projekt 
verwendet. Eine Recherche für bestehende C-Biblioheken führte mich 
schnell auf die häufig zitierte universelle CAN Bibliothek von der Seite 
http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515. 
Nachdem ich die Bibliothek mit gegebener Anleitung nicht erstellen 
konnte, bin ich auf einen Thread gestoßen, in dem empflohlen wird, keine 
Controler-spezifische Bibliothek zu erzeugen, sondern alle files 
mitzuführen. Mit diesem Ansatz war ich immerhin in der Lage das Projekt 
compilieren zu können. Für mich ist es allerdings nicht ganz klar, 
welche Einstellungen ich notgedrungen machen muss, um die files für den 
328p funktionsfähig zu machen. (Abgesehen von den Pins).

Zum Programmieren/Flashen des .hex auf den µC nutze ich avrdude, wie es 
in der Arduino IDE benutzt wird (Kopie des ausgegebenen commands aus der 
IDE mit angepasstne Pfaden für das hex). Der Downloadprozess wird zwar 
durchgeführt, jedoch habe ich Zweifel, dass er erfolgreich ist, da ich 
Angaben zu einem safemode bekomme, welche beim regulären Process via 
Arduino IDE nicht auftreten. Des Weiteren ist die built-in LED "L" (für 
diejenigen, die diese kennen) dauerhaft an, obwohl sie kein Teil des 
Codes ist. Im Netz konnte ich diesbezüglich finden, dass evtl. Pins 
falsch angesprochen werden. Die Pins habe ich so angegeben, wie sie in 
meiner Verschaltung vorliegen.
1
/* Setting for MCP2515
2
 *
3
 * Declare which pins you are using for communication.
4
 * Remember NOT to use them in your application!
5
 * It is a good idea to use bits from the port that carries MOSI, MISO, SCK.
6
 */
7
#define  MCP2515_CS        B,10
8
#define  MCP2515_INT        D,2
1
  #elif defined(__AVR_ATmega8__)  || defined(__AVR_ATmega48__) || \
2
      defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
3
    #define  P_MOSI  B,11
4
    #define  P_MISO  B,12
5
    #define  P_SCK  B,13
6
    #define  SUPPORT_FOR_MCP2515__
Ggf. muss ich das Bit-Timing noch anpassen? Und wenn ja wie? (Zur Info: 
Im Arduino Projekt lief das Senden/Empfangen mit 125kbaud 
erfolgreich)...
Ich glaube, dass ich an dieser Stelle einen entscheidenen 
(Anfänger-)Fehler mache. In diesem Thread 
Beitrag "ATMega328PA und MCP2515" wird zudem von 
einem anderem Interupt Vektor gesprochen, was jedoch auch weider mein 
Wissen übersteigt.

Die Datenblätter der Komponenten habe ich mir angeschaut und verstehe 
zumindest einiges (wenn auch bei weitem nicht alles). Aber Theorie und 
Anwendung sind immer zwei so Sachen...

Long story short:
- Ist mein Ansatz den ATmega328p mit dem MCP2515 mittels MPLab X v6.00 
und XC8 compiler zu bearbeiten grundsätzlich vertretbar, oder sieht ihr 
da bereits größere Probleme?
- Ist die "Bilbiothek" für die oben genannte Toolchain brauchbar? (Es 
ist ja schon etwas länger verfügbar)
- Gibt es eine weitere Möglichkeit, wie ich die beiden Komponenten zum 
Laufen bekommen kann? Es sollte nur immer in C bleiben, da ich nicht 
noch mehr Baustellen aufmachen möchte.
 (solange ich keine low-level Programmierung machen muss, denn das würde 
meine Fähigkeiten aktuell uberschreiten)
- Eine weitere Herausforderung ist, dass ich aktuell nicht wirklich 
debuggen kann, da ich dafür keine Hardware besitze. Gibt es eine 
Möglichkeit, mit der ich bessser Debuggen könnte, ohne kostspielige 
Hardware anschaffen zu müssen?

Ich hoffe ich bin hier nicht komplett falsch mit meinen Fragen und danke 
euch im Voraus!

Viele Grüße :)

von EAF (Gast)


Lesenswert?

Helge M. schrieb:
> #define  P_SCK  B,13

Was heißt das?
Soweit mir bekannt ist PB5 für SPI Clock vorgesehen.
Ein PB13 gibt es nicht.
Auch hängt an PB5 die LED_BUILTIN namens L

von Helge M. (helge_m)


Angehängte Dateien:

Lesenswert?

oh mann, ich danke dir vielmals! Ich bin habe die Beschriftungen und 
Pinouts durcheinander gebracht ... Bin auf die Standardkonfiguration 
zurück und es scheint zu gehen. :)

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.