bonsoir,
à un 16F877, je dois connecter deux moteurs pas à pas (portD), deux fins de courses (RC0 et RC1) et un bouton d'initialisation(RC2).
je voudrais avoir le fonctionnement suivant:
si j'appuies sur le bouton d'initialisation, les deux moteurs se mettent à tourner jusqu'à atteindre les fin de courses. et une fois la fin de course atteinte, la variable m'informant sur la position du moteur sera egale à 0 (cette variable peut prendre des valeurs entre 0 et 200).
voici ce que j'ai fait:
vous en pensez quoi? est ce que ça a des chances de marcher?Code:#include "p16F877.h" void delay_ms(char millisec) { OPTION=2; do { TMR0=0; clrwdt(); while(TMR0<125); } while(--millisec>0); } void step_dir(int a,int b,int c,int d,int pos){ int a,b,c,d,pos; if(a==0&b==1&c==0&d==1){a==0;b==1;c==1;d==0;} else if(a==0&b==1&c==1&d==0){a==1;b==0;c==1;d==0;} else if(a==1&b==0&c==1&d==0){a==1;b==0;c==0;d==1;} else if(a==1&b==0&c==0&d==1){a==0;b==1;c==0;d==1;} pos=pos+1; } void step_inv(int a,int b,int c,int d,int pos){ int a,b,c,d,pos; if(a==0&b==1&c==0&d==1){a==1;b==0;c==0;d==1;} else if(a==0&b==1&c==1&d==0){a==0;b==1;c==0;d==1;} else if(a==1&b==0&c==1&d==0){a==0;b==1;c==1;d==0;} else if(a==1&b==0&c==0&d==1){a==1;b==0;c==1;d==0;} pos=pos-1; } void init(int a,int b,int c,int d,int e,int f,int g,int h,int pos1,int pos2){ int a,b,c,d,e,f,g,h,pos1,pos2; while(RC0!=1){step_dir(a,b,c,d,pos1)} while(RC1!=1){step_dir(e,f,g,h,pos2)} pos1=0; pos2=0; } void main(void) { TRISD=0b00000000; TRISC=0b11100000; while(1){ PORTA=0b01010101; if(RC2==1){init(RD0,RD1,RD2,RD3,RD4,RD5,RD6,RD7,RC3,RC4);} } /*PORTA.0=0; TRISA = 0b00000000; while(1) { PORTA=0b00000101; delay_ms(500); PORTA=0b00000110; delay_ms(500); PORTA=0b00001010; delay_ms(500); PORTA=0b00001001; delay_ms(500); }*/ }
merci
-----