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