ATMEGA162 + SJA1000 Ansteuerung

Gast #482122
Lesenswert?

Hallo an alle!

Ich habe hier ein Riesen Problem!

Ich versuche schon seit Tagen den ATMEGA162 so zu programmieren, dass er
über den SJA1000 CAN-Nachrichten versendet, welche im ATMEGA 
vordefiniert sind.

Also ein selbstarbeitendes Interface.

Habe schon überall gesucht werde aber leider nichts, was mir weiter 
hilft.

Ich habe schon die Datenblätter rauf und runter studiert, bekomme aber 
überhaupt keine message raus.
Den SJA1000 spreche ich als externes RAM an so wie es auch im Datenblatt 
beschrieben ist.
Habe auch schon mit dem Beispielcode von CANDIP experimentiert, aber das 
läuft auch nicht.
Die Steuerleitungen AD0 - AD7 sind 1:1 verschaltet, wie auch INT0, ALE, 
WR, RD und Reset. MODE ist an VDD und CS an GND.

Hat einer schon mal erfolgreich so einen ATMEGA162 mit SJA1000 zum 
laufen bekommen? Hat vielleicht jemand ein funktionierenden 
Beispielcode? Am besten in C oder BASCOM.

Vielen Dank für eure Hilfe!

Gruß
Hermy
Gast #482214
Lesenswert?

Die Hardware funktioniert.

Isn universal Can-bus interface aus der firma welches schon für 
lfb-fernbedienungen eingesetzt wird.

Z.B. Can-bus -> Remote-Control Radio

Ich versuche nun mit diesem Interface ein bischen zu experimentieren, 
damit ich eigene Anwendungen darüber laufen lassen kann.

Der Code is der Beispiel Code von Candip für BASCOM, aber damit hab ich 
gar keinen erfolg, hab auch schon sämtliche timings ausprobiert unter 
anderem berechnet und diverse Steuerbits getestet, es scheint so als 
wenn am sja1000 nichts ankommt.

code im anhang

Gruß
Hermy
Angehängte Dateien:
Gast #482387
Lesenswert?

Vielen Dank Michael!

Ich werd Deinen Code mal studieren und probieren, werde aber wohl noch 
einige Anpassungen vornehmen müssen, denn an der Schaltung ist ja kein 
PC-Interface und keine Status-LED's, aber es ist schonmal ein sehr guter 
Grundstein.
Damit werd ich wohl sicher weiter kommen.

Meld mich wieder, wenn es klappt oder noch Probleme geben sollte und 
werde berichten!

Gruß
Hermy
Gast #484524
Lesenswert?

Hallo mal wieder!

Hab es mit Michaels Software versucht, aber irgendwie bin ich am 
verzweifeln.

Bekomme einfach keine Nachricht über CAN-Bus raus.

Muss anmerken, dass CS auf GND liegt und RST vom SJA an RESET (AT162) 
geht, kann diese Ports also nicht softwareseitig steuern.

Steuern könnte ich nur AD0-7, ALE, RD, WR und INT.

AD0 - AD7  -->>  PA0 - PA7
ALE -->> PE1
CS -->> GND
RD -->> PD7
WR -->> PD6
MODE -->> VSS
RST -->> RESET
INT -->> PD2

Hab mal den Sourcecode mit angefügt, vielleicht hab ich was übersehen?

@Michael, wäre total nett, wenn Du mir helfen könntest und den Code mal 
checken würdest.

Vielen Dank,
Gruß
Hermy
Angehängte Dateien:
Persönliche Seite #484572
Lesenswert?

Du kannst CS nicht direkt auf Ground legen, damit wird das Memory 
Interface des SJA ständig aktiviert.

Wenn du bei einem AVR das XMEM Interface aktivierst, dann ändern sich 
die ALE und RD/WR Signale an den entsprechenden Pins auch dann, wenn auf 
internen SRAM zugegriffen wird.
Wenn nun CS ständig aktiviert ist, dann bekommt der SJA allen Traffic 
auf dem  Adress- und Datenbus mit, auch wenn er NICHT angesprochen 
werden soll, und das führt zu großer Verwirrung.

CS muss also zwingend auf einen IO Pin des AVR gelegt, und von der 
Software entsprechendet behandelt werden.
Und ich kann dir nur empfehlen auch das RST Signal auf einen IO Pin zu 
legen.
Gast #487130
Lesenswert?

Hallo Michael,

das Interface habe ich an nem CAN-Bus Logger angeschlossen und das ganze 
mit 120R Widerstand terminiert, so wie es auch sein sollte.

Da ich kein PC am Interface habe kann ich auch nicht die Register 
auslesen, aber ich habe mal nachgemssen.

Die Resetleitung ist nun dauerhaft auf Logisch 1 also 5V und die 
CS-Leitung auf 0.
Ist das korrekt so?

Ist denn der Code, welchen ich im Post hiervor angefügt habe, soweit in 
Ordnung oder habe ich noch was übersehen?

Timing habe ich auf 100KBit eingestellt.

Gruß
Hermy
Persönliche Seite #487394
Lesenswert?

Ganz ohne Debugging Möglichkeit dürfte es schwierig werden das Problem 
zu finden. Du solltest wenigstens versuchen temporär eine serielle 
Ausgabe für einen PC zu erzeugen um überhaupt zu wissen wo es hängt.

Den Code hab ich nur mal überflogen, aber deiner Änderungen sind sehr 
unübersichtlich.
Vielleicht solltest du mal alles löschen was du von dem was ich 
geschrieben hab nicht brauchst, die ganzen USB Handler zB.

Oder schreib einen minimum Code, der nur die SJA Handler Files benutzt.

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