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 :

MikroC PIC16F84 chenillard de leds avec boutons [PIC]


Sujet :

Embarqué

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 16
    Points
    16
    Par défaut MikroC PIC16F84 chenillard de leds avec boutons
    Bonjour,

    Je me présente Caenem, 16 ans, élève de 1ère STI2D option SIN ( Systèmes d'information et numérique) et nouveau sur le forum.

    On a commencés à utiliser Mikro C, un logiciel pour programmer en C mais spécialisé dans les micro-contrôleurs PIC, et en parallèle on utilise ISIS pour faire des circuits électroniques.

    Et je bloque sur un programme qui consiste à faire un chenillard de 8 led (sur le port B du pic 16F84) ( on fait défiler les led unes par unes), et d'utiliser 2 boutons ( sur le port A), le premier pour activer/désactiver le chenillard et le deuxième pour modifier la fréquence (si à ouvert 1 seconde, si fermé 2 secondes).

    J'ai tout codé comme il faut ( enfin je trouve que le chenillard est vraiment pas optimisé mais je ne vois pas trop comment raccourcir le code étant novice), mais quand j'appuie sur le bouton 2, normalement le défilement doit durer 2 secondes au lieu d'une (si vous avez lu en haut ) le problème c'est que le chenillard "revient au début" et là le défilement dure 2 secondes.

    Or, normalement ça ne doit pas revenir au début, il faut que ça continue mais en changeant la fréquence de défilement.

    Voila, je pense avoir décrit suffisamment le problème, je vais mettre mon programme et mon circuit ISIS.
    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
    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
                          // Programme permettant de faire un chenillard de LED actionné par bouton et modifier sa fréquence
    #define Entree1 PORTA.F0 // Définition de S1 en entrée
    #define Entree2 PORTA.F1 //Définition de S2 en entrée
    #define Sortie PORTB //Définition des LED en sortie
    //////////////////////////////////////////////////////////
    // prototypes de fonctions
    void init( ); // Procédure d’initialisation du PIC
    void allumage_led( ); // Sous programme de l'allumage
    //////////////////////////////////////////////////////////
    // Fonction principale
    void main()
    {
    init (); // appel de la procédure « init »
    while (1)
    {
    allumage_led( ) ; // appel de la procédure « allumage_led »
    }
    }
    //////////////////////////////////////////////////////////
    void init ( ) // sous programme d’initialistion du PIC, des variables, etc …
    {
    trisb = 0x00; // Port B en sortie
    portb = 0x00; // Toutes les LED sont à 0 à l'init
    trisa = 0xFF; // Port A en entrée
    }
    //////////////////////////////////////////////////////////
    void allumage_led ( ) // sous programme qui fait clignoter la LED
    {
         if ( porta.F0 == 1) // Si le bouton 1 est fermé le chenillard tourne
         {
          if (porta.F1 && porta.F0) // Si le bouton 1 et 2 sont fermés le chenillard tourne avec un délai de 2000 ms
          {
           if ( porta.F1 && porta.F0)
          {
           portb.F0 = 0xFF;
           delay_ms(2000);
           portb.F0 = 0x00;
          }
           if ( porta.F1 && porta.F0)
           {
            portb.F1 = 0xFF;
            delay_ms(2000);
            portb.F1 = 0x00;
           }
            if ( porta.F1 && porta.F0)
            {
             portb.F2 = 0xFF;
             delay_ms(2000);
             portb.F2 = 0x00;
            }
             if ( porta.F1 && porta.F0)
             {
               portb.F3 = 0xFF;
               delay_ms(2000);
               portb.F3 = 0x00;
             }
              if ( porta.F1 && porta.F0)
              {
                portb.F4 = 0xFF;
                delay_ms(2000);
                portb.F4 = 0x00;
              }
               if (porta.F1 && porta.F0)
               {
                portb.F5 = 0xFF;
                delay_ms(2000);
                portb.F5 = 0x00;
               }
                if ( porta.F1 && porta.F0)
                {
                 portb.F6 = 0xFF;
                 delay_ms(2000);
                 portb.F6 = 0x00;
                }
                 if ( porta.F1 && porta.F0)
                 {
                  portb.F7 = 0xFF;
                  delay_ms(2000);
                  portb.F7 = 0x00;
                 }
          }
                 else // Sinon il tourne avec un délai normal de 1000 ms
                 {
                   if ( porta.F1 != porta.F0)
                   {
                   portb.F0 = 0xFF;
                   delay_ms(1000);
                   portb.F0 = 0x00;
                   }
                    if ( porta.F1 != porta.F0)
                    {
                    portb.F1 = 0xFF;
                    delay_ms(1000);
                    portb.F1 = 0x00;
                    }
                     if ( porta.F1 != porta.F0)
                     {
                     portb.F2 = 0xFF;
                     delay_ms(1000);
                     portb.F2 = 0x00;
                     }
                      if ( porta.F1 != porta.F0)
                      {
                       portb.F3 = 0xFF;
                       delay_ms(1000);
                       portb.F3 = 0x00;
                       }
                       if ( porta.F1 != porta.F0)
                       {
                        portb.F4 = 0xFF;
                        delay_ms(1000);
                        portb.F4 = 0x00;
                        }
                        if (porta.F1 != porta.F0)
                        {
                        portb.F5 = 0xFF;
                        delay_ms(1000);
                        portb.F5 = 0x00;
                        }
                         if ( porta.F1 != porta.F0)
                         {
                         portb.F6 = 0xFF;
                         delay_ms(1000);
                         portb.F6 = 0x00;
                         }
                          if ( porta.F1 != porta.F0)
                          {
                          portb.F7 = 0xFF;
                          delay_ms(1000);
                          portb.F7 = 0x00;
                          }
                }
    
          }
                 else // Sinon il s'éteint
                 {
                  portb = 0x00;
                 }
                 
    
    }
    Et le schéma :
    Nom : imgfofo.png
Affichages : 11898
Taille : 12,5 Ko

    Merci

  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,
    Tu n'es pas sur le bon forum, un modérateur transferera ton sujet, probablement, dans le forum système embarqué.
    Note de modération --> fait !

    Poste ton programme en C dans ton message. Tu as des balises de code à ta disposition (tu peux activer la coloration syntaxique dans la balise: [*CODE=C]....[/CODE] en retirant l'étoile)

    Pour ton projet sous le logiciel de simulation Proteus (Isis) tu le posteras dans un second temps car tout le monde ne connait pas ce simulateur.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Ok merci, désolé d'avoir mis au mauvais endroit.
    Mais est-ce que je me met "Résolu" ?

  4. #4
    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
    Non,Non continu sur ce sujet et un modérateur remettra toute la discution au bonne endroit.

    Poste ton code que l'on puisse voir.
    Poste une copie d'écran de ton montage (Isis) pour qu'on puisse voir le schéma.

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Ok merci beaucoup

  6. #6
    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
    Ok,
    C'est tout a fait normal que ça revienne au début car pour chaque allumage de LED tu testes porta.F1 (le bouton 2)

    Imagine que tu es dans la partie "allumage toutes les 1 seconde" donc on est dans un cette condition :
    porta.F1 = 0 (le bouton 2 est relâché donc fréquence = 1s)
    porta.F0 = 1 (le bouton 1 est enfoncé donc en mode marche)

    Regardons maintenant ce qui se passe :
    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
                 else // Sinon il tourne avec un délai normal de 1000 ms
                 {
                   if ( porta.F1 != porta.F0)
                   {
    		...
                   }
                    if ( porta.F1 != porta.F0)
                    {
    		 ...
                    }
                     if ( porta.F1 != porta.F0)
                     {
    		  ...
                     }
                      if ( porta.F1 != porta.F0)
                      {
    		   ...
                      }
                       if ( porta.F1 != porta.F0)
                       {
    		    ...
                       }
                        if (porta.F1 != porta.F0)
                        {
    		     ...
                        }
                         if ( porta.F1 != porta.F0)
                         {
    		      ...
                         }
                          if ( porta.F1 != porta.F0)
                          {
     		       ...
                          }
                }
    Dans tes conditions tu testes si porta.F1 est différent de porta.F0 et c'est vrai car nous sommes dans cet état : porta.F1 = 0 (le bouton 2 est relâché donc fréquence = 1s) et porta.F0 = 1 (le bouton 1 est enfoncé donc en mode marche) là tout fonctionne parfaitement bien.

    Si en pleine exécution de tu appuies sur le bouton 2 ?

    Alors tu seras dans cet état : porta.F1 = 1 (le bouton 2 est enfoncé donc fréquence = 2s) et porta.F0 = 1 (le bouton 1 est enfoncé donc en mode marche)
    Et tout les tests "est ce que porta.F1 est différent de porta.F0 ?" devienent faux et tout ce qui est dans les if ne s'exécute plus jusqu'au prochain tour.

    Donc quand tu dis
    Citation Envoyé par Caenem
    le problème c'est que le chenillard "revient au début" et là le défilement dure 2 secondes.
    Non, c'est tout a fait normal et c'est ce que ton programme est censé faire


    J'ai 2 remarques à faire
    Je ne te donnerai pas de solution car tu es sur la bonne voie et ton programme est bien écrit même si l'algorithme n'est pas bon. Je veux que tu trouves seul !
    Comme je disais, il faut que tu partes sur un autre algorithme car avec celui-ci tu vas dans une direction où ça va être compliqué. Ton algo devrait ressembler à un registre a décalage (boucle et opérateur << en C toutes les 1 ou 2s) si tu implémentes ça alors ton programme va être largement plus court. Je te laisse explorer des solutions.

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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup, maintenant je sais ce qu'il reste à faire

  8. #8
    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
    Si vraiment tu bloques on regardera ensemble comment réduire la fonction allumage_led à une quinzaine de lignes (à peut prés).
    Au pire propose et on en parle.

    Quoi qu'il en soit fait nous des retours car il peut y avoir d'autres personnes qui rencontres les mêmes problèmes que toi. C'est ça le but du forum... que tes réponses aident d'autres personnes.
    Si tu ne donnes plus jamais signe de vie ça n'aidera personne.

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

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Ce qui serait bien ce serait déjà de raccourcir le chenillard en lui même pour plus de compréhension.

    Ce que j'ai fais (juste pour le chenillard pour l'instant) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void allumage_led ( ) // sous programme qui fait clignoter la LED
    {
      int ordre_led;
      ordre_led = ordre_led >> 1;
      portb = ordre_led;
      delay_ms(1000);
    }
    Il manque des trucs mais je pense que c'est quelque chose comme ça

  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
    +1,
    Tu es sur la meilleure des voies.
    Mon assembleur PIC est très rouillé mais si on regarderait (on peut essayer, je devrais m'en sortir quand même) on verrait tout de suite, en comptant le nombre de cycle par instruction, que ton programme est beaucoup (mais alors beaucoup) plus rapide avec cette algo !!!!

    Comme tu le dis, tu n'as plus qu'a intégré les conditions (pour savoir si tu fais un delay de 1 ou 2s) et gérer l'allumage des pour que une fois arrivé sur portb.F7 que ça refasse un tour pour revenir sur portb.F0.
    A toute à l'heure !
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  11. #11
    Membre à l'essai
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Alors la, j'ai bien "débroussaillé" le code mais le problème du "retour au début" persiste toujours, j'avoue ne pas comprendre pourquoi cela fait ça mais sinon je suis fier de moi je pensais que j'allais y arriver.

    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
    void allumage_led ( ) // sous programme qui fait clignoter la LED
    {
         if ( porta.F0 == 1) // Si le bouton 1 est fermé le chenillard tourne
         {
          portb = portb >> 1;
         }
         else // Sinon il s'éteint
         {
          portb = 0x00;
         }
          if ( porta.F0 == porta.F1)
          {
           delay_ms(2000);
          }
    }

  12. #12
    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
    Félicitation !
    C'est une sacré simplification que tu as fait là !
    Pour moi tu as trouvé, voici une solution.

    ATTENTION : J'ai fais ça de tête car j'ai le même logiciel de simulation électronique que toi mais ça fait bien longtemps que je n'ai pas travailler avec un PIC (en plus il faudrait que j'installe toute la chaîne de compilation de MPLAB X juste pour faire un essai.... sur une famille de micro que je n'utilise pas... en plus le 16F84 est obsolète depuis 20 ans quasiment.... )

    Je compte sur toi pour me dire si mon l'algo est bon !!!! Car de tête c'est pas si simple qu'il n'y paraît


    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
     
    void allumage_led ( ) // sous programme qui fait clignoter la LED
    {
    	int boucle = 0;
     
    	if (porta.F0 == 1) // Si le bouton 1 est fermé le chenillard tourne sinon éteindre les LED et sortir directement de la fonction !
    	{
    // si on est ici c'est que à minima le bouton 1 (On/Off est enfoncé)
    		portb = 1; // allumer la première LED, c'est l'initialisation
     
     
    // début de l'algo du registre à décalage, il s'agit d'une boucle "faire" 8 fois car il y a 8 LED
    // dans la boucle on test le bouton 2 (tempo 1 ou 2s) puis on décale la valeur 1 de 1 bit vers la gauche sur le Portb
    		for(boucle = 0; boucle < 8; boucle++)
    		{
    			if (porta.F1 ==1) // si bouton 2 enfoncé alors faire une pause de 2 secondes entre 2 allumages de LED
    				delay_ms(2000);
    			else // sinon, sous entendu que le bouton 2 est relaché alors faire une pause de 1 seconde entre 2 allumages de LED
    				delay_ms(1000);
     
    			portb <<= 1; // faire le décalage 
    		}
    // lorsque qu'on a fait ça 8 fois on sort de la fonction (la LED 8 est restée allumé dans cette algo !)
    // est ce que c'est grave ? non car au prochaine appel de allmuage_led depuis le programme principal on allumera la première LED 
    	}
    	portb = 0;
    }
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  13. #13
    Membre à l'essai
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Malheureusement cela fait toujours pareil, ça revient au début

  14. #14
    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
    Intéressant ça !
    Car dans mon algo, on fait portb <<= 1 peu importe l'état du bouton 2 donc il n'y a aucune raison que les LED s'éteignent jusqu'au prochain tour de boucle.

    Je voudrais que tu fasses 3 choses :
    sous Proteus tu peux dérouler ton programme en pas à pas et je voudrai que tu regardes bien ce qui se passe lorsque tu es dans la fonction allumage_led (avec mon code), y a t-il quelque chose de bizarre genre un reset ?
    est ce que le watchdog (je crois que le PIC16F84 en avait un) est bien éteint ? Car il peut foutre le bazarre.
    peux tu m'envoyer ton projet complet ISIS, j'ai le dernier Proteus chez moi (avec le programme .hex que je puisse l'importer)

    A toute de suite.

    ps : pour les pièces jointes, tu sais apparemment comment on fait !
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  15. #15
    Membre à l'essai
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Voici le projet isis
    Programme 6.rar

    Par contre je ne sais pas ce que c'est le watchdog et le pas-à-pas, il faut que je regarde uniquement dans ISIS ou aussi dans Mikro C en même temps ?

  16. #16
    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
    ceux sont les fichiers de ton programme initial, pas avec ma modif. C'est donc normal que ça fasse la même chose puisque c'est toujours le même programme !

    J'ai bien le fichier "Programme 6.c" avec ma modification de la fonction affichage mais tous les autres fichiers .hex .lst etc... sont ceux de ta version initiale qui ne te convient pas.
    Code ASM : 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
    ;  LST file generated by mikroListExporter - v.2.0 
    ; Date/Time: 23/01/2016 13:30:49
    ;----------------------------------------------
     
    ;Address Opcode 	ASM
    0x0000	0x2988      	GOTO       392
    _____DoICP:
    ;__Lib_System.c,6 :: 		
    ;__Lib_System.c,9 :: 		
    0x0003	0x1283      	BCF        STATUS, 5
    0x0004	0x080D      	MOVF       ___DoICPAddr+1, 0
    0x0005	0x008A      	MOVWF      PCLATH
    ;__Lib_System.c,10 :: 		
    0x0006	0x080C      	MOVF       ___DoICPAddr, 0
    0x0007	0x0082      	MOVWF      PCL
    ;__Lib_System.c,12 :: 		
    L_end_____DoICP:
    0x0008	0x0008      	RETURN
    ; end of _____DoICP
    _init:
    ;Programme 6.c,20 :: 		void init ( ) // sous programme d’initialistion du PIC, des variables, etc …
    ;Programme 6.c,22 :: 		trisb = 0x00; // Port B en sortie
    0x0009	0x1683      	BSF        STATUS, 5
    0x000A	0x0186      	CLRF       TRISB
    ;Programme 6.c,23 :: 		portb = 0x00; // Toutes les LED sont à 0 à l'init
    0x000B	0x1283      	BCF        STATUS, 5
    0x000C	0x0186      	CLRF       PORTB
    ;Programme 6.c,24 :: 		trisa = 0xFF; // Port A en entrée
    0x000D	0x30FF      	MOVLW      255
    0x000E	0x1683      	BSF        STATUS, 5
    0x000F	0x0085      	MOVWF      TRISA
    ;Programme 6.c,25 :: 		}
    L_end_init:
    0x0010	0x0008      	RETURN
    ; end of _init
    _allumage_led:
    ;Programme 6.c,27 :: 		void allumage_led ( ) // sous programme qui fait clignoter la LED
    ;Programme 6.c,29 :: 		if ( porta.F0 == 1) // Si le bouton 1 est fermé le chenillard tourne
    0x0011	0x1283      	BCF        STATUS, 5
    0x0012	0x1C05      	BTFSS      PORTA, 0
    0x0013	0x297A      	GOTO       L_allumage_led2
    ;Programme 6.c,31 :: 		if (porta.F1 && porta.F0) // Si le bouton 1 et 2 sont fermés le chenillard tourne avec un délai de 2000 ms
    Dans le fichier LST qui est le fichier intermédiaire entre le .c et le .hex je vois tes commentaires initiaux et c'est bien ton premier programme.

    Il faut demander a MikroC de compiler tout le projet (genre build all, je ne connais pas MikroC)
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  17. #17
    Membre à l'essai
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Voila qui est mieux
    Programme 6.rar

  18. #18
    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
    Effectivement et ça fonctionne bien
    Je suis encore bon de tête !

    Est ce que tu as essayé sous Proteus ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  19. #19
    Membre à l'essai
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Effectivement là ça marche en fait, il faut que je prenne l'habitude de build all.

    Bon finalement on a enfin réussi, j'ai appris beaucoup de choses et ça me donne envie de persévérer dans la programmation.

    Merci beaucoup Vincent

    ps : là on met résolu

  20. #20
    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
    Oui là tu peux mettre résolu !
    Tu as réussi et pas on ! Regarde bien tes messages, tu verras que tu avais trouvé et moi je n'ai mis qu'en forme tout ça.... regarde bien
    Tu as raison persévère car quand tu maîtrises le soft + le hard (les systèmes embarqués en terme général) tu peux faire tout ce que tu veux.
    Bonne continuation.
    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Confirm avec bouton yes/no/cancel
    Par shwin dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/01/2006, 19h24
  2. [C#]Comment forcer la sélection d'un noeud avec bouton droit
    Par irnbru dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/11/2005, 19h39
  3. [C#] Dropdownlist avec bouton valider
    Par serge benhamou dans le forum ASP.NET
    Réponses: 3
    Dernier message: 28/10/2005, 10h42
  4. Réponses: 24
    Dernier message: 11/01/2005, 10h12
  5. Nouvelle form avec bouton dans barre taches
    Par DarkChamallo dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 17/05/2004, 20h44

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