LPT Port

Gast #199336
Lesenswert?

Was bedeutet Bit 5 umkehren? Wenn ich Daten lesen will, muss ich das Bit
auf eins setzen oder auf Null?

Im Internet habe ich erfahren, dass das BIT 5 vom ControlRegister nicht
bei jedem LPT Port funktioniert. Stimmt das?
Gast #199337
Lesenswert?

Starte debug (du must in einem richtigen DOS sein, also von ner
Bootdiskette booten)

gib ein:

o 378 00

i 378

es muß 00 angezeigt werden (sonst ist der Port kaputt)

dann

o 37a 10

i 37a

wenn jetzt FF angezeigt wird, dann ist der Port bidirektional.
ansonsten kommt 00 zurück -> nicht bidirektional
Gast #199338
Lesenswert?

Wenn Bit5 nicht unterstützt wird dann wird LPT auch nicht Bidirektional
sein. Das ist bei recht alten Computer der Fall.
Mein 14 jähriger PC unterstützt Bidirektionaler Datenverkehr.

Du kannst ja Bit5 lesen und dann Invertieren.

Gruss

Der Weihnachtsmann
Gast #199344
Lesenswert?

Ok im BIOS habe ich die Einstellung für den LPT vorgenommen.
Leider kann das Reset Request Bit nicht auf "1" setzen.

Das Reset Request Bit muss doch geprüft werden um dann das Bittiming
und die Nachrichtenfilter zu setzen. Erst dann können CAN-Botschaften
gesendet oder empfangen werden. Das Programm bleibt immer in der
do..while Schleife hängen. Was muss ich ändern damit die
Initialisierung durchläuft?

/*----Initialisierungsroutine für den CAN-Controller
SJA1000------------*/
void 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,0x43);
 canreg_write(7,0x2F);
 canreg_write(8,0x1A);
 canreg_write(31,0x07);

 do
  {
   canreg_write(0,0x00);
  }
 while (((canreg_read(0))&0x01)==01);
 canreg_write(1,0x0C);
}
Gast #199345
Lesenswert?

Hallo Joe

Ich moment bin ich überfragt. Das hat jetzt mit CAN zu tun?
Anhand es Codes sehe ich nicht ob dies direkt mit LPT oder mit CAN zu
tun hat. Ich sehe nur dass du Bit1 prüfst.

Wenn ja dann Prüf ob LPT ohne CAN richtig funktioniert.
Sonst kannst du den Fehler nicht erruierten.

Gruss

Weihnachtsmann
Gast #199347
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

}

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