Meßgerät mit parallel Port auslesen



  • Hallo an Alle,

    Ich habe mir diese Schaltung hier
    zusammengebastelt und möchte jetzt die Spannung von einem selbstgebauten Meßgerät "messen".
    Die Verbindung zwischen Rechner und Meßgerät erfolgt über die parallele Schnittstelle.
    Und da liegt auch das Problem! Trotz, meiner Meinung nach, ausführlicher Recherchen bei Google und in den FAQ´s,habe ich nichts richtiges dazu gefunden.
    Okay, es wird viel gesagt über den Aufbau bzw. prinzipiellen Zugriff auf den parallel Port aber mal einen ordentlichen Beispielcode(zum abwandeln) in C++ finde ich nicht!
    Einige Beispielprogramme gibt es in Basic oder Pascal aber damit kann ich nichts anfangen 😞 .
    Versuche hab ich auch mit dem winio-Treiber unternommen. Damit soll der Zugriff auf die Schnittstelle ja einfacher sein aber mein Compiler (Dev-C++)
    hat warscheinlich ein Problem damit:

    [Linker error] undefined reference to \_imp\_\_InitializeWinIo@0' [Linker error] undefined reference to_imp__GetPortVal@12'
    ...

    Ich würde mich freuen wenn mir jemand einen Tip geben könnte zu:

    1.Beispielprogramm zum auslesen des parallel Port in C++ (WinApi)
    2.Kann ich den winio-Treiber eigentlich überhaupt mit Dev-C++ nutzen ?

    Danke schon mal für Eure hoffentlich zahlreichen Antworten 😃
    majac

    PS: Ich arbeite unter Win98





  • Danke für Deine Antwort!

    Diesen Beitrag habe ich natürlich auch schon gefunden.Hat mir allerdings noch nicht allzuviel geholfen.
    Bei "meiner" Schaltung mit dem AD-Wandler sind ja nur bestimmte Pins verkabelt.
    Wie kann ich die den mit ReadFile() auslesen?

    Gruß mjac



  • Vielleicht mit GetCommState & Co. (oder ist das nur für die serielle Schnittstelle 😕 )
    vielleicht auch interessant: http://c-plusplus.net/forum/viewtopic.php?t=47362



  • müsste unter win95 nicht sogar so was in der art

    unsigned char* data;
    data=0x378;

    bin mir da jetzt zwar nicht so sicher, aber was solls...

    vielleicht kannst du aber auch den asm quellcode vom visual studio benutzen:

    page    ,132
            title   inp - input from ports
    ;***
    ;inp.asm - _inp, _inpw and _inpd routines
    ;
    ;       Copyright (c) 1993-1997, Microsoft Corporation. All rights reserved.
    ;
    ;Purpose:
    ;       Defines the read-from-a-port functions: _inp(), _inpw() and inpd().
    ;
    ;*******************************************************************************
    
            .xlist
            include cruntime.inc
            .list
    
    page
    ;***
    ;int            _inp(port)  - read byte from port
    ;unsigned short _inpw(port) - read word from port
    ;unsigned long  _inpd(port) - read dword from port
    ;
    ;Purpose:
    ;       Read single byte/word/dword from the specified port.
    ;
    ;Entry:
    ;       unsigned short port - port to read from
    ;
    ;Exit:
    ;       returns value read.
    ;
    ;Uses:
    ;       EAX, EDX
    ;
    ;Exceptions:
    ;
    ;*******************************************************************************
    
            CODESEG
    
            public _inp, _inpw, _inpd
    
    _inp    proc
    
            xor     eax,eax
            mov     dx,word ptr [esp + 4]
            in      al,dx
            ret
    
    _inp    endp
    
    _inpw   proc
    
            mov     dx,word ptr [esp + 4]
            in      ax,dx
            ret
    
    _inpw   endp
    
    _inpd   proc
    
            mov     dx,word ptr [esp + 4]
            in      eax,dx
            ret
    
    _inpd   endp
    
            end
    


  • Hallo,

    danke für Eure Antworten!!
    Habe mit der Inpout32.dll
    wahrscheinlich die für mich kompfortabelste und einfachste Metode gfunden.
    Wenn ich dann auch noch richtig bei den zu sendenden Bits und Bytes durchsehe 😃 , müßte ich mein Problem in den Griff bekommen 👍

    Nochmal Danke
    Gruß majac



  • hallo,
    was schreibst du denn fuer ein schoenes programm? mich wuerde es interessieren. hatte sowas auch schon mal vor.

    gruss
    msp



  • Um ehrlich zu sein schreibe noch nicht gezielt an einem "Meßprogramm". Das soll natürlich einmal das Ziel sein, doch bin ich erst mal dabei herauszufinden wie ich die Meßwerte (Bits) in den PC bringe.
    Das Verarbeiten der eingelesenen Bits sollte dann nicht mehr so schwer sein.

    Mit der Inpout32.dll und dem Tutorial von Frank Steinberg geht das einlesen der Bits recht komfortalbel und einfach.
    Leider will mein Dev-C++ Compiler nicht so richtig mit dem Treiber "kooperieren" 😞 !
    Momentan muß ich also auf eine Autorenversion von MS Visual C++ zurückgreifen.
    Diese bringt allerdings bei jedem Start eines Programmes einen Hinweis auf eben diese Autorenversion.Also erst einmal ein Kompromiss!

    Wenn mir jemand sagen könnte,wie ich Programme die auf die Inpout32.dll zugreifen sollen, auch mit anderen Compilern zum laufen bringe,wäre das wunderbar!

    Gruß majac



  • Hallo,

    habe wenig Ahnung von WinAPI, habe mir aber mal schnell Deine Schaltung angesehen und frage mich wieso Du die paralle Schnittstelle verwendest, aber einen seriellen A/D-Wandler. Ähnliche Bauteile gibts ja auch mit paralleler Datenausgabe. Währe wohl etwas schneller, oder kommts bei Deiner Anwendung nicht darauf an?

    MfG Neo



  • hehe das hab ich mich auch gefragt, aber er wird wohl nen grund dafür haben ...

    vielleicht war ihm ja der max232 zu teuer 😉



  • Ich verwende die parallele Schnittstelle schlicht und ergreifend deshalb, weil:
    1. Sie auch in der Schaltung genuzt wird.
    2. Ich eben gerade ein altes Kabel mit 25-poligen Stecker hatte 😉
    3. Weil ich mich ohne irgendwelchen Vorkentnisse in dieses Problem gestürzt habe 😃

    Kann sein, das die serielle Schnittstelle besser für solche "Experimente" geeignet ist (interne Absicherung usw.) aber funktionieren tut es trotzdem!
    Wußte ehrlich gesagt nicht mal, das der verwendete A/D-Wandler ein speziell serieller ist 😮 !Naja stand ja auch nicht in der Bauanleitung 😃 .

    Funktionieren tut es aber trotzdem und auf Geschwindigkeit kommt es nicht so an.
    Wenn ich einen tieferen Einblick in die Thematik bekommen habe,werde ich sicherlich auch ander Varianten testen.

    Gruß majac



  • Wollte Dich nicht kritisieren, war nur ein Vorschlag. Ich würde wahrscheinlich auch die parallele Schnittstelle verwenden, allerdings einen AD-Wandler mit 8 Datenleitungen. Dann müssteste Du beim lesen nicht erst 8 mal lesen und dann Deinen Messwert daraus bastelt, sondern hättest mit einmal lesen gleich den Messwert. Wäre einfacher, ist aber nicht notwendig.

    Wenn Dir nur ums probieren geht kannst Du ja mal verschiedene Versionen testen.



  • Hab mich auch nicht kritisiert gefühlt 😃 !
    Und den AD-Wandler mit 8 Datenleitungen werd ich vielleicht auch mal ausprobieren.

    Habe mir jetzt auch ein (sehr) kleines Spannungsmessprogramm geschrieben und es funktionert auch.Den AD-Wandler hab ich noch mit einem 5V Spannungsregler ausgestattet und erhalte nun recht genaue Werte (5/255=0.02V).

    Gruß majac


Anmelden zum Antworten