[Exercices] Exercice à la maison PIC 16F887
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Exercice à la maison PIC 16F887



  1. #1
    invite9d36d5aa

    Exercice à la maison PIC 16F887


    ------

    Bonjour,

    Je suis en cycle d'ingénieur et je viens de passé un examen sur les PIC et je ne sais pas si je l'ai raté car je n'ai pas répondu à certaine question, c'est pourquoi j'aimerai me reprendre en main pour comprendre mes erreurs car je ne suis pas très bon en programmation micro contrôleurs mais meilleur en C.

    Je travaille sur un PIC16F887 mid range c'est à dire avec un mot d'instruction sur 16 bits

    La première question : peut-on faire tourner un PIC 16F887 à 10 kHz au niveau de sa fréquence de base ?

    Réponse : J'ai répondu qu'un PIC 16F887 est un mid range (16) dont la mémoire programme est de type FLASH (F) de type 887 et capable d'accepter une fréquence d'horloge de 4MHz. Donc, oui elle peut à 10 kHz.

    2eme Question : Peut-on configurer le timer 2 pour compter les fronts montants d'un nombre d'impulsions s'étendant sur 15 ms ?

    Réponse : On à T = 15 ms soit fréquence = 1 / T = 66,66 Hz, sachant que le PIC atteint une fréquence max d'horloge de 4kHz, j'ai répondu oui.

    3 eme question :
    On me donne le montage suivant : Il faut écrire l'initialisation des PORTS dans cette configuration :

    Nom : 1.png
Affichages : 264
Taille : 213,3 Ko

    Pour moi RA0 correspond à une résistance interne, RA2 une diode (une sortie), RA3 un transistor (une sortie) et le RA5 je ne sais pas à quoi cela correspond.


    Réponse :

    TRISA = 0b00000001; // initialisation du port A
    PORTA = 0x00; // RAZ du PORTA

    4 eme question : Que doit on vérifier si l'on obtient le message : unable to open file '16F887A.h' à la compilation ?
    Réponse : Cela correspond à une erreur de chemin entre le projet et le fichier en question. Il faut vérifier si le fichier est bien situé dans le dossier qui l'appelle.

    5 eme question :
    a) Quelle limitation nous pose #include <MATH24F.H> ? Expliquer ?
    b) Comment contourner cette contrainte ?

    a) On utilise ce fichier pour utiliser les nombres réels dans un programme, cependant il est nécessaire d'inclure le fichier dans le projet .
    b) Je n'ai pas su répondre.

    6 eme question : Parmi ces 2 montages qui en aucun cas ne peut fonctionner ? Justifier ?

    ########### image externe

    Réponse :

    Montage 1 : Les entrées du port B peuvent être connecté à une résistance interne de +5V d'après la datasheet, donc OUI

    Montage 2 : Je n'ai pas su répondre.

    7 eme question : A quoi sert la pile à 8 niveaux dans du PIC16F887 ?

    Réponse : La pile à 8 niveaux permet de mémoriser et gérer les adresses de retour.

    8 eme question : On désire afficher l'image de la tension analogique fournie par le potentiomètre sur les leds. Le montage peut-il fonctionner ? Pourquoi ?
    ######### image externe

    Réponse :
    D'après la datasheet du PIC : Le PORTB dispose de 8 pins I/O de RB0 à RB7 et tous les bits sont utilisés dans PORTB et TRISB, et les entrées du PORTB peuvent etre connectées à une résistance de rappel interne +5V. Cependant le PORTE, je ne sais pas si il peut etre connecté à une résistance interne. Donc je dirai oui si et seulement si le RE3 n'est pas connecté à cette résistance interne.

    Je remercie d'avance les personnes qui tenterons de m'aider

    -----
    Dernière modification par gienas ; 23/08/2016 à 22h22. Motif: Suppression des images externes qui doivent être sur le serveur

  2. #2
    gienas
    Modérateur

    Re : Exercice à la maison PIC 16F887

    Bonjour stabiloboss12 et tout le groupe

    Bienvenue sur le forum.

    Pour être conforme à l'épinglé


    http://forums.futura-sciences.com/el...-sabonner.html

    Le lien vers l'image a été supprimées.

    Les PJ doivent être sur le serveur.

    Merci de la replacer dans une nouvelle réponse.


    .

  3. #3
    spown

    Re : Exercice à la maison PIC 16F887

    Bonjour/bonsoir est bienvenue sur FUTURA,

    1:- je vois pas le lien entre la question et ce que t'as raconté . Pour moi tu colles un quartz de 10 KHz sur les pattes OCS2 et OSC1 puis tu auras ton horloge de système à 10 000 Hz !
    2:- oui, dépend de l'horloge, postscaler et prescaler. ( ou aussi avec la valeur du registre TMR2 avec interrupt )
    3:- TRISA = 0x09; ( le triangle est considéré comme "driver" inverseur )

  4. #4
    invite03481543

    Re : Exercice à la maison PIC 16F887

    Bonjour,

    Pour moi tu colles un quartz de 10 KHz sur les pattes OCS2 et OSC1 puis tu auras ton horloge de système à 10 000 Hz !
    31kHz est la fréquence minimale du Collpits sur Osc1 et Osc2, pour obtenir 10kHz il faut utiliser le mode externe (EC) donc injecter une fréquence sur OSC1.

    Votre réponse 2 est bien oui mais votre explication vaut 0.
    Votre réponse à la 3 vaut également 0, ce n'est pas ce qui est demandé.
    Le montage sur RA0 est sensé mesurer une tension donc le port doit être configuré en entrée analogique.
    Le port RA2 doit allumer une led => port en sortie numérique (0 ou 5V).
    Le port RA3 doit détecter un appui bouton => entrée numérique.
    Le port RA4 doit piloter un moteur avec un driver => port en sortie numérique.

  5. A voir en vidéo sur Futura
  6. #5
    invite9d36d5aa

    Re : Exercice à la maison PIC 16F887

    Merci pour vos réponses, je viens de mettre à jour les images pour les questions 6 et 8.

    D'autre avis ?
    Images attachées Images attachées

  7. #6
    invite9d36d5aa

    Re : Exercice à la maison PIC 16F887

    Bonjour,

    Merci de m'avoir répondu, la question 1 doit faire référence à la datasheet du PIC16F887 et dans mon cours il y' a écrit noir sur blanc que le PIC16F887 est capable d'accepter une fréquence de 4MHz donc pour 10 kHz cela doit être bon non ?

    pour la question 2, quel calcul fait tu ? sachant que dans le sujet le postscaler et le prescaler n'est pas renseigné

    Pour la question 3 : en effet le TRISA = 0x09 car RA0 est une entrée , RA2 sortie , RA3 une entrée , RA5 une sortie soit 0x00001001 (0 sortie et 1 entrée) par contre ces 2 lignes suffit pour obtenir tout les points de la question ?

    Merci.

  8. #7
    invite9d36d5aa

    Re : Exercice à la maison PIC 16F887

    Citation Envoyé par HULK28 Voir le message
    Bonjour,

    Votre réponse 2 est bien oui mais votre explication vaut 0.
    Votre réponse à la 3 vaut également 0, ce n'est pas ce qui est demandé.
    Le montage sur RA0 est sensé mesurer une tension donc le port doit être configuré en entrée analogique.
    Le port RA2 doit allumer une led => port en sortie numérique (0 ou 5V).
    Le port RA3 doit détecter un appui bouton => entrée numérique.
    Le port RA4 doit piloter un moteur avec un driver => port en sortie numérique.
    Bonjour HULK,

    Merci de m'avoir répondu , pourquoi mon explication à la question 2 est fausse ?

    Pour la question 3, on me demande d'écrire l'initialisation des PORTS pour ce type de montage, donc des lignes de codes ! Mais ces deux lignes d'instructions suffisent t-elle ?

    Cdt stabiloboss12

  9. #8
    invite9d36d5aa

    Re : Exercice à la maison PIC 16F887

    Citation Envoyé par spown Voir le message
    Bonjour/bonsoir est bienvenue sur FUTURA,

    1:- je vois pas le lien entre la question et ce que t'as raconté . Pour moi tu colles un quartz de 10 KHz sur les pattes OCS2 et OSC1 puis tu auras ton horloge de système à 10 000 Hz !
    2:- oui, dépend de l'horloge, postscaler et prescaler. ( ou aussi avec la valeur du registre TMR2 avec interrupt )
    3:- TRISA = 0x09; ( le triangle est considéré comme "driver" inverseur )
    Bonjour,

    Pourrais tu m'expliquer ton raisonnement à la question 1, je n'ai pas très bien compris l'histoire de coller un quartz ? Je pense que la réponse est tout simplement dans la datasheet avec la bande d'horloge du PIC

    Sinon mes réponses aux questions suivantes sont-elles bonnes ?

  10. #9
    invite03481543

    Re : Exercice à la maison PIC 16F887

    Citation Envoyé par stabiloboss12 Voir le message
    Merci de m'avoir répondu, la question 1 doit faire référence à la datasheet du PIC16F887 et dans mon cours il y' a écrit noir sur blanc que le PIC16F887 est capable d'accepter une fréquence de 4MHz donc pour 10 kHz cela doit être bon non ?
    Qui peut le plus ne peut pas forcément le moins, du moins en mode oscillateur à quartz sur OSC1 et OSC2.
    Il est également indiqué dans la DS que 31kHz est la limite basse dans ce mode, d'ailleurs les caractéristiques électriques ne sont jamais données en dessous de cette valeur, il y a bien une raison.
    Néanmoins on peut comme je l'ai déjà dit appliquer une base de temps externe sur OSC1 et descendre en dessous de 31kHz et même aller jusqu'au DC (arrêt de cadencement).
    La question est assez mal posée, en tout cas dans sa forme elle attend de votre part que vous expliquiez ce que je viens de développer afin que votre prof puisse se rendre compte si vous avez compris le système de cadencement du PIC en justifiant votre réponse.

  11. #10
    invite03481543

    Re : Exercice à la maison PIC 16F887

    Citation Envoyé par stabiloboss12 Voir le message

    Merci de m'avoir répondu , pourquoi mon explication à la question 2 est fausse ?
    Tu n'expliques rien tout simplement...
    Lorsque tu réponds tu dois justifier et fournir un dimensionnement, c'est ce qu'attendrons de toi tes futurs employeurs
    Là encore la question est floue mais sans doute volontairement pour que tu développes et fournisses un autre niveau d'explications.
    Il faut que tu expliques et au besoin que tu donnes un exemple chiffré, ton explication est beaucoup trop simpliste et ne justifie rien du point de vue du timer2 notamment.

  12. #11
    invite03481543

    Re : Exercice à la maison PIC 16F887

    Citation Envoyé par stabiloboss12 Voir le message
    Je travaille sur un PIC16F887 mid range c'est à dire avec un mot d'instruction sur 16 bits
    Faux -> 14 bit il faut relire ton cours.

    3 eme question :
    On me donne le montage suivant : Il faut écrire l'initialisation des PORTS dans cette configuration :

    Pièce jointe 321224

    Pour moi RA0 correspond à une résistance interne, RA2 une diode (une sortie), RA3 un transistor (une sortie) et le RA5 je ne sais pas à quoi cela correspond.


    Réponse :

    TRISA = 0b00000001; // initialisation du port A
    PORTA = 0x00; // RAZ du PORTA
    Faux. Tu ne diriges en entrée que le port RA0 or RA3 nécessite aussi une direction du port entrée.
    Donc TRISA = 0b11011011 (ou 0xDB) est une réponse acceptable puisque on peut déclarer en entrée les broches du portA non exploitées qui ne sont pas représentées sur le schéma de câblage du PIC.

    4 eme question : Que doit on vérifier si l'on obtient le message : unable to open file '16F887A.h' à la compilation ?
    Réponse : Cela correspond à une erreur de chemin entre le projet et le fichier en question. Il faut vérifier si le fichier est bien situé dans le dossier qui l'appelle.
    Oui.
    5 eme question :
    a) Quelle limitation nous pose #include <MATH24F.H> ? Expliquer ?
    b) Comment contourner cette contrainte ?
    l'emploi de ce type de fonction est gourmand en ressource de calcul et la taille de la RAM sera la principale limitation.
    Pour contourner cette contrainte il faudra éviter les variables globales et avoir recours aux variables locales, limiter la taille des variables et au besoin utiliser l'espace mémoire flash.

    6 eme question : Parmi ces 2 montages qui en aucun cas ne peut fonctionner ? Justifier ?
    RB3 peut être configuré en entrée analogique donc c'est correct.
    RC3 par contre n'a pas d'entrée analogique, donc pas bon.

  13. #12
    invite03481543

    Re : Exercice à la maison PIC 16F887

    Citation Envoyé par stabiloboss12 Voir le message
    7 eme question : A quoi sert la pile à 8 niveaux dans du PIC16F887 ?

    Réponse : La pile à 8 niveaux permet de mémoriser et gérer les adresses de retour.
    Oui
    8 eme question : On désire afficher l'image de la tension analogique fournie par le potentiomètre sur les leds. Le montage peut-il fonctionner ? Pourquoi ?

    Réponse :
    D'après la datasheet du PIC : Le PORTB dispose de 8 pins I/O de RB0 à RB7 et tous les bits sont utilisés dans PORTB et TRISB, et les entrées du PORTB peuvent etre connectées à une résistance de rappel interne +5V. Cependant le PORTE, je ne sais pas si il peut etre connecté à une résistance interne. Donc je dirai oui si et seulement si le RE3 n'est pas connecté à cette résistance interne.
    La réponse est clairement non puisque RE3 n'est pas une entrée analogique permettant d'effectuer une mesure.
    Quant au portB il peut en effet gérer 8 sorties numériques et il n'y a pas à parler de pull-up dans ce cas là, puisque les pull-up sont uniquement accessibles en entrée.

    Il va falloir sérieusement revoir tout ça et bien comprendre comment est organisé l'architecture matérielle d'un PIC, car sans cela il est inutile de s'attaquer au moindre programme.

  14. #13
    invite9d36d5aa

    Re : Exercice à la maison PIC 16F887

    Tout d'abord merci de m'avoir répondu et d'avoir pris le temps de m'expliquer.

    Citation Envoyé par HULK28 Voir le message
    Faux. Tu ne diriges en entrée que le port RA0 or RA3 nécessite aussi une direction du port entrée.
    Donc TRISA = 0b11011011 (ou 0xDB) est une réponse acceptable puisque on peut déclarer en entrée les broches du portA non exploitées qui ne sont pas représentées sur le schéma de câblage du PIC.
    Au final je peux très bien assignés mes broches RB4 RB6 et RB7 comme sortie ?

    Donc je peux très bien faire un TRISA = 0b00001001 ?

    Citation Envoyé par HULK28 Voir le message
    Qui peut le plus ne peut pas forcément le moins, du moins en mode oscillateur à quartz sur OSC1 et OSC2.
    Il est également indiqué dans la DS que 31kHz est la limite basse dans ce mode, d'ailleurs les caractéristiques électriques ne sont jamais données en dessous de cette valeur, il y a bien une raison.
    Néanmoins on peut comme je l'ai déjà dit appliquer une base de temps externe sur OSC1 et descendre en dessous de 31kHz et même aller jusqu'au DC (arrêt de cadencement).
    La question est assez mal posée, en tout cas dans sa forme elle attend de votre part que vous expliquiez ce que je viens de développer afin que votre prof puisse se rendre compte si vous avez compris le système de cadencement du PIC en justifiant votre réponse.
    Je pense avoir compris ce que tu voulais dire : D'après la DS on à : Software selectable frequency range of 8MHz to 31KHz donc la PIC ne pourrait pas tourner à 10kHz ... DONC pour palier à ce problème on utilise une base de temps externe OSC1 qui permet de descendre de DC à 31 kHZ .

    Mais du coup, quel est la différence entre OSC1 et OSC2 ?

    PS : à la question 3 RA0 n'est pas une résistance interne mais un potentiomètre, et donc une entrée analogique.

    Citation Envoyé par HULK28 Voir le message
    Tu n'expliques rien tout simplement...
    Lorsque tu réponds tu dois justifier et fournir un dimensionnement, c'est ce qu'attendrons de toi tes futurs employeurs
    Là encore la question est floue mais sans doute volontairement pour que tu développes et fournisses un autre niveau d'explications.
    Il faut que tu expliques et au besoin que tu donnes un exemple chiffré, ton explication est beaucoup trop simpliste et ne justifie rien du point de vue du timer2 notamment.
    Je t'avoue que je suis plus à l'aise en math et en hyperfréquence que en programmation industriels PIC. J'essaye de comprendre la question mais j'ai du mal à cerner le problème.
    Je pense que pour répondre à cette question il faut utiliser une formule comme le montre le site web : test.png
    Images attachées Images attachées  

  15. #14
    invite03481543

    Re : Exercice à la maison PIC 16F887

    Citation Envoyé par stabiloboss12 Voir le message
    Au final je peux très bien assignés mes broches RB4 RB6 et RB7 comme sortie ?

    Donc je peux très bien faire un TRISA = 0b00001001 ?
    Oui.
    Mais du coup, quel est la différence entre OSC1 et OSC2 ?
    les pattes OSC1 et OSC2 sont prévues pour recevoir un quartz et l'ensemble forment un étage oscillateur avec la porte inverseuse interne en parallèle sur ces 2 broches.
    Ce qui permet d'obtenir à moindre coût une fréquence stable et précise.
    Si on injecte une base de temps directement sur OSC1 on exploite pas cet oscillateur, la précision et stabilité dépendra uniquement de la source injectée.

    Pour le timer2 la question qui t'a été posée consiste à démontrer si on peut compter des événements dans une période de 15ms.
    Le timer2 est un timer 8 bit, donc si on prend la fréquence min de 32KHz on a Fck=32kHz/4=8000 Hz => tck=125µs

    8 bit => 125.10^-6*8=1ms puis le timer déborde et repart de 0.
    Si on prend le prescaler au maximum -> PS=1:16 on atteindra au mieux 125µs*16*8=16ms

    Je te laisse conclure.

  16. #15
    invite9d36d5aa

    Re : Exercice à la maison PIC 16F887

    Bonjour,

    Citation Envoyé par HULK28 Voir le message
    Oui.


    les pattes OSC1 et OSC2 sont prévues pour recevoir un quartz et l'ensemble forment un étage oscillateur avec la porte inverseuse interne en parallèle sur ces 2 broches.
    Ce qui permet d'obtenir à moindre coût une fréquence stable et précise.
    Si on injecte une base de temps directement sur OSC1 on exploite pas cet oscillateur, la précision et stabilité dépendra uniquement de la source injectée.

    Pour le timer2 la question qui t'a été posée consiste à démontrer si on peut compter des événements dans une période de 15ms.
    Le timer2 est un timer 8 bit, donc si on prend la fréquence min de 32KHz on a Fck=32kHz/4=8000 Hz => tck=125µs

    8 bit => 125.10^-6*8=1ms puis le timer déborde et repart de 0.
    Si on prend le prescaler au maximum -> PS=1:16 on atteindra au mieux 125µs*16*8=16ms

    Je te laisse conclure.
    Pourquoi divise tu le Fck par 4 ? C'est par défaut lorsque tu rentre une fréquence externe ou interne pour ce type de PIC ?

    Mon raisonnement :

    - Si on prend un quartz soit 4MHz on a Fck = 4Mhz/4 = 1MHz soit Tck = 1 µs
    Donc ici le timer2 ne permet pas de compter les front montants d'un nombre d'impulsion s'étendant sur 15 ms

    - Si on prend la fréquence externe (minimale) du PIC qui est de 31kHz :

    Fck=31kHz/4=7750 Hz si et seulement si Tck=129µs

    Timer 8 bit => 129.10^-6*8=1,032 ms puis le timer déborde et repart de 0.
    Si on prend le prescaler au maximum -> PS=1:16 on atteindra 125µs*16*8=16,512ms

    Donc la réponse est oui, car le timer 2 s'étend à 16.512ms à partir de sa fréquence minimale.

  17. #16
    invite03481543

    Re : Exercice à la maison PIC 16F887

    il ne faut pas confondre Fosc et Fck.
    Le premier est la fréquence du quartz, par exemple 4MHz, ce qui compte est la fréquence de travail du PIC, elle vaut Fck=Fosc/4.
    D'ailleurs tu écris exactement ce que j'avais écrit.

    Tu peux prendre 31KHz, mais comme on ne sait pas ce que dis l'énoncé sur la source de cadencement ça n'a pas d'importance, ce qui compte pour ton prof c'est le raisonnement.

Discussions similaires

  1. Pic 16f887
    Par invite19e28531 dans le forum Électronique
    Réponses: 2
    Dernier message: 15/04/2015, 21h08
  2. Dac r2r, ADC et pic 16F887
    Par invite3bfc9d50 dans le forum Électronique
    Réponses: 25
    Dernier message: 20/02/2015, 09h53
  3. Les interruptions PIC 16F887.
    Par invitef09913aa dans le forum Électronique
    Réponses: 6
    Dernier message: 30/12/2012, 14h35
  4. Pic 16f887 recalcitrant....!?
    Par DENIS16 dans le forum Électronique
    Réponses: 16
    Dernier message: 06/09/2012, 21h54
  5. 16f887 a 16f636
    Par inviteb12aee8d dans le forum Électronique
    Réponses: 7
    Dernier message: 09/06/2009, 07h07
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...