Répondre à la discussion
Affichage des résultats 1 à 23 sur 23

Programme en C pour PIC16F84



  1. #1
    jordan007

    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 :

    Code:
    ///////////////////////
    //  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
    Si quelqu'un pouvait m'aider... HELP

    -----
    Images attachées Images attachées
    Dernière modification par HULK28 ; 10/06/2007 à 20h20. Motif: Redimensionnement de l'image trop grande et rendant illisible le post

  2. Publicité
  3. #2
    invite03481543

    Re : Programme en C pour PIC16F84

    Salut,

    je ne vois aucune résistance de pull-up sur tes ports...
    Que représente co1, co2....?
    @+

  4. #3
    jordan007

    Re : Programme en C pour PIC16F84

    Merci pour cette réponse,

    Co1, Co2 etc...representent des interupteurs.
    Il envoients juste un état 1 dans keurs broches respective.

    Il ai nécéssaire d'avoir des resistance de pull up pour les entrée ?

  5. #4
    invite03481543

    Re : Programme en C pour PIC16F84

    Lorsque tes interrupteurs sont ouverts il est nécessaire dans ton cas de fixer tes entrées à un niveau 0, donc il te faut placer des "pull down" ou résistances reliées à la masse.

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    jordan007

    Re : Programme en C pour PIC16F84

    Merci pour ces réponse.
    J'ai u la soutenance de mon projet il y a une semaine et demi.
    La note obtenue a été un 20/20.

    Merci poour cette aide qui me permetra de terminer le circuit commande.

    ++

    Jordan.

  9. #6
    just-a-man-but

    Re : Programme en C pour PIC16F84

    Citation Envoyé par jordan007 Voir le message
    Merci pour ces réponse.
    J'ai u la soutenance de mon projet il y a une semaine et demi.
    La note obtenue a été un 20/20.

    Merci poour cette aide qui me permetra de terminer le circuit commande.

    ++

    Jordan.
    salut je suis un éléve au terminale et j'ai un PPE c'est la barriere automatique d'un parking commendé par un PIC16F84 .
    le systéme fonctionne comme se suit:
    apres le tapage du code exacte avant l'entré du vihécule au parking , le moteur sera actionné pour lever la barriére , puis notre vihécule sera detecté aprés son dépassage de la barrivr par un detecteur emeteur-recepteur pour faire descendre la barriere du nouveau .
    je veux savoir tout ce quil me faut sur ce projet comme le schema de liaison du montage et le code de programation du pic avec le max des explication car le ne reste po trop de temp pour que je presente mon projet et moi j'ai rien trouver de resultat encore .
    merci d'avance .

  10. Publicité
  11. #7
    invite03481543

    Re : Programme en C pour PIC16F84

    Salut,

    et avec tout ça tu veux pas un mars aussi?

    Un PPE est un travail personnel demandé, si tu veux de l'aide d'accord, mais avant il faut montrer ce que tu as déjà fait.
    Jordan007 lui a fait un travail, puis il est venu demander de l'aide, c'est comme ça que ça fonctionne ici.
    @+

  12. #8
    just-a-man-but

    Re : Programme en C pour PIC16F84

    cafait 7 mois que je travail sur ce projet j'ai terminer l'analyse interne et externe du systeme. apart ca j'ai rien trouve car ya pas des sources et j'ai des problems que je rencontre avec mon proffesseur DEBUTANT et a tes info c'est la premiere fois que je demmande de l aide sur un forum alor si j'ai venue pour vous demmande de l'aide c par ce que je me suis desespere.
    et j'aime pas trop le mars tu peu la garder pour toi merci en tout cas mais j'att encore de l'aide merci d'avance .

  13. #9
    jorg1n

    Re : Programme en C pour PIC16F84

    Bonjour,...
    il y a une petite chose qui m'interpelle...
    je veux savoir tout ce quil me faut sur ce projet comme le schema de liaison du montage et le code de programation du pic avec le max des explication car le ne reste po trop de temp pour que je presente mon projet et moi j'ai rien trouver de resultat encore .
    et
    cafait 7 mois que je travail sur ce projet
    ... Tu dois bien avoir déjà fais quelquechose!!
    on peut pas tout faire à ta place...alors met déja ce que tu as fait...
    bonne journée

  14. #10
    just-a-man-but

    Re : Programme en C pour PIC16F84

    j'ai que une analyse interne et externe du systeme qui comporte la bete a cornes + le diagramme fonctionnel + le diagramme FAST et le SADT si vous voulez que je presente ceci ya po de problem mais je vous le jurr que c tout ce que j'ai trouver moi et mon groupe car j'ai pas des sources ou je cherche apart l internet si nn ya rien . meme les proffesseurs nous donnent pas beaucoup de l'aide car elle ne sachent rien du tt.
    au moin donner moi des truk pour que je commence a travailler j'ai vraiment besoin je ne demmande po de toi de me faire tout le travaille. merci

  15. #11
    just-a-man-but

    Re : barriere automatique commander par pic16F84

    comment deja je peu attacher un fichier de format word avec ma reponse ?

  16. #12
    invite03481543

    Re : Programme en C pour PIC16F84

    Il faut le poster en Zip.
    @+

  17. Publicité
  18. #13
    just-a-man-but

    Re : Programme en C pour PIC16F84

    et comment je peu le poster en Zip ?

  19. #14
    invite03481543

    Re : Programme en C pour PIC16F84

    Tu cliques sur "répondre", tu tapes un message, tu cliques sur le trombonne -> une fenêtre apparait "Gérer les pièces jointes", tu as en haut de cette fenêtre "ajouter un fichier de votre ordinateur" et "parcourir", tu cliques sur "parcourir", tu vas chercher ton fichier que tu as préalablement zippé, tu le sélectionnes, tu fais "ouvrir", il apparait dans la case blanche à gauche de "parcourir", tu fais "uploader".

    En bas de la fenêtre "Gérer les pièces jointes" tu as le détail des fichiers uploadables ainsi que leurs tailles maxi.
    @+

  20. #15
    umfred

    Re : Programme en C pour PIC16F84

    je pense aussi qu'un seul post sur le sujet serait plus simple pour bien suivre l'évolution du problème inutile de poster à plusieurs endroit la même question

  21. #16
    just-a-man-but

    Re : Programme en C pour PIC16F84

    voila mon travail
    Fichiers attachés Fichiers attachés

  22. #17
    Niluje__

    Re : Programme en C pour PIC16F84

    Je viens de pouvoir accèder à ton fichier attaché.

    Tu ne mentionnes pas dans ton analyse fonctionnelle, sur le schéma, l'émetteur et le récepteur permettant de détecter qu'un véhicule est présent ou non ?

  23. #18
    just-a-man-but

    Re : Programme en C pour PIC16F84

    Bonjour
    merci d'avoir accédée á ma analyse fonctionnelle pour m'aider.
    si j'ai bien compris votre question moi j'ai voulue utilisée un capteur magnétique au premier mais j'ai changer d'avis car un emeteur récepteur est mieux mais j'ai oublier de changer le dans l'analyse fonctionnelle, et ce détecteur permet de detecter un seul véhicule á la fois il faut 2capteurs de ce type un avant et l'autre après la barrière.
    en ce moment je travail sur le schéma électronique du montage avec le pic et tout les autres composants mais il y a un membre qui m'as donnée une bonne idee c'est de séparer le projet á 3 parties car il est composée de 3 chaines : Acquérir traiter communiquer ---alimenter distribuer convertir---transmise comme ça je peu simplifier le travail car la partie adc et T est facile Bonjour
    merci d'avoir accédée á ma analyse fonctionnelle pour m'aider.
    si j'ai bien compris votre question moi j'ai voulue utilisée un capteur magnétique au premier mais j'ai changer d'avis car un emeteur récepteur est mieux mais j'ai oublier de changer le dans l'analyse fonctionnelle, et ce détecteur permet de detecter un seul véhicule á la fois il faut 2capteurs de ce type un avant et l'autre après la barrière.
    en ce moment je travail sur le schéma électronique du montage avec le pic et tout les autres composants mais il y a un membre qui m'as donnée une bonne idee c'est de séparer le projet á 3 parties car il est composée de 3 chaines : Acquérir traiter communiquer ---alimenter distribuer convertir---transmise comme ça je peu simplifier le travail car la partie ADC et T est simple mais ce me bloque c'est la partie ATC sur tout que je ne suis pas trop fort dans cette matiére .

  24. Publicité
  25. #19
    just-a-man-but

    Re : Programme en C pour PIC16F84

    salut
    comment je peu transformer un signal analogique crée par un capteur emeteur récepteur en un signal de type tension pour qu'il soit accepter par un pic16f84 ? et de quel montage s'agit il ?

  26. #20
    just-a-man-but

    Re : Programme en C pour PIC16F84

    salut.
    je cherche comment coupler un capteur émetteur-récepteur avec un PIC16F84
    merci d'avance

  27. #21
    scapa

    Re : Programme en C pour PIC16F84

    salut,
    le programme pic pr ce projet et mercii

  28. #22
    carlauzizo6

    Re : Programme en C pour PIC16F84

    SVP , j'ai besoin d'aide pour simuler sur ISIS un decompteur BCD qui va 799 à 000 mais mon programme ne marche pas et j'arrive pas à trouvé la solution.
    Voici mon programme:

    LIST p=16F84A
    #include <p16F84A.inc>
    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
    ;-----------------------------------------------------------------

    CBLOCK 0x0C
    xu:1
    xd:1
    xc:1
    x:1
    ENDC
    ;-----------------------------------------------------------------
    org 0 ;debut
    goto dd
    ;-----------------------------------------------------------------
    org 4 ;zone interruption
    btfss INTCON,INTF
    goto d1
    incf xu,F
    movlw d'10'
    subwf xu,W
    btfss STATUS,Z
    goto d1
    clrf xu
    incf xd,F
    movlw d'10'
    subwf xd,W
    btfss STATUS,Z
    goto d1
    clrf xd
    incf xc,F
    movlw d'10'
    subwf xu,W
    btfss STATUS,Z
    goto d1
    clrf xc

    d1 bcf INTCON,INTF
    retfie
    dd clrf xu
    clrf xd
    clrf xc

    bsf STATUS,RP0
    clrf TRISA
    movlw b'00000001'
    movwf TRISB
    bcf STATUS,RP0

    bsf INTCON,INTE
    bsf STATUS,RP0
    bsf OPTION_REG,INTEDG
    bcf STATUS,RP0
    bsf INTCON,GIE

    d2

    movf xd,W
    movwf PORTA
    movf xu,W
    movwf x
    rlf x,F
    rlf x,F
    rlf x,F
    rlf x,W
    movwf PORTB

    movf xc,W
    rlf x,F
    movwf PORTB
    goto d2

    END
    Compteur.jpg

  29. #23
    freepicbasic

    Re : Programme en C pour PIC16F84

    movf xd,W
    movwf PORTA
    movf xu,W
    movwf x
    rlf x,F
    rlf x,F
    rlf x,F
    rlf x,W
    andlw 0xF0
    ANDWF xc,w
    movwf PORTB
    A+, pat

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/03/2007, 18h48
  2. Programme pour convertir du .mid (et pour les prolonger) ?
    Par shokin dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 21/04/2006, 22h10
  3. aide pour pic16f84 et dcf77
    Par tiresias dans le forum Électronique
    Réponses: 0
    Dernier message: 04/04/2006, 16h30
  4. Programme pour PIC10F206
    Par michel5002 dans le forum Électronique
    Réponses: 6
    Dernier message: 28/04/2005, 13h52
  5. programme pour pic16f84 pour une centrale d'alarme
    Par yacen dans le forum Électronique
    Réponses: 3
    Dernier message: 25/01/2005, 10h06
Découvrez nos comparatifs produits sur l'informatique et les technologies.