begin process at 2010 03 22 16:11:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Périphériques

 > COMMANDE DU PORT PARALLELE & MOTEUR PAS A PAS

COMMANDE DU PORT PARALLELE & MOTEUR PAS A PAS


 Information sur la source

Note :
8,33 / 10 - par 3 personnes
8,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Périphériques Niveau :Initié Date de création :06/09/2004 Vu :36 520

Auteur : yessine

Ecrire un message privé
Site perso
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

C’est un programme pour commander un moteur pas a pas par excellence, et de commander les différentes entrées & sorties de l’ordinateur.
C’est le début d’un projet  de commande des moteur, je suis entrains  de  modifier cette source pour une commande absolu même au niveau de transmission de mouvement , calcul vitesse ...
Je mettrais la suite du projet dans qlq jours ,elle contient environs 800 lignes


Je demande votre aide pour continuer ce projet surtout au niveau de lecture &écriture des fichier si par exemple on veut intégrer un tout petit compilateur ,par exemple :
On écrit dans un fichier :
        Move 4 //pour avacer 4 pas ou
        Move 4deg//pour avancer 4 degrés ou encore
        IN …
La question qui se pose comment lire move et si on trouve le mot move on lit la suite et si tout va bien on avance.

**VC++ 6.0**
        

Source

  • /***************************
  • * (c) YESSINE 30/08/2004 *
  • ***************************/
  • //FREE SOURCE CODE
  • /*
  • THE STEPPER CONTROL 1.0
  • */
  • #include "stdafx.h"
  • #include <stdlib.h>
  • #include <iostream>
  • #include <string>
  • #include <windows.h>
  • #include <conio.h>
  • #include <fstream>
  • using namespace std;
  • #define pport 0x378;
  • void move(int tm);
  • void move_to4(int step_number,int tm);
  • void move_to44(int step_number,int tm);
  • //void open_file();
  • int main(int argc, char* argv[])
  • {
  • string command;
  • int pval;
  • int stime;
  • int snbr;
  • printf("<<<<****>>>> & STEPPER CONTROL 1.0 & <<<<****>>>>\n");
  • Sleep(500);
  • printf(" MSDOS MODE \n");
  • Sleep(1000);
  • printf(" (c)YESSINE 2004 \n\n");
  • while(command !="exit")
  • {
  • cout<<"-";
  • cin>>command;
  • // OUT : X PORT
  • if ((command=="op")||(command=="OP")||(command=="Op")||(command=="OpenPort")||(command=="openport")||(command=="OPENPORT"))
  • {
  • unsigned short port_num;
  • int port_val;
  • printf("PORT NUM : ");
  • cin>>port_num;
  • printf("VALUE : ");
  • cin>>port_val;
  • _outp(port_num, port_val);
  • }
  • //HELP
  • if ((command=="help")||(command=="HELP")||(command=="Help"))
  • {
  • int ch ;
  • cout<<"[COMMAND]"<<endl;
  • cout<<" [PORT OUT ] [1]"<<endl;
  • cout<<" [PARALLELE PORT OUT ] [2]"<<endl;
  • cout<<" [MOVING THE STEPPER1] [3]"<<endl;
  • cout<<" [MOVING THE STEPPER2] [4]"<<endl;
  • cout<<" [RETURN ] [5]"<<endl<<endl;
  • cout<<">";
  • cin>>ch;
  • switch(ch)
  • {
  • case 1:
  • cout<<"Syntax : OpenPort(port number ,value)"<<endl;
  • cout<<" : OPENPORT(port number ,value)"<<endl;
  • cout<<" : openport(port number ,value)"<<endl;
  • cout<<" : OP(port number ,value)"<<endl;
  • cout<<" : Op(port number ,value)"<<endl;
  • cout<<" : op(port number ,value)"<<endl;
  • break;
  • case 2:
  • cout<<"Syntax : ppo(value)"<<endl;
  • cout<<" : PPO(value)"<<endl;
  • cout<<" : Ppo(value)"<<endl;
  • cout<<" : ParallePortOut(value)"<<endl;
  • cout<<" : paralle_port_out(value)"<<endl;
  • break;
  • case 3:
  • cout<<"Syntax : move(time_millisecond)"<<endl;
  • cout<<" : Move(time_millisecond)"<<endl;
  • cout<<" : MOVE(time_millisecond)"<<endl;
  • break;
  • case 4:
  • cout<<"Syntax : move_to(Step_number,time_millisecond)"<<endl;
  • cout<<" : Move_To(Step_number,time_millisecond)"<<endl;
  • cout<<" : MOVE_TO(Step_number,time_millisecond)"<<endl;
  • break;
  • case 5:break;
  • default:break;
  • }
  • //open_file();
  • }
  • // OUT : PARALLE PORT
  • if ((command=="ppo")||(command=="PPO")||(command=="Ppo"))
  • {
  • printf("OUT NUM [0..1..2..4..8..16..32..64..128]: ");
  • cin>>pval;
  • _outp(0x378, pval);
  • }
  • // OUT : PARALLELE PORT
  • if ((command=="ParallePortOut")||(command=="paralle_port_out"))
  • {
  • printf("OUT NUM [0..1..2..4..8..16..32..64..128]: ");
  • cin>>pval;
  • _outp(0x378, pval);
  • }
  • // STOP THE CURRENT ACTION
  • if ((command=="stop")||(command=="Stop")||(command=="STOP"))
  • {
  • _outp(0x378, 0);
  • printf("STOPPED!");
  • }
  • // GET PORT
  • /*if ((command=="in")||(command=="In")||(command=="IN"))
  • {
  • DWORD port_number1[5];
  • printf("PORT NUM : ");
  • cin>>port_number1;
  • cout<<_inp(port_number1);
  • }*/
  • // MOVING 4 STEPS
  • if ((command=="move")||(command=="Move")||(command=="MOVE"))
  • {
  • printf("SLEEPING TIME : ");
  • cin>>stime;
  • printf("MOVING . . . . .\n");
  • move(stime);
  • }
  • //MOVING X STEPS
  • if ((command=="move_to")||(command=="Move_TO")||(command=="MOVE_TO"))
  • {
  • printf("STEP NUM : ");
  • cin>>snbr;
  • printf("SLEEPING TIME : ");
  • cin>>stime;
  • printf("MOVING . . . . .\n");
  • if (snbr<=4)
  • {
  • move_to4(snbr , stime);
  • }
  • if (snbr>4)
  • {
  • move_to4(snbr,stime);
  • move_to44(snbr , stime);
  • }
  • }
  • }
  • return 0;
  • }
  • //MOVING 4 STEPS
  • void move_to4(int step_number,int tm)
  • {
  • int i;
  • for(i=1;i<=step_number;i++)
  • {
  • switch(i)
  • {
  • case 1:
  • Sleep(tm);
  • _outp(0x378, 1);
  • break;
  • case 2:
  • Sleep(tm);
  • _outp(0x378, 2);
  • break;
  • case 3:
  • Sleep(tm);
  • _outp(0x378, 4);
  • break;
  • case 4:
  • Sleep(tm);
  • _outp(0x378, 8);
  • break;
  • }
  • }
  • }
  • //MOVING STEP-4
  • void move_to44(int step_number,int tm)
  • {
  • int i;
  • for(i=1;i<=step_number-4;i++)
  • {
  • switch(i)
  • {
  • case 1:
  • Sleep(tm);
  • _outp(0x378, 1);
  • break;
  • case 2:
  • Sleep(tm);
  • _outp(0x378, 2);
  • break;
  • case 3:
  • Sleep(tm);
  • _outp(0x378, 4);
  • break;
  • case 4:
  • Sleep(tm);
  • _outp(0x378, 8);
  • break;
  • case 5:
  • Sleep(tm);
  • _outp(0x378, 1);
  • break;
  • case 6:
  • Sleep(tm);
  • _outp(0x378, 2);
  • break;
  • case 7:
  • Sleep(tm);
  • _outp(0x378, 3);
  • break;
  • case 8:
  • Sleep(tm);
  • _outp(0x378, 4);
  • break;
  • default:printf("MAX SETEPS = 12 !!");
  • break ;
  • }
  • }
  • }
  • void move(int tm)
  • {
  • int i;
  • for(i=1;i<=4;i++)
  • {
  • switch(i)
  • {
  • case 1:
  • Sleep(tm);
  • _outp(0x378, 1);
  • break;
  • case 2:
  • Sleep(tm);
  • _outp(0x378, 2);
  • break;
  • case 3:
  • Sleep(tm);
  • _outp(0x378, 4);
  • break;
  • case 4:
  • Sleep(tm);
  • _outp(0x378, 8);
  • break;
  • }
  • }
  • }
  /***************************
   * (c) YESSINE 30/08/2004  *
   ***************************/

//FREE SOURCE CODE

/*
     THE STEPPER CONTROL 1.0
	                          */

#include "stdafx.h"
#include <stdlib.h>                                                      
#include <iostream>				
#include <string>	
#include <windows.h>				
#include <conio.h>
#include <fstream>	
					
using namespace std;			
	
#define pport 0x378;


void move(int tm);
void move_to4(int step_number,int tm);
void move_to44(int step_number,int tm);
//void open_file();
				
int main(int argc, char* argv[])
{

	string command;
	int pval;
	int stime;
	int snbr;
	printf("<<<<****>>>>   & STEPPER CONTROL 1.0 &   <<<<****>>>>\n");
	Sleep(500);
	printf("                     MSDOS MODE                      \n");
	Sleep(1000);
	printf("                   (c)YESSINE 2004                   \n\n");
	
    while(command !="exit")
	{
	cout<<"-";
	cin>>command;


	   // OUT : X PORT
	  if ((command=="op")||(command=="OP")||(command=="Op")||(command=="OpenPort")||(command=="openport")||(command=="OPENPORT"))
	  { 
        unsigned short port_num;
		int port_val;
        printf("PORT NUM : ");
		cin>>port_num;
		printf("VALUE : ");
		cin>>port_val;
		_outp(port_num, port_val);
	  }

      //HELP
	  if ((command=="help")||(command=="HELP")||(command=="Help"))
	  { 
        int ch  ;
        cout<<"[COMMAND]"<<endl;
		cout<<"  [PORT OUT           ] [1]"<<endl;
        cout<<"  [PARALLELE PORT OUT ] [2]"<<endl;
		cout<<"  [MOVING THE STEPPER1] [3]"<<endl;
		cout<<"  [MOVING THE STEPPER2] [4]"<<endl;
		cout<<"  [RETURN             ] [5]"<<endl<<endl;
		cout<<">";
		cin>>ch;
		  switch(ch)
		  {
		  case 1:
			  cout<<"Syntax : OpenPort(port number ,value)"<<endl;
			  cout<<"       : OPENPORT(port number ,value)"<<endl;
			  cout<<"       : openport(port number ,value)"<<endl;
			  cout<<"       : OP(port number ,value)"<<endl;
			  cout<<"       : Op(port number ,value)"<<endl;
			  cout<<"       : op(port number ,value)"<<endl;
			  break;
		  case 2:
			  cout<<"Syntax : ppo(value)"<<endl;
			  cout<<"       : PPO(value)"<<endl;
			  cout<<"       : Ppo(value)"<<endl;
			  cout<<"       : ParallePortOut(value)"<<endl;
			  cout<<"       : paralle_port_out(value)"<<endl;
			  break;
		  case 3:
			  cout<<"Syntax : move(time_millisecond)"<<endl;
			  cout<<"       : Move(time_millisecond)"<<endl;
			  cout<<"       : MOVE(time_millisecond)"<<endl;
			  break;
		  case 4:
			  cout<<"Syntax : move_to(Step_number,time_millisecond)"<<endl;
			  cout<<"       : Move_To(Step_number,time_millisecond)"<<endl;
			  cout<<"       : MOVE_TO(Step_number,time_millisecond)"<<endl;
			  break;
		  case 5:break;

		  default:break;

		  }
		//open_file();
		
	  }

      // OUT : PARALLE PORT
	  if ((command=="ppo")||(command=="PPO")||(command=="Ppo"))
	  { 
          
        printf("OUT NUM [0..1..2..4..8..16..32..64..128]: ");
		cin>>pval;
		_outp(0x378, pval);
	  }


	  // OUT : PARALLELE PORT	  
	  if ((command=="ParallePortOut")||(command=="paralle_port_out"))
	  {
        printf("OUT NUM [0..1..2..4..8..16..32..64..128]: ");
		cin>>pval;
		_outp(0x378, pval);
	  }

       // STOP THE CURRENT ACTION
	   if ((command=="stop")||(command=="Stop")||(command=="STOP"))
	  { 
          
		_outp(0x378, 0);
		printf("STOPPED!");

	  }

      // GET PORT
	  /*if ((command=="in")||(command=="In")||(command=="IN"))
	  {
		 DWORD port_number1[5]; 
	
        printf("PORT NUM : ");
		cin>>port_number1;
		cout<<_inp(port_number1);
	  }*/
		  	  
	  // MOVING 4 STEPS
	  if ((command=="move")||(command=="Move")||(command=="MOVE"))
	  {
        printf("SLEEPING TIME : ");
		cin>>stime;
		printf("MOVING . . . . .\n");
		move(stime);
	  }
      //MOVING X STEPS
	  if ((command=="move_to")||(command=="Move_TO")||(command=="MOVE_TO"))
	  {
        printf("STEP NUM : ");
		cin>>snbr;
		printf("SLEEPING TIME : ");
		cin>>stime;
		printf("MOVING . . . . .\n");
		   

		if (snbr<=4)
		   {
			move_to4(snbr , stime);
		   }
		if (snbr>4)
		   {
            move_to4(snbr,stime);
	    	move_to44(snbr , stime);
		   }
	  }
	}

	return 0;
}

//MOVING 4 STEPS
void move_to4(int step_number,int tm)
{
	int i;
for(i=1;i<=step_number;i++)
{

   switch(i)
   {
    case 1:
    	 Sleep(tm);
    	 _outp(0x378, 1);
    	 break;
    case 2:
    	 Sleep(tm);
    	_outp(0x378, 2);
    	break;
    case 3:
    	Sleep(tm);
    	_outp(0x378, 4);
    	break;
    case 4:
    	Sleep(tm);
    	_outp(0x378, 8);
    	break;
   }
}
}

//MOVING STEP-4
  void move_to44(int step_number,int tm)
{
	  int i;
for(i=1;i<=step_number-4;i++)
{

   switch(i)
   {
    case 1:
    	 Sleep(tm);
    	 _outp(0x378, 1);
    	 break;
    case 2:
    	 Sleep(tm);
    	_outp(0x378, 2);
    	break;
    case 3:
    	Sleep(tm);
    	_outp(0x378, 4);
    	break;
    case 4:
    	Sleep(tm);
    	_outp(0x378, 8);
    	break;
	case 5:
    	Sleep(tm);
    	_outp(0x378, 1);
    	break;
	case 6:
    	Sleep(tm);
    	_outp(0x378, 2);
    	break;
	case 7:
    	Sleep(tm);
    	_outp(0x378, 3);
    	break;
	case 8:
    	Sleep(tm);
    	_outp(0x378, 4);
    	break;
	default:printf("MAX SETEPS = 12 !!");
	      break ;

   }
}
}
void move(int tm)
{
int i;


for(i=1;i<=4;i++)
{

   switch(i)
   {
    case 1:
    	 Sleep(tm);
    	 _outp(0x378, 1);
    	 break;
    case 2:
    	 Sleep(tm);
    	_outp(0x378, 2);
    	break;
    case 3:
    	Sleep(tm);
    	_outp(0x378, 4);
    	break;
    case 4:
    	Sleep(tm);
    	_outp(0x378, 8);
    	break;
   }
}
}



 Sources de la même categorie

Source avec Zip Source avec une capture [DEV-C++] GESTION DU PORT PARALLÈLE par victorcoasne
Source avec Zip Source avec une capture FAIRE GLISSER LA SOURIS par shorzy
Source avec Zip COMMUNICATION RS232 VIA PORT COM par MadMax1024
Source avec Zip Source avec une capture EXTINCTION ET REDEMARRAGE DE VOTRE MONITEUR À UNE HEURE PRÉC... par Yost
ÉTEINDRE ECRAN SOUS WINDOWS par kiki67100

Commentaires et avis

Commentaire de supergrey le 08/09/2004 09:01:03

Si tu veux je peux t'aider sur la lecture ecriture de fichier par contre ou branches-tu le moteur ? est-ce qu'on peut faire fonctionner un moteur normal (non pas-a-pas) ? et est-ce qu'il y a des risque pour la carte mère (car je crois qu'un moteur génère des pics de tension a ses bornes lorsqu'il est alimenter)?
Merci!

Commentaire de yessine le 10/09/2004 18:43:15

Salut
je serais tres heureux si tu m'aide le plus vite possible.
un moteur pas a pas, ne serait pas connecté directement au port parallele mais a travers un autre circuit de commande et de protection

Commentaire de supergrey le 10/09/2004 19:51:04

Ben qu'est-ce que tu veux savoir?
Pour travailler avec des fichiers tu dois inclure fstream.h dans ton programme. Pour manipuler les chaine de caractères math.h, stdio.h et string.h peuvent t'etre utile aussi.

Un petit exemple:

ofstream fileout("fichier.txt");   //ouvre le fichier en lecture
char ch[256];       //déclare une chaine de caractère
sprintf(ch,"rotate",2.5f);       //place "rotate" dans la chaine
fileout<<ch;        //ecrit la chaine dans le fichier
fileout<<"\n";       //va a la ligne dans le fichier
sprintf(ch,"%0.2f",2.5f);       //place "2.50" dans la chaine
fileout<<ch;        //ecrit la chaine dans le fichier
fileout<<"\n";       //va a la ligne dans le fichier
fileout.close();       //ferme le fichier

un autre exemple:

ifstream filein("fichier.txt");     //ouvre le fichier en lecture

while(filein.getline(ch,256))   //parcour tout le fichier ligne par ligne
{
if (strstr(ch,"rotate")) //la ligne contien rotate
{
filein.getline(ch,256);   //li la ligne suivante
float agl=float(atof(ch));      //récupere la valeur (apres t'en fait ce que tu veux)
//ici faire tourner le moteur d'un angle de 2.5°
}
}
filein.close();



déja tu peux commencer avec ca, si t'a d'autre question...

Par contre la fonction _outp(0x378, 0); génére une erreur sur mon pc.   Sinon la carte qu'il faut mettre en sortie pour protéger le pc elle se trouve a l'achat ou il faut etre electronicien?

Commentaire de yessine le 25/09/2004 15:17:18

merci "supergrey".
j'ai presque terminé le programme, il sera capable de calculer la vitesse d'entrée ou de sortie du moteur avec des engrenages ou un systeme polie courroie.

Commentaire de nawalkh le 26/11/2004 13:16:49

bjr a tout le monde mon projet est : serveillance par cameras et mnt j'ai besoin de pogramme de commande d'un moteur pas a pas (port parallele) et merci d'avance

Commentaire de csamastro le 20/05/2005 11:50:57

bonjour a tous
je commence une appli pour piloter moteur pas a pas monture astronomique
il existe des montage de carte de puissance + interface port //
dans la version du code de yessine on ne peu pilote 1 seul moteur.on peu sortir sur 1
seul bit du port le direction et sur l autre bit la frequence d avance de pas d ou sur le port
// avec des cartes de puissances autour de l297 et l298 on pilote 4 axes(4*2bit)
voila j ai fais les protos des cartes ,et la je commence la partie soft en vc++
d abord en version msdos puis en sous windows;
je vous tiendrai au courant de mes evolutions.

Commentaire de laverdanny le 25/07/2005 22:34:30

salut
juste un ptit mot, il vaut mieux prevoir une rampe de vitesse (acceleration constante et reglable) car les moteurs pas-a-pas ont uneinertie très faible et tendent donc à bousillier la mécanique très rapidement ...

Commentaire de MaX271 le 20/10/2005 14:12:21

c'est pas tellement que les moteurs PaP unt une inertie très faible, même si elle est généralement inférieure à celle des moteurs DC, mais c'est surtout que leur accélération peut être fulgurante, tout comme leur couple à cause de leur bobinage...
je n'en sais pas vraiment plus, mais je crois me souvenir que le couple et l'accélération sont fonction du nombre de pas...
Mais ce qui est sur, c'est qu'un PaP mal géré peut bousiller la carte de controle (tt comme l'alimentation) et la mécanique, alors il faut veiller à ne pas aire d'accélérations trop brutales pour prolonger la vies de l'ensemble.

Sinon, cette source est intéressante, merci! je pense que je vais me pencher desus et la modifier pour controler 2 PaP en même temps par port //, comme 1 PaP bipolaire ne nécessite que 4 fils ;)

Commentaire de yagoubi4 le 09/05/2007 12:54:10

salut yassine si t ve ux bien mettre le programme complet car je pense que ya un fichier qui manque
"stdafx.h"

merci

Commentaire de papisdia le 03/05/2009 14:38:05

Bonjour j'aprécis bien votre gentillesse.
Cette source semble bien pouvoir regler mon probleme, je veux utiliser le port parallele mais les instructions _inp(adr); et _outp(adr,valeur) me causent quelques ennuis.
J'ai telechargé la dll inpout32.dll. Cependant ce probleme  perciste encore, je veux utiliser le c à la place du c++ qui n'est pas encore de mon niveau.
Merci d'avance.

 Ajouter un commentaire




Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales