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

programme en C pour pic 16F84



  1. #1
    le fouineur

    Unhappy programme en C pour pic 16F84


    ------

    Bonjour à tous,

    J' aimerai réaliser un verrou à code à l' aide d' un pic
    16F84 que j' ai choisi de programmer en langage C.Le
    fonctionnement du dispositif devra comporter plusieurs
    étapes.L' acquisition du code se fera par l' intermédiaire
    d' un encodeur de clavier de type 74C922.

    1)scrutation du clavier à 16 touches: un code sur 4 bits
    est envoyé au pic par l' encodeur.
    2)mise dans une table temporaire du code binaire du 1er
    digit.
    3)comparaison du digit saisi avec une valeur gardée en
    mémoire.
    >si égalité des 2 codes poursuite du processus
    pour le 2ème digit.
    >sinon sortie et fin du programme sans aucune autre action.
    4)comparaison du 2ème digit saisi avec une 2ème valeur
    gardée en mémoire.
    >si égalité des deux codes poursuite du processus pour le 3ème digit...etc.....etc... jusqu'à la
    comparaison du 4ème et dernier digit.
    >si égalité des 2 codes ouverture de la porte par l'intermédiaire d' une gâche électrique.
    >sinon sortie et fin du programme.

    Il est à noter en ce qui concerne l' ouverture de la porte qu' il est nécessaire d' envoyer un ordre à un port du pic.

    Comment débuter la réalisation de mon programme?
    Faut-il déclarer puis initialiser les variables? Si oui par quelle instruction et à quel moment?
    Comment scruter l' encodeur 74C922?

    Merci d'avance pour vos réponses.

    -----

  2. Publicité
  3. #2
    Patrick

    Re : programme en C pour pic 16F84

    Bonjour

    Comment débuter la réalisation de mon programme?
    Faut-il déclarer puis initialiser les variables? Si oui par quelle instruction et à quel moment?
    Je vais te dire mon avis mais il n'engage que moi : je ne prendrais jamais une game mid-range (toute la gamme 16Fxx) pour la programmer en C, tout simplement car leurs architectures n'est pas prévu pour. Si tu peux changer de PIC prends la gamme 18Fxx, eux, en revanche, ont une architecture "C friendly". Je veux dire qu'il ont été fait pour être programmer en C et tu peux trouver facilement des PIC18 de la taille de ton 16F84.
    Et il sera beaucoup plus facile de le programmer pour ton projet ...

    Bonne continuation
    Pat

  4. #3
    le fouineur

    Re : programme en C pour pic 16F84

    Citation Envoyé par Patrick
    Bonjour



    Je vais te dire mon avis mais il n'engage que moi : je ne prendrais jamais une game mid-range (toute la gamme 16Fxx) pour la programmer en C, tout simplement car leurs architectures n'est pas prévu pour. Si tu peux changer de PIC prends la gamme 18Fxx, eux, en revanche, ont une architecture "C friendly". Je veux dire qu'il ont été fait pour être programmer en C et tu peux trouver facilement des PIC18 de la taille de ton 16F84.
    Et il sera beaucoup plus facile de le programmer pour ton projet ...

    Bonne continuation
    Pat
    Bonjour PATRICK,

    Je n' ai pas vraiment le choix en ce qui concerne le choix
    du mirocontroleur à utiliser car je dispose d' un stock de
    pic 16F84 et mon projet prévoit la construction de plusieurs exemplaires. J' ai téléchargé le logiciel "DEVPIC84c" pour développer le software.Est-ce
    que le choix de ce logiciel te semble judicieux sachant
    que je suis un novice en matière de programmation.

    Cordialement, le fouineur

  5. #4
    cobra34

    Re : programme en C pour pic 16F84

    je suis un debutant aussi mais jai commencer a apprendre le C avec un pic 16f84a donc je vois pas le probleme regarde ce lien il pouras surement t'aider
    http://hhollard.club.fr/prog_pic_c.htm

    et pour ta serrure rajoute au moin 2 led rouge pour indiquer un mauvais code et vert pour code accepter

  6. #5
    le fouineur

    Re : programme en C pour pic 16F84

    bonjour cobra34,

    Je suis allé sur le site que tu m' as indiqué et j'ai téléchargé le logiciel "MAPLAB 6.3" mais je n'arrive pas à le rendre opérationnel.Son installation nécessite des composants extérieurs avec leur soft d' installation.

  7. A voir en vidéo sur Futura
  8. #6
    cobra34

    Re : programme en C pour pic 16F84

    salut prend le d ici jai pas eu de trouble avec cette version
    http://ww1.microchip.com/downloads/e...MP731_Full.zip

  9. Publicité
  10. #7
    le fouineur

    Re : programme en C pour pic 16F84

    Salut cobra34,

    J' ai pu télécharger le logiciel MP731 et l' installer. Cependant, il me semble que c'est un compilateur
    en assembleur alors qu' il me faut un compilateur en langage c.J' ai téléchargé également DEVPIC84C qui me semble convenir.
    Est-ce que mon programme doit débuter par:

    char "nom donné à ma table" [dimension de la table] ?

    Si tu le peux,écris moi les premières instructions à
    executer

    D' avance merci, cordialement, le fouineur

  11. #8
    Patrick

    Re : programme en C pour pic 16F84

    Salut

    En ce qui concerne la question suivante : Comment scruter le 74C922 ? Enfaite ce composant est un scruteur de clavier donc il va t'envoyer un code binaire correspondant à la touche appuyée. Il faut simplement lire le port de ton PIC qui est relié aux sortie du 74C922.

    Moi, personnelement, je comparerais le code entier et non pas chaque digit, par contre mettre le bon code dans un tableau puis venir comprarer le code frapper qui se trouvera dans un autre tableau est une bonne idée.

    Je regarde ça de plus près et je te tiens au courant ...

    A bientôt
    Pat

  12. #9
    cobra34

    Re : programme en C pour pic 16F84

    je suis desoler le fouineur mais je commence moi aussi, desoler

  13. #10
    Patrick

    Re : programme en C pour pic 16F84

    J'ai une autre solution qui pourrait t'aider :

    Télécharges la version d'évalution de Mikroelectronika (MikroC) ici
    http://www.mikroelektronika.co.yu/en...c/download.htm

    Cette version est totalement fonctionnelle mais est limitée à 2ko de code ensuite utilise la librairie "Keypad Library". Tu y trouveras un exemple tout fait avec un PIC16F877 mais tu pourras le modifier pour un 16F84.

    Je t'explique un peu le schéma : Avec ce cablage tu peux enlever le 74C922 (je pense que c'est un plus car il coute, relativement, chère) tu relies directement le clavier sur le PORTB, et biensur il te restera le PORTA pour controler l'ouverture de ton moteur. Cette librairie se résume à 3 fonctions :
    - Keypad_Init
    - Keypad_Read
    - Keypad_Released

    Code:
    Le prototype de la première fonction : void Keypad_Init(unsigned *port);
    exemple : Keypad_Init(&PORTB);
    Code:
    Le prototype de la deuxième fonction : unsigned short Keypad_Read(void);
    exemple : valeur_clavier = Keypad_Read();
     
    cette fonction te retourne un entier, donc dans la variable valeur_clavier 
    tu retrouveras un entier de 1 à 16 selon la touche appuyée 
    (en prenant l'exemple que tu utilises un clavier matriciel 16 touches allant 
    de 1 à F ===> 1 à 9 ensuite en hexa on passe à A B C D E F 
    ===> A = 10, B = 11 et F = 16)
    Si aucune touche n'est appuyée ta variable contiendra 0
    Code:
    Le prototype de la troisième fonction : unsigned short Keypad_Released(void);
    exemple : valeur_clavier = Keypad_Released();
    
    idem que la précédante mais renvoye uniquement la touche enfoncée pas de 0 
    dans la variable si aucune touche n'est appuyée.
    Voilà, tiens moi au courant de tes avancées ou, éventuels, problèmes ...
    Bon courage
    Pat
    Images attachées Images attachées

  14. #11
    abracadabra75

    Re : programme en C pour pic 16F84

    Citation Envoyé par Patrick
    cette fonction te retourne un entier, donc dans la variable valeur_clavier
    tu retrouveras un entier de 1 à 16 selon la touche appuyée
    (en prenant l'exemple que tu utilises un clavier matriciel 16 touches allant
    de 1 à F ===> 1 à 9 ensuite en hexa on passe à A B C D E F
    ===> A = 10, B = 11 et F = 16)
    Si aucune touche n'est appuyée ta variable contiendra 0
    Pat
    Bonjour.
    Petite correction: F=15
    (Je corrige ce lapsus pour que nos amis non familiers du code hexadécimal ne soient pas désorientés).
    A+
    Il n'y a que dans le dictionnaire où 'réussite' vient avant 'travail'.

  15. #12
    Patrick

    Re : programme en C pour pic 16F84

    oupssss !! merci abracadabra75

    De plus les claviers matriciels sont numérotés de 0 à 9 puis de A à F, et F vallant bien 15

    Bonne continuation à tous
    Pat

  16. Publicité
  17. #13
    abracadabra75

    Re : programme en C pour pic 16F84

    Ce qui fait que la touche 0 renvoie 0(hexa)...
    et qu'il faut trouver autre chose pour déterminer si aucune touche n'est actionnée : un OU câblé sur colonnes ou lignes faisant l'affaire.
    Il n'y a que dans le dictionnaire où 'réussite' vient avant 'travail'.

  18. #14
    Patrick

    Re : programme en C pour pic 16F84

    Enfaite la touche "0" renvoi 1 et la touche "F" renvoi 16, elle vient de là la confusion que j'ai laissé au dessus.

    le OU cablé serait une très bonne idée aussi, mais je pense que la solution la plus simple est de déclancher une interruption sur un changement d'état des bits RB4 à RB7 est, automatiquement, si on rentre dans l'interruption c'est qu'une touche à été appuyée.

    A+
    Pat

  19. #15
    Patrick

    Re : programme en C pour pic 16F84

    Bonjour

    Bon et bien voilà, j'ai réalisé la petite maquette et le programme conformément au cahier des charges.

    Voici le code, les photos et le schéma sont en vignette attachée.
    Code:
    void main (void)
    {
     unsigned int i;
     unsigned short touche;
     unsigned short code_taper[4]={0,0,0,0};
     unsigned short code_bon[4]={1,1,1,1};
    
     i = 0;
    
     Keypad_Init(&PORTB);
    
     while(i<=3)
     {
      touche = 0;
      do
        touche = Keypad_Released();
      while (!touche);
      Delay_us(100);
    
    
     code_taper[i] = touche;
     i++;
     }
    
    
     if ((code_taper[0] == code_bon[0]) && (code_taper[1] == code_bon[1]) && (code_taper[2] == code_bon[2]) && (code_taper[3] == code_bon[3]))
         {
          PORTA = 0xFF;
          TRISA = 0xFD;
         }
    
      else
      {
       PORTA = 0xFF;
       TRISA = 0xFE;
      }
    }
    J'ai retiré les commentaires pour plus de clareté, voici l'explication :
    - initialisation des tableaux et variable
    - initialisation de la fonction Keypad_Init();

    Maintenant le code suivant
    Code:
    while(i<=3)
     {
      touche = 0;
      do
        touche = Keypad_Released();
      while (!touche);
      Delay_us(100);
    
    
     code_taper[i] = touche;
     i++;
     }
    Tant que i < ou = à 3, on attend l'appuie d'une touche, sitôt la touche appuyée on attend 100µs et on la stock dans le tableau puis on incrémente i. (la prochaine touche appuyée sera dans le deuxième élement du tableau puisque que i aura été incrémenté de 1 et vaudra 1).

    La comparaison
    Code:
    if ((code_taper[0] == code_bon[0]) && (code_taper[1] == code_bon[1]) && (code_taper[2] == code_bon[2]) && (code_taper[3] == code_bon[3]))
         {
          PORTA = 0xFF;
          TRISA = 0xFD;
         }
    
      else
      {
       PORTA = 0xFF;
       TRISA = 0xFE;
      }
    Si les éléments des tableaux sont identique on allume la DEL qui se trouve sur RA1
    Sinon on allume celle qui se trouve sur RA0.

    Voilà, bonne continuation à tous
    Pat
    Images attachées Images attachées

Sur le même thème :

Discussions similaires

  1. programme pour pic 16f84 aider moi SVP
    Par gobgob69 dans le forum Électronique
    Réponses: 37
    Dernier message: 28/05/2009, 20h46
  2. routine de division pour le PIC 16f84
    Par siden dans le forum Électronique
    Réponses: 3
    Dernier message: 18/11/2007, 21h16
  3. Help pour pic 16f84 et transmission reception d'infra rouge
    Par Vincent dans le forum Électronique
    Réponses: 3
    Dernier message: 27/10/2006, 09h40
  4. Aidez-moiiiiiiiiii pour mon programme du 16f84
    Par 14bds75_cb dans le forum Électronique
    Réponses: 6
    Dernier message: 10/06/2003, 09h31
Découvrez nos comparatifs produits sur l'informatique et les technologies.