Forum: Mikrocontroller und Digitale Elektronik SJA1000 / LPT


von Gerhardt (Gast)


Lesenswert?

Hallo, ich habe mir einen kleine Platine gebastelt, da drauf ist ein
SJA1000, den ich über die LPT ansteuere.
Die LPT kann ich auch problemlos mit einer DLL ansprechen.
Ich hab mir mal ein kleines Progrämmchen mit dem orland Builder C++
geschrieben. Mit dem will ich den SJA1000 ansprechen. Was mir da
auffält ist das sich der SJA1000 gar nicht initialisieren läst.
Zur kontroller habe ich ein Tool heruntergeladen, mit dem ich die
einzelnen PINS der LPT überwachen kann. Das sehe ich dann, das mein
Programm versucht den SJA1000 zu initialisieren.Ich hab sogar mal ein
Register beschriben zB. Rigister 6 und dieses habe ich dann auch gleich
wieder ausgelesen. Da bekomme ich auch immer den wert 255 zurück.
Ich verstehe das nicht. Den Schaltplan habe ich von dieser seite
http://www.cantronik.com/. Der Resonator 8Mhz am SJA1000 funktioniert.
Die +5V liegen auch an.

von Andreas S. (andreash)


Lesenswert?

Hallo Gerhardt,

ich habe mir vor einiger Zeit diese Canbus-Platine nachgebaut:
http://pinguin.sauerland.de/can200.html

Allerdings hatte ich das unter Linux getestet. Windows bin ich noch
nicht zu gekommen.

Dabei hatte ich ähnliche Probleme wie Du. Mittlerweile läuft sie
einwandfrei. Wenn ich mich richtig erinnere, war der Reset nicht auf 5V
gelegt in einem der beiden Layouts.

Such mal im Code-Forum. Da gab es ähnliche Probleme mit dem SJA1000
unter Windows.
Du musst den Mode des PArallel-Ports umschalten so dass er in beide
Richtungen läuft.

Grüße
Andreas

von Gerhardt (Gast)


Lesenswert?

Danke Andreas, ich doch ohne weiteres die Schaltung so aufbauen wie auf
dieser Seite http://www.cantronik.com/ , oder? Ja die LPT funktioniert
prima. Vielleicht liegt es auch daran, dass ich vielleicht doch nicht
von der LPT lesen kann. Kann mir jemand sagen welche DLL am besten
dafür geeignet ist, und welchen Mode oder Einstellung ich machen
sollte?

ich verwende das Btriebssystem Windows XP!

von Gerhardt (Gast)


Lesenswert?

Korrektur:

Danke Andreas, ich kann doch ohne weiteres die Schaltung so aufbauen
wie auf dieser Seite http://www.cantronik.com/ , oder? Ja die LPT
funktioniert eigentlich prima. Vielleicht liegt es auch daran, dass ich
vielleicht doch nicht von der LPT lesen kann. Kann mir jemand sagen
welche DLL am besten dafür geeignet ist, und welchen Mode oder
Einstellung ich an der LPT machen sollte?

Ich verwende das Betriebssystem Windows XP!

von Gerhardt (Gast)


Lesenswert?

Hmmm...im Bios kann man ja die LPT einstellen.
Da gibt es ein SPP und EPC usw. Modus. Was genau müsste man einstellen
um richtig von der LPT zu lesen bzw schreiben?

von Gerhardt (Gast)


Lesenswert?

Hallo Andreas,

ich hab mir mal diese Seite angeschaut:
http://pinguin.sauerland.de/can200.html
Da gibt es ein Schaltplan, der in Eagle angefertigt wurde.
Ich habe bei mir kein Eagle installiert.
Gibt es auch noch eine andere Möglichkeit damit ich den Schaltplan
sehen kann?

von Profi (Gast)


Lesenswert?

Eagle Demoversion kannst Du bei www.cadsoft.de downloaden.
Nettes Programm, immer gut, wenn man es hat.

von wolf4124 (Gast)


Lesenswert?

@Andreas

Kannst du mir schreiben, wo du die Windowsversion bekommen hast?

Gruß

von Gerhadt (Gast)


Lesenswert?

Guten Abend,

ich habe meine Schaltung nochmals überprüft. Scheint alles ok zu sein.
Ich habe im BIOS bei LPT EPP eingestellt. Jetzt kann ich auch meinen
SJA1000 via LPT initialisieren.
Um zu Testen ob die Botschaften gesendet werden können, verwende ich
einen USB PEAK CAN DONGLE. Der SJA1000 von diesem DONGLE wird mit 16Mhz
versorgt. Mein SJA1000 mit 8Mhz. Ich habe alles mögliche versucht, aber
ich kann nichts empfangen. Kann jemand meine Funktion überprüfen ob
diese stimmt? (Baudrate 100kBit/s; Intel Mode)


/*----Initialisierungsroutine für den CAN-Controller
SJA1000------------*/
void TForm1::can_init(void)
{
 do
  {
   canreg_write(0,0x01);
  }
 while (((canreg_read(0)) &0x01)==0);

 canreg_write(4,0xFF);
 canreg_write(5,0xFF);

 canreg_write(6,0xC1);
 canreg_write(7,0xEB);
 canreg_write(8,0x00);
 canreg_write(31,0x07);

 do
  {
   canreg_write(0,0x00);
  }
 while (((canreg_read(0))&0x01)==01);
 canreg_write(1,0x0C);
}

Sind die Register6 (BusTiming0 Register), Register7 (BusTiming1
Register) und Register8 (Output Control) richtig so eingestellt?

Beise Teilnehmer habe ich sowohl mit 60Ohm verbunden, sowie ohne
Widerstand zwischen CAn LOW und CAN HIGH.

von Gerhart (Gast)


Lesenswert?

Register 6 und 7 habe ich jetzt schon 1000mal verändert. Ich war schon
auf sämtlichen Internetseiten, wo man die Taktfrequenz vorgibt und die
gewünschte Baudrate, aber leider hilft das auch nichts!

Oder Vielleicht liegt es auch noch an dem Register 8? Grr....

von Gerhart (Gast)


Lesenswert?

Ich würde mich echt freuen, wenn mir einer bei meinem Problem helfen
könnte. Ich drehe mich die ganze Zeit im Kreis herum.

Ich vermute mal das die Einstellung dieser Register 6,7,8 nicht
stimmen.

canreg_write(6,0xC1);
canreg_write(7,0xEB);
canreg_write(8,0x00);

von Gerhart (Gast)


Lesenswert?

Verdammt! Ich bin am Ende. Gibt es hier in diesem Forum einen, der sich
sehr gut mit dem Can Baustein SJA1000 auskennt?

von Gerhardt (Gast)


Lesenswert?

Juhu ich kann endlich Botschaften senden und empfangen.
Ich habe den PIN5 von CAN Traciever 82C250 auf +5V gelegt.
Das Register 8 (OCR Register) da habe ich nicht so den Durchblick über
die genaue Funktionsweise.
Das Register habe ich bei mir mit dem Wert 0xEA initialisert.
Siehe da es funktioniert.


Wenn ich während dem Betrieb die Spannung vom SJA1000 unterbreche oder
den SJA1000 komplett von der LPT trenne und anschließend alles wieder
anschließe, dann kann ich weiterhin die gleichen Botschaften senden und
empfangen.
Normalerweise müsste ich doch erst den SJA1000 ganz neu initialisieren,
weil ich die Spannung zuvor abgeklemmte habe oder?
Gibt es eine Möglichkeit den SJA1000 abzuschalten, bzw. so dass man ihn
neu Initialiseren muss?

von Andreas (Gast)


Lesenswert?

@wolf4124:
Ich habe das nur unter Linux getestet. Mir eine Software unter Windows
zu schreiben, dazu bin ich noch nicht gekommen. Aber vielleicht kann
Dir Gerhardt jetzt weiterhelfen.

@Gerhardt.
Das verstehe ich bei Dir nicht. Wenn ich die Platine abgelemmt habe,
dann musste ich den neu initialisieren. Wenn Du den nur vom LPT
abklemmst, dann kann das schon sein, dass die Initialisierung erhalten
bleibt. Bei mir hatte der eine eigene Stromversorgung.

Grüße
Andreas

von Gerhardt (Gast)


Lesenswert?

Die +5V für die Versorgung nehme ich vom USB Anschluss.
Gibt es ein Bit in einem Register womit man den SJA1000 wirder auf Null
setzten kann?
Oder kann ich den REset Pin vom SJA1000 auch auf den LPT Port legen und
dann den SJA1000 zurücksetzten? Das müsste doch auch gehen oder?

von Andreas (Gast)


Lesenswert?

>Oder kann ich den REset Pin vom SJA1000 auch auf den LPT Port legen >
und dann den SJA1000 zurücksetzten? Das müsste doch auch gehen
> oder?

Das würde ich so machen. Müsste funktionieren
In einer der beiden Schaltungen, die ich Dir oben genannt habe, wird
das so gemacht.

Grüße
Andreas

von michaell (Gast)


Lesenswert?

Hat jemand Treiber und Unterlagen zu dem CANTRONIK Dongle ?

hab das hier liegen, aber anscheinend gibt es die Firma nicht mehr

danke
  michael@akramer.de

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.