Forum: Mikrocontroller und Digitale Elektronik ATMEGA162 + SJA1000 Ansteuerung


von HermyHL (Gast)


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

von Sebastian Heyn (Gast)


Lesenswert?

Bascom scheided glaube ich aus, da hast du keine richtige kontrolle 
darüber, wie du den xram ansprichst... (glaub ich)

von Rahul, der Trollige (Gast)


Lesenswert?

Wie sieht denn dein Code aus?
Funktioniert die Hardware überhaupt?

von HermyHL (Gast)


Angehängte Dateien:

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

von Michael W. (mictronics) Benutzerseite


Lesenswert?

http://www.mictronics.de/?page=can_bus

Ein fertiges Projekt das deinen Anforderungen entspricht...

von HermyHL (Gast)


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

von HermyHL (Gast)


Angehängte Dateien:

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

von Michael W. (mictronics) Benutzerseite


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.

von HermyHL (Gast)


Lesenswert?

Hab mir sowas schon fast gedacht...

Ok, dann werd ich mal die Schaltung entsprechend modifizieren und dann 
mal schaun...

Vielen Dank,

Meld mich wieder!

Gruß
Hermy

von A.K. (Gast)


Lesenswert?

Laut Doku führt ein interner Speicherzugriff nicht zu Aktivität auf 
RD/WR.

von HermyHL (Gast)


Angehängte Dateien:

Lesenswert?

Habe die CS und die Resetleitung nun auf einen eigenen Port gelegt, aber 
irgendwas haut da noch nicht hin.

Bekomme immernoch nichts raus.

Hab ich noch irgendwas übersehen???

Code im Anhang.

Gruß
Hermy

von Michael W. (mictronics) Benutzerseite


Lesenswert?

>> Bekomme immernoch nichts raus.

Eine wage Aussage...

Vielleicht solltest du erst mal bescheiben was überhaupt geht und was 
nicht.
Kannst du überhaupt den SJA lesen und schreiben? Also die Register.

Was hängt als weitere Node am CAN Bus?
Woher weist du das nichts gesendet wird?

Ein paar mehr Details sind schon nötig...

von HermyHL (Gast)


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

von Michael W. (mictronics) Benutzerseite


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.

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.