Spannung am port auswerten

ich bräuchte mal hilfe und zwar bei der auswertung einer spannung die an einem kanal am lpt liegt.
oder ist das überhaupt möglich?
wenn nicht geht es nur mit dem lpt nicht oder z.b. auch nicht mit usb?

ich bräuchte mal hilfe und zwar bei der auswertung einer
spannung die an einem kanal am lpt liegt.
oder ist das überhaupt möglich?
wenn nicht geht es nur mit dem lpt nicht oder z.b. auch nicht
mit usb?

Hallo
Einen Kanal für Daten am lpt gibts nicht. Der ganze lpt-port ist ein Kanal. Man findet mehrere Leitungen, die high oder low sein können.
Mit VB läßt sich die Hardware nicht direkt abfragen.
In Dos bzw. einem beliebigem Dos-Basic oder auch mit Assembler unter Dos ist das aber möglich.
Bei usb ist es dasselbe, nur weiß ich da überhaupt nicht, wie man daran kommt.
Man kann über API den lpt port als sowas wie pipe oder Datei betrachten und von dort „synchron“ oder asynchron" Daten kopieren.
Eine analoge Spannung kann der Gameport lesen, bzw. für den Printer und usb -port müßte man sich ein Interface kaufen.
MfG

Also wäre die einzigste möglichkeit die ich habe dieses API?
wie mache ich das damit? läuft dann immer ein dos fenster mit?

Hi,

eine Spannung messen? Ohne zusätzliche Hardware wohl nicht. Was am Gameport gemessen wird, ist ein Widerstand, denke ich. Am Druckerport sind nur festgelegte Spannungen erlaubt und Du kannst nur ja/nein auslesen. Eine beliebige Spannung anlegen und ermitteln kannst Du da nicht.

Also wäre die einzigste möglichkeit die ich habe dieses API?

Für den Gameport, ja.

wie mache ich das damit? läuft dann immer ein dos fenster mit?

Nein. Da läuft kein DOS-Fenster. Ich habe mal den Beispielcode aus der API-Guide kopiert:

' defines and structures
Const JOY\_BUTTON1 = &H1
Const JOY\_BUTTON2 = &H2
Const JOY\_BUTTON3 = &H4
Const JOY\_BUTTON4 = &H8
Const JOYERR\_BASE = 160
Const JOYERR\_NOERROR = (0)
Const JOYERR\_NOCANDO = (JOYERR\_BASE + 6)
Const JOYERR\_PARMS = (JOYERR\_BASE + 5)
Const JOYERR\_UNPLUGGED = (JOYERR\_BASE + 7)
Const MAXPNAMELEN = 32
Const JOYSTICKID1 = 0
Const JOYSTICKID2 = 1

Private Type JOYINFO
 X As Long
 Y As Long
 Z As Long
 Buttons As Long
End Type
Private Type JOYCAPS
 wMid As Integer
 wPid As Integer
 szPname As String \* MAXPNAMELEN
 wXmin As Long
 wXmax As Long
 wYmin As Long
 wYmax As Long
 wZmin As Long
 wZmax As Long
 wNumButtons As Long
 wPeriodMin As Long
 wPeriodMax As Long
 End Type

Private Declare Function joyGetDevCaps Lib "winmm.dll" Alias "joyGetDevCapsA" (ByVal id As Long, lpCaps As JOYCAPS, ByVal uSize As Long) As Long
Private Declare Function joyGetNumDevs Lib "winmm.dll" () As Long
Private Declare Function joyGetPos Lib "winmm.dll" (ByVal uJoyID As Long, pji As JOYINFO) As Long
Private Function GetJoystick(ByVal joy As Integer, JI As JOYINFO) As Boolean
 If joyGetPos(joy, JI) JOYERR\_NOERROR Then
 GetJoystick = False
 Else
 GetJoystick = True
 End If
End Function
' If IsConnected is False then it returns the number of
' joysticks the driver supports. (But may not be connected)
'
' If IsConnected is True the it returns the number of
' joysticks present and connected.
'
' IsConnected is true by default.
Private Function IsJoyPresent(Optional IsConnected As Variant) As Long
 Dim ic As Boolean
 Dim i As Long
 Dim j As Long
 Dim ret As Long
 Dim JI As JOYINFO

 ic = IIf(IsMissing(IsConnected), True, CBool(IsConnected))

 i = joyGetNumDevs

 If ic Then
 j = 0
 Do While i \> 0
 i = i - 1 'Joysticks id's are 0 and 1
 If joyGetPos(i, JI) = JOYERR\_NOERROR Then
 j = j + 1
 End If
 Loop

 IsJoyPresent = j
 Else
 IsJoyPresent = i
 End If

End Function
' Fills the ji structure with the minimum x, y, and z
' coordinates. Buttons is filled with the number of
' buttons.
Private Function GetJoyMin(ByVal joy As Integer, JI As JOYINFO) As Boolean
 Dim jc As JOYCAPS

 If joyGetDevCaps(joy, jc, Len(jc)) JOYERR\_NOERROR Then
 GetJoyMin = False

 Else
 JI.X = jc.wXmin
 JI.Y = jc.wYmin
 JI.Z = jc.wZmin
 JI.Buttons = jc.wNumButtons

 GetJoyMin = True
 End If
End Function
' Fills the ji structure with the maximum x, y, and z
' coordinates. Buttons is filled with the number of
' buttons.
Private Function GetJoyMax(ByVal joy As Integer, JI As JOYINFO) As Boolean
 Dim jc As JOYCAPS
 If joyGetDevCaps(joy, jc, Len(jc)) JOYERR\_NOERROR Then
 GetJoyMax = False
 Else
 JI.X = jc.wXmax
 JI.Y = jc.wYmax
 JI.Z = jc.wZmax
 JI.Buttons = jc.wNumButtons
 GetJoyMax = True
 End If
End Function
Private Sub Form\_Paint()
 'KPD-Team 1999
 'URL: http://www.allapi.net/
 'E-Mail: [email protected]
 Dim JInfo As JOYINFO
 'Clear the form
 Me.Cls
 'Print the information to the form
 Me.Print "Number of joysticks the driver supports:" + Str$(IsJoyPresent(False))
 Me.Print "Number of connected joysticks:" + Str$(IsJoyPresent(True))
 GetJoystick JOYSTICKID1, JInfo
 Me.Print "Number of buttons:" + Str$(JInfo.Buttons)
 GetJoyMax JOYSTICKID1, JInfo
 Me.Print "Max X:" + Str$(JInfo.X)
 Me.Print "Max Y:" + Str$(JInfo.Y)
 Me.Print "Max Z:" + Str$(JInfo.Z)
 GetJoyMin JOYSTICKID1, JInfo
 Me.Print "Min X:" + Str$(JInfo.X)
 Me.Print "Min Y:" + Str$(JInfo.Y)
 Me.Print "Min Z:" + Str$(JInfo.Z)
End Sub

Gruß, Rainer

Hallo Fragewurm,

ich bräuchte mal hilfe und zwar bei der auswertung einer
spannung die an einem kanal am lpt liegt.
oder ist das überhaupt möglich?
wenn nicht geht es nur mit dem lpt nicht oder z.b. auch nicht
mit usb?

Kannst du uns hier einmal beschreiben, WAS du genau machen willst ??

Irgendeine Spannung irgendwie auswerten geht nicht, da musst du schon etwas genauer werden.

MfG Peter(TOO)

ich hab folgendes vor:
über VB einen digitalen tacho programmieren und für einige sachen muß halt die spannung oder der widerstand gemessen werden.
und das mit diesem joystick script wäre vielleicht schon ne idee aber um da durch zu blicken kenn ich mich noch zu wenig aus.
hier mal die vorläufige „exe“:
http://www.flirt-mania.de/tacho.exe

Also wäre die einzigste möglichkeit die ich habe dieses API?
wie mache ich das damit? läuft dann immer ein dos fenster mit?

Hallo
Das API arbeitet im Windows 32-Bit Adressraum, also ohne Dos-Fenster.
Aber das ist nicht so ganz einfach, weil das Device nicht einfach mit „LPT“ angegeben wird, sondern mit speziellem Prefix.
In anderen Worten, ich kann es nicht aus dem Kopf und habe es selbst noch nicht ausprobiert.
Es gibt auch spezielle Controls für den Printerport und ähnliche, aber unter 32-Bit NT will das nicht.(Windows95-ok)

MfG
Matthias

Hallo Fragewurm,

ich hab folgendes vor:
über VB einen digitalen tacho programmieren und für einige
sachen muß halt die spannung oder der widerstand gemessen
werden.

Also Analoge Werte, das geht nicht direkt mit dem Druckerport.

Du benötigst auf jeden Fall einen Analog/Digitalwandler (ADC) um Analoge Werte messen zu können.
Einen Groben ADC, für Widerstände, hast du im Gameport implementiert. In allen anderen Fällen bötigst du einen ADC als Hardware !

und das mit diesem joystick script wäre vielleicht schon ne
idee aber um da durch zu blicken kenn ich mich noch zu wenig
aus.

Zuerst musst du einmal wissen WAS für Werte du messen willst, also entweder den Widerstandsbereich (aber wo ist da ein Widerstandswert an einem Tachoausgang ?? ) oder dann halt die Spannung. Diese „kommt“ aber irgendwo her und dort muss der Spannungsbereich definiert sein.

Oder dein Tacho liefert Impulse/Umdrehung. Dann hast du schon digitale Werte, allerdings müssen die Ausgangspegel zuerst noch „passend gemacht“ werden.
Im Prinzip kannst du ein Signal mit 0V- und +5V-Pegeln direkt am LPT-Port anschliessen, wenns aber 12V sind ist dann dein LPT-Port hinüber. Zudem befindet sich dieses heute in der Southbridge :wink:)
Allerdings ist es schwierig mit Windows die Zeit zwischen zwei Impulsen zu messen.

Also: zuerst müssen von deiner SWeite her einmal die Fakten auf den Tisch, andernfalls können wir noch Tagelang im Nebl stochern.

hier mal die vorläufige „exe“:
http://www.flirt-mania.de/tacho.exe

Was soll ich mit der EXE ???

Dein Problem liegt ja nicht bei der enutzeroberfläche, sondern bei der Hardware.

MfG Peter(TOO)

Also wenn z.b. das fernlicht an ist und dies angezeigt werden soll ist es ja ein impuls (oder?) da könnte ich dann doch einfach einen widerstand vorsetzen oder?
hab mal nach nem adc geguckt aber nur einen gefunden:
http://cgi.ebay.de/ADC-Analog-Digital-Converter-Anal…
kennt einer von euch vielleicht nen shop wo man noch welche kaufen kann? und wie teuer sind die so ungefähr??
was ich jetzt auch nicht weiß ist wie er bestückt sein muß.
ich hab ja z.b. tacho, tank und temperatur anzeige.
die anderen sachen werden ja nur impulse sein.

Hallo Fragewurm,

Also du willst da etwas fürs Auto basteln ?!

Also wenn z.b. das fernlicht an ist und dies angezeigt werden
soll ist es ja ein impuls (oder?) da könnte ich dann doch
einfach einen widerstand vorsetzen oder?

Wenn dir dein Laptop lieb ist, geht es nicht so einfach.

  1. Die Der Spannungspegel ist nominal 12V, der LPT verkraftet aber nur 5v.
  2. Die Bordspannung ist recht versaut, z.B. von der Zündung. Da können kurzzeitig auch Störspitzen von einigen 100V bis 1’000V drauf sein und das verkraftet dein LPT nicht auf dauer.

hab mal nach nem adc geguckt aber nur einen gefunden:
http://cgi.ebay.de/ADC-Analog-Digital-Converter-Anal…

Das sit ein Modul, das kannst du an keinen Computer direkt anschliessen.

kennt einer von euch vielleicht nen shop wo man noch welche
kaufen kann?
und wie teuer sind die so ungefähr??
was ich jetzt auch nicht weiß ist wie er bestückt sein muß.
ich hab ja z.b. tacho, tank und temperatur anzeige.
die anderen sachen werden ja nur impulse sein.

z.B. soetwas: http://www.pci-card.com/vmodul.html

MfG Peter(TOO)

Das mit der boardspannung
ist ja nicht das problem dann lass ich das
halt aller über nen spannungsregler laufen.
aber der preis für den adc hab ich mir bissel anders
vorgestellt.
kennt niemand eine günstigere alternative?
also 60-80 euro sind ja nicht das problem aber 350 euro und
dann nicht zu wissen ob es wirklich funktioniert.
ne lieber net.

so jetzt hab ich mal bissel was gefunden:

http://cgi.ebay.de/12-Bit-RS232-AD-Wandler-mit-3-Bit…

und

http://www.franksteinberg.de/e-tlc549.htm

zu welchem würdet ihr mir raten??
kann ich damit eigentlich immer nur eine spannung auswerten und gleich zwei oder drei?