www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CAN mit Starterkits M16C29 von Renesas


Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kennt sich jemand mit dem Starterkit M16C29 von Renesas aus?
Es geht darum, ich habe zwei Starterkits und möchte beide über die CAN 
Schnittstelle miteinander verbinden, um die CAN Schnittstelle zu testen.

Dazu habe ich eine 3Polige Steckerleiste, jeweils an den J11 - Anschluss 
gelötet.

Dann beide Boards über ein Starterkabel miteinander verbunden.

Mit der Software HEW (High Performed Embedded Workshop) habe ich das 
mitgelieferte CAN-Beispiel auf beide Boards übertragen.

Das Programm sollte den Text "Renesas" über den CAN Bus senden.

Jedoch leuchtet immer die LED für einen Transmitt-Error.

Kennst sich jemand damit aus? Oder hat jemand einen kleinen Beispielcode 
für mich um die CAN Schnittstelle zu testen?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst ein Board das sendet und eines das empfängt....

Otto

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dadurch das diese Starterkits mit einem CAN-Transceiver ausgestattet 
sind sollte ich doch empfangen und senden können?

Autor: MaWo80 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte so sein, ja, ich hatte im Studium mit diesen Boards zu tun um 
Can Messages zu verschicken.
Ich habe leider meine Unterlagen vom Studium nicht mehr griffbereit, 
sonst würde ich sie dir senden.
Hast du einen CanAlyser zur Verfügung?

Gruß Martin

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider nein, das wäre natürlich ein gutes Hilfsmittel.
Ist es möglich an deine Studienunterlagen ran zu kommen? Skript etc?

Autor: MaWo80 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider so schnell nicht, wohne wegen Berufsstart nicht mehr zu Hause und 
die Unterlagen liegen dort auf meinem PC !!
Wie sieht den das Skript aus das du hochgeladen hast ??
Welche Einstellungen mußtest du den vornehmen ?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Jedoch leuchtet immer die LED für einen Transmitt-Error.

wenn bei beiden Board die "TX-Error-LED" leuchtet, erhalten diese kein 
ACK auf die gesendeten Botschaften.

Otto

Autor: Dennis (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei ist nun das BeispielSkript.

Ich glaube mein Fehler muss irgendwie auch an den Einstellungen liegen.

Zum Beispiel weiss ich nicht ob ich an beiden Boards jeweils den 
gleichen Port als Transmit / Receive belegen muss (Siehe Datei can.h) 
und ebenfalls weiss ich nicht wie ich die ID´s zu belegen habe.

Ich bin an dem Problem angekommen, dass das 1.Board sendet und auf 
Empfang wartet. Das 2te Board jedoch nicht senden kann, da das 
CAN0Status-Register (c0str) einen BusError anzeigt. Dieser wurde 
ausgelöst durch das setzen des Flags TrmReq im 
CAN0MessageControl-Register (comctl6).
Meine Einstellungen beider Boards sind wie folgt:
1. Board
Slot 0 - Transmit => Vaiable: C0Slot00_STATE
ID - 0x0000000L => Variable: C0Slot0Id
Slot 6 - Receive => Vaiable: C0Slot06_STATE
ID - 0x0000000L => Variable: C0Slot6Id

1. Board
Slot 1 - Transmit => Vaiable: C0Slot01_STATE
ID - 0x0000001L => Variable: C0Slot1Id
Slot 7 - Receive => Vaiable: C0Slot07_STATE
ID - 0x0000001L => Variable: C0Slot7Id

Autor: Herr Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie betreibst du die Boards?
Eins am Debugger und das andere geflasht?
Vieleicht ist dein Empfänger nicht richtig geflasht und kann deshalb 
kein ACK senden. Nach ein paar hundert Versuchen den Frame zu senden 
gibt es ein timeout und die LED leuchtet auf.

Autor: NurEinGast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abschlusswiderstand ?

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab eine Drahtbrücke in J10 gesetzt, laut Plan sollte damit der 120ohm 
Wiederstand aktiv sein.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beide Boards sind jeweils an einen Rechner angeschlossen und werden 
somit seperat mit einem E8a Emulator geflasht.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ersteinmal meine Projekte, die sich auch mit M16C/R8C und CAN-Bus 
beschäftigen:
http://martinsuniverse.de/projekte/audiohplayer/au...
http://martinsuniverse.de/projekte/caninterceptor/...

Du must nicht den gleichen Slot in beiden CAN Controllern verwenden. Je 
nach Filter musst du nur die gleiche ID einstellen.
Zum Testen suchst du dir eine ID aus und sendest sie. Im anderen 
CAN-Controller setzt du einen Slot auf Empfang und die Maske setzt du 
so, dass alle IDs empfangen werden. Versuche ersteinmal nur eine 
Nachrich zu verschicken.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>1. Board
>Slot 0 - Transmit => Vaiable: C0Slot00_STATE
>ID - 0x0000000L => Variable: C0Slot0Id
>Slot 6 - Receive => Vaiable: C0Slot06_STATE
>ID - 0x0000000L => Variable: C0Slot6Id

>1. Board
>Slot 1 - Transmit => Vaiable: C0Slot01_STATE
>ID - 0x0000001L => Variable: C0Slot1Id
>Slot 7 - Receive => Vaiable: C0Slot07_STATE
>ID - 0x0000001L => Variable: C0Slot7Id

Die IDs unterscheiden sich auf beiden Boards.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Selbst wenn ich beide ID`s gleichsetze bekomme ich den Fehler.

Hat jemand eventuell einen einfachen funktionierenden Beispiecode?
Ich denke da so an:
1.Code für das Sendeboard:
Der einen Text über die CAN Schnittstelle raussendet.
2. Code für das Empfängerboard:
Welches den Text über die CAN Schnittstelle empfängt.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hat jemand eventuell einen einfachen funktionierenden Beispiecode?

Renesas Application notes.

Autor: Dennis (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Beispiel in den Application Notes finde ich für den Einstig und das 
Verstehen von CAN - Bussen noch zu komplex.
Das von mir angehangene CAN-Beispiel (can.zip) ist eigentlich recht 
einfach gehalten und wird schließlich auch von Renesas in den 
Starterkits mitgeliefert.

Es funktioniert wie folgt:
- Es sendet den Text "Renesas" und sollte den Empfang davon auf dem 
anderen Board ermöglichen.
- Der verwendete CAN-Modi ist der Polling-Mode

Nun habe ich das Problem, dass mein Board immer in den 
Transmission-Error läuft und zwar genauer in den PassiveState-Error.
In der Funktion: SendCAN0Message(0);
wird beim Setzen des Bits: c0mctl0.transmit.trmreq = 1;
gleichzeitig ein Busstate-Error Flag gesetzt und ich weiss nicht warum. 
Kann mir da jemand weiterhelfen?

Zur Hardware beide Boards sind über ein dreipoliges Kabel miteinander 
verbunden und die Brücke für den 120ohm Widerstand ist jeweils auch 
vorhanden.


Hier ein Ausschnitt des Programms die Main-Funktion:
void main(void)
{
  int iStatus = NO_ERROR;
  unsigned char TxDataBuff[8] = {"RENESAS"};
  unsigned char RxDataBuff[8];

  /* Turn LEDs 0-3 OFF */
  LED_PORT_DR = LEDS_OFF;

  /* Initialize CAN */
  InitCAN0();

  /* Send continous message & receive messages */
  while(1)
  {
    do
    {
      /* Setup write message for Slot / Message Box-0*/
      WriteCAN0Message(0, 8, TxDataBuff);

      /* Start message transmission */
      SendCAN0Message(0);

      /* Check for errors */
      iStatus = Check_err_can01();

      if(NO_ERROR != iStatus )
      {
        /* Orange LED ON*/
        LED_PORT_DR = 0xD0;
        continue; /* Try again */
      }

      /* Poll message at Slot / Message Box-6*/
      iStatus = PollCAN0Message(6);

      if(NO_ERROR != iStatus )
      {
        /* Red LED ON*/
        LED_PORT_DR = 0x70;
        continue; /* Try again */
      }

      if(NO_ERROR == iStatus )
      {
        /* Read message at Slot / Message Box-6*/
        iStatus = ReadCAN0Message(6, RxDataBuff);
        if( 0 != strcmp(TxDataBuff, RxDataBuff) )
        {
          /* Red LED ON*/
          LED_PORT_DR = 0x70;
          continue; /* Try again */
        }
      }

    } while(NO_ERROR != iStatus);

    /* Green LED ON*/
    LED_PORT_DR = 0xE0;

  }

/* End of the user program. This function must not exit. */
  for(;;);
}

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem gelöst. Bei mir in meinem Board war eine Leitung unterbrochen.
Habe diese überbrückt -> CAN Bus - läuft :-)

Vielen Dank für die Infos

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.