mikrocontroller.net

Forum: PC-Programmierung SJA1000 über LPT ansteueren


Autor: Joe (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Gibt es hier im Forum jemand der den CAN-Controller (SJA1000) über die
LPT angesteuert hat?
Die LPT kann ich unter Win2000 sowie WinXP problemlos ansteueren.
Ich schaffe es nur nicht den CAN Controller richtig anzusteueren.
Programmiertool: Borlaqnd Builder C++ Version5.0
DLL für LPT Ansteuerung: "inpout32.dll"

Für die Hilfe bin ich sehr dankbar!

MFG

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider ist es mir immer noch nicht gelungen vo CAN Controller die Daten
auszulesen.
Gibt es in diesem Forum überhaupt niemand der sich damit auskennt?

Autor: Pontonfrog (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, habe das selbe Problem wie Du. Ich arbeite mit Visual C++.
Eine Initialisierung des SJA ist mir bisher auch nicht gelungen. Ich
wollte zunächst den SJA in den Resetmode bringen um das Bittiming und
die Nachrichtenfilterung zu initialisieren. Das mit dem Resetsignal
klappt bei mir schon mal nicht.
Gelingt es Dir den SJA an Pin 17 auf low zu ziehen?

Mfg

PS: Ich arbeite mit Win2k und habe DirectIO um auf die parallele
Schnittstelle zuzugreigfen.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Wie gesagt ich schaffe es nicht von einem Register die Daten über die
LPT auszulesen.
AM RESET EIngang habe ich einfach einen 10K Ohm WIderstand auf VCC +5V
gelegt. Der PIN 17 bleibt ja nicht die ganze Zeit auf LOW.
Zuvor habe ich den SJA mit einem normalen ATMEL COntroller angesteuert.
Funktioniert problemlos.
Schaffst du es eingentlich die Daten vom SJA über die LPT auszulesen?

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Schaltung wird bei mir mit den +5V vom USB Anschluss des PC's
versorgt.

Ja klappt es bei dir, dass du z.B. vom Register (Adresse 0x01) die
Daten auslesen kannst ?

Autor: Pontonfrog (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, musste zwischendurch zum Arbeiten...

1.
Welche Adresse meinst Du? Die Adresse 0x01 am SJA?

Ehrlich gesagt ist mir auch nicht so ganz klar, wie die Adressen im SJA
zugeordnet werden, bzw. wie über die 8 Datenleitungen der Adressraum des
SJA angesprochen wird. Bisher konnte ich auch keinerlei Infos dazu
erhalten.

Gibt es da von Deinem ATMEL Projekt noch irgendwelche Hinweise? Die
schreiben immer, dass der SJA wie ein gemappter Speicher verstanden
werden kann.
2.
So wie ich das bisher gelesen habe(vgl. Philips Application Note
AN97076 Kap. 4.2.1) muß ein Reset an Pin 17 erfolgen. Anschließend kann
das Reset Request Bit noch geprüft werden um dann das Bittiming und die
Nachrichtenfilter zu setzen. Erst dann können CAN-Botschaften gesendet
oder empfangen werden.

3.
Welche Einstellungen des LPT (EPP, ECP normal Mode) verwendest Du?

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok so wie es aussieht funktioniert die CAN Initialisierung.
Jetzt bin ich gerade dabei eine Botschaft auf den CAN Bus zu senden.
Das habe ich bis jetzt nicht zum laufen gebracht.
Das Programm bleibt bei "warten bis Sendung ausgelöst" stehen.
Es kann auch sein das die Initialisierung doch nicht richtig ist. Wie
gesagt den SJA1000 habe ich zusammen mit einem ATMEL Controller
am laufen. Klappt wunderbar.

/*----CAN Botschaft
senden------------------------------------------------*/
void TForm1::canmessage_write(struct message *ptransmit)
{
   unsigned int id_1,id_2,id_3;
   unsigned int id_1_hilf,id_2_hilf,id_3_hilf;
   unsigned int trdscr_wert;
   unsigned int i;

   id_3=(ptransmit->id)&0x0f;
   id_2=((ptransmit->id)/16)&0x0f;
   id_1=((ptransmit->id)/256)&0x0f;

   id_1_hilf=id_1*32;
   id_2_hilf=id_2*2;
   id_3_hilf=id_3/8;

   trdscr_wert=(id_1_hilf)|(id_2_hilf)|(id_3_hilf);
   canreg_write(10,trdscr_wert);


   id_3=(ptransmit->dlc)&0x0f;
   id_2=(ptransmit->rtr)*16;
   id_1=((ptransmit->id)&0x0f)*32;

   trdscr_wert =(id_3)|(id_2)|(id_1);
   canreg_write(11,trdscr_wert);

   for (i=0;i<=7;i++)
    {
     canreg_write (12+i,ptransmit->byte[i]);
    }
   canreg_write (1,0x01);                //Sendung auslösen

   do
    {
    }
   while (((canreg_read(2))&0x08)==0);    //warten bis Sendung fertig

}

Autor: tüdel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
seh dir doch mal das an!
http://pinguin.sauerland.de/can200.html
über links kommst du zu quellen der treiber ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.