Forum: Mikrocontroller und Digitale Elektronik CanBus (PIC) OBD kommunikation


von Ms_cikar (Gast)


Lesenswert?

Hallo An alle,

Was ich  vorhabe?
Ich will aus der OBD Schnittstelle Daten auslesen. Dafür habe ich eine 
Platine mit pic18f4580 mit mcp2551 aufgebaut.
Baudrate auf 500 kbps eingestellt.
Es so programmiert, dass ich nur die ID sehe, die über den Bus geschickt 
werden. Funktioniert aber nicht. Darauf hin habe ich einen CanUSB kabel 
genommen. und versucht von da aus Daten zu senden.

Aber meine Platine reargiert nicht auf die Daten die ich von CanUSB 
kabel sende. kriegt aber alle Daten die ich von meiner Platine auf den 
Bus sende.


Ich habe insgesamt 3 Platinen untereinander Funktioniert die 
Kommunikation. ich kann alle IDs am LCD sehen.



Meine Hardware
3 platinen: 2 x pic18f258 mit mcp2551
            1 x pic18f4580 mit mcp2551
Node 1:    Sendet ID 0x80  und Sorgt dafür, dass Node 2 led toggled.
Node 2:    Sendet ID 0x350 und Sorgt dafür, dass Node 1 Auf Bildschirm 
Hallo schreibt.
Node 3:   funktioniert als CanMonitor da sehe ich alle ID s die über den 
Bus hin und her geschickt werden. (4x20 LCD)
Node 4:    Can USB kabel von LAWICEL dient als Überwachung am PC mit 
Canhecker software



Meine Settings: für Test
Alle Bus Parameter in original zustand gelassen (125kbps)
Bis jetzt funktioniert alles. Ich kann auch alle Daten am PC mir ansehen 
und die Nodes funktionieren alle.




Mein Problem:
wenn ich über CanUSB (Canhecker) die ID 0x100 sende sollte :
Node 2 seinen LED high machen.
Node 3 Die ID 0x100 am LCD zeigen.

Funktioniert aber nicht.



Feststellungs:
Wenn ich meinen CANUSB von Lawicel an OBD anschließe sehe ich sofort 
alle IDs und alle Daten
wenn eine ID wie 0x7DF sende und dazu passende Data kriege ich sofort 
Antwort.

Ich habe am OBD 60 Ohm gemessen und nehme an, dass der gesamt widerstand 
von 2 parallel geschalteter 120ohm Widerständen ist.

Ich kriege keine Daten von CanUSB und auch keine Daten von OBD an meinem 
Board angezeigt. Die kriegen aber meine Nachrichten.

Was kann aber das Problem sein :(

von mehmet c. (mscikar)


Angehängte Dateien:

Lesenswert?

Hier ist meine Schaltung.
   Ich kann zwischen 3 Platinen Daten senden und Empfangen.
   kriege aber keine Daten von meinem CanUSB (LAWICEL) oder von OBD an 
meinem Board angezeigt.

   Ich kann aber alle Daten die zwischen meine 3 Platinen gesendet 
werden an CanUSB(LAWICEL) und an meinem CanMonitor(Platine3) sehen.

Die Abschlusswiderstände kann über einen schalter dazu geschaltet 
werden.

von mehmet c. (mscikar)


Lesenswert?

Kann mir Jemand weiter Helfen?

von peterguy (Gast)


Lesenswert?

Vielleicht ein Problem mit den Filter Einstellungen oder der 
Messagebuffer Konfiguration?
Ändere doch mal deinen Testaufbau dahingehend, dass du zwischen deinen 
Platinen die OBD Can IDS hin- und herschickst. Versuch danach mal die 
Baudrate vom Versuchsaufbau auf 500 KB zu andern.

von mehmet c. (mscikar)


Lesenswert?

peterguy schrieb:
> Vielleicht ein Problem mit den Filter Einstellungen oder der
> Messagebuffer Konfiguration?
> Ändere doch mal deinen Testaufbau dahingehend, dass du zwischen deinen
> Platinen die OBD Can IDS hin- und herschickst. Versuch danach mal die
> Baudrate vom Versuchsaufbau auf 500 KB zu andern.

Was würdest du mir mir empfehlen wie ich meinen versuch aufbau ändern 
soll.

Zwischen meinen platinen funktoniert die kommunikation. Ich kann von 
allen platinen daten senden und empfangen.

Das problemm ist, dass ich keine daten die von canUsb gesendet werden an 
meiner platine sehen kann. Aber die daten die auf dem can liegen am 
canUsb sehen kann.

von Frank K. (fchk)


Lesenswert?

Stimmt die Bitrate Deiner selbst gebauten Knoten? Hast Du das mit einem 
Oszi oder Logicanalyzer messtechnisch verifiziert?

fchk

von Alain S. (alain_s)


Lesenswert?

RS-Pin ohne 10k Widerstand fest auf masse legen!

von mehmet c. (mscikar)


Lesenswert?

Frank K. schrieb:
> Stimmt die Bitrate Deiner selbst gebauten Knoten? Hast Du das mit einem
> Oszi oder Logicanalyzer messtechnisch verifiziert?
>
> fchk


Ich habe es mit den letzten geänderten parametern nicht gemessen.
Aber mich wundert es, dass ich die daten die auf dem bus liege am pc 
sehen kann.

Das würde bedeuten, dass die baudrate stimmt oder nicht?

von peterguy (Gast)


Lesenswert?

mehmet cikar schrieb:
> peterguy schrieb:
> Vielleicht ein Problem mit den Filter Einstellungen oder der
> Messagebuffer Konfiguration?
> Ändere doch mal deinen Testaufbau dahingehend, dass du zwischen deinen
> Platinen die OBD Can IDS hin- und herschickst. Versuch danach mal die
> Baudrate vom Versuchsaufbau auf 500 KB zu andern.
>
> Was würdest du mir mir empfehlen wie ich meinen versuch aufbau ändern
> soll.
> Zwischen meinen platinen funktoniert die kommunikation. Ich kann von
> allen platinen daten senden und empfangen.
>
> Das problemm ist, dass ich keine daten die von canUsb gesendet werden an
> meiner platine sehen kann. Aber die daten die auf dem can liegen am
> canUsb sehen kann.

OK also dann mal in kleinen Schritten:
Platine1: schickt ID 7DF, wartet dann auf ID 7EF und zeigt die 
empfangenen Daten auf dem Display an.
Platine2: wartet auf ID 7DF, schickt nach Empfang von ID 7DF die ID 7EF 
als Antwort.

ID 7EF ist nur ein Beispiel, schau dir am Besten an welche Id dein Auto 
schickt und nimm die selbe.

von Frank K. (fchk)


Lesenswert?

mehmet cikar schrieb:
> Frank K. schrieb:
>> Stimmt die Bitrate Deiner selbst gebauten Knoten? Hast Du das mit einem
>> Oszi oder Logicanalyzer messtechnisch verifiziert?
>>
>> fchk
>
>
> Ich habe es mit den letzten geänderten parametern nicht gemessen.
> Aber mich wundert es, dass ich die daten die auf dem bus liege am pc
> sehen kann.
>
> Das würde bedeuten, dass die baudrate stimmt oder nicht?

Mess nach, dann weißt Du es.

fchk

von mehmet c. (mscikar)


Lesenswert?

> Mess nach, dann weißt Du es.
>
> fchk

Hi Frank,

Ich habe mir grade die Signale von meiner Platine angeguckt.
data lengt 8 Byte

bei den parametern für 500 kbps zwischen Can H und Can L habe ich :
BRGCON1: 0x00
BRGCON2: 0xBA
BRGCON3: 0x07

habe ich 264us gemessen.

von mehmet c. (mscikar)


Lesenswert?

Hallo Nochmal,

Ich habe grade festgestellt, dass ich zwischen meiner Platinen IDs als 
Extended ID geschickt habe.

      can_putd(CzuD, data, 8, 3, TRUE, FALSE);    // TRUE Extended

ich habe jetzt von meinem CANUSB kabel eine ID als Extended gechickt und 
ich habe die ID und Data an meinem LCD gesehen. :)

daraufhin habe ich Extended False gemacht:

      can_putd(CzuD, data, 8, 3, FALSE, FALSE);

Jetzt habe ich kriege ich zwischen meiner platinen auch keine 
Nachrichten mehr. Wenn ich aber von CanUSb extended ID schicke kriege es 
am LCD angezeigt.
Also ich kann grade nur Extended ID empfangen.

Wie kann ich es ändern, dass ich nur Standard ID empfangen kann.

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.