_inp und _outp (Parallelschnittstelle)



  • Hallo...

    Ich will einen Schalter zwichen zwei Pins der Parallelen schnittstelle anschliessen und wenn ich den Schalter schliesse
    soll es mir eine Messagebox auch sagen das der Schalter geschlossen ist.

    Vieleicht koennt ihr mir mal ein Beispiel geben.
    besten dank uwe

    #define Par_Sst 0x378

    _outp(Par_Sst+2,0x21); // Hier kenne ich auch nicht die Pins des Steckers

    _outp(Par_Sst+2,0x20); // Waere nicht schlecht, wenn ihr die Pins noch dazuschreiben wuerdet

    _inp(Par_Sst);

    if (_inp(Par_Sst) == TRUE)
    MessageBox("Kontakt");

    [ Dieser Beitrag wurde am 15.12.2001 um 11:53 Uhr von Marc++us editiert. ]



  • Was hat das mit MFC zu tun ?????
    Egal, bin kein Moderator.

    Mir nicht ganz klar, was das "Par_Sst+2" im _outp() zu bedeuten hat.
    Wenn es immer noch die LPT1 ist, dann hast du mit:
    _outp(Par_Sst+2,0x21) -> Pin 1 und Pin 7 auf Hight
    _outp(Par_Sst+2,0x20) -> Pin 7 uaf Hight

    Um denen Schalter abzufragen, hast du den Quelltext schon geschrieben.
    Du brauchst nur +5V an eine der Datenleitungen anzulegen Pin 2 .. 9.

    Sei allerdig verdammt VORSICHITG mit der parallelen Schnittstelle. Wen du einen Kurzschluss baust, funktionierst du dein Mainboard zum Toster um. images/smiles/icon_wink.gif

    [ Dieser Beitrag wurde am 10.12.2001 um 23:06 Uhr von CMatt editiert. ]



  • JA JA bin schon da.
    Verschoben nach denke mal Rund um die Programmierung.



  • hi...

    Danke fuer die hilfe... aber ich bin nicht auf die 5 V spannung gekommen.

    gibt es da nicht noch etwas anderers als _inp ?

    denn wenn ich inp benutze dann sind ja die anderen pins 1 - 8 auch belegt. Denn ich kann ja keinen weiteren parameter bei inp angeben.
    _outp kann ich ja sagen auf welchem pin er ausgeben soll.

    fuer hinweise waere ich dankbar uwe



  • _inp liest, soweit ich das verstanden habe, die kompletten 8 Datenbits ein und gibt einen int Wert zurück. Wenn also alle Eingänge auf Low sind gibt die Funktion 0 zurück, sonst bekommst du einen Wert >0. Die Abfrage auf TRUE würde also bestems klappen. Wenn du nur einzelne Pins abfragen willst, musst du etwas rechnen.

    Ein weitere Möglichkeit ist WriteFile(). Ich benutze immer diese Funktion, da ich mt _inp, _outp bein WinNT und Win2000 schon öfters Probleme hatte.

    [ Dieser Beitrag wurde am 11.12.2001 um 17:16 Uhr von CMatt editiert. ]



  • hi...

    hemm...

    kannst du das mit dem WriteFile etwas beschreiben?

    denn da habe ich gar keine ahnung....

    uwe



  • Läuft so:

    hCom = CreateFile( "LPT1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
    
    WriteFile(hCom, lpByte, len, &dwBytesWritten, NULL);
    ReadFile(hCom, lpByte, len, &dwBytesRecive, NULL);
    

    [ Dieser Beitrag wurde am 17.01.2002 um 23:32 Uhr von CMatt editiert. ]



  • Original erstellt von CMatt:
    [QB]Sei allerdig verdammt VORSICHITG mit der parallelen Schnittstelle. Wen du einen Kurzschluss baust, funktionierst du dein Mainboard zum Toster um. images/smiles/icon_wink.gif
    QB]

    Baue mindestens einen 500Ohm Widerstand ein. Damit beschränkst du den Strom auf 10mA. Im Zweifel aber lieber einen höheren Widerstand.
    Aber ich garantiere für nix falls du dein Mainboard abfackelst. images/smiles/icon_biggrin.gif



  • Es sehe du hast schon Erfahrung damit, auch schon mal eins gekillt?
    images/smiles/icon_biggrin.gif images/smiles/icon_biggrin.gif

    Das ist der Grund, warum ich nurmher die Serielle benutze.



  • Original erstellt von Hexatrexmibultra.de:
    **
    Aber ich garantiere für nix falls du dein Mainboard abfackelst. images/smiles/icon_biggrin.gif**

    Nun mal ehrlich, wieviele hast du schon auf dem Gewissen ? images/smiles/icon_biggrin.gif

    [ Dieser Beitrag wurde am 11.12.2001 um 17:46 Uhr von AndreasW editiert. ]



  • Für mich gilt 1, ein anderes konnte ich noch noch reparieren, aber beim anderen kam jede Hilfe zu spät. Der Treiber-IC hatt danach ausgesehen wie Hiroshima nach der Atombombe images/smiles/icon_biggrin.gif



  • hi...

    erstmal dank fuer die hilfen...!!!
    Dank auch fue die warnungen ich werde versuchen mein board am leben zu lassen images/smiles/icon_eek.gif !!!

    wo kann ich denn noch ein paar mehr infos finden ueber writefile
    denn die msdn haben da nicht sehr viel im angebot in bezug auf die LPT
    schnittstelle...Buecher, link oder programmbeispiele wuerden mir da schon helfen.

    mfg uwe



  • Original erstellt von AndreasW:
    **Nun mal ehrlich, wieviele hast du schon auf dem Gewissen ? images/smiles/icon_biggrin.gif

    [ Dieser Beitrag wurde am 11.12.2001 um 17:46 Uhr von [qb]AndreasW** editiert. ][/QB]

    Ich habe noch! kein Mainboard abgefackelt. (Kann sich ja noch ändern) images/smiles/icon_biggrin.gif Ich wollte nur sagen das ich nicht schuld bin wenn es er ausprobiert und dabei Schei**e baut.



  • hi...ich komme nicht weiter...

    vielleicht koenntet ihr mal ein kleines koplettes porgrammbeispiel posten...
    ich habe keine ahnung und finde auch nicht ueber writefile und LPT

    mfg uwe



  • hi...

    so ich habe jetzt gebastelt wie ein bloeder images/smiles/icon_confused.gif

    und kann jetzt auch wirklich die LPT oeffen...ABER

    ich komme mit dem:
    WriteFile(hCom, lpByte, len, &dwBytesWritten, NULL);
    ReadFile(hCom, lpByte, len, &dwBytesRecive, NULL);

    nicht klar...

    ich weiss z.b. nicht was " lpByte, len, &dwBytesRecive und &dwBytesWritten"

    bedeuten und ich kann mir immer noch nicht erklaeren wie ich da die einzelnen PINS ansprechen soll, denn ich weiss nicht wie ich die PINS
    adressieren soll.

    uwe



  • lpByte = das Byte, welches du ausgeben willst
    len = Länge der auszugeben Daten (also 1)
    &dwBytesRecive = Anzahl der empangenen Bytes
    &dwBytesWritten = Anzahl der gesendeten Bytes

    Warum willst du Pinns Adressieren images/smiles/icon_confused.gif images/smiles/icon_confused.gif

    Mal ein Beispiel:
    18 wird ausgegeben
    18(dez) = 10010 (bin)
    -> Die Pins 3 und 6 sind auf High

    12 wird eingelesen
    12(dez) = 1100 (bin)
    -> Die Pins 4 und 5 sind auf High



  • hi...

    was mache ich denn jetzt noch falsch...?

    #include "stdafx.h"
    #include<windows.h>
    #include <stdio.h>

    void main (void)
    {

    HANDLE hCom = CreateFile( "lpt1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
    test:

    char lpByte [12];
    BOOL len = 1 ;

    DWORD dwBytesRecive ;

    ReadFile(hCom, lpByte, len, &dwBytesRecive, NULL);

    printf("%d ",dwBytesRecive);

    goto test;
    }

    wenn ich jetzt an pin 4 eine 5v spannung anlege dann sollte das printf doch einen wert ausgeben oder...?

    uwe

    [ Dieser Beitrag wurde am 20.01.2002 um 17:59 Uhr von CMatt editiert. ]



  • Glaub du hast da was vertauscht images/smiles/icon_wink.gif
    In lpByte steht das, was du empangen hast. In dwBytesRecive steht die Anzahl der empfangenen Bytes.

    Versuch mal so:
    ReadFile(hCom, &lpByte, len, &dwBytesRecive, NULL);



  • Ach ja, noch was.
    Vergiss nicht CloseHandle(hCom) am Ende, sonst kalppt das ganze nur ein mal.


Anmelden zum Antworten