Seriell an LPT senden

Internet_programm

Grünschnabel
Hallo!

Habt ihr ein paar Tipps für mich bitte:

Ich plane ein C-Programm zu schreiben, welches "verstekt" (also kein "schwarzes Kastl" - Windows) läuft.
Dem Programm werden beim Start 2 Parameter Übergeben: eine Adresse und der Wert (Erklärung folgt).
Danach soll das Programm ein Datenwort (siehe http://pira.cz/rds/mrds192.pdf abbildung 4.1 - eben dafür die Parameter Adresse und Wert) an den LPT-Ausgang schiken. Aber seriell (nur Datenleitung 1)! Es gib kein Handshake oder dergleichen. Es soll einfach nach der Reihe die Bits an den LPT geschrieben werden und nur an die Datenleitung1.

Das Endgerät ist mit SDA - Serial Data (Port 6), SCL - serial Clock (5) und Ground (25) mit dem LPT vom Computer verbunden.

Hat jemand eine Idee? Auch wie ich das Programm "verstekt" laufen lassen kann?

Liebe Grüße,
Roman
 
Zuletzt bearbeitet:
System? Windows?

Unter Windows am einfachsten mit der InpOut32.dll
Jedoch müssen da auch Treiber installiert sein.

Was meinst du mit versteckt? Das kein Fenster zu sehen ist?
 
Danke für die Antworten!

Jup als Windows und eben ohne Window ;) eben dass nur der Prozess läuft.

Und wie kann ich da jetzt geziehlt ein DAtenwort (mit dem Auffbau aus dem Link oben) über die Datenleitung 1 seriell senden?

LG
 
Jup als Windows und eben ohne Window ;) eben dass nur der Prozess läuft.
->
Als Windows-Applikation ohne Fenster.

Und wie kann ich da jetzt geziehlt ein DAtenwort (mit dem Auffbau aus dem Link oben) über die Datenleitung 1 seriell senden?

Die InpOut32/64-Bibliothek findest du hier:
http://www.highrez.co.uk/Downloads/InpOut32/

Da ist auch ein Beispiel dabei wie du die Funktionen verwenden kannst und wie du es installierst.

Die zwei wichtigen Funktionsprototypen:
Code:
void  Out32(PortAddresse, DatenWert); // Daten Schreiben
short Inp32(PortAddresse);            // Daten lesen

Die Portaddresse (nicht zu verwechseln mit der Pin-Nummer) beginnt meistens ab 0x278 oder 0x378.
Wie die Pins auf die Addressen aufgeteilt sind siehe Bild:
Parallel-port-picture.jpg

Die obigen Adressen können auch abweichen, die genaue (Start-) Adresse findet man im Gerätemanager:
qvsxl2qbbrrq.png
 
Erstmals 1000 Dank für die raschen antworten!

Aber was mir jetzt noch unklar ist: wie kann ich nur an die erste Datenleitung senden? also nur seriell?
Und wie würde das Datenwort bei <code>Out32(PortAddresse, DatenWert);</code> aussehen wenn ich ein Datenwort wie im Beispiel (siehe http://pira.cz/rds/mrds192.pdf abbildung 4.1) senden möchte?

Danke &
Liebe Grüße
 
Naja musst es dir zusamen basteln.
Wie das I2C-Protokoll funktioniert ist dir bekannt? Wenn nicht mal danach erkundigen.

Mit Inp32(0x378) kannst du zum Beispiel den Status der 8 Pins (2-9, im folgendem Port genannt), insofern das Bidirektional Bit 5 an Adresse 0x37A gesetzt ist, auslesen.

- Bidirektional Bit 5 = 1 --> Port als Eingang (HiZ)
- Bidirektional Bit 5 = 0 --> Port als Ausgang
(uu. kannst du es immer auf eins lassen)

Und mit Out32(0x378, 0xYX) kannst du die Port setzten.

Beispiel zur Generierung der Clock:
Code:
// Bit5 des Controll Registers löschen und Daten Port als Ausgang verwenden
Out32(0x37A, Inp32(0x37A) & ~ (1<<5) );

// 2 Takte generieren
Out32(0x378, Inp32(0x378) & ~ 1 );   // Low
Out32(0x378, Inp32(0x378) | 1 );  // High
Out32(0x378, Inp32(0x378) & ~ 1 );   // Low
Out32(0x378, Inp32(0x378) | 1 );  // High
 

Neue Beiträge

Zurück