Jürgen: LPT-Port mit C ansteuern - einzelne Pins

hallo,

hoffe jemand kann mir sagen wie ich einzelne pins vom druckerport ansprechen kann.
also ich hab eine led mit dem pluspol auf den 2. pin gelötet und auf den 24. pin den minuspol.
jetzt muss ich den zweiten pin ansprechen und ihn auf high setzen, also auf strom ein.
nur ich krieg des irgendwie nicht hin.

betriebssystem an dem es probiert wird windwos 98.

programmcode:

outp(0x378,???);  -> ist ja schon veraltete methode

0x378,???  -> was muss ich da jetzt anstelle von ??? einsetzen damit ich den 2 pin auf high schalten kann.

wäre sehr dankbar für hilfreiche antworten

  1. 你好 Jürgen,

    outp(0x378,???);  -> ist ja schon veraltete methode

    0x378,???  -> was muss ich da jetzt anstelle von ??? einsetzen damit ich
    den 2 pin auf high schalten kann.

    Müsste so sein: Entweder 2 (das zweite Bit ist da ja auf 1 gesetzt) oder ~2
    (also das Komplement, alle Bits 1 ausser dem zweiten); hängt davon ab, ob
    positive oder negative Logik, weiss ich gerad nicht auswendig.

    再见,
     克里斯蒂安

    --
    Wenn auf Erden alle das Schoene als schoen erkennen, so ist dadurch schon das Haessliche bestimmt.
    http://wwwtech.de/
    1. 你好 Jürgen,

      outp(0x378,???);  -> ist ja schon veraltete methode

      0x378,???  -> was muss ich da jetzt anstelle von ??? einsetzen damit ich
      den 2 pin auf high schalten kann.

      Müsste so sein: Entweder 2 (das zweite Bit ist da ja auf 1 gesetzt) oder ~2
      (also das Komplement, alle Bits 1 ausser dem zweiten); hängt davon ab, ob
      positive oder negative Logik, weiss ich gerad nicht auswendig.

      再见,
      克里斯蒂安

      also ich hab des jetzt so probiert aber nix klappt.

      0x378,2      -> geht net
      0x378,0x02   -> auch net

      die led ist die ganze zeit aus. des heisst also ich muss den pin auf high stellen.

      1. 你好 Jürgen,

        outp(0x378,???);  -> ist ja schon veraltete methode

        0x378,???  -> was muss ich da jetzt anstelle von ??? einsetzen damit ich
        den 2 pin auf high schalten kann.

        Müsste so sein: Entweder 2 (das zweite Bit ist da ja auf 1 gesetzt)
        oder ~2 (also das Komplement, alle Bits 1 ausser dem zweiten); hängt
        davon ab, ob positive oder negative Logik, weiss ich gerad nicht
        auswendig.

        also ich hab des jetzt so probiert aber nix klappt.

        0x378,2      -> geht net
        0x378,0x02   -> auch net

        die led ist die ganze zeit aus. des heisst also ich muss den pin auf high
        stellen.

        Ich sagte ja, du wirst gucken müssen ob positive oder negative Logik.
        Entweder 0x2 oder ~0x2, wobei ~ das B-1-Komplement des Bitmusters erstellt:

        ~010000 = 101111
        ist die C-Notation; kA, welche Sprache du benutzt, denke aber, dass die
        auch so einen Operator hat.

        再见,
         克里斯蒂安

        --
        Das Leben ist wie ein Kartenspiel: was dir gegeben wurde, ist vorbestimmt. Doch wie du damit spielst, ist deine Entscheidung.
        http://wwwtech.de/
        1. 你好 Jürgen,

          outp(0x378,???);  -> ist ja schon veraltete methode

          0x378,???  -> was muss ich da jetzt anstelle von ??? einsetzen damit ich
          den 2 pin auf high schalten kann.

          Müsste so sein: Entweder 2 (das zweite Bit ist da ja auf 1 gesetzt)
          oder ~2 (also das Komplement, alle Bits 1 ausser dem zweiten); hängt
          davon ab, ob positive oder negative Logik, weiss ich gerad nicht
          auswendig.

          also ich hab des jetzt so probiert aber nix klappt.

          0x378,2      -> geht net
          0x378,0x02   -> auch net

          die led ist die ganze zeit aus. des heisst also ich muss den pin auf high
          stellen.

          Ich sagte ja, du wirst gucken müssen ob positive oder negative Logik.
          Entweder 0x2 oder ~0x2, wobei ~ das B-1-Komplement des Bitmusters erstellt:

          ~010000 = 101111
          ist die C-Notation; kA, welche Sprache du benutzt, denke aber, dass die
          auch so einen Operator hat.

          再见,
          克里斯蒂安

          ja des hab ich jetzt auch probiert.

          0x378,~2
          0x378,~0x02

          gehen auch beide net.

          programmiersparche: c

          vollständiger quellcode:
          int main(void) {
          0x378,???
          return 0;
          }

          1. Hi,

            int main(void) {
            0x378,???
            return 0;
            }

            was soll das denn bewirken? Meiner Meinung nach völlig sinnfrei...

            Ich bin kein C-Crack, aber die Zeile 2 macht gar nix. Egal, welche Zahl du für ??? einsetzt. Da könnte ich auch "pups" reinschreiben und hoffen, dass die Luft stinkt. :)

            MfG Hopsel

            --
            "It's amazing I won. I was running against peace, prosperity, and incumbency."
            George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
            Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
            1. Hallo,

              Ich bin kein C-Crack, aber die Zeile 2 macht gar nix. Egal, welche Zahl du für ??? einsetzt. Da könnte ich auch "pups" reinschreiben und hoffen, dass die Luft stinkt. :)

              Warum sollte den "pups" gehen?

              1. Hi,

                Warum sollte den "pups" gehen?

                das tut es ja nicht...

                MfG Hopsel

                --
                "It's amazing I won. I was running against peace, prosperity, and incumbency."
                George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
                Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
                1. Hallo,

                  verstehst du nicht?

                  int main(void) {
                  0x378,???;
                  return 0;
                  }

                  wenn statt ??? eine Zahl stehen würde, wäre das syntaktisch korrekt, obwohl es jetzt vielleicht nicht den gewünschten Effekt erzielt. Sollte allerdings statt den Fragezeichen "pups" stehen, dann meckert zumindest schon ma der Compiler und man kann nicht einfach "pups" hinschreiben... ;-)

                  Gruß

                  1. Hi,

                    int main(void) {
                    0x378,???;
                    return 0;
                    }

                    wenn statt ??? eine Zahl stehen würde, wäre das syntaktisch korrekt, obwohl es jetzt vielleicht nicht den gewünschten Effekt erzielt. Sollte allerdings statt den Fragezeichen "pups" stehen, dann meckert zumindest schon ma der Compiler und man kann nicht einfach "pups" hinschreiben... ;-)

                    Was hast Du denn für einen Compiler?

                    $ cat test1.c
                    int main(void) {
                    0x378,"pups";
                    return 123;}
                    $ gcc3 --version
                    gcc3 (GCC) 3.4.1
                    $ gcc3 -std=c99 -W -Wall -o test1 test1.c
                    test1.c: In function `main':
                    test1.c:2: Warnung: linker Operand des Komma-Ausdrucks hat keinen Effekt
                    test1.c:2: Warnung: Anweisung ohne Effekt
                    $ ./test; echo $?
                    123

                    Klappt doch einwandfrei!

                    $ splint test1.c
                    Splint 3.1.1.2 --- 11 Jul 2004

                    test1.c: (in function main)
                    test1.c:2:1: Statement has no effect: 0x378
                      Statement has no visible effect --- no values are modified. (Use -noeffect to
                      inhibit warning)

                    Finished checking --- 1 code warning

                    so short

                    Christoph Zurnieden

                    1. Hi Christoph Zurnieden!

                      Klappt doch einwandfrei!

                      Das Kompilieren vielleicht. Hast du was gerochen?

                      MfG Hopsel

                      --
                      "It's amazing I won. I was running against peace, prosperity, and incumbency."
                      George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
                      Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
                      1. Hi,

                        Klappt doch einwandfrei!

                        Das Kompilieren vielleicht. Hast du was gerochen?

                        Nein. Kann aber auch meinem besonders emissionsarmen Rechner liegen, bin jetzt aber zu faul, dafür extra den Kohlefilter abzuschrauben, ist 'ne Heidenfummelei.

    2. Hallo Christian,

      Müsste so sein: Entweder 2 (das zweite Bit ist da ja auf 1 gesetzt) oder ~2 (also das Komplement, alle Bits 1 ausser dem zweiten); hängt davon ab, ob positive oder negative Logik, weiss ich gerad nicht auswendig.

      Fast. ;)

      Erstens: Der richtige Zahlenwert ist nicht 0x02, sondern 0x01, weil auf Pin2 der Druckerschnittstelle das Bit0 liegt (Pin 1 ist /STROBE).
      Zweitens: Die Druckerschnittstelle verwendet positive Logik, deshalb 0x01 und nicht 0xFE.
      Drittens: Die Druckerschnittstelle hat oft nur TTL-Ausgänge. Sie liefert also keinen Strom, sondern schaltet nur im Aus-Zustand gegen Masse und braucht daher einen Pull-Up-Widerstand.

      So long,

      Martin

      1. Hallo Martin...
                    ^^^?

        Jetzt muss ich doch mal fragen: Ist alles in Ordnung mit deinem Account?

        Einen schönen Samstag noch.

        Gruß, Ashura

        --
        Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
        30 Days to becoming an Opera8 Lover -- Day 21: Toolbars
        Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
        [Deshalb frei! - Argumente pro freie Software]
        1. Hallo Ashura,

          Hallo Martin...
                      ^^^?
          Jetzt muss ich doch mal fragen: Ist alles in Ordnung mit deinem Account?

          Hmm, nicht wirklich.
          Seit heute abend bekomme ich beim Versuch, ein Posting abzuschicken, die Fehlermeldung "Um unter diesem Namen posten zu können, müssen Sie sich authentifizieren". Dabei hab ich nichts verändert... alle meine User-Einstellungen werden auch korrekt angewendet, Postings werden als gelesen markiert oder ausgeblendet, nur meinen Nick will der Forumsserver plötzlich nicht mehr akzeptieren. Obwohl ich vorhin probehalber schon den Namensschutz abgestellt habe. Und ein lokales Problem auf _einem_ Rechner ist es auch nicht, auf meiner zweiten Mühle habe ich das gleiche Ergebnis. In Firefox, IE und Opera, völlig egal. Scheint also wirklich eine Spinnerei des selfhtml-Servers zu sein. :(

          Ich wollte aber, bevor ich hier um Hilfe schreie, erstmal einen Tag oder zwei abwarten, denn viele Probleme lösen sich bekanntlich durch Abwarten.

          Schönes Wochenende noch,

          Martin

          1. Hallo Martin.

            Seit heute abend bekomme ich beim Versuch, ein Posting abzuschicken, die Fehlermeldung "Um unter diesem Namen posten zu können, müssen Sie sich authentifizieren".

            Dein alter Account lässt sich nicht einfach so abschieben. ;-)
            Kannst du unter diesem mit deinem Namen posten?

            Scheint also wirklich eine Spinnerei des selfhtml-Servers zu sein. :(

            Naja, ich drücke dir die Daumen, dass das bald wieder in Ordnung ist.

            Ich wollte aber, bevor ich hier um Hilfe schreie, erstmal einen Tag oder zwei abwarten, denn viele Probleme lösen sich bekanntlich durch Abwarten.

            Vorbildlich. ;-)

            Einen schönen Sonntag noch.

            Gruß, Ashura

            --
            Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
            30 Days to becoming an Opera8 Lover -- Day 21: Toolbars
            Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
            [Deshalb frei! - Argumente pro freie Software]
      2. 你好 Martin,

        Müsste so sein: Entweder 2 (das zweite Bit ist da ja auf 1 gesetzt) oder
        ~2 (also das Komplement, alle Bits 1 ausser dem zweiten); hängt davon
        ab, ob positive oder negative Logik, weiss ich gerad nicht auswendig.

        Fast. ;)

        Hehe, man soll halt nicht von üblichen Micro-Prozessoren auf PC-Hardware
        abstrahieren ;)

        Zweitens: Die Druckerschnittstelle verwendet positive Logik, deshalb 0x01
        und nicht 0xFE.

        Davon war ich fast ausgegangen (ist ja üblich), wollte aber die Möglichkeit
        der negativen Logik erwähnt haben, da ich es, wie gesagt, nicht nachgeguckt
        habe ;) Aber danke für die Bestätigung.

        再见,
         克里斯蒂安

        --
        Unsere Vorstellungen von der Ewigkeit sind genauso nuetlich wie die Mutmassungen eines Kuehkens ueber die Aussenwelt bevor es die Eierschale aufbricht.
        http://wwwtech.de/
      3. Hi,

        Fast. ;)

        Ja, dem kann ich mich anschließen ;-)

        Zweitens: Die Druckerschnittstelle verwendet positive Logik, deshalb 0x01 und nicht 0xFE.

        Für den fraglichen Pin ist das so korrekt, aber was ist mit 0,1 und 3? ;-)

        Drittens: Die Druckerschnittstelle hat oft nur TTL-Ausgänge. Sie liefert also keinen Strom, sondern schaltet nur im Aus-Zustand gegen Masse und braucht daher einen Pull-Up-Widerstand.

        Wenn ich da mal den Jan zitieren darf:

        Q: I'd like to power a low component count device via an output port bit on the pc's parallel port. Does anyone know the current sourcing spec for an output port bit?

        A: The data outputs on the original parallel port were 74LS374 outputs, which can source 2.6 milliamps at 2.4 guaranteed, 3.1V typical. The data outputs on most parallel ports are at least as strong as the original port's, but no guarantees. If you need 5V, you can use one of the high-efficiency step-up regulators from Maxim & others (Max756). The newer port controller chips often have IEEE-1284 Level 2 outputs, which can source 12 milliamps at 2.5V. The Control outputs were originally open-collector TTL with 4.7K pullups, so these are less useful as current sources.

        Es ist verdammt nicht viel.
        Aber die moderneren Chips mögen etwas "robuster" sein, keine Ahnung. http://www.lvr.com/parport.htm und http://www.beyondlogic.org/index.html wissen da bestimmt mehr drüber.

        so short

        Christoph Zurnieden

  2. Hi,

    betriebssystem an dem es probiert wird windwos 98.

    (Bitte beachte, das Windows-NT eine Kerneltreiber dafür benötigt. Nur falls Du Dich mal wundern solltest.)

    programmcode:

    outp(0x378,???);  -> ist ja schon veraltete methode

    ja und? Ist doch Windows! >;->

    0x378,???  -> was muss ich da jetzt anstelle von ??? einsetzen damit ich den 2 pin auf high schalten kann.

    Probier's aus (für den LCC):
    #include <stdlib.h>
    #include <conio.h>
    #include <windows.h>
    int main(){
      int i;
      for(i=0;i<256;i++){
        _outp(0x378,i);
        sleep(300);
      }
      exit(EXIT_SUCCESS);
    }

    Die Consolenausgabe, was gerade läuft darfst Du selber einbasteln.

    so short

    Christoph Zurnieden

    1. Hi,

      betriebssystem an dem es probiert wird windwos 98.

      (Bitte beachte, das Windows-NT eine Kerneltreiber dafür benötigt. Nur falls Du Dich mal wundern solltest.)

      programmcode:

      outp(0x378,???);  -> ist ja schon veraltete methode

      ja und? Ist doch Windows! >;->

      0x378,???  -> was muss ich da jetzt anstelle von ??? einsetzen damit ich den 2 pin auf high schalten kann.

      Probier's aus (für den LCC):
      #include <stdlib.h>
      #include <conio.h>
      #include <windows.h>
      int main(){
        int i;
        for(i=0;i<256;i++){
          _outp(0x378,i);
          sleep(300);
        }
        exit(EXIT_SUCCESS);
      }

      Die Consolenausgabe, was gerade läuft darfst Du selber einbasteln.

      so short

      Christoph Zurnieden

      danke danke danke
      seit fünf tagen häng ich jetzt an dem problem.
      jetzt geht es und ich muss keine treiber oder sonstige sachen benützen.
      vielen dank
      :-)))))

  3. Hi,

    also ich hab eine led mit dem pluspol auf den 2. pin gelötet und auf den 24. pin den minuspol.

    Keine AHnung, obs schon erwähnt wurde, aber wenn du das ganze ohne Vorwiderstand machst, verabschiedet sich die LED ziemlich schnell und evtl. auch der Treiberbaustein.

    Also in jedem Fall nen 470 Ohm Widerstand in Reihe mit der LED löten. Besser ist aber ein zusätzlicher Treiber (Transistor für eine LED oder z.B. ein ULN2004, der allerdings das Signal invertiert. Ich glaub ein ULN 2003 würde nicht invertieren)