Forum: Mikrocontroller und Digitale Elektronik Kommunikation PIC <-> Lincan via CAN Bus


von Marius (Gast)


Lesenswert?

Hallo,

Ich arbeite zur Zeit an einem Projekt, bei dem ein Embedded PC mehrere 
Microcontroller ( PIC 18f6585 ) von Microchip per CAN Bus steuert. Der 
Embedded PC ist über Lincan angebunden, die Microcontroller über ihr 
ECAN Modul. Leider schaffe ich es nicht, eine funktionierende Verbindung 
(trotz Terminierung mit 120Ohm etc) aufzubauen. Insbesonders habe ich 
folgende Probleme:

- bei Lincan finde ich nur den "baudrate" Parameter, aber keine
Möglichkeit um die Phasenlänge (Sampling Point, Synchronisationsbits 
etc)
zu konfigurieren, die ja neben der Datenrate auch Bedeutung hat. Eine
solche Konfiguration ist bei den PICs möglich. Ist jemandem eine solche 
Option bekannt, oder zumindest, wie Lincan da vorkonfiguriert ist?
- dieses Problem hängt wahrscheinlich mit dem ersten zusammen. Meine 
PICs senden ( über die ECAN C-Routinen von Microchip) immer nur die 
ersten paar CAN Messages und bleiben dann beim versenden ( while( 
!ECANSendMessage(...) ); ) hängen. Ich denke, dass dann einfach die 
Sendebuffer im PIC voll sind
 nd der CAN Controller keine Messages versenden kann. Kann es sein, dass
mindestens 2 CAN Devices benötigt werden, um Nachrichten zu senden? Ich
konnte dazu keinerlei Infos finden.

Ich bin für jeden Hinweis dankbar.

Grüße Marius

von Mark S. (elguapo)


Lesenswert?

Hi, versuch mal den CAN Bus mit 60 statt 120 Ohm abzuschliessen. Kann 
bei manchen CAN Bussen (z.B. in Kfz Netzen ) der richtige Wert sein. 
Möglich dass deine CAN Sender nicht ihre eigenen Frames zurücklesen 
können und deswegen auf Bus-Off gehen. Ein Oszilloskop ist ein verdammt 
guter Freund bei CAN Problemen. Die Ruhepegel des CAN sollten bei 2,2 - 
2,4 V(L) und 2,6 - 2,8 V liegen. Aber für eine genauere Hilfestellung 
müsstest du ein wenig mehr Informationen bereitstellen:
 - CAN Identifier Länge bei allen Teilnehmern gleich, 11 oder 29 bit?
 - Hast die CAN Leitungen verdrillt? Alter Klassiker.
 - Welche CAN Physik? High Speed, Low Speed und verwendete Baudrate?
 - Hast du die Möglichkeit Error Frames festzustellen? Kann man aus 
vielen CAN Transceivern als Zählerwert auslesen wenn man nicht gerade 
den 15k€ CANalyzer zur Hand hat.

von peterguy (Gast)


Lesenswert?

Wenn komplett garnichts tut kann das viele Ursachen haben. Ich zähle mal 
ein paar auf, die mir in der Vergangenheit schonmal das Leben schwer 
gemacht haben.

Hardware:
- CAN Transceiver: gleiche Typen?
- CAN Transceiver: richtiger Pegel auf Enable Leitung?
- CAN Transceiver: Vbat angeschlossen und >5V?
- CAN Transceiver: Rx und Tx, bzw. BusHigh und BusLow nicht vertauscht?
- Kabel verdrillt?
- Terminierung passt?

Software:
- CAN controller im entsprechenden Register eingeschaltet?
- Eingangsfilter komplett ausgeschaltet, oder entsprechend der 
Nachrichten IDs eingestellt
- Bestätigen von Nachrichten eingeschaltet? Wie du schon erkannt hast, 
muss immer mindestens noch ein zweiter CAN Teilnehmer da sein, der den 
korrekten Empfang mit dem Acknowledge-Bit bestätigt. Sonnst kommt es zu 
einem Stau in den Tx-Buffern
- Die Samplepoint Parameter haben mir bisher noch keine Schwierigkeiten 
gemacht, aber sie sind natürlich potentielle Fehlerquellen
- Baudrate...

Ein Oszilloskop hilft hier wirklich sehr, wie Mark schon schrieb. Falls 
du eines bekommen kannst, einfach mal zwischen Controller und 
Transceiver die Tx-Leitung messen, dann Die CAN-Leitungen nach dem 
Controller. Wenns bei beiden Leitungen zappelt ist das schon mal 
eingutes Zeichen :-)
So weißt du schonmal, daß das Versenden klappt.

von Marius (Gast)


Lesenswert?

Meine Verkabelung sollte eigentlich in Ordnung sein, da mein Embedded PC 
zwei CAN Ports hat und diese problemlos miteinander kommunizieren 
können. Der Osci zeigt auch schönes zappeln mit den verschiedenen 
Bitflanken an. Ich hab mittlerweile den CAN Calculator von intrepidcs 
verwendet und sollte so auf jeden Fall auf eine Baudrate von 500 kBPS ( 
bei FOSC von 40 MHz) kommen. Nur leider tut das noch nicht so wie es 
soll.


Ich werde mal weiter suchen...

Grüße Marius

von peterguy (Gast)


Lesenswert?

Können deine PICs auch untereinander Kommunizieren?

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Der von dir genannte Controller ist bei Microchip nicht aufgeführt. Er 
ist also nicht existent oder alt. Da er ei0n ECAN Modul hat kann er 
nicht alt sein. Folglich hast du einen falschen Typ genannt. richtig?

Marius schrieb:
> Meine Verkabelung sollte eigentlich in Ordnung sein, da mein Embedded PC
> zwei CAN Ports hat und diese problemlos miteinander kommunizieren
> können.

Die können auch miteinander kommunizieren wenn die Baudrate nicht passt, 
denn sie wird dann auf beiden Ports gleichweit daneben liegen. Das ist 
nicht unbedingt aussagekräftig.

> Der Osci zeigt auch schönes zappeln mit den verschiedenen
> Bitflanken an.

Und welche Bitrate kannst du messen?

Ich hab mittlerweile den CAN Calculator von intrepidcs
> verwendet und sollte so auf jeden Fall auf eine Baudrate von 500 kBPS (
> bei FOSC von 40 MHz) kommen. Nur leider tut das noch nicht so wie es
> soll.

Den kenn ich nicht. Hast du dir mal das Datenblatt genommen und die 
Werte durchgerechnet ob die passen können.

> Ich werde mal weiter suchen...

Ja, und wenn du nix findest noch ein Tipp: Wenn du deinen Code hier 
reinstellst, brauchen die Leute nicht raten was du machst.

von Marius (Gast)


Lesenswert?

Leider hatte ich letzte Woche keinen Zugriff auf meine Hardware, 
deswegen kann ich erst jetzt antworten.

@Willivonbienemaya: Seltsam, dass du den PIC nicht findest, ich habe 
noch einmal in die Doku gesehen, er heißt wirklich PIC18F6585. 
Zusätzlich verwende ich auch noch den PIC18F2685. Die Bitrate zu messen, 
ist mir leider mit dem Osci noch nicht gelungen, wie stelle ich das an? 
(An welchen Flanken muss ich mich orientieren?) Ich habe meine 
bestimmten Einstellungen auch via Datenblatt überprüft, ich sollte auf 
die gewünschte Bitrate kommen ( Ich habe bereits 125kbit, 250kbit und 
1Mbit getestet ).

@peterguy: Das ist leider ein Problem. Ich habe beide PICs mit der 
gleichen Software programmiert und die Signale (ohne dass die PICs 
verbunden waren) verglichen. Leider sehen die Bilder am Osci nicht 
gleich aus ( trotz gleicher Konfiguration, Quartz etc.)

Der große PIC liefert untenstehendes Bild, also eine korrekte CAN 
message:
1
  ----| |--|  |-| |-| |---
2
      |-|  |--| |-| |-|


Der kleine PIC liefert nur Spitzen:
1
 
2
  ----|--|--|--||------
3
      |  |  |  |

Eigentlich sollte das gleich sein, oder?

Beide PICs wurden mit diesem Programm geladen:
1
void main( void ) {
2
3
  BYTE candata[4];
4
  unsigned long id;
5
  BYTE dataLen;
6
  ECAN_RX_MSG_FLAGS flags;
7
8
  ECANInitialize();
9
  memset(candata,0,8);
10
  candata[0] = 1;
11
  candata[1] = 2;
12
  
13
  while(1) {
14
  
15
    /* Some Signaling over other pins
16
      ...
17
    */
18
  
19
    while ( !ECANSendMessage ( 0x778, candata, 8, 0 ) );
20
    //ECANReceiveMessage( &id, candata, &dataLen, &flags );
21
    
22
    /* Some Signaling over other pins
23
      ...
24
    */
25
  }
26
27
}

Ich habe alle Verbindungen zigmal überprüft und durchgemessen, ich finde 
den Fehler einfach nicht :(

Hilfe!

Marius

von Marius (Gast)


Lesenswert?

Noch ein kleiner Nachtrag:

Ich verwende ein 10Mhz Quartz im HSPLL Modus, in der ECAN def habe ich 
folgende Parameter geändert, der Rest ist original von Application 
Maestro:

ECAN_SJW_VAL 2
ECAN_BRP_VAL 1
ECAN_PHSEG1_VAL 5
ECAN_PHSEG2_VAL 3
ECAN_PROPSEG_VAL 1

Rechnerisch komme ich damit auf 1Mbit/s baudrate.

Danke für jede weitere Hilfe.
Marius

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Marius schrieb:
> @Willivonbienemaya: Seltsam, dass du den PIC nicht findest, ich habe
> noch einmal in die Doku gesehen, er heißt wirklich PIC18F6585.

Ich glaubs. Nur hier ist er nicht dabei:
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1004&mid=10&lang=en&pageId=74
Das hat mich gewundert.

> Zusätzlich verwende ich auch noch den PIC18F2685. Die Bitrate zu messen,
> ist mir leider mit dem Osci noch nicht gelungen, wie stelle ich das an?

Du suchst dir das kürzeste Bit im Datenwort und misst es idealerweise 
mit dem cursor des oszis.

> (An welchen Flanken muss ich mich orientieren?)

ist egal. hauptsache du nimmst zweimal die gleiche.

> Ich habe meine
> bestimmten Einstellungen auch via Datenblatt überprüft, ich sollte auf
> die gewünschte Bitrate kommen ( Ich habe bereits 125kbit, 250kbit und
> 1Mbit getestet ).

"sollte" nützt hier nichts. Du musst alles prüfen was du prüfen kannst.

>
> @peterguy: Das ist leider ein Problem. Ich habe beide PICs mit der
> gleichen Software programmiert und die Signale (ohne dass die PICs
> verbunden waren) verglichen. Leider sehen die Bilder am Osci nicht
> gleich aus ( trotz gleicher Konfiguration, Quartz etc.)

Hast du vielleicht die Config bits anders gesetzt?
Ansonsten mess mal die schaltung ob die an allen punkten gleich ist.
Sind irgendwo kalte Löststellen?


> Der große PIC liefert untenstehendes Bild, also eine korrekte CAN
> message:
>
>
1
>   ----| |--|  |-| |-| |---
2
>       |-|  |--| |-| |-|
3
>
>
>
> Der kleine PIC liefert nur Spitzen:
>
>
1
>   ----|--|--|--||------
2
>       |  |  |  |
3
>
>
> Eigentlich sollte das gleich sein, oder?

Ja das sollte in etwa gleich aussehen.
Wo misst du genau? also welche Leitung?
Mess mal alle Leitungen an deinem CAN Treiber und poste die Ergebisse.

Hast du schon mal spasseshalber die Erratas durchgelesen? Vielleicht 
steht da ein Hinweis.

von Marius (Gast)


Lesenswert?

Yuhe

Letzendlich hab ich das Ding zum Laufen gebracht! Das Problem war am 
Ende, dass zum einen der 18F6585 ( oder alle der Familie 18F6X8X) einen 
Hardware Bug haben, durch den unter Umständen die konfigurierte Bus 
Geschwindigkeit nicht richtig ausgewertet wird. Und außerdem müssen die 
CAN Ports ( Das ist nirgends dokumentiert!!! ) auf LOW und im TRIS auf 
HIGH gesetzt werden, um korrekt zu funktionieren.

Danke an alle für Ihre Ideen und Hilfe!

Marius

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.