thibzult
Messages postés2Date d'inscriptiondimanche 7 mai 2006StatutMembreDernière intervention27 août 2007
-
7 mai 2006 à 12:07
Alcantornet
Messages postés89Date d'inscriptionmardi 8 février 2005StatutMembreDernière intervention14 novembre 2007
-
9 mai 2006 à 08:43
Bonjour,
Je dois d'abord vous dire que mes connaissances en programmations sont ... quasi nulles ! J'ai programmé il y a longtemps en GW-Basic puis Q-Basic, j'ai essayé un peu de turbo mais je me suis vite arrêté... par manque de temps !
Ce que j'essais de réaliser depuis longtemps, c'est une petite interface qui me permette, à partir du port parrallèle, de mesurer une résistance. (pour se faire une idée voir là : http://membres.lycos.fr/pierdieu/cappar/ca01004.htm Vous me direz que le port "jeu" fait ça trés bien ... certe mais la mesure n'est pas trés précise puisqu'elle se fait selon 256 niveaux !
Ce que je souhaite donc c'est votre aide pour programmer un petit logiciel qui fonctionnerais sur ce principe :
1) envoyer une impulsion sur une broche donnée du port
1 bis ) en même temps déclencher une base de temps (chrono)
2) scruter une autre broche donnée
3) dès que le seuil est atteint sur cette broche (+5V) arrêter le chrono.
Voilà...
ça semble assez simple... mais je suis helas absolument incapable de le faire !!
Aprés je me sert du temps de charge d'un condensateur que je met entre les deux broche en série avec la résistance à mesurer et j'en déduis facilement la résistance à partir du temps mesurer ... ça c'est de la physique et du calcul de base, c'est facile...
Moi c'est juste le programme que je n'arrive pas à faire ...
Si vous voulez vous faire une idée de ce que j'essai de faire rendez vous là. C'est un programme rédigé en turbo pascal que je n'ai pas réussi à adapter à mon antique Q-Basic... donc je suis dans l'impasse !!!
http://membres.lycos.fr/pierdieu/cappar/ca01004.htm
Merci d'avance pour vos réponses !!
A bientôt !
Thibault
/* 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;
/* Load the library */
hLib = LoadLibrary("inpout32.dll");
if (hLib == NULL) {
printf("LoadLibrary Failed.\n");
return -1;
}
/* get the address of the function */
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
if (inp32 == NULL) {
printf("GetProcAddress for Inp32 Failed.\n");
return -1;
}
if (oup32 == NULL) {
printf("GetProcAddress for Oup32 Failed.\n");
return -1;
}
short x;
int i;
/***** Write the data register */
i=0x3BC; // Address du port
x=0x00;
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);
system("pause");
// On libère la DLL
FreeLibrary(hLib);
return 0;
}
Je suis pas sûr que ça fonctionne parcque ce code était pour une version plus ancienne de la DLL, mais ça dois resembler.
Tout ceci c'est pour travailler sous windows, mais si tu tavail sous linux, c'est plus simple. Sous linux tous les ports sont représenté par des fichiers, donc il suffit de lire ou d'écrire sur le fichier /dev/lpt (ou /dev/lpt0).