Portprogrammierung: Welche Sprache und wie ?



  • Hey,
    habe das auch schon mal gemacht und ein Programm geschrieben, mit dem man zwei Rechner verbinden kann, sieht man auf meiner HP *werb* http://www.graphic-software.de, aber ich habe es aufgegeben, weil es unetr WinXP nicht mehr möglich ist, die Ports anzusprechen.

    Unter C++ geht es aber mit den Funktionen aber noch.

    Das sind die Portadressen für COM -Ports.

    #define COM1 1016
    #define COM2 760
    #define COM3 1000
    #define COM4 744

    LPT oder Com ? Es ist egal, da man zu Fuß alle Leitungen ansprechen kann.

    PS: Idee mit dem Motor bitte nicht machen, nur mit Relaiskarte, ansonsten ist die Schnittstelle sofort im Eimer !!!



  • was wollt ihr denn ständig mit direkt anschließen ?
    das habe ich doch schon gesagt das ich das gar nicht will.
    Der Motor ist wie gesagt in einem Seperaten Stromkreislauf.

    Was meinsten jetzt mit den Port adressen ?
    Wo kommen die in den Code ?

    Also blicke da noch nicht durch ... am Besten wäre es wenn jemand irgendwo nen Tutorial zu dem Thema hätte.

    Michael



  • Ein PC hat doch verschieden Ports, jeder Port enthält verschieden Leitungen.
    Jede Leitung hat auch noch einen Wert, den sogenannten Offset.

    Also: Um jetzt mit _outp einen Wert zu setzen musst du outp(Portadresse+Offset von Leitung, Wert) im Programm schreiben.

    Und der Wert setzt sich nochmal aus verschiedenen Dingen zusammen.

    schau mal hier nach http://www.kbs-koeln.de/kaiserin-theophanu-schule/logo/parall1.htm



  • hier solltest du eigentlich fündig werden:
    http://www.beyondlogic.org



  • Also,
    meine Hardware ist jetzt auf dem Weg und nen Tutorial zu dem Thema schickt mir nen Bekannter auch heute zu.

    Das einzige bei dem er mir nicht helfen konnte ist,
    dass die Port Adresse des LPT Port zwar meistens gleich ist es aber manchmal auch abweichungen gibt.
    Meine Frage ist deshalb ob bzw. wie man die Adresse auslesen kann.

    Bis denn

    M.Hecker



  • Original erstellt von Hecker.Michael:
    **
    Meine Frage ist deshalb ob bzw. wie man die Adresse auslesen kann.
    **

    ja kann man definitiv!
    einerseits mit Assembler direkt ausn BIOS (frag mal die Jungs im ASM-Forum wie genau das geht), oder per WinAPI (dazu verweise ich aufs WinAPI-Forum)...
    aber ich denke es ist auch nicht so schlimm, wenn du fürn LPT defaultmäßig 0x378 nimmst und das ganze vom benutzer, wenns denn sein muss, im programm verändern lässt (und dann in ne ini-datei abspeichern, oder wie auch immer)



  • Du könntest es natürlich auch über normale WinAPI-Funktionen probieren, da ist die eigentliche Adresse dann egal, und außerdem läufts auch unter vernüftigen Windows Versionen (>NT4).

    Hier ist mal ein Link in die FAQ:
    [url] _inp und _outp (Parallelschnittstelle) [/url]

    HTH



  • WinAPI geht definitiv nicht, weil hier nur serielle daten geschickt werden, er will aber alle leitungen einzeln ansprechen, das problem hatte ich auch !



  • und haste auch ne Lösung dafür gefunden ?



  • Mein Proggi läuft unter DOS.
    Unter XP geht dieser Zugriff sowieso nicht mehr, da braucht man device treiber, aber frage mich nicht wie man das macht.



  • Original erstellt von Snakey:
    Unter XP geht dieser Zugriff sowieso nicht mehr, da braucht man device treiber, aber frage mich nicht wie man das macht.

    z.B. so wie es unter dem link steht den ich schon einige beiträge vorher gepostet hab??? 😮 😮

    http://www.beyondlogic.org/porttalk/porttalk.htm



  • Es gibt für XP auch den DriverLINX Port I/O Driver.
    [url]http://www.driverlinx.com/DownLoad/DlPortIO.htm [/url]

    Der läuft auch unter XP

    Gruss,
    Sebastian



  • Also,
    meine Probleme haben sich doch auch wieder umgelegt,
    mal abgesehen davon das sich die Win XP frage für mich eh nicht stellt, weil ich das Prog auf meinem alten 166er (Win98se)schreibe.

    Will nämlich meinen guten Rechner nicht schrotten.

    Also habe das Tutorial bislang doch noch nicht bekommen.
    Habe mir aber zusammen gelesen, dass mein Projekt mit dem Befehl

    outp() laufen sollte ... nur leider soll das nach der Hilfe in Borland's Turbo Cpp der Befehl so aussehen:

    outp(Portid,Wert)

    das würde für den LPT bedeuten:

    outp(0x378, 'c'); // C ist natürlich nur ein Beispiel.

    Die frage ist nur wie ich mit dem Behelf ne Spannung auf bestimmte Pins abgeben kann, weil man so ja keinen bestimmten Pin angesprochen hätte.

    MFG
    M.Hecker



  • Wie du an die Adresse deines Ports kommst hab ich schon geschrieben!!
    Wie du Spannungen auf die Pins legst hast du wohl noch nicht ganz verstanden.
    Mit deinem C hast du schon Spannungen auf die Pins gelegt:
    ASCII Code von C:67 in binärer Schreibweise: 64+2+1 : 00100011.
    Folglich hast du an Pin 1,2 und 6 ein High! Oder Low,denn ich weiss jetzt nicht ganz genau ob die auch mit postitiver Logik arbeiten. Musst einfach mal ausmessen.

    [ Dieser Beitrag wurde am 22.11.2002 um 15:01 Uhr von ºgrimmsenº® editiert. ]



  • tut mir leid aber ich habs einfach noch gar nicht gerallt.
    Kann mir vielleicht mal einer nen kleines Codebeispiel geben bei dem nach ein ander ne Spannung auf Pin 1,2 und 3 z.B. gegeben wird ?

    also in ner ASCII Tabelle steht für C als dezimalzahl 67, das habe ich mal nachfolzogen.
    Das Problem ist nur das ich nicht extra den Buchstaben C ausgeben will sondern einfach nur ne Spannung an einen bestimmten Pin anlegen will, weil mein Projekt ja genau etwas steuern soll und nicht einen Wert einem z.B. Drucker übermitteln soll.

    Also kann mir nochmal jemand sagen wie das geht ?
    vor allem, was soll das mit high und low ? kann man dabei die höhe der Soannung variieren oder steht low für keine Spannung und high für eine Spannung ?

    Stehe im Moment echt auf dem Schlauch.

    Hätte einer von euch nen Tutorial zu dem Thema wäre mir sehr geholfen, weil ich dann nicht immer bei jedem scheiss nachfragen müsste.

    MFG
    Michael

    P.S.: Laut Win2k Taschenrechner ist C bzw. die dezimalzahl 67 aber 1000011 im
    Binärcode ... bin absolut verwirrt.

    [ Dieser Beitrag wurde am 22.11.2002 um 17:08 Uhr von Hecker.Michael editiert. ]



  • Pin 1 : 00000001
    Pin 2 : 00000010
    Pin 3 : 00000100
    usw.
    Du muss nur das jeweilige Bit setzen (du hast 8 Pins und 8 Bits).

    Wenn du Pin 1 setzen willst outp(Adr, 1), Pin 8 outp(adr,128), Pin1 und Pin8 outp(Adr, 129);



  • ja okay das habe ich jetzt verstanden.

    Aber wie bist du bei Pin 8 auf 128 gekommen ich hätte gedacht, dass es so aussieht.

    Pin 1: 00000001
    Pin 2: 00000010
    Pin 3: 00000100
    bis hier hattest du es ja auch schon angegeben
    Pin 3: 00001000
    Pin 4: 00010000

    .
    .
    .

    Pin 8: 10000000

    aber warum hast du bei Pin 8:
    outp(0x378,128) ???

    Habe bei der Adresse jetzt mal die defaultmäige eingetragen
    (macht man das überhaupt so oder muss die auch wieder anders geschrieben werden ?).



  • binär (10000000) -> dezimal (128)



  • na klar ... danke.

    So jetzt muss ich mir nur noch nen Multimeter organisieren und dann gehts los.
    So nebenbei: Hat einer ne Idee bei welchem elektronik Großhandel, Baumarkt etc man sowas am Günstigsten bekommen kann ?

    Also bei Conrad gibts son Ding für 35€ aber das ist mir zu teuer.

    Muss ja keine 500 Funktionen haben.
    Voltmesser, Ohm Messer und solche Grundfunktionen reichen ja schon aus.

    Nochmal vielen Dank.

    Mfg Michael



  • aso doch eine Frage habe ich noch.

    und zwar wenn ich jetzt ne Spannung auf den LPT lege.

    ( outp(0x378,2); )

    Wie lange bleibt die Spannung dann drauf ?
    Muss ich mit der Schleife dafür sorgen das die Spannung da bleibt
    oder muss ich mit nem anderen Befehl die Spannung wieder ausstellen ?

    Denke mal eher das es erstes ist aber habe in nem Tutorial über Basic gesehen das es da die 2. Version war und deshalb bin ich mir unsicher.

    Also wie siehts aus ?

    MFG
    m.Hecker


Anmelden zum Antworten