Forum: PC-Programmierung LPT Port auslesen


von x86 (Gast)


Lesenswert?

Guten Tag !

Habe einen Temperatursensor mit dig. Ausgang an den LPT angeschlossen 
und würde gerne wissen wie ich die Temperatur auslesen kann. Der Ausgang 
ist ein: "Single-wire 11-bit digital serial signal output".

Ich arbeite mit VB 2005 und verwende die inpout32.dll.

Befehle: Inp und Out.

Was ich nicht recht verstehe ist wie ich diese Daten auslesen kann und 
wie das überhaupt funktioniert. Das ich den Inp Befehle brauche ist mir 
schon klar, aber der Rest eben nicht.

In dem µC & Elektronik Bereich hat man mir diesen Code in C gegeben mit 
dem ich nichts Anfangen kann. BTW: Der Output vom Sensor hängt an 
Ausgang 1, also PIN3 des LPT's.

a = inp(BASE);
if(a & (1 << BIT#)) {...} else {...}


Nur als Ergebnis kommt doch eine Zahl zwischen 0 - 255 oder nicht ?

Die Formel im Datenblatt ist folgende:
Temperature = (Digital Signal / 2047 * 70 - 10)°C

Dazu ist eine kleine Tabelle:

Temp(°C)              Temp(°F)             Digital Value
-------------------------------------------------------------
-10                    14                        0x000
0                      32                        0x124
25                     77                        0x3FF
60                    140                        0x7FF

Zum Beispiel ist ja 25 °C = Hex 3FF bzw. in dez. 1023, aber wie soll man 
in einem Zahelbereich von 0-255 die Zahl 1023 anzeigen lassen ?

Ich versteh dieses ganze Prinzip noch nicht und bitte um Erklärung.
Ich war schon in einem anderen Forum, aber dort sind nicht so viele User 
im Hardware Bereich aktiv.

Bedanke mich für jeden Hinweis.

x86

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Deine Annahmen über den Zahlenbereich sind falsch, der ist nicht nur 8 
Bit groß, sondern eben 11. Also nicht 0..255 (00..FF), sondern 0..2048 
(000..7FF).

von x86 (Gast)


Lesenswert?

Wie meinst du das ? Der LPT hat auch 11 Bit ? Wie das denn ? Ich hatte 
immer 8 Bit.

Wie muss ich das denn auslesen ? Ich steh da echt aufm schlauch...

von Rolf Magnus (Gast)


Lesenswert?

> Der LPT hat auch 11 Bit ?

Hm?

> ist ein: "Single-wire 11-bit digital serial signal output".

> Nur als Ergebnis kommt doch eine Zahl zwischen 0 - 255 oder nicht ?

Nein. Bei 11 Bit kommt ein Wert im Bereich 0 bis 2048 raus.

von Roland P. (pram)


Lesenswert?

> Wie muss ich das denn auslesen ? Ich steh da echt aufm schlauch...

ja schon (eigentlich gewaltig)

> Single-wire 11-bit digital serial signal output

Single wire = 1 Datenleitung = 1 Bit
11-bit = Sensorwert
serial signal output != parallel

Du kannst mit dem Parallelport 8 Datenleitungen gleichzeitig 
ein/auslesen (darum heißt er Parallelport)

Wenn du jetzt einen Sensor an nur eine Datenleitung anschließt, 
interessiert dich nur was an dieser anliegt. dies kann entweder 1 oder 0 
sein.

Im Prinzip* musst deshalb den Parallelport 11 mal hintereinander 
auslesen, so dass du auf deinen Sensorwert kommst. (

*: Ganz so einfach ist es natürlich nicht, da die Kommunikation nach den 
1-wire specs erfolgt. Hierzu gibts für den DS1820 ja ne Menge 
Beispielcode im Netz.

von x86 (Gast)


Lesenswert?

Hallo Roland ! Vielen vielen dank ! Das hat mir schon sehr viel 
geholfen.

Das heißt ich muss den Wert von PIN3 auslesen und diesen speichern und 
diesen den anderen Werten dazu addieren oder wie ? Also ebenhalt 11 mal.

Könnt ihr mir da Source Code mäßig etwas weiter helfen ?

Danke

von x86 (Gast)


Lesenswert?

Sorry aber komme da echt nicht weiter... Icb bräuchte etwas mehr Hilfe.

von Roland P. (pram)


Lesenswert?

Sorry unsere Glaskugel ist defekt...
verrate uns doch mal
- welchen Sensor du hast
- wie du ihn angeschlossen hast

Dann werden sich glecih 2 Fragen stellen:
- wie ist das genaue Datenformat (steht im Datenblatt vom Sensor)
- ist die Schaltung dafür überhaupt geeignet

für einen DS1820 macht man es nämlich so:
http://lena.franken.de/hardware/temperaturmessung.html

von x86 (Gast)


Lesenswert?

@ Roland, deine Glaskugel werde ich gleich kaputt schlagen und die 
Scherben aufessen :P ^^

Read: Beitrag "Gleiches Problem: Temperatursensor"

von Jupp (Gast)


Lesenswert?

>Das heißt ich muss den Wert von PIN3 auslesen und diesen speichern und
>diesen den anderen Werten dazu addieren oder wie ?

Du kannst den Wert von Pin 3 nicht auslesen sondern nur den Wert des 
gesamten Ports. In diesem Gesamtwert mußt du dann überprüfen, ob Pin 3 
gesetzt ist:

if((Gesamtwert & (1<<3))==(1<<3)) {...}  / Bit ist gesetzt

von x86 (Gast)


Lesenswert?

Danke Jupp. Aber ich habe jetzt eine andere Methode gefunden, die ist 
etwas komplizierter, aber sie ist schonmal ein guter Anfang.

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.