Interruption pic 16f876
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Interruption pic 16f876



  1. #1
    Fernando_86

    Interruption pic 16f876


    ------

    Bonjour,

    J'ai une carte avec un pic 16f876. Dans la doc, je trouve cela sur les interruptions:
    - 4 sources d'interruption :
    - Externe par la broche partagée avec le Port B : PB0
    - Par changement d'état des bits du Port B: PB4 PB5 PB6 ou PB7
    - Par un périphérique intégré dans le chip: écriture de Data en EEPROM
    terminée, conversion analogique terminée, réception USART ou I2C.
    - Par débordement du Timer

    Je souhaite déclencher une voie sur un changement d'état d'une autre (signal externe). Je ne sais pas si je dois me brancher sur PB0 ou PB4 par exemple ? Je ne vois pas la différence entre ces deux sources d'interruption ?

    Merci de votre aide.

    -----

  2. #2
    luc_1049

    Re : Interruption pic 16f876

    bonjour

    Que dit précisément le datasheet, avez vous regardé le chapître sur le port B dans celui ci ?

    cdlt

  3. #3
    Fernando_86

    Re : Interruption pic 16f876

    J ai bien lu la doc. Je pense que pour une interruption sur un signal extérieur RB0 est la solution mais je ne vois pas la différence avec les 4 autres entrées qui peuvent s interrompre sur un changement d état. Si ces interruptions sont nommées séparément, il doit y avoir une raison ... Pouvez vous m éclairez ?

  4. #4
    spown

    Re : Interruption pic 16f876

    Bonjour/bonsoir fernando et à tout le groupe.

    RB0 et RB4 ~ RB7 peuvent être programmer comme des interruptions via un signal externe. Mais RB0 peut être relier pour le timer0 pour le trigger. Tu peux utiliser les 5 .

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

    Re : Interruption pic 16f876

    Bonjour

    Une difference importante, à mon avis, entre les interruptions sur RB0 et celle sur RB4-7, c'est que les secondes sont sur un changement d'état d'une des pins, passage de 0 à 1 ou passage de 1 à 0.
    Pour RB0 on choisit (INTEDG de OPTION) si l'interruption est sur un passage de 1 à 0 ou un passage de 0 à 1, c'est à dire que si l'on choisi le passage de 1 à 0, quand RB0 passera de 0 à 1 il n'y aura pas d'interruption.

    Gilles

  7. #6
    Fernando_86

    Re : Interruption pic 16f876

    Ok j ai compris la différence maintenant. Mon besoin est de déclencher une sortir sur le changement d état d'une entree avec un délai. J avais déjà réalisé un code pour gérer ce délai avec le timer 0 et utilisé la pin RB0. Sur la carte que j ai récupéré pour developer cette pin est prise pour le LCD. Je voulais réaliser la même fonction avec RB5. Malheureusement je ne pourrais pas utiliser le timer. Si j utilise les fonctions delay quel sera la différence de précision sur le résultat du délai comparé au timer 0?

  8. #7
    terriblement

    Re : Interruption pic 16f876

    et pourquoi ne pourrais-tu pas utiliser un timer ?

    edit: Si tu fais ca avec les delay, il faut prendre en compte la vitesse du CPU au moment d'entrer dans la fonction (pour que tu changes la vitesse dans ton programme).
    Si des interruptions ont lieu pendant ta fonction delay, elle en sera d'autant retardée !
    Dernière modification par terriblement ; 13/03/2014 à 07h46.

  9. #8
    Fernando_86

    Re : Interruption pic 16f876

    Je ne pourrais pas utiliser le timer avec RB5 car il est relié à RB0 ou alors je n ai encore pas compris le principe ?

  10. #9
    terriblement

    Re : Interruption pic 16f876

    rien ne t'empeche, dans l'interruption générée par RB5, d'allumer le timer0.

  11. #10
    Fernando_86

    Re : Interruption pic 16f876

    Ok mais alors ça veut dire quoi que le timer 0 est relié à RB0 ?

  12. #11
    terriblement

    Re : Interruption pic 16f876

    Si je ne me trompe pas (de souvenir), que sur une interruption du timer0, l'etat de la broche RB0 peut etre automatiquement modifiée (tu as dans ce cas un "hard" interrupt et non soft.
    à vérifier.

  13. #12
    gedonet

    Re : Interruption pic 16f876

    Citation Envoyé par Fernando_86 Voir le message
    Ok mais alors ça veut dire quoi que le timer 0 est relié à RB0 ?
    Bonjour

    RB0 n'est pas relié au Timer0, il y a RA4 qui sert d'entrée de Timer0 mais dans ce cas, timer0 est un compteur d'événement exterieur, ce n'est pas exactement la même chose qu'un chrono ( il y a aussi une astuce pour transformer RA4 en declancheur d'interruption externe).

    Dans ton cas, et en suivant les conseilles de terriblement tu utilises l'interruption de RB5 pour lancer la mesure.
    Tu veux que dés que RB5 a provoqué une interruption ton programme lance le Timer0, seulement de cette maniere tu perds quelques cycles de precision, le temps de reconnaitre l'interruption et de reseter le Timer0, etc.
    L'astuce consiste à comprendre que ces operations, reconnaissance de l'INT RB5 et reset de Timer0 prennent exactement et à chaque fois le même nombre de cycles, donc au lieu d'écrire 0 dans le Timer0, tu ecris le nombre de cycle perdu, environ une dizaine et de cette maniere tu as le maximum de precision. Pour compter les cycles perdus, en assembleur, on compte les lignes ( plus deux cycles pour l'interruption).

    Dans ton cas précis, si j'ai bien compris, au lieu de charger le delai dont tu as besoin, tu charges le delai plus les cycles perdus.

    Gilles
    Dernière modification par gedonet ; 15/03/2014 à 00h18.

  14. #13
    Fernando_86

    Re : Interruption pic 16f876

    OK merci pour ces explications. Je vais me servir de RB5, et effectivement pour plus de précision je démarre le timer0 plus tard. J'ai encore une autre question: mon boiter est programmable avec des délais de 250us à 1s avec des pas de 250us par exemple. Est-ce une bonne méthode de:
    - Comme j'ai un quartz de 4Mhz --> 1 instruction/1us
    Si je règle le timer0 pour exécuter 250 instructions et que je réalise une boucle for afin de réaliser des tempo jusqu'à la seconde.

    Est -ce que je serais toujours aussi précis ? Aurais-je la même précision sur les tempo avec les boucles for ? Est-ce ce type de méthode qu'il faut utiliser ou faire ses tempo avec un timer 16 bits par exemple ?

  15. #14
    RISC

    Re : Interruption pic 16f876

    Salut,

    La seule solution pour avoir des tempos précises est d'utiliser les interruptions avec un TIMER 16 bits. En langge C il n'est pas possible de prédire le temps d'exécution des instructions.
    Regardes les cours / tutoriels sur le PIC16. Tu trouveras des exemples pour les PIC16 + timer
    * http://www.aix-mrs.iufm.fr/formation...indexPIC_C.htm
    * http://bepelectronique.free.fr/index...=62&Itemid=219
    * http://www.gooligum.com.au/tutorials.html

    a+

  16. #15
    Fernando_86

    Re : Interruption pic 16f876

    Bonjour,

    J'ai essayé d'avancer ces derniers jours. J'ai donc décidé d'utilisé la patte RB6 pour atteindre un changement d'état pour gérer mon interruption; l'interruption déclenche ensuite la patte RB7 mais je me suis rendu compte que ce n'était pas possible car pour le mode interruption les pattes RB4, RB5, RB6 et RB7 fonctionne ensemble. Donc si on veut un changement d'état sur une seul patte, on bloque trois pattes pour rien (il faut les mettre à la masse). Quel est l'intérêt d'une interruption sur 4 broches ? Donc je vais me rabattre sur RB0; malheureusement elle sert déjà au data pour mon LCD. Est-il possible qu'elle fasse les deux sachant que dès que je me met dans le mode où j'ai besoin de l'interruption, je n'ai plus besoin du LCD et vice-versa ? Si cela est possible comment dois-je réaliser le câblage ? Enfin, une dernière question: je déclare les données pour mon LCD de cette manière "#define LCD_DATA PORTB" car mes broches sont RB0, RB1, RB2 et RB3. Si je veux décaler à RB1, RB2, RB3 et RB4 comment dois-je le déclarer au niveau du define ? Je sais ça fait beaucoup d'interrogations .... Je vous remercie d'avance de votre patience.

  17. #16
    RISC

    Re : Interruption pic 16f876

    Salut,

    Il faut éviter autant que possible d'utiliser RB6 et RB7 qui doivent être prioritairement utilisés pour l'ICSP (connection aux outils).

    a+

  18. #17
    paulfjujo

    Re : Interruption pic 16f876

    bonsoir,


    et avec un OU à diodes ?
    pour aiguiller un changement d'etat de plusieurs pins vers RB0...
    ensuite lire l'etat des pins pour savoir qui a declenché l'interrupt..
    J'avais utilisé ceci pour un clavier à 5 touches ...

    Nom : OuaDiodes.jpg
Affichages : 97
Taille : 81,0 Ko

    Je pense que la difference d'usage de interrupt RB0 et interrupt RB4-7 est que
    RB0 IT declenche sur un front montant ou descendant
    alors que IT RB4-7 sur changement d'etat d'une des pins...

    Meme si chacune des pattes peut generer une IT, tu peux tres bien gerer l'IT RB4-7
    que pour la pin considérée et ne pas traiter les autres pins.

    Pour le LCD
    on declare le PORT de control et le port de Data
    mais aussi quelque par les Pins utilisée pour les Data
    ton code ?
    Dernière modification par paulfjujo ; 22/03/2014 à 18h38.

  19. #18
    Fernando_86

    Re : Interruption pic 16f876

    J'ai pas vraiment compris le schéma et comment l'inclure à mon projet avec l'entrée RB0. Sinon la déclaration de mes sorties pour programmer le LCD sont les suivantes dans mon programme :

    #define LCD_DATA PORTB
    #define LCD_EN RB4
    #define LCD_RS RB5

  20. #19
    paulfjujo

    Re : Interruption pic 16f876

    bonjour,



    il ne suffit pas de declarer #define LCD_DATA PORTB
    il faut definir quel est le quartet de donnee ..
    donc de preciser RB0..RB3 quelque part dans le programme.
    ou faire le contraire
    LCD Port data => RB4-RB7
    #define LCD_EN RB3
    #define LCD_RS RB2
    ce qui laisse libre RB0 .. pour un eventuel traitement IT RB0


    Post ton code et ton schema ..si tu veux de l'aide efficace.

    le bout de schema est un exemple pour aiguiller 5 etats du port D vers RB0
    pour que l'interupt RB0 en fasse le traitement..des qu'une entree RDx est activee.(=0)
    Dernière modification par paulfjujo ; 23/03/2014 à 17h46.

Discussions similaires

  1. Pic 16f876
    Par ksing dans le forum Électronique
    Réponses: 1
    Dernier message: 22/05/2013, 14h01
  2. Problème d'interruption sur 16f876
    Par jc_renaud dans le forum Électronique
    Réponses: 5
    Dernier message: 10/09/2012, 09h32
  3. PIC : interruption externe et interruption on change ?
    Par jlg_47 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 13h41
  4. PIC 16F876 et interruption
    Par invitee0527b85 dans le forum Électronique
    Réponses: 6
    Dernier message: 22/07/2010, 15h24
  5. interruption A/D DU PIC 16F876
    Par khalid dans le forum Électronique
    Réponses: 5
    Dernier message: 09/01/2006, 21h02
Découvrez nos comparatifs produits sur l'informatique et les technologies.