LPT1 mit C++ ansteuern?

  • Nett, hab das Video erst jetzt gesehen.

    Nur so aus Neugier.. das allererste Programm in diesem Thread wo du die Datenbits via Byteprotokoll setzt (also mit fopen) funktioniert das wider erwarten doch? Oder machen dir OS-Buffer und Ack-Bits den Plan zunichte?

    Einmal editiert, zuletzt von gandro (28. April 2013 um 12:36)

  • Ich habe es selber noch nicht so getestet, werde ich im laufe des Abends mal machen!

    Mein Lehrer meinte, es würde so gehen. Bin mal gespannt.



    Ich habe den Code nun noch mal genau so gestartet wie er im ersten Post ist, da tut sich aber garnüscht!

    Nun werde ich mal weiter an dem Lauflicht basteln, irgendwie bekomme ich die LED die am 2. Pin angeschlossen ist nicht angesprochen.


    Code
    char byte = 1 << 0;


    tut nichts!


    und


    Code
    char byte = 1 << 1;


    spricht die 2. LED an


    Hättest du da eventuell noch nen guten tipp für mich? :)

    Okay, Problem gelöst, lag an der Hardware... werde mir demnächst mal ein ordentliches Kabel besorgen

    Einmal editiert, zuletzt von Basstra (28. April 2013 um 15:00)

  • Hätte mich auch erstaunt wenn sich mit dem ursprünglichen Code was bewegt hätte. Das einzige was ich mir vorstellen könnte, ist dass du 1 Byte senden kannst, danach blockierts weil kein ACK reinkommt. Aber vermutlich blockiert das Protokoll schon vorher.

    Mein Tipp übrigens um die Bitaddressierung etwas zu vereinfachen: Definier dir C/C++ Konstanten für die ganzen Bitpositionen:

    // Ausserhalb aller Funktionen#define D0 (1 << 0)#define D1 (1 << 1)#define D2 (1 << 2)#define D3 (1 << 3)#define D4 (1 << 4)#define D5 (1 << 5)#define D6 (1 << 6)#define D7 (1 << 7)

    // In deinem Code:

    // Pin D1, D3 und D4 setzen:char byte = D1 + D3 + D4; // (alternativ: byte = D1|D3|D4; )Out32(base, byte);// Pin D3 und D4 wieder ausmachen: char byte = Inp32(base) - D4 - D3; // (alternativ: byte = Inp32(base) & ~D4 & ~D3)Out32(base, byte);// Status von D5 auslesen:bool status = !!(Inp32(base) & D5);

    Einmal editiert, zuletzt von gandro (28. April 2013 um 15:58)

  • Das mit der Präprozessor Anweisung ist ne gute Idee, danke dafür.

    Ich bastel gerade noch an dem Lauflicht, da habe ich noch ne Frage und zwar habe ich erstmal so gelöst:

    Code
    for (vor=0; vor <= 7; vor++) {
         char byte = 1 << vor;
          Out32(base, byte);
          Sleep(500);
     }


    So geht es auch in eine Richtung, aber leider sind meine Versuche gescheitert es in die andere Richtug zurück laufen zu lassen, ich habe es so gemacht:


    Code
    for (zur=7; zur <= 0; zur--) {
          char byte = 1 << zur;
          Out32(base, byte);
          Sleep(500);
    }

    Ich habe nun 8 LEDs zum testen angeschlossen ud wen ich für jede LED dann die 3 Zeilen Tippen würde wäre es ja nicht so sinnig...
    Leider komme ich hier gerade nicht weiter :(

  • Problem ist deine Abbruchbedingung. Im zweiten Loop sagst du "laufe solange wie gilt: 'zur <= 0'". Die Variable "zur" ist aber zum Startpunkt nicht kleiner-gleich Null, daher wird die Schleife nicht ausgeführt. Da müsste stehen: zur >= 0;

    Einmal editiert, zuletzt von gandro (28. April 2013 um 16:38)

  • ich sehe mit LEDs zwar keinen Sinn, aber für Gerätesteuerung ists super, zb elektrische Rolläden einfach n Relais drann und per pc schalten

    Meine Main Geräte

    Spoiler anzeigen


    Main PC

    MSI X99-pro-Gaming-Carbon
    Intel XEON E5 2630 V4 20 Threads, 36 MB L3 Cache 2,21 Ghz 2,8 Ghz Turbo
    64 GB DDR4 2400 Mhz Quad Channel (8*8GB)
    2* AMD RX 580 8 GB Crossfire X (Pulse Bios 1250 Core 1950 MEM,) (Dual Bios)
    Samsung 960 pro 500 GB NVME @PCIE X4
    Samsung 2 TB SATA III HDD
    Crucial MX 500 1 TB SSD
    Sandisk pro 250 GB SSD
    Soundblaster Z @PCIE x2
    NEC USB 3.1 COntroller Card @ PCIE x2
    Corsair Obsidian 800D Case
    2* EIZO 4K S-IPS TFT + Oculus Rift CV1

    Notebook primär

    HP Zbook 14 G2
    Intel I5 5300U 4 Threads, 1,9 Ghz Turbo bis 2,66 Ghz
    16 GB DDR 3 1600 Mhz Ram
    Intel HD 5500 + AMD Fire pro MV4150 1GB
    Sandisk SSD 500 GB 2,5 Zoll SATA III
    Transcend SSD NVME 256 GB 2260
    14 Zoll S-VA Samsung Panel 1600*900
    LTE 150 Mbits, Intel AC WIFI Gigabit Lan, BT 4.1, NFC
    4* USB 3.0, 1 Smartcard, 1*PCIE SD card Reader, Sound, DP, Dockport, NT
    4 Cell primär Akku 45 WH + Unterschnall Akku 4 Cell 59 WH bis 14,5H


Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!