Interruption TMR0 avec flowcode ?
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Interruption TMR0 avec flowcode ?



  1. #1
    inviteb68a7a76

    Interruption TMR0 avec flowcode ?


    ------

    Bonjour a tous!!

    Je suis sur un projet asservissement de vitesse, et pour se faire j'ai besoin de faire une interruption avec le TMR0.
    Sur flowcode, mon programme fonction correctement en simulation, je n'est aucun soucie pour compiler le programme dans la pic, mon programme main fonctionne normalement dans mon circuit électronique, MAIS l’interruption ne se fonctionne pas...
    j'ai essayer d'utiliser un oscillateur interne et un oscillateur RC mais toujours le même résultat.

    merci de votre aide!!

    matériel : pic 16f628A
    programmateur : PICKIT2
    logiciel : flowcode V5

    -----

  2. #2
    minioim

    Re : interuption TMR0 avec flowcode

    je voudrais pas dire de bétise, mais si t'avais un problème d'horloge, le pic tournerait pas donc a priori... pas ça.
    ton TIMER0 fonctionne en horloge interne ou externe? (par impulsion sur la broche RA4)

  3. #3
    inviteb68a7a76

    Re : interuption TMR0 avec flowcode

    Merci de ta réponse minioim,
    j'ai essayé les deux,et en externe j'ai relié la broche RA4 au + a travers une résistance de 2,2 k. Mais je sais pas s'il est nécessaire de faire un branchement sur RA4 avec un oscillateur INTOSC I/0

  4. #4
    minioim

    Re : interuption TMR0 avec flowcode

    je connais pas le 16f628A, mais si t'as configuré l'OPTION_REG pour que timer0 soit en interne, nul besoin d'avoir RA4 à 1 ou 0, cette broche sera ignorée (enfin utilisée en I/O simple)

    tu pourrais faire un schéma du montage? (voire une photo de ton montage en plus du schéma)
    et mettre ton code?

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

    Re : interuption TMR0 avec flowcode

    Citation Envoyé par maxichar74 Voir le message
    j'ai essayé les deux,et en externe j'ai relié la broche RA4 au + a travers une résistance de 2,2 k.
    euh par contre si t'es en externe (donc les impulsions sur RA4 qui incrémentent le timer0) et que tu as mis RA4 à Vcc... ça va pas déborder souvent ton timer


    je te suggère d'utiliser le mode debug du pickit2 pour voir si ton timer0 avance sur circuit réel... (bon par contre moi je commence à m'en servir, je ne pourrais pas t'indiquer la marche à suivre pour le pickit 2 mais sur internet ça se trouve )

  7. #6
    inviteb68a7a76

    Re : interuption TMR0 avec flowcode

    ok je vais essayer le debug avec flowcode.
    voici les schemas:
    et jutilise l'oscillateur interne : INTOSC I/0.
    circuit2.png
    prop inter.png
    programe.png

  8. #7
    inviteb68a7a76

    Re : interuption TMR0 avec flowcode

    j'ai essayé de faire une interruption avec la même configuration de l'oscillateur mais au lieu d'utiliser TMR0 j'utilise la l'interruption INT/RB0 et ça marche parfaitement... je pense donc que le problème vient de l’horloge ( soit interne soit externe suivent le config que j'utilise).

  9. #8
    minioim

    Re : interuption TMR0 avec flowcode

    il faudrait que tu vérifies l'état de tes bits de config d'option reg.

    là je vois 2 cas: soit ton timer0 ne s'incrémente pas: il est soit désactivé soit sa source est configurée sur qqc que tu n'as pas mis en place (quartz ou signal sur RA4)
    soit il s'incrémente, et donc déborde logiquement mais ne provoque pas d'interruption: ton bit T0IE dans Option_reg est peut être à 0


    enfin, je ne connais pas Flowcode, mais à la vue des images postées, tu as choisi "transition on T0CKI pin" dans le sens "High to low" ce qui signifie en gros que ton timer0 ne va s'incrémenter de 1 que si la pin RA4/T0CKI passe de 1 à 0. si tu la laisses à Vdd, elle ne passe pas à 0, ton timer0 reste à 0, il ne déborde pas, pas d'interruption.
    si par contre tu la relies, par exemple, à un bouton poussoir connecté entre la masse et la pin avec en plus une résistance de rappel "pull up" connectée entre la pin et l'alim Vcc (le genre classique: http://www.google.fr/imgres?imgurl=h...QEwBA&dur=4084)

    et bien, à chaque fois que tu appuieras sur ton bouton, le signal passera à 0, puis remontera à 1. donc en passant à 0 il va incrémenter le timer0.

    dans ton cas tu as mis un prediviseur à 1:128, donc il faudra en fait appuyer 128 fois, pour que le timer0 augmente de 1.
    et comme il déborde à 256... il faudrait appuyer 128*256 fois = 32768 fois... je sais pas si t'as le courage mais bon.... ^^

    sinon configurer le timer0 sur l'oscillateur dit "interne" qui est en fait un quartz relié entre RA7 et RA6.


    pour finir, sur ton schéma de code, bon encore une fois je connais pas flowcode mais... tu as mis "activer TIMER0" dans la routine d'interruption. ôte moi d'un affreux doute... l'interruption... c'est celle qui est déclenchée par le timer0 que tu actives dans l'interruption? ton timer0 il est bien activé autre part dans le prog principal hein?
    Dernière modification par minioim ; 09/01/2014 à 12h38.

  10. #9
    inviteb68a7a76

    Re : interuption TMR0 avec flowcode

    Je pensais que le timer0 sincèrement a chaque foi que l horloge interne déborde (lorsque l'on configurer le timer0 sur l'oscillateur "interne" ) donc avec les réglage que j'ai fait a 4MHz, l’incrémentation se fait a 4M/256= 15 kHz. Et le réglage que j'ai fait avec le prescaler rate 1:128 c'est que l’interruption se fait toute les 128 incrémentation du timer0 donc a 15k/128= 122Hz.

    Je pense aussi qu'il est plus pratique d'utiliser l’oscillateur interne ( c'est pas facile d'utilisé un interrupteur comme oscillateur, il faut être vraiment rapide^^, et j'ai pas de quartz*... )

    pour le réglage des bit T0IE dans Option_reg sur flowcode je crois qu'on ne peut pas. Mais si tu a un bon tuto pour apprendre les interruption en C sur mplab je suis preneur (j'ai déjà essayé en C, sans succès*...)

    et pour répondre a ta dernière question, il me semble que flowcode active le timer0 automatiquement lorsque je j'active l'interruption.

    En tout les cas merci de ton aide , c'est un boulot pour mes études, et ça fait 1 mois que je suis bloqué...

  11. #10
    inviteb68a7a76

    Re : interuption TMR0 avec flowcode

    j'ai trouvé le bout de programme de l'activation en c

    //Interruption
    //Interruption: Activer TMR0
    st_bit(option_reg,T0CS);
    st_bit(option_reg,T0SE);
    option_reg = (option_reg & 0xF0) | 0x06;
    st_bit(intcon,GIE);
    st_bit(intcon, T0IE);

  12. #11
    minioim

    Re : interuption TMR0 avec flowcode

    pour l'interrupteur en oscillateur il faut être rapide et précis oui ^^

    bon pour ton code, effectievment tu as trouve le bon morceau

    ligne par ligne ça dit:
    st_bit(option_reg,T0CS); //passer T0CS à 1 donc choisir la source du Timer 0... EXTERNE. (sur la pin RA4, cf mon message précédent) -> premier problème...
    st_bit(option_reg,T0SE); // passer T0SE à 1 donc choisir le front "1 vers 0" sur RA4 pour incrémenter.
    option_reg = (option_reg & 0xF0) | 0x06; // là si je comprend bien... effectuer l'opération "AND" entre option_reg et 11110000. donc ne garder en fait que l'état actuel des 4 bits "fort" et passer les autres à 0. ce qui fait que les bits PSA, PS2,PS1 et PS0 qui règlent le préscalaire sont à 0. puis on applique l'opération "OR" entre le résultat du "AND" (qui doit être xx110000 (x pour "inconnu)) et 0x06 soit 00000110.
    le résultat de cela donne bien xx110110. autrement dit: Timer0 configuré en source externe, sur les fronts descendant, PSA à 0 donc prescalaire sur timer 0, et PS2,1,0 à 110 donc prescal de 128.

    jusque là ça correspond à l'image que t'as mis.


    st_bit(intcon,GIE); // activation des interruptions
    st_bit(intcon, T0IE); // activation des interruptions du timer0


    BON résumons... tu as là DEUX soucis. un de sûr et un de potentiel...

    celui qui est sûr: tel quelle cette configuration active le mode externe du timer0 DONC ça ne peut pas s'incrémenter vu que tu n'as pas de signal "horloge" sur RA4.

    celui qui est potentiel: là tu as donné un morceau de code contenu dans la routine d'interruption. or il ne devrait pas être là, ou au moins il devrait être également ailleurs, dans le programme principal.
    ce morceau de code ACTIVE les interruptions (qui sont désactivées par défaut avant)

    donc en résumé, tu as mis dans un morceau de code qui ne peut être atteint que si les interruptions sont activées... le code permettant de les activer.

    un peu comme si la clé d'une porte fermée à clé était dans la pièce fermée...
    tu te doutes bien que ça peut pas marcher comme ça, pour ouvrir la porte il te faut la clé qui est derrière la porte fermée à clé dont il te faut la clé qui est derrière etc...

    DONC tu as 2 choses à régler: 1) repasser en mode interne pour le TIMER0 (vu que tu as une fenêtre qui permet de faire ça de façon graphique, pourquoi pas, ça devrait pas être trop dur )

    2) déplacer le "Activer TIMER0" dans le programme principal.

    si j'ai bien compris ce que tu as écris et montré, alors tu as ta "solution"

    est ce que tu aurais le programme C généré complet?
    Dernière modification par minioim ; 09/01/2014 à 14h13.

  13. #12
    inviteb68a7a76

    Re : interuption TMR0 avec flowcode

    je comprend, belle métaphore je sais pas mais je crois qu'il declare l'interuption avant le main.
    voila j'ai modifié la source d'uniterruption en interne.
    voila le programme complet :
    code part 1.png
    code part 2.jpg
    code part 3.jpg

  14. #13
    minioim

    Re : interuption TMR0 avec flowcode

    aaah non effectivement, avec le code complet on voit mieux ^^

    donc la partie avec le commentaire "//interruption" est bien déclarée dans le main, avant la boucle qui permet de faire tourner le programme donc au bon endroit.

    ce qui est par contre franchement dommage c'est que entre ton image 2 et 3, il manque 2 lignes de code... justement les 2 où doit être la valeur attribuée à option_reg... -_- pas de bol ^^

    bon mais en admettant que du coup ça soit correcte au niveau du code... tu as retesté sur ton montage?

    il y a encore quelque chose qui me chagrine dans le code, mais ne connaissant pas le fonctionnement de Flowcode, je ne peux pas en dire plus, ça me semble assez bordélique comme code ^^

    là il faut que quelqu'un de plus compétent sur flowcode s’intéresse à la question.

  15. #14
    inviteb68a7a76

    Re : interuption TMR0 avec flowcode

    oui c'est vrais c'est trés bordélique^^
    oui j'ai retesté... toujours pareil :'(
    escuse moi j'ai pas vu qu'il en manquait un bout...
    voila :

    //Déclarations de fonction Macro
    void FCM_inter();

    //Déclarations de Variable
    #define FCV_FALSE (0)
    #define FCV_TRUE (1)
    MX_UINT8 FCV_X;
    MX_BOOL FCV_A;
    MX_BOOL FCV_B;

    autre question sais tu si je peu copier ce code et tout les bibliothèque (comme <system.h> ) et les copier dans MPLAB pour modifier ce code ?

  16. #15
    minioim

    Re : interuption TMR0 avec flowcode

    je ne sais pas, ça dépend si le compilo de flowcode peut s'intégrer à mplab :/

    mais si je peux te donner un conseil:

    as tu lu les cours de Bigonoff? (au moins la première partie sur les 5, qui explique toutes les bases à connaître) si oui, très bien ^^ si non -> fonce la lire
    c'est à propos de l'assembleur, mais surtout ça donne toutes les infos à connaître sur les pics.

    Flowcode a l'air d'être un IDE assez "graphique". pratique mais au final tu ne sais pas vraiment ce que tu fais...

    donc quelques notions de C (vraiment les bases, en gros la syntaxe quoi), les connaissances avec Bigonoff et un compilo C tournant sous mplab ou autre IDE et tu feras des trucs nettement plus efficace et clair...

  17. #16
    inviteb68a7a76

    Re : interuption TMR0 avec flowcode

    Ça marche je vais lire ça attentivement
    je vais me remettre au C, je te tien au courant si je trouve la solution. Et ca tombe bien, ses cours sont pour les pic 16f84, j'en ai !!
    Encore merci pour ton aide

  18. #17
    minioim

    Re : interuption TMR0 avec flowcode

    je t'en prie.

Discussions similaires

  1. Interruption TMR0 avec Flowcode ?
    Par inviteb68a7a76 dans le forum Électronique
    Réponses: 1
    Dernier message: 10/01/2014, 10h03
  2. flowcode (calcul et interruption)
    Par invitec6c4026c dans le forum Électronique
    Réponses: 13
    Dernier message: 07/04/2011, 20h43
  3. FLOWCODE-interruption sur PORTB
    Par invited8a36ace dans le forum Électronique
    Réponses: 3
    Dernier message: 23/01/2011, 16h45
  4. Interruption sur flowcode rapport entre fréquence et temps
    Par invite6fcd00b4 dans le forum Électronique
    Réponses: 21
    Dernier message: 28/03/2010, 00h39
  5. PPE: interruption sous flowcode
    Par invite1cf45d2f dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 08/05/2009, 20h05
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...