- 12V Akku mit 280 Ah bauen         
Seite 6 von 7 ErsteErste ... 4567 LetzteLetzte
Ergebnis 51 bis 60 von 64

Thema: LPT mit C++ ?

  1. #51
    Benutzer Stammmitglied
    Registriert seit
    04.02.2005
    Beiträge
    76
    Anzeige

    Praxistest und DIY Projekte
    Hi dschungs!
    Also ich wollte um mich an diese LPT Schnittstellenproblematik erstmal ran zu tasten einfach nur alle Datenpins auf "high" setzten und nach ein paar Sekunden wieder auf "low". Aber an der Schnittstelle kann ich an den jeweiligen Pins nichts nennenswertes messen. Laufen tut mein Programm auf einem alten Notebook das mit Win95 läuft und kompiliert wurde es mit Bloodshed. Wäre Klasse wenn ihr euch den Quelltext mal anschaut!!
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>
    #include <time.h>
    #include <dos.h>
    
    int main(int i)
    {  
        for(i=1;i<=10;i++)
        {
        _outp(0x3BC,0xFF);
        printf("D0..D7=1\n");
    
        wait(10);
    
        _outp(0x3BC,0xFF);
        printf("D0...D7=0\n");
    
        wait(10);
        }
    }
    
    wait(int sekunden)
    {
        clock_t start;
        sekunden *= CLOCKS_PER_SEC;
        start = clock();
        while(clock()<start+sekunden); 
    }
    Na? Wie schaut's aus? Kann man die Ports so ansprechen, denn bei diesem Link (http://www.epanorama.net/circuits/pa...ml#doscontrol)
    hab ich die Sache mit dem direkt ansprechen nicht so ganz verstanden. Muss ich auch unter Win95 noch irgendwelche DLL's, von denen ich leider gar keine Ahnung habe includen?

    Ich würde mich sehr sehr doll über eine Antwort freuen.

    Bis denn!
    mfg crowdy

  2. #52
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.05.2004
    Beiträge
    122
    hallo

    habe leider grade keine zeit um es mir genau anzusehen, hier sind aber bestimmt welche die dir besser helfen können...

    kann sein das dein compiler mit der funktion _outp() nichts anfangen kann, schreibe über main:

    Code:
    //============================================== 
    void _outp (unsigned int portadr, unsigned char value) 
    { 
     _asm mov edx,portadr 
     _asm mov al, value 
     _asm out dx,al 
    } 
    //==============================================
    das ist ein asm befehl, der den ouzput befehl schreibt (schreibt ist das falsche wort )

    außerdem solltest du festlegen was eine lpt schnittstelle ist und welche, einfach unter den include: #define LPT 0x378 schreiben


    ist das, das gesamte programm? du musst glaube ich void main (void) schreiben, du ja nix an main übergibs und keinen integer als rückgabewert hast, aber ich kenne mich mit konsolenanwendungen nicht so aus.

  3. #53
    Benutzer Stammmitglied
    Registriert seit
    04.02.2005
    Beiträge
    76
    jo vielen dank für die Antwort flo!
    Aber irgendwie hilft mir das nicht weiter, was bedeutet dieser asm Befehl?
    Die _outp Funktion kennt mein Compiler aber dafür den _asm Befehl nicht.
    Und eigentlich ist es doch auch egal ob man die Addresse direkt in die Funktion schreibt oder ob man das vorher definiert.

  4. #54
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.05.2004
    Beiträge
    122
    hallo

    der asm befehl (asembler) ist der "treiber" damit der kompiler weiß was der outp befehl soll

    bekommst du eine fehler meldung?

    Code:
    #include <stdio.h> 
    #include <conio.h> 
    #include <windows.h> 
    #include <time.h> 
    #include <dos.h> 
    #define LPT 0x378 
    
    //============================================== 
    void outp (unsigned int portadr, unsigned char value) 
    { 
     _asm mov edx,portadr 
     _asm mov al, value 
     _asm out dx,al 
    } 
    //============================================== 
    
     
    int main(int i) 
    {  
        for(i=1;i<=10;i++) 
        { 
        outp(0x378,256); 
        printf("D0..D7=1\n"); 
    
        wait(10); 
    
        outp(0x378,256); 
        printf("D0...D7=0\n"); 
    
        wait(10); 
        } 
    } 
    
    wait(int sekunden) 
    { 
        clock_t start; 
        sekunden *= CLOCKS_PER_SEC; 
        start = clock(); 
        while(clock()<start+sekunden); 
    }
    du must ihn oben definieren mit #define LPT 0x378
    den die lptschnittstele hat 3 register das statusregister, das steuerregister und die datenleitung. mit #define LPT 0x378 sagst du in das er die schnittstelle 0x378 benutzen soll, wenn du noch andere hast gibst noch andere andressen.
    im outp befehl sagst du ihn dann welches register er benutzen soll
    outp(0x378,0);
    outp(0x379,0);
    outp(0x37a,0);
    hier werden alle 3 auf null gesetzt

    pass aber auf dein motherbord auf, wenn du da was anschließt

  5. #55
    Benutzer Stammmitglied
    Registriert seit
    04.02.2005
    Beiträge
    76
    Vielen Dank für die schnelle Antwort!
    Es funktioniert jetzt, aber das lag nicht am Programm sondern daran das ich im Internet die Pinbelegung nachgeschaut habe und diese ist bei meinem Stecker irgendwie anders, deshalb habe ich immer an den falschen Pins gemessen!

  6. #56
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.05.2004
    Beiträge
    122
    kann ja jedem mal passiere, ich habe immer eine konsolenanwendug geschrieben und sie in einer form ausgegeben

  7. #57
    Benutzer Stammmitglied
    Registriert seit
    04.02.2005
    Beiträge
    76
    Hiho
    da bin ich mal wieder!
    Hab' ein Problem mit den Eingängen Error, Select und PapperOut und zwar wollte ich diese Eingänge zweckentfremden, damit ich D0 bis D7 nicht immer auf input() umschalten muss. Ich habe parallel zu diesen Eingängen LED's geschaltet, um das besser zu kontrollieren und verstehen zu können. Nun ist es aber so das bei den Eingängen im gewöhnlichen Zustand nicht GND anliegt sondern dass da noch ein bisschen Spannung drauf ist (Wieviel weiss ich nicht, kann nur sehen das die LED's recht hell leuchten).
    Nur wenn ich den Eingang direkt an GND schliesse erlischt das LED (is ja auch logisch).
    Nun hab ich mit dem NE555 ein Rechtecksignal von 1Hz an die LPT Schnittstelle geschlossen und der PC kann keinen Takt erkennen weil der Eingang immer auf high ist.
    Was muss ich tun damit die Eingänge die Signale richtig erkennen?
    Muss ich eventuell auf invertierte Eingänge zurückgreifen oder vielleicht irgendwir den Port über einen Widerstand mit GND verbinden?
    hoffentlich könnt ihr mir helfen
    mfg crowdy

  8. #58
    Benutzer Stammmitglied
    Registriert seit
    04.02.2005
    Beiträge
    76
    Hab auch gerade gemerkt das ich das gleiche Problem bei D0 bis D7 habe!!

  9. #59
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.05.2004
    Beiträge
    122
    ahm

    ich weiß nicht ob ich dich richtig verstanden habe, aber

    wenn du ein 1Hz signal einlesen willst dann, musst du mindestens 1 mal pro sekunde den pin einlesesn, eigendlich klar ne

    so ich weiß jetzt nicht wie du die signale einliest, wenn du es zb mit einem button machst, wird das status register nur einmal eingelesen und zwar beim drücken, deswegen solltest du einen timer benutzen, der mindestens eine frequenz von 1 hz hat

  10. #60
    also da das alle ja jetzt bei euch allen scheinbar funktioniert frag ich hier einfach mal rein (bin über zig links in diesem thread gelandet, scheint ja vom kenntnissstand am weitesten zu sein hier)

    ich versuche mit vc++ unter winxp über die Inpout32.dll meinen parallel port anzusteuern leider ohne erfolg. das code beispiel am ende dieser seite (http://www.logix4u.net/parallelport1.htm) lässt sich ohne fehler kompilieren verursacht aber einen laufzeitfehler (bei dem ich den verdacht hab das es genau der hier (http://www.logix4u.net/inpout32.htm -> ganz oben) ist.

    so, jetzt ihr

    danke schonmal für alle antworten.

Seite 6 von 7 ErsteErste ... 4567 LetzteLetzte

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress