interruption sur TIMER0 ....HELP !!
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

interruption sur TIMER0 ....HELP !!



  1. #1
    inviteb26dc581

    interruption sur TIMER0 ....HELP !!


    ------

    bonjour à tous,
    je programme en basic (proton IDE) et j'ai besoin d'utiliser une interruption sur le timer0.
    le principe de mon programme est simple : une diode verte est toujours allumée et à chaque débordement de ce timer0 la diode verte s'éteint et une autre diode rouge s'allume pendant 2s, et ainsi de suite...... le problème c'est qu'il reste toujours dans le programme principal c'est à dire que la diode verte est toujours allumée et que la diode rouge ne s'allume jamais !!!

    Code:
            Set_Defaults PROTON_10
            Device 16f77
            CONFIG HS_OSC ,CP_OFF,BODEN_OFF ,PWRTE_OFF,WDT_OFF
    
            on_interrupt goto red
    
               dim v as word
               dim i as byte
               i =0
               intcon.7 = 0        ' GIE = 0
               INTCON.5 = 0       ' TMR0IE = 0 *** Enables the TMR0 interrupt  
               goto debut
    red:
               i = i+1
               if i == 100 then
                   portc.2 = 1
                   portc.3 = 0
                   delayms 2000
                   i = 0
               else
                   intcon.2 = 0        ' TMR0IF = 0        Clear Flag
                   tmr0 = 0            ' Reset TIMER0
               end if
               CONTEXT RESTORE
    debut:        
               option_reg.5 = 0
               option_reg.4 = 0
               option_reg.3 = 0   ' Prescaler is assigned to the Timer0 module
               option_reg.2 = 1   '  prescaler   1 : 256
               option_reg.1 = 1   '
               option_reg.0 = 1   '
               
               trisc.2 = 0
               trisc.3 = 0
               portc.2 = 0
               portc.3 = 0
               TMR0=0	           ' Reset TIMER0
               intcon.7 = 1        ' GIE = 1
               INTCON.5 = 1        ' TMR0IE = 1 *** Enables the TMR0 interrupt
    boucle:           
               inc tmr0
               portc.3 = 1
               portc.2 = 0
               goto boucle
    d'après mes calculs (Corrigez moi si je me trompe):
    horloge= 10 Mhz
    le timer est connecté sur l'horloge interne => sa fréquence=2500Khz
    j'ai utilisé le prescaler 1:256
    Donc,
    le timer0 déborde à chaque 20 ms :
    2500Khz / (256*256) = 38,14 Hz
    1 / 38.14 = 20 ms

    la variable "i" sert de compteur : pour que la diode rouge s'allume chaque environ 2s le timer0 doit déborder 100 fois.

    Merci d'avance pour votre aide !

    -----

  2. #2
    Jehudiel

    Re : interruption sur TIMER0 ....HELP !!

    Bonjour,

    Programmation parlant, je peux rien pour toi déso, mais mathématiquement parlant, il y a des corrections à apporter à tes calculs:

    1/38.14 = 0.262ms et des poussières.. et non 20ms. 50 Hz donne 20ms ^^
    Parle peu, mais souvent pour dire des conneries!

  3. #3
    hissokaaaa

    Re : interruption sur TIMER0 ....HELP !!

    bonjour ;
    1/38.14 = 0.262ms????????
    38.14 hz===>
    1/38.14 = 0.262s===>26.2 ms
    mathématiquement parlant comme tu le dis

  4. #4
    inviteb26dc581

    Re : interruption sur TIMER0 ....HELP !!

    la fréquence du pic est 2500Khz et non pas 50hz.
    le timer0 déborde toute les 26ms pour être exacte (comme vous l'avez dis), mais la précision n'est pas exigée
    Qui pourrait bien m'aider

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

    Re : interruption sur TIMER0 ....HELP !!

    Bonjour,

    Ne connaissant pas le langage que tu utilise j'ai peur de dire des bêtises, mais il me semble qu'à aucun moment dans ton programme tu viens tester le moment où le flag TMR0IF (intcon.2) passe à 1.
    Ca me paraitrai donc normal qu'il ne rentre jamais dans ta routine d'interruption.

  7. #6
    inviteb26dc581

    Re : interruption sur TIMER0 ....HELP !!

    bonjour,
    j'ai autorisé l'interruption sur le timer0 :
    Code:
    intcon.7 = 1        ' GIE = 1
    INTCON.5 = 1        ' TMR0IE = 1 *** Enables the TMR0 interrupt
    on_interrupt goto red : veut dire que lorsqu'on a une interruption le programme exécute le sous programme "red".
    J'ai adoplté votre idée en ajoutant la boucle ci-dessous à mon programme pour tester sur le flag de timer0 "TMR0IF" :
    Code:
    if intcon.2 = 1 then 
               goto red
               else
               end if
    ...et j'obtient toujours le même résultat !!!!!!
    HEEEELP !!!

  8. #7
    Jehudiel

    Re : interruption sur TIMER0 ....HELP !!

    Citation Envoyé par hissokaaaa Voir le message
    bonjour ;
    1/38.14 = 0.262ms????????
    38.14 hz===>
    1/38.14 = 0.262s===>26.2 ms
    mathématiquement parlant comme tu le dis
    Vui, me suis fait eut :/ je relirai la prochaine fois...
    Parle peu, mais souvent pour dire des conneries!

  9. #8
    invite7a49d0d5

    Cool Re : interruption sur TIMER0 ....HELP !!

    Bonjour à tous,

    2 remarques :

    - il y a un "CONTEXT RESTORE" à la "fin" de l'interruption... ok...
    donc ne manquerait-il pas un "CONTEXT SAVE" au début???
    ensuite le goto red... pourquoi ne pas mettre le code de l'interruption
    juste après le "on_interrupt"... pourquoi ce goto???
    enfin, ne manque-t-il pas un "retfie" ou "retw" après "CONTEXT RESTORE"...
    (un return d'interruption...)...

    - après ton delai de 2s, tu dois aussi effacer le flag, si tu veux
    re-autoriser l'interruption... (intcon.2 = 0)... et donc que ça
    puisse fonctionner...

    vede
    ;O]
    _________________________
    no pub...

  10. #9
    invite7a49d0d5

    Re : interruption sur TIMER0 ....HELP !!

    Citation Envoyé par Bastoss Voir le message
    Bonjour,

    Ne connaissant pas le langage que tu utilise j'ai peur de dire des bêtises, mais il me semble qu'à aucun moment dans ton programme tu viens tester le moment où le flag TMR0IF (intcon.2) passe à 1.
    Ca me paraitrai donc normal qu'il ne rentre jamais dans ta routine d'interruption.
    Bonjour Bastoss,

    ça n'est pas vraiment une "bêtise"...
    mais c'est inutile de tester ce bit...
    car c'est l'interruption qui le détecte...
    (c'est le principe de l'interruption)

    si on teste le bit "manuellement",
    il n'y a plus aucun intérêt à utiliser une interruption...

    on peut parfois le tester DANS l'interruption,
    quand on en utilise plusieurs (INT TMR0 + INT TMR1 + INT RBO par exemple),
    afin d'identifier laquelle vient d'être "enclenchée"...

    vede
    ;O]
    ________________________
    no pub...

  11. #10
    inviteb26dc581

    Question Re : interruption sur TIMER0 ....HELP !!

    bonjour,

    "CONTEXT RESTORE" : veut dire restorer les données ET retour au programme principal, d'après l'aide du Proton IDE :
    Code:
    CONTEXT RESTORE        ' Restore the registers and exit the interrupt
    la syntaxe de "on_interrupt" est la suivante, aussi d'après l'aide :
    Code:
    ON_INTERRUPT {Goto} Label
    ("goto" est optionnelle).

    j'ai ajouté "CONTEXT SAVE" au début de la routine d'interruption...et j'ai toujours le même résultat !!!!!

    j'ai aussi ajouté à la fin de la routine d'interruption " intcon.2 = 0 "
    AUCUN CHANGEMENT !!!

  12. #11
    invite7a49d0d5

    Cool Re : interruption sur TIMER0 ....HELP !!

    re ;O]

    autres remarques :

    - indispensable : il faut désactiver le convertisseur ADC, avec ADCON1 = 7

    -enlèves cette ligne
    inc tmr0
    dans boucle:

    car elle ne sert à rien (le timer s'incrémente seul... c'est le principe d'un timer...)...
    au contraire... elle fausse tous tes calculs de durée de temporisation (20ms...)...

  13. #12
    hissokaaaa

    Re : interruption sur TIMER0 ....HELP !!

    re bonjour
    je sais que l'interruption ne doit jamais "interrompre" l'action de recevoir des données sur les ADC sinon tu risqueras de perdre ces données
    +1 vede

  14. #13
    invite7a49d0d5

    Cool Re : interruption sur TIMER0 ....HELP !!

    Citation Envoyé par hissokaaaa Voir le message
    re bonjour
    je sais que l'interruption ne doit jamais "interrompre" l'action de recevoir des données sur les ADC sinon tu risqueras de perdre ces données
    +1 vede
    re ;O]

    et surtout là il n'utilise pas le module ADC dans son projet...
    donc faut le désactiver... pour pouvoir utiliser les IO concernées
    en IO numériques...

  15. #14
    inviteb26dc581

    Unhappy Re : interruption sur TIMER0 ....HELP !!

    re bonjour,
    pour le cas de mon programme les sorties portc.2 et portc.3 sont toutes les deux numériques.
    il n'y a aucun intérêt de configurer le ADC.

    j'ai enlevé "inc tmr0" ...TOUJOURS RIEN ! ! !
    HEEEELP !

  16. #15
    invite7a49d0d5

    Cool Re : interruption sur TIMER0 ....HELP !!

    re ;O]

    une suggestion : je t'expliques comment je fais quand je
    rencontre ce genre de problème : je repars de zéro, cad
    je commence par faire fonctionner l'exemple fourni avec
    la doc de mon compilo...

    une fois qu'il fonctionne (car il doit fonctionner, vu que c'est
    le code proposé par le compilo), je l'adapte à mes besoins,
    j'expérimentes... etc...

    si l'exemple ne fonctionne pas, je me rends compte que le
    problème viens d'ailleurs (Fusibles, MCLR, schéma, ...)

    donc, un exemple qui fait clignoter 2 leds sur B0 et B1,
    en utilisant TMR0 et son interruption, trouvé page 277
    du manuel du compilo...
    suffit de changer 84 par 77 première ligne (DEVICE)...
    et mettre des leds sur RB0 et 1... ou changer les ports de l'exemple...
    et les fusibles...

    http://www.compile-it.com/protonds/p..._userguide.pdf

    testes le... ça doit fonctionner...
    (les 2 leds clignotent à des fréquences différentes)...

    mais c'était juste une suggestion...
    vede
    ;O]
    ___________________
    no pub...

    ps : et rajouter ADCON1= 7 après TRISB =xxxx

  17. #16
    invite7a49d0d5

    Cool Re : interruption sur TIMER0 ....HELP !!

    ps :

    ta broche MCLR est bien connectée à VDD (via une résistance)?

  18. #17
    inviteb26dc581

    Re : interruption sur TIMER0 ....HELP !!

    re bonjour,
    Voilà il suffisait d'y penser
    MERCI vede !!!

Discussions similaires

  1. interruption sur MikroC
    Par Pilou81 dans le forum Électronique
    Réponses: 3
    Dernier message: 04/05/2010, 22h36
  2. interruption sur pic
    Par alainav1 dans le forum Électronique
    Réponses: 4
    Dernier message: 02/08/2009, 20h13
  3. Interruption Timer0 PIC16F628 et CCS
    Par invite70684c77 dans le forum Électronique
    Réponses: 1
    Dernier message: 15/05/2009, 16h56
  4. interruption sur HI-TECH
    Par inviteb5700de1 dans le forum Électronique
    Réponses: 1
    Dernier message: 16/03/2009, 14h26
  5. frequence du timer0 sur pic
    Par alainav1 dans le forum Électronique
    Réponses: 1
    Dernier message: 27/10/2008, 10h43
Découvrez nos comparatifs produits sur l'informatique et les technologies.