Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[LPT poort] Input pinnen laag maken

Pagina: 1
Acties:
  • 279 views sinds 30-01-2008
  • Reageer

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Ik ben bezig met het uitlezen van sensoren op de input pinnen van een printerpoort.

Ik doe dit onder linux, heb ook al een C programma gevonden om de status uit te lezen, maar wanneer ik het programma uitvoer dan retourneert het de waarde 127 wat neerkomt op 1111111.

Het rare is is dat er helemaal nog niets is aangesloten van sensoren dus:

a) het ligt aan het programma , heeft niet voldoende rechten ofzo ...
b) de status van de pinnen is echt allemaal hoog.

Om situatie b uit te sluiten had ik graag geweten of is op een of andere manier de status van de input pinnen van de lpt poort laag kan krijgen?

Dit is trouwens de .c code voor de geinteresseerden;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>


#define base 0x379           /* I/O address to read */

main(int argc, char **argv)
{
  int value;

  if (ioperm(base,1,1))
    fprintf(stderr, "Couldn't get the port at %x\n", base), exit(1);

  value = inb(base);
  printf("Port 0x%x read value is %i \n",base,value);
}

[ Voor 26% gewijzigd door bibawa op 17-06-2006 22:09 ]


  • Steefph
  • Registratie: Juli 2002
  • Laatst online: 18-11 12:42
De LPT heeft standaard pull-up weerstanden. Dus is er altijd een logische 1 op de ingang.

Volgens de theorie zou je dus de desbetreffende pinnen aan massa moeten hangen om een 0 te krijgen.

offtopic:
haha en ik was nog eerder ook :P

[ Voor 49% gewijzigd door Steefph op 17-06-2006 22:37 ]

Alles is terug te redeneren naar 4


  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 19:33
Het is niet raar dat er bij ingangspinnen een low-pullup voorzien is, en dat je dus de ingang enkel naar massa moet trekken om er een nul op te krijgen. Dat is erg handig om bij het initialiseren eventuele kabelbreuk te detecteren, als het externe apparaat goed aangesloten is moeten de ingangspinnen laag zijn, dan is alles in orde.
Kben niet 100% zeker, maar het zou raar zijn als het niet zo is (oplossing: ingangspinnen aan massa hangen).
Edit: Steef1983 geeft me gelijk, tzal dus zo zijn.

[ Voor 6% gewijzigd door naftebakje op 17-06-2006 22:35 ]

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


  • joopv
  • Registratie: Juli 2003
  • Niet online
Vrijwel iedere printerpoort is tegenwoordig bidirectioneel, dus als je nu eerst eens een 0 naar buiten stuurt?

  • Steefph
  • Registratie: Juli 2002
  • Laatst online: 18-11 12:42
joopv schreef op zaterdag 17 juni 2006 @ 22:45:
Vrijwel iedere printerpoort is tegenwoordig bidirectioneel, dus als je nu eerst eens een 0 naar buiten stuurt?
Volgens mij moet je dan eerst in het register instellen dat het een uitgang is. Als je heb dan weer insteld als ingang gaat hij weer naar zwevende toestand dus een '1'

Alles is terug te redeneren naar 4


  • kluyze
  • Registratie: Augustus 2004
  • Niet online
Je zet eerst:
C:
1
outb(waarde, LPT);
en dan jou code van inb().
LPT is bij mij trouwens:
C:
1
#define LPT 0x378
en de waarde zal hetgene zijn dat je naar buiten schrijft.

[ Voor 10% gewijzigd door kluyze op 18-06-2006 00:02 ]


  • Mr GAmba
  • Registratie: Oktober 2003
  • Laatst online: 10-05-2021

Mr GAmba

Ondertitel unavailable

Waar kan ik die 2 .h files ergens vinden... wil zelf nmlk ook een beetje experimenteren maar heb die files niet.

Signature unavailable


  • joopv
  • Registratie: Juli 2003
  • Niet online
Steef1983 schreef op zaterdag 17 juni 2006 @ 22:52:
[...]Volgens mij moet je dan eerst in het register instellen dat het een uitgang is. Als je heb dan weer insteld als ingang gaat hij weer naar zwevende toestand dus een '1'
Ik dacht je met een EPP/ECP printerpoort je simultaan de status van de lijnen kunt uitlezen en onafhankelijk daarvan de uitgang kunt instellen.
Op de bekende site van Tomi Engdahl kun je er alles over lezen.
http://www.epanorama.net/links/pc_index.html
http://www.epanorama.net/links/pc_interface.html#parallel

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
Mr GAmba schreef op zondag 18 juni 2006 @ 14:12:
Waar kan ik die 2 .h files ergens vinden... wil zelf nmlk ook een beetje experimenteren maar heb die files niet.
Zitten standaard in linux normaal gezien, windows kan met deze code niet om. Als je onder windows werkt, geef dan maar een gil, dan zet ik daar mijn code ook voor online.

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
kluyze schreef op zondag 18 juni 2006 @ 00:00:
Je zet eerst:
C:
1
outb(waarde, LPT);
en dan jou code van inb().
LPT is bij mij trouwens:
C:
1
#define LPT 0x378
en de waarde zal hetgene zijn dat je naar buiten schrijft.
maar wat moet ik dan als waarde instellen?

  • Mr GAmba
  • Registratie: Oktober 2003
  • Laatst online: 10-05-2021

Mr GAmba

Ondertitel unavailable

Aaaahhh,. (gil) :P. Ik werk idd onder windows. Heb al wel dat ene dll bestand om naar je poorten te kunnen schrijven geloof ik.

Signature unavailable


  • RafkeP
  • Registratie: Maart 2004
  • Laatst online: 11-05-2023
Ik heb mijn documentatie niet meer bij de hand, maar van wat ik mij herinner heeft de parallelle poort 3 adressen : 378, 379 en 37A.
Je moet dus goed zien waar de inputs zich bevinden. (als ik moet gokken op 37A)

378 bevat alleszinds de datalijnen. Als ik jou was zou ik daar eerst eens een waarde naar schrijven en kijken of dat uitkomt. Dan weet je toch al of je programma de juiste rechten heeft om de poort aan te spreken.

Verder meen ik mij te herinneren dat het niet goed is om bepaalde registers te forceren.
(volgens mij het status register). Op deze registers laat je best een OR-functie los.

Hou er ook rekening mee dat sommige in/uitgangen actief hoog zijn en sommige actief laag.

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
waarden wegschrijven gaat wel dus het programma heeft de juiste rechten.

Heb net nog eens zitten meten en echt alle pinnen die input zouden moeten opleveren zijn hoog. en krijg ze op een enkele manier laag gemaakt.

Of mijn schakeling is gewoon brak of het is iets anders..

heb trouwens met outb(0,lptadres) alles laag geprobeerd te krijgen maar ook dat is tevergeefs...


En wat het onder windows betreft, ik weet niet of je die dll nodig hebt voor C programma's maar voor vb enzo wel. Onder c moet je gewoon gebruik maken van stdio.h en als ik me niet vergis io.h

  • RafkeP
  • Registratie: Maart 2004
  • Laatst online: 11-05-2023
Probeer het dan eens met adres 37A.

DLportio heb je altijd nodig onder Windows XP/NT.
Daarin werken functies zoals outb en inb niet meer.

  • Mr GAmba
  • Registratie: Oktober 2003
  • Laatst online: 10-05-2021

Mr GAmba

Ondertitel unavailable

Probeer anders eerst die pinnen fysiek laag te maken door ze aan aarde te hangen,.. Krijg je dan wel 0'en dan ligt het aan je software.

Signature unavailable


  • kluyze
  • Registratie: Augustus 2004
  • Niet online
bibawa schreef op zondag 18 juni 2006 @ 17:00:
[...]
maar wat moet ik dan als waarde instellen?
Waarde is een integer, kan bv 5 zijn en als je dan inb() doet dan moet die normaal 5 lezen.
Mr GAmba schreef op zondag 18 juni 2006 @ 17:17:
Aaaahhh,. (gil) :P. Ik werk idd onder windows. Heb al wel dat ene dll bestand om naar je poorten te kunnen schrijven geloof ik.
Bij dat bestandje zou een vb moeten zitten, linkje naar voorbeeld en nog een ...\test applications\Borland C++ test program (het vb was wat lang om online te zetten, dus zo maar).

[ Voor 5% gewijzigd door kluyze op 18-06-2006 17:46 ]


  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Mr GAmba schreef op zondag 18 juni 2006 @ 17:35:
Probeer anders eerst die pinnen fysiek laag te maken door ze aan aarde te hangen,.. Krijg je dan wel 0'en dan ligt het aan je software.
ik kan die input lijn dus gewoon verbinden met de gnd van de lpt poort?

of heb ik het nu mis?

Ik heb het mis dus :+

[ Voor 5% gewijzigd door bibawa op 18-06-2006 18:39 ]


  • Mr GAmba
  • Registratie: Oktober 2003
  • Laatst online: 10-05-2021

Mr GAmba

Ondertitel unavailable

Idd je kan de input lijn gewoon aan de aarde hangen,.. dan zou je een 0 moeten uitlezen.

Signature unavailable


  • geforce5_guy
  • Registratie: December 2001
  • Niet online
Moet er niet voor de zekerheid een weerstand tussen van 1 of 10 K Ohm ofzo ?

Als je dus de lijnen naar de ground trekt.

  • Mr GAmba
  • Registratie: Oktober 2003
  • Laatst online: 10-05-2021

Mr GAmba

Ondertitel unavailable

Nee die pinnen zitten al met een "pull-up" weerstand ( meestal iets van 10k ) aan de 5 Volt. Als je nu ook de pinnen naar de 0 V gaat trekken met een 10k weerstand. Komt het niveau van je pin op 2.5 Volt te zitten... Dit is iets wat je niet wilt. Dus gewoon keihard aan aarde.

Signature unavailable


  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 20-11 21:12

SA007

Moderator Tweaking
RafkeP schreef op zondag 18 juni 2006 @ 17:33:
Probeer het dan eens met adres 37A.

DLportio heb je altijd nodig onder Windows XP/NT.
Daarin werken functies zoals outb en inb niet meer.
Afaik:
378 = datalijnen
37A = statuslijnen (output)
379 = statuslijnen (input)

  • Lars The 18th
  • Registratie: November 1999
  • Niet online
Je kan veel informatie halen uit de Paralelle poort Faq
Hier word gebruik gemaakt van inpout32.dll, hierbij zit voorbeeldcode voor VB6 / C ( Mapje testapplications )

Om gemakkelijk een bepaalde pin hoog / laag te zetten of uit te lezen kan je PARMON ( parallelmonitor ) gebruiken


[Edit]
Sorry had niet goed gelezen :D

[ Voor 174% gewijzigd door Lars The 18th op 20-06-2006 22:54 ]


  • EL_Loco
  • Registratie: Oktober 2001
  • Laatst online: 08-11-2023

EL_Loco

alias Haco

Lars The 18th schreef op dinsdag 20 juni 2006 @ 21:51:
Je kan veel informatie halen uit de Paralelle poort Faq
Hier word gebruik gemaakt van inpout32.dll, hierbij zit voorbeeldcode voor VB6 / C ( Mapje testapplications )

Om gemakkelijk een bepaalde pin hoog / laag te zetten of uit te lezen kan je PARMON ( parallelmonitor ) gebruiken
psst... hij draait linux :>

rumores non hiatus dremelunt
malleo omnia consentiunt
Lid van het Anti-Jamba front!


  • bobo1on1
  • Registratie: Juli 2001
  • Laatst online: 19-10 00:17
Het eerste bit van de status port is geinverteerd, daarom krijg je 127, anders zou je een waarde van 248 of hoger terug moeten krijgen.

Het nut daarvan is mij een raadsel.

[ Voor 13% gewijzigd door bobo1on1 op 22-06-2006 22:10 ]

Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.

Pagina: 1