Forum: Mikrocontroller und Digitale Elektronik Memory Mapping?


von Wolfgang (Gast)


Lesenswert?

Hallo!
Ich versuche immer noch erfolglos einen SJA1000 CAN-Controller direkt
an einen AVR (Mega16) zu bekommen. Ich habe A0-A7 vom SJA1000 an PORTA,
und die übrigen Steuerleitungen an PORTD angeschossen. Wenn ich nun
anhand der Timing-Tabelle im Datasheet des SJA1000 versuche ein paar
register auszulesen, bekomme ich nur Müll. Dann habe ich die internen
Pull-Up Widerstände des AVR deaktiviert, und externe PULL-Down
Widerstände angeschlossen. Laut Osszi sehen die gesendeten Signale gut
aus, nur reagiert der SJA1000 nicht und sendet keine Daten. Der Quarz
des SJA1000 läuft mit 20 MHZ und schwingt auch schön.
Ich habe nach langem gegoogle folgendes Posting gefunden, aber ehrlich
gesagt verstehe ich den Inhalt nicht genau:

"The CAN controller supports a multiplexed address/data bus
architecture and
hence interfaces to the 80C186's address/data bus. The addresses are
de-multiplexed in the controller using the processor's ALE strobe.
This architecture creates a subtle problem as the 80C186 expects all
byte addressable peripherals to be on even address boundaries ( A(0)
always '0' ) with data transferred on data bits <7:0>. As AD(0) must
always be '0' during the address phase this cannot be used by the
SJA1000 as an address bit. For this reason AD<8:1> is used instead.
However, now that AD(0) is not connected to the SJA1000 all data to and
from the SJA1000 must be re-aligned to the data bus bits <8:1>."


Also Anscheinend kann ich die Register des SJA1000 nicht einfach mit
0x00 für Register 0, 0x0A für Register 10 usw. ansteuern, sondern muss
das anders machen. Aber wie?
Ich habe keine Erfahrungen mit externen Bussen, und habe bisher meine
externen Chips seriell, oder direkt angesteuert (z.B. einen FTDI
USB-Chip).
Es gibt viele Hits zum thema SJA1000, aber die bezogen sich auf
Produkte wie CANDIP, oder auf andere MCUs.

Vielen Dank schonmal für das lesen meines langen Postings :o)

Wolfgang

P.S.: Ich programmiere in AVRGCC. Falls jemand ein AVR+SJA1000+GCC
Beispiel mit Schaltplan für mich hätte wäre ich überglücklich.

von Andreas W. (Gast)


Lesenswert?

Hallo Wolfgang,

der Text beschreibt das Anbinden eines 16-bittigen µC an den SJA1000.
Ein 16bit µC gibt nur gerade Adressen(even address) an seinem Bus aus,
da ein Prozessorbefehl in diesem Fall 2byte sind. Die Adresse A0 bleibt
immer inaktiv auf 0. Deshalb emphiehlt der Text das Verschieben
der Adressen um ein Bit nach oben (also nicht AD<7:0>, sondern
AD<8:1>). Da du aber einen 8bit µC verwendest, sollte dich das
eigentlich
nicht kümmern, da dieser auf jeden Fall ungerade Adressen erlaubt.
Entweder hast du beim Beschalten des SJA noch einen Fehler gemacht
(Mode, Reset-Beschaltung, ALE-Timing für die Adressen richtig?)
oder du hast vielleicht nicht die richtigen Adressen für die Register
genommen (-->Datenblatt).

Gruss
Andreas

von Wolfgang (Gast)


Lesenswert?

Vielen Dank für die Info!
Ich hatte mich auch schon gefragt, aber die 128 Register sollten
eigendlich von 0x00 bis 0x80 gehen. Aber der Chip ragiert einfach
nicht. Ich denke ich versuche mal mein Glück mit einem Mega128 mit
integriertem CAN-Controller.

von norpo (Gast)


Angehängte Dateien:

Lesenswert?

Hab mal in den Anhang einen Codeschnipsel eingestellt. Damit solltest du
den sja1000 ansprechen können.
Ich habe aber den SJA1000 auf den Müll geschmissen, weil er mir zu
viele Ports belegt und im Handling zu kompliziert ist.
Dagegen ist der Umgang mit dem MCP2515 geradezu einfach.
Er läuft am SPI, ist deutlich billiger, hat nur 20PINs und kommt mit
wenigen Befehlen aus.
Ausserdem lässt er ein wesentlich einfacheres Platinenlayout zu.

Gruß
Norbert

von Peter D. (peda)


Lesenswert?

Den SJA1000 sollte man vorzugsweise an MCs mit externem Memorybus
anschließen, wie z.B. Mega8515, Mega162, Mega128.

Dann wird nämlich die Ansteuerung popeleinfach, da sämtliche Register
Memory mapped sind, d.h. einfach direkt über ihre Adresse ansprechbar
sind wie z.B. die Timer, die UART usw.


Peter

von Wolfgang (Gast)


Lesenswert?

Das fürchte ich auch :-(
Ich werde mir mal ein paar samples für den AT90CAN128-16AI schicken
lassen, aber ich bin mittlerwiele auch mehr auf der Schiene die
Sensoren und Aktoren unseres Roboterprojektes hier an der Uni per USB
anzuschliessen. Die Chips von FTDI laufen wirklich problemlos.
Vielen Dank für den Code norpo, aber das n C zu übersetzen wäre auch
wieder eine grosse Fehlerquelle...

von wolf4124 (Gast)


Lesenswert?

@Norbert

Hallo

Kann man von dir mehr Informationen in Bezug auf die BASCOM Ansteuerung
mit ISP bekommen.
Ich suche gerade etwas um den CAN mit BASCOM anzusteuern zu können.

Gruß

von norpo (Gast)


Lesenswert?

natürlich gerne.

schreib mir mal ne email mit näheren infos

processor etc

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.