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 :)