Bonjour à tous,
Je suis nouveau ici, et après beaucoup de recherche c'est ici que j'ai décidé de demander de l'aide car je pense que c'est le forum le mieu fourni en info.
Je suis en première année d'IUT Génie Electrique et Informatique Industrielle,
et dans le cadre d'un projet, je dois programmer un microcontrôleur PIC16F84 pour la carte de commande d'un robot hexapod (qui marche sur 6 pattes).
( voir à cette vidéo de presentation pour se donner une idée http://www.youtube.com/watch?v=BgSSFjCD050)
J'ai utilisé PCW pour coder et compiler le programme, (j'avai devpic84c, mais en version d'essai...), et il ne permet pas (en tu cas pas a ma connaissance) de simuler le programme sur le logiciel. Après montage de la carte, et programmation du PIC, le test s'est révélé décevant.
Seul deux sortie sont figée à 1, et ceci n'est pas cohérent avec le programme.
Je me demande donc s'il ne peu pas y avoir une erreur avec le parametrage des entrées _ sorties...
Bilan des entrée sorties :
Ra0: Sortie
Ra1: Entrée
Ra2: Entrée
Ra3: Entrée
Ra4: Entrée
Rb0: Entrée
Rb1: Entrée
Rb2: Sortie
Rb3: Sortie
Rb4: Sortie
Rb5: Sortie
Rb6: Sortie
Rb7: Sortie
Voici le schéma électronique :
(pièce jointe redimensionnée)
Et le code :
Si quelqu'un pouvait m'aider... HELPCode://///////////////////// // INITIALISATIONS // /////////////////////// /* librairies */ #include <16F84.h> /* affectation des noms aux broches des porta et portb */ #define LED_rouge PIN_a0 #define marche PIN_a1 #define C_horaire PIN_a2 #define C_antihoraire PIN_a3 #define detect PIN_a4 #define Cp2 PIN_b0 #define Cp1 PIN_b1 #define D_droite PIN_b2 #define D_gauche PIN_b3 #define M_droit PIN_b4 #define Csmd PIN_b5 #define M_gauche PIN_b6 #define Csmg PIN_b7 /* type de l oscillateur */ #use delay(clock = 4000000) /* declarations des prototypes de fonctions */ void A_moteur(); void LED_capt(); void synchro(); void M_avant(); void T_horaire(); void T_antihoraire(); void attendre(int n); // retourne un entier n /* definition des variables */ char i,j; ///////////////////////////////////////////////////////////// // Debut du programme principale // ///////////////////////////////////////////////////////////// void main() { set_tris_a (0xFE); set_tris_b (0x03); while(1) { if(input(marche)) // commutateur c1 enclenche { if(input(detect)) // pas d obstacles detectes { A_moteur(); // arret des moteurs attendre(1); // attendre 1 seconde synchro(); // synchronisation des pattes attendre(1); while(!input(C_horaire) && !input(C_antihoraire) && input(detect)) { M_avant(); // debut de la marche avant LED_capt(); } if(input(C_horaire) && !input(C_antihoraire)) { A_moteur(); // arret des moteurs attendre(1); synchro(); attendre(1); while(input(C_horaire) && !input(C_antihoraire) && input(detect)) { T_horaire(); // debut de la rotation horaire LED_capt(); } } if(input(C_antihoraire) && !input(C_horaire)) { A_moteur(); // arret des moteurs attendre(1); synchro(); attendre(1); while(!input(C_horaire) && input(C_antihoraire) && input(detect)) { T_antihoraire(); // debut de la rotation antihoraire LED_capt(); } } } else { A_moteur(); // arret des moteurs attendre(1); synchro(); // synchronisation des pattes attendre(1); while(!input(detect) && input(D_gauche)) { LED_capt(); T_horaire(); } while(!input(detect) && input(D_droite)) { LED_capt(); T_antihoraire(); } } } } } //////////////////////////////////////////////////////////////////////// // Fonctions secondaires // //////////////////////////////////////////////////////////////////////// /* fonction de commande des LED IR */ void LED_capt() { for(i=0;i<23;++i) // train d impultion de 600 us { output_high(D_droite); output_low(D_gauche); delay_us (13); output_low(D_droite); delay_us (13); } delay_us(200); // GAP de 600 us egal au train d impultion delay_us(200); delay_us(200); for(j=0;j<23;++j) // train d impultion de 600 us { output_high(D_gauche); output_low(D_droite); delay_us (13); output_low(D_gauche); delay_us (13); } delay_us(200); // GAP de 600 us egal au train d impultion delay_us(200); delay_us(200); } /* fonction de synchronisation des pattes */ void synchro(){ while(!input(Cp2)) { output_high(M_gauche); output_low(M_droit); } while(!input(Cp1)) { output_high(M_droit); output_low(M_gauche); } } /* fonction de marche avant */ void M_avant(){ output_high(M_gauche); output_high(M_droit); } /* fonction de rotation horaire */ void T_horaire(){ output_high(M_droit); output_low(Csmd); output_high(M_gauche); output_high(Csmg); } /* fonction de rotation antihoraire */ void T_antihoraire(){ output_high(M_droit); output_high(Csmd); output_high(M_gauche); output_low(Csmg); } /* fonction d arret du robot*/ void A_moteur() { output_low(M_gauche); // arret du output_low(M_droit); // moteur } /* fonction de temporisation en seconde */ void attendre(int n) { for (;n!=0; n--) { delay_ms( 1000 ); } } // fin du texte![]()
-----