Forum: Mikrocontroller und Digitale Elektronik AVR + CAN - Probleme mit ATMega8-16PU + MCP2515 + MCP2551


von A. V. (kra5h)


Lesenswert?

Hallo,

ich habe ein Problem mit der Kommunikation über einen CAN-Bus zwischen 2 
Platienen und hoffe irgendjemand kann mir helfen.

Also, ich habe zwei baugleiche Platienen miteinander verbunden (wie 
gesagt, mit einem CAN-Bus).
Auf beiden Platinen befinden sich ein ATMega8-16PU, ein MCP2515 und ein 
MCP2551. Auf beiden Megas läuft der gleiche Code.

Jetzt zum Problem:

Wenn ich von Platine1 Daten zu Platine2 schicke, kommen diese perfekt 
an.
Anders herum (P2 -> P1) funktioniert nicht.
Das kuriose dabei ist, dass ich die jeweiligen Bauteile miteinander 
vertauschen kann, es passiert immer das Gleiche.

Ich habe mir jetzt so überlegt:

- wenn ich mit einem Senden kann und der Andere das empfängt, liegt es 
nicht an den SPI's oder deren Einstellungen
- am Code kann es auch nicht liegen, da auf beiden µC der selbe 
aufgeflasht ist und das Vertauschen der Controller nichts bewirkt
- an den USART's liegt es auch nicht, da ich diese getestet habe
- der Bus muss auch ok sein, da es ja in eine Richtung 
funktioniert...d.h. auch, dass die vier MCP... richtig laufen...
- Rx-Can und Tx-Can habe ich mit einem Ohm-Meter, auf richtigen 
Anschluss getestet

Da mir jetzt so langsam die Fehlerquellen ausgehen, hoffe ich, dass mir 
einer von euch weiterhelfen kann.

Danke schon mal im Voraus!

von pcb (Gast)


Lesenswert?

Dies bittenochmal erklären:
>Das kuriose dabei ist, dass ich die jeweiligen Bauteile miteinander
>vertauschen kann, es passiert immer das Gleiche.

welche Bauteile GENAU vertauscht? Die AVRs? oder die Treieber, CAN 
Controller auch?
WAS "das Gleiche"? Wenn es wirklich der gleiche code sein soll, wie du 
bechauptet hattest, dann schicken die wohl die Messages mit der gleichen 
ID, was zu kollisonen führt, und deswegen nicht erlaubt ist. Aber ich 
habe das Gefühl, dass du uns etwas verschweigst...

von holger (Gast)


Lesenswert?

>dann schicken die wohl die Messages mit der gleichen
>ID, was zu kollisonen führt, und deswegen nicht erlaubt ist.

Hä? Jeder Busteilnehmer darf auf jeder ID senden.

von Helmut (Gast)


Lesenswert?

Wenn du die Bauteile tauschen kannst, bleibt der Fehler auf der Platine 
2, d.h. die Platine ist dran schuld.....

von A. V. (kra5h)


Lesenswert?

Hallo pcb und danke für die Antwort,

Ich kann die AVR's miteinander, die MCP2551 miteinander und/oder die 
MCP2515 miteinander vertauschen und jedes Mal kann ich nur von P1 nach 
P2 senden.

Und ja das ist die gleiche ID, aber erstens ist das egal, weil ich 
sowieso immer vorher komplet resette und 2. die Filter und Masken der 
MCP's aus sind (also jede Nachricht wird aufgenommen).

von A. V. (kra5h)


Lesenswert?

Helmut schrieb:
> Wenn du die Bauteile tauschen kannst, bleibt der Fehler auf der Platine
> 2, d.h. die Platine ist dran schuld.....

^^das ist nicht unbeding die Schuld von Platine 2, weil entweder kann 
nicht senden, oder Platine 1 nicht empfangen.

von A. V. (kra5h)


Lesenswert?

pcb schrieb:
> ..dann schicken die wohl die Messages mit der gleichen
> ID, was zu kollisonen führt, und deswegen nicht erlaubt ist. Aber ich
> habe das Gefühl, dass du uns etwas verschweigst...

..Ach ja, und ich schicke die Nachrichten ja nicht gleichzeig.

Tasterdruck->senden->per UART der anderen auslesen...dann nehm ich die 
Spannung weg und versuch es anders herum...geht nicht... :(

von A. V. (kra5h)


Lesenswert?

Danke für eure Antworten, hab den Fehler gefunden....eine Lötstelle vom 
Bus hatte kontakt zur Masse... dummer Fehler.. :D ...jetzt geht´s.. :)

von Helmut (Gast)


Lesenswert?

Nein, ich hatte Unrecht :-)

A. V. schrieb:
> Helmut schrieb:
>> Wenn du die Bauteile tauschen kannst, bleibt der Fehler auf der Platine
>> 2, d.h. die Platine ist dran schuld.....
>
> ^^das ist nicht unbeding die Schuld von Platine 2, weil entweder kann
> nicht senden, oder Platine 1 nicht empfangen.

von pcb (Gast)


Lesenswert?

holger schrieb:
> Hä? Jeder Busteilnehmer darf auf jeder ID senden.

Na genau eben nicht, höhstens eine Request der Nachricht mit einer 
bestimmten ID  stellen. Wenn das passiert, dann hast du eine Kollision, 
die nicht aufglöst, vermieden werden kann => Datenverlust.

A. V. schrieb:
> Und ja das ist die gleiche ID, aber erstens ist das egal, weil ich
> sowieso immer vorher komplet resette und 2. die Filter und Masken der
> MCP's aus sind (also jede Nachricht wird aufgenommen).

So what?

A. V. schrieb:
> ..Ach ja, und ich schicke die Nachrichten ja nicht gleichzeig.
>
> Tasterdruck->senden->per UART der anderen auslesen...dann nehm ich die
> Spannung weg und versuch es anders herum...geht nicht... :(

Aha, mein Gefühl hat mich nicht getäuscht. Diese kleines ach ja, kann 
grosse Auswirkung haben.
Nun bin ich froh, dass anscheinend Fehler gefunden wurde.

von A. V. (kra5h)


Lesenswert?

pcb schrieb:

> A. V. schrieb:
>> Und ja das ist die gleiche ID, aber erstens ist das egal, weil ich
>> sowieso immer vorher komplet resette und 2. die Filter und Masken der
>> MCP's aus sind (also jede Nachricht wird aufgenommen).
>
> So what?
>

Ja, war ja nur der Code um erstmal zu schauen, ob ich ne Massage über 
Can verschickt und empfangen bekomme. Wenn´s mal fertig ist sollen dann 
mehrere Slaves, die jeweils nur eine id empfangen (mittels der Filter), 
mit einem Master kommunizieren. Da werden dann selbstverständlich 
unterschiedliche id´s verwendet.


> A. V. schrieb:
>> ..Ach ja, und ich schicke die Nachrichten ja nicht gleichzeig.
>>
>> Tasterdruck->senden->per UART der anderen auslesen...dann nehm ich die
>> Spannung weg und versuch es anders herum...geht nicht... :(
>
> Aha, mein Gefühl hat mich nicht getäuscht. Diese kleines ach ja, kann
> grosse Auswirkung haben.
> Nun bin ich froh, dass anscheinend Fehler gefunden wurde.

Ja zum Glück...Danke, für die vielen Nachrichten!

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.