CAN Bus in C



  • Hallo,

    ich muss zur Zeit meine Bachelorarbeit schreiben. Meine Aufgabe ist die Programmierung eines CAN Bus Codes in C für eine Servo. Ich habe als einzigen und damit größten Erfolg eine Uhr programmiert, aber keine Ahnung wie ich mit beim CAN anfangen soll. Die Funktionsweise des Bus selbst habe ich kapiert, aber wie ich die CAN Nachricht in c darstellen soll 😮
    Gibt es hier welche, die damit Erfahrung haben und/oder Tipps haben?

    Flo

    PS: Als Mikrocontroller soll der Microsoftstick Plus dienen.



  • Gute Frage, hast du schon ne Bibliothek oder dergleichen dafür?

    Evtl. hilf dir das :
    http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek



  • Nein ich habe kein Bibliothek, allerdings ist der Link nur für einen MCP2515; Im Microstick ist allerdings ein MCP2551. Ist der da auch nutzbar? Wie sieht ein CAN Frame in C aus?



  • Ein MCP2551 ist nur eine Art Verstärker, der die 5V CAN-Signale von einem Prozessor auf den Pegel des CAN-Busses hebt.

    Programmieren kann man höchstens das, was davor hängt. So wie hier einen LPC1768
    http://mbed.org/handbook/CAN

    Bei dir ist das irgendein Stick. In dessen Doku musst du schauen.



  • Flosinho schrieb:

    Nein ich habe kein Bibliothek, allerdings ist der Link nur für einen MCP2515; Im Microstick ist allerdings ein MCP2551. Ist der da auch nutzbar? Wie sieht ein CAN Frame in C aus?

    Dafür ist der Link von unsure110 trotzdem gut geeignet - schau dir einfach mal die Struktur 'can_t' an (ein CAN-Frame besteht also aus einem Header und den eigentlichen Daten).
    Du benötigst jedoch eine API, um dann die CAN-Frames zu senden und zu empfangen (can_open/init, can_read, can_write etc.).

    PS: Crosspost http://www.mikrocontroller.net/topic/340129



  • Ja den theoretischen Aufbau hab ich verstanden. Also wird der Frame zerstückelt ja? Und als Schnittstelle sollte doch der Microstick dienen?!? Der wird ja auch von Mplabx erkannt.

    PS: Ja Crosspost, weil die Zeit drängt



  • Ein CAN-Frame in C sieht so aus, wie Du ihn haben willst.

    Du kannst ihn einfach als Byte Array definieren oder dir den Zugriff seine Elemente einfacher machen, indem Du Dir ein entsprechendes struct drüber definierst. Wenn Du eine API verwendest, sieht der Frame eben so aus, wie ihn die API erwartet.

    Weiterhin kommt es dann drauf an, was Du mit dem Frame (im Programm) vor hast. Das bestimmt auch wieder, welche Member dein Struct sinnvollerweise haben sollte.
    Desweiteren ist es hilfreich zu wissen, wie dein Mikrocontroller einen zu versendenden/empfangenen Frame haben möchte/liefert (z.B. komplett als Byte Array, Header und Daten getrennt, etc.).



  • Es wäre auf jeden Fall interessant, wie du das ganze dann löst oder schon gelöst hast. Evtl. kannst ja das mal hier posten.


Anmelden zum Antworten