IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

Programme Tripode C


Sujet :

Embarqué

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Programme Tripode C
    Bonjour à vous,


    Alors voilà je suis élève en STI2D et donc je suis en train de finaliser mon projet de fin d’année mais un problème me vient à moi ! Alors voilà en complètement mon programme il y a certains trous que je n'arrive pas à combler... notamment les while et if auriez-vous des propositions ou une aide à m'apporter pour m'aider dans mon projet...

    Merci à vous

    Nom : Programme 1.PNG
Affichages : 1204
Taille : 29,2 Ko

    Nom : Programme 2.PNG
Affichages : 1005
Taille : 21,8 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    sbit  TRIPODE  at  RC2_bit;
    sbit  TRIPODE_Direction  at    TRISC2_bit;
    sbit  A  at  RC4_bit;
    sbit  A_Direction  at    TRISC4_bit;
    sbit  B  at  RC5_bit;
    sbit  B_Direction  at    TRISC5_bit;
    sbit  Passage_OK  at  RC0_bit;
    sbit  Passage_OK_Direction  at    TRISC0_bit;
    
    sbit  CDE_ELECTROAIMANT  at  RA0_bit;
    sbit  CDE_ELECTROAIMANT_Direction  at    TRISA0_bit;
    
    
    void main() {
         unsigned  char Fin_Cycle;
         /************ Configuration des ports utilisés en I/O numériques  ********/
         ANSEL = 0;
         CMCON0 = 7;
         /********** Configuration (sens de transfert) des entrées numériques *****/
         A_Direction = ?;
         B_Direction = ?;
         TRIPODE_Direction = ?;
         /********** Configuration (sens de transfert) des sorties numériques *****/
         CDE_ELECTROAIMANT_Direction = TRISA0_bit;
         Passage_OK_Direction = TRISC0_bit;
         
         CDE_ELECTROAIMANT = RA0_bit?;
         Passage_OK = TRISC0_bit;
         Delay_ms(2000);
    
    
        while(1){
           Fin_Cycle = 0;
           while(TRIPODE == RC2_bit);
           do{
              CDE_ELECTROAIMANT = RA0_bit;
              while (!(A ==  && B == );         // Attente de la Phase 1
              CDE_ELECTROAIMANT = RA0_bit;               // Deverouillage
              while (A ==  && B == );            // Phase 1 attente phase suivante
              
              if (!(A == ? && B == ?))       // Test verification passage à la phase 2
              {
                 continue;                // Retour au verouillage
              }
              while (A == ? && B == ?);     // Phase 2 attente phase suivante
              
              if (!(A == ? && B == ?))       // Test verification passage à la phase 3
              {
                 continue;                // Retour au verouillage
              }
              while (A == ? && B == ?);   // Phase 3 attente phase suivante
              
              if (!(A == ? && B == ?))       // Test verification passage à la phase 1
              {
                 continue;                // Retour au verouillage
              }
              Fin_Cycle = 1;
           }while (??);
           CDE_ELECTROAIMANT = ?;
           Passage_OK = ?;
           Delay_ms(1000);
           Passage_OK = ?;
         }
    
    }

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut Valentin,
    Franchement, comment veux tu que quelqu'un t'aide sans le contexte, sans le schéma électronique, sans des explications sur comment tu veux faire, sans savoir ce que ça doit faire, sans savoir sur quel microcontrôleur tu travailles, sans savoir avec quel compilateur tu bosses ? Personne n'a de boule de cristal ici.

    Vu la syntaxe en haut de ton programme, tu utilises MikroC ?
    Lorsque je vois TRISC je pense que tu bosses sur un microcontrôleur PIC ?

    Pour info, je ne maîtrise pas MikroC mais je sais qu'il utilise une syntaxe particulière qui sort du langage C (le type sbit ou bit ou le mot clé atetc) alors que le langage C a tout ce qui lui faut en natif pour réaliser la même chose, bref....



    Lorsque je lis ça :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /********** Configuration (sens de transfert) des entrées numériques *****/
         A_Direction = ?;
         B_Direction = ?;
         TRIPODE_Direction = ?;
    Le commentaire dit que ceux sont des entrées, je sais que sur un microcontrôleur PIC les registres TRISx servent a définir le sens des broches (1 = entrée ou 0 = sortie) voir datasheet de ton microcontrôleur.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
         /********** Configuration (sens de transfert) des entrées numériques *****/
         A_Direction = 1;
         B_Direction = 1;
         TRIPODE_Direction = 1;
         /********** Configuration (sens de transfert) des sorties numériques *****/
         CDE_ELECTROAIMANT_Direction = 0;
         Passage_OK_Direction = 0;
         CDE_ELECTROAIMANT = 0;
         Passage_OK = 0;

    Je mets les sorties CDE_ELECTROAIMANT et Passage_OK en sortie et à 0 logique mais ça dépend complétement de l'électronique qu'il y a connecté dessus (sans schéma je peux pas deviner si la condition d'initialisation est 1 ou 0)

    Pour le reste, il faut qu'on sache ce que c'est sensé faire pour te dire comment le faire. C'est quoi la phase 1, elle consiste en quoi ? Et puis c'est quoi un Tripode ? L'électroaimant il sert a quoi ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Salut a toi ,

    Je tiens d'abord à te remercier pour ta patience et ta gentillesse ! Alors oui j'utilise bien MikroC pro for PIC et du coup j'utilise bien un PIC (PIC16F688)

    Alors mon projet consiste à contrôlé l’accès a la cantine ! alors pour ça j’utilise un tripode c'est ça !

    Nom : m.PNG
Affichages : 931
Taille : 38,7 Ko

    Alors l’orque qu'un élève est autoriser à passer le tripode doit se débloquer et lorsque l’élève n'est pas autorisé le tripode se bloque ! Alors c'est justement l'électroaimant qui est chargé de bloquer ou de débloquer le tripode en fonction de ! De plus le système est aussi composé d'un capteur optique qui qu'en à lui est chargé de déterminer le sens de rotation ! Voila la bête !

    Nom : 20170223_121037.jpg
Affichages : 995
Taille : 1,11 Mo


    Nom : 20170223_121215.jpg
Affichages : 996
Taille : 1,88 Mo


    Voilà j’espère avoir répondu à tes questions

  4. #4
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    J'allais oublier le schéma excuse moi !

    Nom : Capture.PNG
Affichages : 940
Taille : 75,0 Ko

  5. #5
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Y a déjà plus d'informations mais il en manque toujours !

    Nom : Capture du 2017-03-14 22-46-36.png
Affichages : 871
Taille : 77,8 Ko

    Pour CDE_ELECTROAIMANT pas de doute, vu le schéma c'est bien une sortie. Lorsque cette sortie est à 1, l'électroaimant est actif et il bloque le tripode et si la sortie est à 0 le tripode peut tourner.


    Pour Passage_OK, d'après ton début de programme (si il est bon) et d'après le carré "état logique" que je vois sur ton schéma (si tu ne t'es pas trompé) je fais l'hypothèse que c'est une entrée du PIC18F688.
    Est ce que c'est le sens de rotation ?
    Si Passage_OK = 0 alors le tripode tourne dans un sens et si Passage_OK = 1, le tripode tourne dans l'autre sens ?
    Est ce que c'est une info pour signaler que quelqu'un est passé ?
    Tu as remarqué que cette variable ne sert a rien dans le programme ? Moi je trouve ça bizarre !!!!!


    Pour TRIPODE, qui est une entrée, bah elle sert a quoi ? Elle vient de où ? C'est un marche/arrêt du système ?


    Pour A et B, qui sont des entrées liées à des notions de phases, mêmes questions, c'est une info venant du tripode et codée en binaire ?
    00 = démarrage
    01 = 1er tour du tripode
    10 = 2eme tour du tripode
    11 = 3eme et dernier tour du tripode


    Il faut que tu donnes toutes les infos pour pouvoir compléter le programme ci dessous.
    Est ce que tu es sur du début de ton programme d'ailleurs ? Parce ce que si je dois faire des hypothèses avec seulement la moitié des infos (et en plus si elles sont pas bonnes) ......

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    sbit  TRIPODE  at  RC2_bit;
    sbit  TRIPODE_Direction  at    TRISC2_bit;
    sbit  A  at  RC4_bit;
    sbit  A_Direction  at    TRISC4_bit;
    sbit  B  at  RC5_bit;
    sbit  B_Direction  at    TRISC5_bit;
    sbit  Passage_OK  at  RC0_bit;
    sbit  Passage_OK_Direction  at    TRISC0_bit;
     
    sbit  CDE_ELECTROAIMANT  at  RA0_bit;
    sbit  CDE_ELECTROAIMANT_Direction  at    TRISA0_bit;
     
     
    void main() {
         unsigned  char Fin_Cycle;
         /************ Configuration des ports utilisés en I/O numériques  ********/
         ANSEL = 0;
         CMCON0 = 7;
     
    	/********** Configuration (sens de transfert) des entrées numériques *****/
         A_Direction = 1;
         B_Direction = 1;
         TRIPODE_Direction = 1;
     
         /********** Configuration (sens de transfert) des sorties numériques *****/
         CDE_ELECTROAIMANT_Direction = 0;
         CDE_ELECTROAIMANT = 0;				// !-> Attention <-! 0 = dévérouillé par défaut
         Passage_OK_Direction = 0;
         Passage_OK = 0;
     
     
         Delay_ms(2000);
     
     
        while(1)
    	{
           	Fin_Cycle = 0;
     
    		while(TRIPODE == 0)
    			;
     
    		do
    		{
    			CDE_ELECTROAIMANT = 1;			// Verouillage
     
    			while (A == 0 && B == 0)		// Tant que A == 0 et B == 0
    				;         					// Attente de la Phase 1
     
    			CDE_ELECTROAIMANT = 0;			// Deverouillage
     
     
     
    			/*************************************************************************/
    		    while (A ==  && B == )
    				;            				// Phase 1 attente phase suivante
     
    		    if (!(A ==  && B == ))       	// Test verification passage à la phase 2
    		    {
    		    	continue;                	// Retour au verouillage
    		    }
     
     
    			/*************************************************************************/
    			while (A ==  && B == )
    				;     						// Phase 2 attente phase suivante
     
    		    if (!(A ==  && B == ))		// Test verification passage à la phase 3
    		    {
    		    	continue;                	// Retour au verouillage
    		    }
     
     
    			/*************************************************************************/
    			while (A ==  && B == )
    				;   						// Phase 3 attente phase suivante
     
    		    if (!(A ==  && B == ))       	// Test verification passage à la phase 1
    		    {
    		        continue;                	// Retour au verouillage
    		    }
     
    			Fin_Cycle = 1;
     
    		} while (??);
     
    		CDE_ELECTROAIMANT = ?;
    		Passage_OK = ?;
    		Delay_ms(1000);
    		Passage_OK = ?;
       	}
     
    }

    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  6. #6
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Alors oui effectivement j'ai oublié de préciser que effectivement celui-ci (le tripode) est verrouillé par défaut !! Donc je crois que le début du programme donne plutôt ça non !?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    sbit  TRIPODE  at  RC2_bit;
    sbit  TRIPODE_Direction  at    TRISC2_bit;
    sbit  A  at  RC4_bit;
    sbit  A_Direction  at    TRISC4_bit;
    sbit  B  at  RC5_bit;
    sbit  B_Direction  at    TRISC5_bit;
    sbit  Passage_OK  at  RC0_bit;
    sbit  Passage_OK_Direction  at    TRISC0_bit;
    
    sbit  CDE_ELECTROAIMANT  at  RA0_bit;
    sbit  CDE_ELECTROAIMANT_Direction  at    TRISA0_bit;
    
    
    void main() {
         unsigned  char Fin_Cycle;
         /************ Configuration des ports utilisés en I/O numériques  ********/
         ANSEL = 0;
         CMCON0 = 7;
         /********** Configuration (sens de transfert) des entrées numériques *****/
         A_Direction = 1;
         B_Direction = 1;
         TRIPODE_Direction = 1;
         /********** Configuration (sens de transfert) des sorties numériques *****/
         CDE_ELECTROAIMANT_Direction = 0;
         Passage_OK_Direction = 0;
         
         CDE_ELECTROAIMANT = 1;
         Passage_OK = 0;
         Delay_ms(2000);

    Pour passage_OK par contre je viens de voir que je mettais trompé justement pour la broche regarde:

    Nom : Capture.PNG
Affichages : 907
Taille : 68,8 Ko

    Mais effectivement l’état logique détermine bien si quelqu'un est passé ou non

    Quand à lui l’état logique du Tripode c'est un signal de la carte mère qui dit si oui ou non on peut reverrouiller le tripode

    Par contre A et B ce sont des signaux venant du capteur optique pour indiquer le sens de rotation !

    Après non mon programme est sensé être finalisé

  7. #7
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    [1] Valentin, il faut que tu ailles jusqu'au bout de l'explication. Pour un signal, tu dois te demander : qu'est ce qu'il représente ? c'est une entrée ou une sortie ? il a quelle valeur ? numérique ou analogique ? un code binaire qui représente quelques choses peut être ? une valeur analogique représentant une information ? etc...

    Regarde comment tu me laisses en plan avec juste cette phrase :
    Citation Envoyé par valentincaceres Voir le message
    Par contre A et B ce sont des signaux venant du capteur optique pour indiquer le sens de rotation !
    Regarde maintenant les questions que moi je me pose : Ok mais A et B valent quelle valeur en fonction du sens de rotation ? Soit c'est le prof qui vous l'a dit soit c'est simplement écrit dans une doc/datasheet.

    Exemple :
    A = 1 et B = 0 => Dans le sens marche avant ?
    A = 0 et B = 1 => Dans l'autre sens donc marche arrière ?
    A = 1 et B = 1 => Est ce une possibilité ? (genre entre deux sens donc entrain de tourner mais la rotation n'est pas encore finie ?)
    A = 0 et B = 0 => Est ce une possibilité (au premier démarrage ou au RESET peut être?)

    Tu vois qu'il faut creuser un peu plus !

    [1] Et tu sais ce qu'il se passe quand tu as été au bout des questions... bah tu n'as plus besoin d'aide. C'est à dire qu'en te demandant comment ça fonctionne, tu vas immédiatement comprendre que les conditions de te programme sont en réalité les réponses a ce que j'ai demandé dans l'exemple juste au dessus.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  8. #8
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Oui effectivement c'est vrai que je suis pas très précis avérai dire mon coté est plus matériel que logiciel d’où le fait que je sois un peu avide question connaissance programmation...

    Après pour ce qui s'agit des signaux optiques ce sont des signaux logiques

    A=1 et B=0 Marche avant (bon sens) donc électroaimant débloquer
    A=0 et B=1 Marche arrière (mauvais sens) donc électroaimant bloquer

    après ce sont les deux seuls possibilités...

    Mais je commence déjà à mieux comprendre mon programme ! (Grasse à toi)

    En tout cas merci de ta patience.

  9. #9
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Pour etre plus prècis par rapport au signaux !

    Nom : Capture.PNG
Affichages : 871
Taille : 14,0 Ko

    Nom : Capture.PNG
Affichages : 823
Taille : 36,6 Ko

  10. #10
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut Valentin,
    Normalement tu devrais être capable de remplir les A et les B dans ton soft maintenant !

    Nom : Capture du 2017-03-29 23-42-46.png
Affichages : 867
Taille : 61,7 Ko
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

Discussions similaires

  1. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  2. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  3. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05
  4. Comment débuter en programmation ?
    Par Marc Lussac dans le forum Débuter
    Réponses: 0
    Dernier message: 08/04/2002, 11h29
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo