1



salut tout le monde



aidez moi je veux allumer et éteindre une led à travers mon port parallèle sous win xp et avec c++
j'ai tout installé inpout32.dll et userport aussi.
svp si quelqu'un peut me proposer un programme facile et simple pour allumer et éteindre ma led
et merci d'avance

cordialement





vouloir c'est pouvoir

2

Salut,

Si tu utilises inpout32.dll tu n'as pas besoin d'UserPort.

Tu utilises quel compilateur C++ ? (Visual Studio / DevC++ / Code::Blocks / autre ?)
Comment as-tu branché ta LED sur le port parallèle ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3

Euh, sous XP, comme sous tout autre NT, une DLL seule ne suffit pas, il faut obligatoirement un pilote pour soit activer l'accès aux ports I/O dans l'application (le plus rapide, mais ne marche que sous W32, la fonction qui permet ça a été supprimée dans le noyau 64 bits), soit accéder aux ports à l'intérieur du pilote.

Cf. http://svn.tilp.info/cgi-bin/viewcvs.cgi/libticables/trunk/src/win32/dha/ pour la première solution et http://svn.tilp.info/cgi-bin/viewcvs.cgi/libticables/trunk/src/win64/rwp/ pour la deuxième. (Ces outils sont sous GPL, il y a d'autres comme PortTalk sous d'autres licences, à toi de voir laquelle te convient le mieux.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

Sauf que inpout32.dll est particulière : à l'initialisation, elle extrait un driver contenu dans la DLL dans un répertoire temporaire et le charge dynamiquement. Donc il n'y a pas besoin de charger de driver manuellement.

(cf http://logix4u.net/Legacy_Ports/Parallel_Port/How_Inpout32.dll_works_.html)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

5

Bon OK... sick

Ça implique que l'application ne fonctionnera qu'en tant qu'admin en tout cas (alors qu'un pilote séparé peut être installé préalablement par l'admin).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

Si le driver est déjà chargé, Inpout32.dll l'utilise. Donc un admin peut très bien le rajouter au démarrage et comme ça tous les utilisateurs y ont accès (mais de toute façon, c'est dangereux, un tel driver est une faille de sécurité potentielle assez énorme).
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

7

Effectivement, et si l'OS proposait un moyen meilleur pour accéder aux ports série et parallèle, mettons (exemple purement théorique, hein gni) un moyen d'accéder directement aux lignes en ouvrant un fichier représentant le matériel, en honorant les permissions mises sur le fichier, et avec un moyen de ne donner l'accès qu'à la personne qui a branché le matériel, ce ne serait pas nécessaire. Mais comme l'OS ne le propose pas, on n'a pas vraiment le choix. Enfin bon, un pilote spécialisé qui ne permet l'accès qu'au port parallèle LPT1 serait déjà beaucoup mieux niveau sécurité (mais aussi beaucoup moins réutilisable, c'est pour ça que ça ne court pas les rues).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

Oui c'est vrai, Linux permet ça. Mais bon, c'est un cas un peu particulier, dans l'absolu les applications ne sont pas censées faire d'accès aussi bas niveau elles-mêmes sur un OS moderne. Après c'est sûr qu'un driver de port parallèle "générique" serait une solution beaucoup plus élégante, mais ce n'est pas simple à faire sous Windows. (Je suis pas trop fan de Linux, mais y'a un point sur lequel je reconnais que c'est franchement mieux que Windows : le développement des drivers. J'en ai déjà fait pour les deux, et la complexité n'est vraiment pas comparable. C'est l'une des raisons pour laquelle Microsoft a refait un nouveau format de drivers dans Vista, d'ailleurs.)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

9

10

salut les amis

s'apprécie vraiment votre aide et je vous remercie smile mais je tiens à vous dire que je fait de l'électronique et que je ne suis pas douée coté programmation , donc svp que dois je prendre de toutes ces propositions sachant que j'ai un win xp et que j'ai déjà copier input.dll dans mon win 32, j'utilise dev c++ ,voilà le programme que j'ai trouvé sur net pour écrire et lire sur un port // mais je ne sais pas que dois faire pour allumer ma led? sick sick
#include <stdio.h>
#include <conio.h>
#include <windows.h>

/* Definitions in the build of inpout32.dll are: */
/* short _stdcall Inp32(short PortAddress); */
/* void _stdcall Out32(short PortAddress, short data); */
/* prototype (function typedef) for DLL function Inp32: */

typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

int main(void)
{
HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;

short x;
int i;

/* Chargement de la librairie*/
hLib = LoadLibrary("inpout32.dll");

if (hLib == NULL)
{
printf("LoadLibrary Failed.\n");
return -1;
}
/* Récupération de l'adresse de la fonction avec "GetProcAddress" */
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
/* Vérification que la fonction existe */
if (inp32 == NULL) {
printf("GetProcAddress for Inp32 Failed.\n");
return -1;
}
/* Récupération de l'adresse de la fonction avec "GetProcAddress" */
oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
/* Vérification que la fonction existe */
if (oup32 == NULL) {
printf("GetProcAddress for Oup32 Failed.\n");
return -1;
}
/***************************************************************/
/* now test the functions */

/* Try to read 0x378..0x37F, LPT1: */
for (i=0x378; (i<0x380); i++)
{
x = (inp32)(i);
printf("port read (%04X)= %04X\n",i,x);
}
/***** Write the data register */

i=0x378;
x=0x77;
(oup32)(i,x);
printf("port write to 0x%X, datum=0x%2X\n" ,i ,x);

/***** And read back to verify */
x = (inp32)(i);
printf("port read (%04X)= %04X\n",i,x);

/***** One more time, different value */

i=0x378;
x=0x0;

(oup32)(i,x);
printf("port write to 0x%X, datum=0x%2X\n" ,i ,x);

/***** And read back to verify */
x = (inp32)(i);
printf("port read (%04X)= %04X\n",i,x);

FreeLibrary(hLib);
return 0;
}
vouloir c'est pouvoir

11

Commence par regarder quelle est l'adresse de base de ton port parallèle avec le gestionnaire de périphériques de Windows XP :
port.gif
Ici c'est 0x378 (la deuxième plage d'E/S et le canal DMA ne nous intéressent pas), c'est presque toujours le cas.

Profites-en pour désactiver la détection Plug-and-Play et choisir "Ne jamais utiliser d'interruption" dans l'onglet Paramètres du port. Si tu peux, règle également le type de port dans ton BIOS sur "SPP" ou "Bidirectionnal" au lieu de "ECP" ou "EPP". Si tu utilises un portable, désactive également la mise en veille automatique du port parallèle si elle existe. (Ce sont les réglages qui posent le moins de problèmes pour accéder directement au port parallèle).

Le plus simple pour commander la LED est de la brancher entre l'une des broches de données (D0 à D7) et la masse, avec une résistance de 330 ohms en série. Tu peux commander l'état des 8 lignes de données en écrivant un octet à l'adresse de base du port : les bits à 0 représentent un niveau logique bas, les bits à 1 représentent un niveau logique haut.

Il y a également un registre à l'adresse de base + 2 qu'il faut initialiser à 0 avant de commencer (je simplifie un peu, si tu veux avoir des explications détaillées, c'est expliqué dans le document en lien à la fin du post)

Par exemple, si tu as branché ta LED entre la broche D3 et la masse et que l'adresse de base est 0x378,

(oup32)(0x378 + 2, 0x00); initialise le port,
(oup32)(0x378, 1 << 3); allume ta LED et
(oup32)(0x378, 0 << 3); l'éteint.

*********************************************/Garde le début du programme (ce qui est avant /******************) et insère ton code après.


Si tu veux aller plus loin, il y a un PDF qui explique tout ça en détail : http://www.beyondlogic.org/spp/parallel.pdf.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

12

merci pour votre précieuse aide ; je vais m'y mettre tout de suit tongue
vouloir c'est pouvoir

13

Pas de quoi hehe
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

14

salut Mr Zerosquare


j'ai fais tous les réglages que tu m'avais décris et j'ai inséré le programme : il se compile mais quand je fais compile & run il y a un message qui me dis que le fichier a rencontré un problème et dois fermer
vouloir c'est pouvoir

15

Peux-tu poster le fichier .c ici ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

16

je n'ai rien fais j'ai seulement insérer
(oup32)(0x378 + 2, 0x00);
(oup32)(0x378, 1 << 3);
avant /***************************************************************/
et voilà fichier.c tromb Fichier joint : essai1.cpp
vouloir c'est pouvoir

17

Déjà il faut enlever la fin du programme qui ne sert à rien : tromb Fichier joint : essai1.cpp

Une fois que c'est fait, ça marche chez moi. Vérifie que tu utilises bien inpout32.dll qui se trouve dans ce fichier ZIP : http://logix4u.net/inpout32_source_and_bins.zip
(dossier inpout32_source_and_bins\binaries\Dll). Il y a une autre version de la DLL qui ne marche pas avec Windows NT/2000/XP, c'est peut-être celle-là que tu as.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

18

merciiiiiiiiiiiii infiniment ça marche bouquet bouquet bouquet bouquet bouquet bouquet bouquet
vouloir c'est pouvoir

19

Tant mieux wink
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

20

Kevin Kofler (./7) :
Effectivement, et si l'OS proposait un moyen meilleur pour accéder aux ports série et parallèle, mettons (exemple purement théorique, hein gni) un moyen d'accéder directement aux lignes en ouvrant un fichier représentant le matériel, en honorant les permissions mises sur le fichier, et avec un moyen de ne donner l'accès qu'à la personne qui a branché le matériel, ce ne serait pas nécessaire. Mais comme l'OS ne le propose pas, on n'a pas vraiment le choix. Enfin bon, un pilote spécialisé qui ne permet l'accès qu'au port parallèle LPT1 serait déjà beaucoup mieux niveau sécurité (mais aussi beaucoup moins réutilisable, c'est pour ça que ça ne court pas les rues).

Windows propose pas mal d'options pour le port série, qui n'est pas trop dûr à utiliser.
Le problème, c'est qu'il voit le port parallèle comme un port de périphérique plutôt qu'un port de communication...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

21

Le problème c'est que ce port à à priori été conçu afin de l'utiliser pour brancher des imprimantes, c'est à dire des périphériques, ce pour quoi il est toujours majoritairement utilisé wink
Du coup j'aurai plutôt tendance à considérer que le fautif là dedans n'est pas Windows... (Puis c'est pas le sujet, donc je n'irai pas plus loin)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

22

Sa LED est un périphérique.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

23

C'est sûr qu'on peut potentiellement appeler n'importe quoi qui se branche sur un port un "périphérique"... même quand c'est un chauffe-tasse USB tongue

Ça n'empêche pas qu'en général une application ne communique pas avec le hardware directement, mais par l'intermédiaire d'un driver.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo