www.mikrocontroller.net

Forum: PC-Programmierung LPT Port


Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe einen ganz normalen LPT Port am PC. Ich weiss jetzt gar nicht
ob der LPT Port bidirektional ist. Wie kann ich einen LPT Port auf
Eingang umschalten?

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
er ist bidirektional

such mal bei google hatte mir damals mal ein programm in c geschrieben
um den paralelport aus der console anzusprechen

eigendlich ganz einfach

Autor: Weihnachtsmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Der LPT(ECP/EPP) ist eigentlich bidirektional.
Du musst das Bit5 im Steuerregister umkehren.

Gruss

Der Weihnachtsmann

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marko B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Weihnachtsmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marko B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bit 5 ist write-only.

Autor: Weihnachtsmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Write / Read

Autor: Marko B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich kann daraus nur schließen daß Du noch nie was in der Richtung
programmiert hast ...

Autor: Weihnachtsmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn meinst du Marko B?

Gruss

Weihnachtsmann

Autor: Weihnachtsmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joe


Wenn deine LPT ECP oder EPP unterstützt dann ist sie auch
Bidirektional. Und das kannst du im Bios nachschauen und/oder sogar
einstellen.

Gruss

Weihnachtsmann

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
}

Autor: Weihnachtsmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Weihnachtsmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joe

Sorry du prüfst natürlich Bit0 nicht Bit1

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

}

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.