Forum: Mikrocontroller und Digitale Elektronik Renesas R8C23 und CAN


von Markus W. (kornbanane)


Lesenswert?

Hi,

ich würde meinen R8C23 gerne mit der CAN Schnittstelle ansteuern. Die 
nötige Hardware (CAN Bustransceiver) ist schon aufgebaut jetzt hakt es 
nur noch an der Software...

Habe leider vorher noch nicht mit CAN zu tun gehabt und mir deshalb erst 
mal eine Einführung in CAN von Renesas durchgelesen: 
http://documentation.renesas.com/doc/products/mpumcu/apn/rej05b0804_m16cap.pdf


Dann habe ich noch ein AppNote bei Renesas gefunden, wo eine CAN API 
erklährt wird - dort werden einige Funktionen beschrieben die man für 
den Datenverkehr über die CAN Schnittstelle braucht: 
http://documentation.renesas.com/doc/products/mpumcu/apn/reu05b0063_mcuap.pdf

Leider ist dort kein Code enthalten nur der Hinweis: "The
demonstrations “Streaming A-D” and “Playcatch Net Test” for both 
R8C/M16C/M32C/R32C and SH RCAN-ET/TL
MCUs are available and demonstrate usage of the API."

Allerdings finde ich diese Beispiele bei Renesas nicht.


Unabhängig davon scheint die Sache mit CAN ziemlich kompliziert zu sein 
- jedenfalls wenn man noch keine Ahnung davon hat. Ich glaube auch das 
mir eine simple Lösung genügen würde, denn mein CAN Bus bzw. das was ich 
damit vorhabe ist ziemlich simpel:

Ein Datenaustausch zwischen zwei µC, wobei einer als Master fungiert und 
eine Anfrage an den anderen sendet. Nur auf diese Anfrage antwortet der 
zweite µC (er fängt also nicht von sich aus an zu reden).
Jeder µC wartet immer solange ab, bis er ein komplettes Telegramm vom 
anderen bekommen hat. Wenn ein Übertragungsfehler auftritt, wird das 
Telegramm einfach verworfen. Wenn also µC A eine Anfrage an µC B sendet 
und es zu einem Übertragungsfehler kommt, dann antwortet µC B einfach 
nicht. Durch ein TimeOut stellt µC A dann fest das ein Problem vorliegt.

Das ganze was ich gerade beschrieben habe läuft im Moment über RS485 - 
der Code dazu steht schon ich will jetzt nur auf CAN umsteigen.


Ich habe also kein CAN Bus mit x Teilnehmern, brauche keine zig CAN 
Slots und auch keine Automatische Antworttelegramme oder 
Fehlerfunktionen usw....
Das ich mich an das CAN Telegrammformat mit ID, aribitrierung usw. 
halten muss ist mir auch klar, trotzdem denke ich das ich ein haufen 
davon was in den von mir genannten AppNotes steht garnicht brauche....

Also falls ihr schon mal was mit CAN gemacht habt würden mir einige 
Beispiele sicher weiterhelfen.

Und bitte keine Fragen wie "warum brauchst du denn CAN dazu".

Vielen Dank ;)

von Markus W. (kornbanane)


Lesenswert?

Hmm hier tut sich ja nich viel :(

Für alle die sich auch für CAN interessieren, ich habe hier eine gute 
und leicht verständliche kleine Einführung gefunden.
Wahrscheinlich wird hier zwar nur ein kleiner Teil beschrieben, aber 
wenn man keine Ahnung hat ist es sehr gut ;)

http://www.thomas-wedemeyer.de/uploads/File/CAN.PDF

von Josch (Gast)


Lesenswert?

http://www.renesasrulz.com/docs/DOC-1698
CAN_UART_Bridge_R8C23.zip

Gibts auch für viele andere Controller, ist aber nicht 
interruptgesteuert,
wenn ich mich recht erinnere.

Es gibt aber noch enige andere CAN-Beispiele, auch für R8C23, z.B. 
Flash-over-CAN. Google müsste das eigentlich alles ausspucken, bei 
richtiger Bedienung ;-)

von Josch (Gast)


Lesenswert?

Nachtrag:
Die Beispiele die Du nicht gefunden hast sind wahrscheinlich auf der CD 
des Evaluation Board/RSK.

Die sollte man hier runterladen können:
http://www.renesas.eu/support/downloads/download_results/C2014101-C2014200/an_ree05b0018_r8c23_code_example.jsp

Für das was Du vorhast ist aber das im vorherigen Post genannte Beispiel 
UART-Bridge recht nah dran.

Glyn hatte mal recht günstige Dev-Boards mit R8C23, drauf sollte das mit 
evtl. kleineren Anpassungen auch laufen. Falls Du also kein USB-CAN 
Converter nebst Software hast könntest Du so mittels zwei dieser Boards 
und einem PC mit 2 RS232 (oder USB-RS232) deine CAN-Frames über 
Terminalprogramme hin und her schicken. Das wäre ein schöner Einstieg 
mit Testmöglichkeit für Deine spätere Anwendung.

von Sebastian B. (m0nkey)


Lesenswert?

Markus Wi*** schrieb:
> Hi,
>
> ich würde meinen R8C23 gerne mit der CAN Schnittstelle ansteuern. Die
> nötige Hardware (CAN Bustransceiver) ist schon aufgebaut jetzt hakt es
> nur noch an der Software...
>
> Habe leider vorher noch nicht mit CAN zu tun gehabt und mir deshalb erst
> mal eine Einführung in CAN von Renesas durchgelesen:
> http://documentation.renesas.com/doc/products/mpumcu/apn/rej05b0804_m16cap.pdf
>
>
> Dann habe ich noch ein AppNote bei Renesas gefunden, wo eine CAN API
> erklährt wird - dort werden einige Funktionen beschrieben die man für
> den Datenverkehr über die CAN Schnittstelle braucht:
> http://documentation.renesas.com/doc/products/mpumcu/apn/reu05b0063_mcuap.pdf
>
> Leider ist dort kein Code enthalten nur der Hinweis: "The
> demonstrations “Streaming A-D” and “Playcatch Net Test” for both
> R8C/M16C/M32C/R32C and SH RCAN-ET/TL
> MCUs are available and demonstrate usage of the API."
>
> Allerdings finde ich diese Beispiele bei Renesas nicht.
>

Hi,

also ich kann dir für die Renesas Controller das Tool Applilet2 ans Herz 
legen. Das Tool ist selbst von Renesas und da kann man alle 
Einstellungen für den Controller vornehmen und sich den Code autoamtisch 
generieren lassen. Dann muss man ihn nur noch nach seinen Wünschen 
anpassen. Du kannst dann zum Beispiel auch nur den Teil der CAN API 
verwenden.

Markus Wi*** schrieb:
> Unabhängig davon scheint die Sache mit CAN ziemlich kompliziert zu sein
> - jedenfalls wenn man noch keine Ahnung davon hat. Ich glaube auch das
> mir eine simple Lösung genügen würde, denn mein CAN Bus bzw. das was ich
> damit vorhabe ist ziemlich simpel:
>
> Ein Datenaustausch zwischen zwei µC, wobei einer als Master fungiert und
> eine Anfrage an den anderen sendet. Nur auf diese Anfrage antwortet der
> zweite µC (er fängt also nicht von sich aus an zu reden).
> Jeder µC wartet immer solange ab, bis er ein komplettes Telegramm vom
> anderen bekommen hat. Wenn ein Übertragungsfehler auftritt, wird das
> Telegramm einfach verworfen. Wenn also µC A eine Anfrage an µC B sendet
> und es zu einem Übertragungsfehler kommt, dann antwortet µC B einfach
> nicht. Durch ein TimeOut stellt µC A dann fest das ein Problem vorliegt.
>
> Das ganze was ich gerade beschrieben habe läuft im Moment über RS485 -
> der Code dazu steht schon ich will jetzt nur auf CAN umsteigen.
>
>
> Ich habe also kein CAN Bus mit x Teilnehmern, brauche keine zig CAN
> Slots und auch keine Automatische Antworttelegramme oder
> Fehlerfunktionen usw....
> Das ich mich an das CAN Telegrammformat mit ID, aribitrierung usw.
> halten muss ist mir auch klar, trotzdem denke ich das ich ein haufen
> davon was in den von mir genannten AppNotes steht garnicht brauche....
>
> Also falls ihr schon mal was mit CAN gemacht habt würden mir einige
> Beispiele sicher weiterhelfen.
>
> Und bitte keine Fragen wie "warum brauchst du denn CAN dazu".
>
> Vielen Dank ;)

Außerdem muss ich diese Frage nun trotzdem stellen... Warum steigst du 
denn von RS485 auf CAN um, wenn du es dann doch nur für sequenzielle 
Übertragung nutzt? Der Vorteil von CAN ist ja, dass man Informationen 
gleichmässiger und einfacher auf dem BUS verteilen kann. CAN hat 
sozusagen eine automatische BUS-Last-Steuerung, was RS485 nicht hat. 
Ansonsten sind es aber beide differenzielle Signale mit 3 Leitungen.

Der Vorteil an CAN ist eben, dass nach dem Einstellen der Controller 
Register, man so gut wie keine Ablaufsteuerung für das Senden und 
Empfangen von Informationen vornehmen muss. CAN ist garnicht dafür 
gedacht einen Anfrage-Antwort Ablauf durchzuführen.

Es ist zwar eventuelle etwas overpowered für deine Anwendung, aber wenn 
du dennoch solch ein Protokoll über CAN umsetzen möchtest, dann kann ich 
dir auch CANopen bzw. CANFestival (ein Open Source Framework für 
CANopen) empfehlen. Da gibt es das sogennante SDO, das für solche Sachen 
gedacht.

Gruß
m0nKeY

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.