AVR + CAN - Probleme mit ATMega8-16PU + MCP2515 + MCP2551

OP #2181577
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!
Gast #2181601
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...
OP #2181623
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).
OP #2181641
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... :(
Gast #2181682
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.
Gast #2181767
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.
OP #2181774
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren