Probleme TRM0 Pic 16F628
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Probleme TRM0 Pic 16F628



  1. #1
    MorpheusPic

    Probleme TRM0 Pic 16F628


    ------

    salut

    sur un montage que jais creer jais un probleme de fonctionement aleatoire du timer0 au moment de la mise sous tensio

    mon timer0 gere 12 leds en pwm ...

    a la mise sous tension du circuit souvent sa marche mes leds s'allument , et des fois elle ne sallument pas

    mon timer est initialiser de la sorte
    TMR0 = 0
    T0IE = 1
    T0IF = 0
    PEIE= 1
    PSA = 1
    T0CS = 0

    une question que je me pose il y a til un bit pour activer le timer0 car jais rien trouver sur les datasheet (comme pour le timer 1 "Tmr1ON" ?)

    merci pour votre aide

    -----

  2. #2
    vincent66

    Re : Probleme TRM0 Pic 16F628

    Hello !
    Vérification et rafraîchissement de mémoire faits, je te confirme qu'il n'y a pas de bit d'activation genre tmr0on.
    Ta séquence d'initialisation ne me semble pas fondamentalement erronnée, peut-être qu'il y a un problème au niveau de l'ordre dans lequel tu initialises les bits de configuration..?
    A ton service dans la mesure du possible !
    Vincent

  3. #3
    MorpheusPic

    Re : Probleme TRM0 Pic 16F628

    salut jais trouver le probleme

    en fait mon programme qui gere les 12 PWM est trop long a etre executer ...

    quand le timer deborde jarrive bien a mon vecteur d'interruption
    'efface le flag T0IF ,le programme des 12 PWM s'execute mais
    avant d'etre finit d'etre execute le timer a de nouveau deborder
    et quand je retourne au programe principale je retourne aussitot a mon vecteur d'interruption ...

    donc il me faudrait reduire mon programme mais je voi pas commant faire

    p_led# sont niveau d'illumination des leds

    leds.# est le niveau de la led:

    -si leds.# = 1 la led s'allume progresivement a la vitesse definit par atack

    -si leds.# = 0 la led s'eteind progresivement a la vitesse definit par release

    Code:
    '========================================== VECTEUR INTERRUPTION ==========================================        
    
    Myint:
            
            clear t0if 
            inc tick2
                    if tick2 > atack then 
                    clear tick2
            
                    if leds.0 = 1 and p_led1 < 100 then inc p_led1
                    if leds.1 = 1 and p_led2 < 100 then inc p_led2
                    if leds.2 = 1 and p_led3 < 100 then inc p_led3 
                    if leds.3 = 1 and p_led4 < 100 then inc p_led4 
                    if leds.4 = 1 and p_led5 < 100 then inc p_led5
                    if leds.5 = 1 and p_led6 < 100 then inc p_led6 
                    if leds.6 = 1 and p_led7 < 100 then inc p_led7 
                    if leds.7 = 1 and p_led8 < 100 then inc p_led8 
                    if leds.8 = 1 and p_led9 < 100 then inc p_led9                                       
                    if leds.9 = 1 and p_led10 < 100 then inc p_led10 
                    if leds.10 = 1 and p_led11 < 100 then inc p_led11 
                    if leds.11 = 1 and p_led12 < 100 then inc p_led12 
                    end if
            
            
            
            inc tick3
                    if tick3 > release then 
                    clear tick3
            
                    if leds.0 = 0 and p_led1 > 0 then dec p_led1
                    if leds.1 = 0 and p_led2 > 0 then dec p_led2
                    if leds.2 = 0 and p_led3 > 0 then dec p_led3
                    if leds.3 = 0 and p_led4 > 0 then dec p_led4
                    if leds.4 = 0 and p_led5 > 0 then dec p_led5
                    if leds.5 = 0 and p_led6 > 0 then dec p_led6
                    if leds.6 = 0 and p_led7 > 0 then dec p_led7
                    if leds.7 = 0 and p_led8 > 0 then dec p_led8
                    if leds.8 = 0 and p_led9 > 0 then dec p_led9
                    if leds.9 = 0 and p_led10 > 0 then dec p_led10
                    if leds.10 = 0 and p_led11 > 0 then dec p_led11
                    if leds.11 = 0 and p_led12 > 0 then dec p_led12
            
                    end if
            
            
           
             
            inc tick1
            
            if tick1 > 100 then clear tick1
            if p_led1 > tick1 then
            led1 = 1
            else
            led1 = 0
            end if
            
            if p_led2 > tick1 then
            led2 = 1
            else
            led2 = 0
            end if
            
            if p_led3 > tick1 then
            led3 = 1
            else
            led3 = 0
            end if
            
            if p_led4 > tick1 then
            led4 = 1
            else
            led4 = 0
            end if
            
            if p_led5 > tick1 then
            led5 = 1
            else
            led5 = 0
            end if
            
            if p_led6 > tick1 then
            led6 = 1
            else
            led6 = 0
            end if
            
            if p_led7 > tick1 then
            led7 = 1
            else
            led7 = 0
            end if
            
            if p_led8 > tick1 then
            led8 = 1
            else
            led8 = 0
            end if
            
            if p_led9 > tick1 then
            led9 = 1
            else
            led9 = 0
            end if
            
            if p_led10 > tick1 then
            led10 = 1
            else
            led10 = 0
            end if
            
            if p_led11 > tick1 then
            led11 = 1
            else
            led11 = 0
            end if
            
            if p_led12 > tick1 then
            led12 = 1
            else
            led12 = 0
            end if
            
            
    		Context Restore

  4. #4
    Gérard

    Re : Probleme TRM0 Pic 16F628

    Juste une question, c'est écrit en quel langage ?

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

    Re : Probleme TRM0 Pic 16F628

    Bonjour,

    il faut initialiser le timer0 et autoriser son interruption au bon moment.
    Un timer 8 bits déborde très vite donc il faut l'activer à bon escient.

    On peut gérer autant de PWM que l'on veut, tout le secret réside dans la gestion des interruptions, il faut rafraichir les interruptions ou en stopper d'autres selon les besoins et les priorités.
    Quand on fait un programme, il faut prendre la bonne habitude de dresser un flowchart ou d'établir un graphe des temps, de cette manière on réduit considérablement le temps de développement et on évite ce genre d'écueuil.

    Avec l'habitude tu apprendras à gérer les actions selon des compteurs qui régissent les priorités d'actions (par exemple toutes les 10ms,100ms, 1s, 10s, 1h, etc).
    Ces garde-fou permettent d'organiser sans collisions les tâches et d'éviter les oublis de traitement.
    @+

  7. #6
    invite03481543

    Re : Probleme TRM0 Pic 16F628

    Re,
    C'est normal que tu aies mis PSA à 1?
    Cela assigne le prescaler au watchdog pas au Timer0.

  8. #7
    MorpheusPic

    Re : Probleme TRM0 Pic 16F628

    salut

    le programme est ecrit avec Proton IDE SE

    etant donne que jutilise que les interruptions du timer, pour activer les interruption je met a 1 le bit GIE au debut de mon programe principale

    je peut pas reduire le temp entre 2 passages das mon interruption
    car apres je commence a voir un scintillement sur mes leds

    je voi pas trop ce que tu veut dire avec les "garde-fou" ?

    mais jutilise des compteur "tick" qui me permetent d'executer des action tout les x passages dans mon interruption

    oui si je rajoute le prescaler jais mes leds qui commence a scintiller


    a+

  9. #8
    MorpheusPic

    Re : Probleme TRM0 Pic 16F628

    je voudrais bien calculer la frequence de passage dans mon interruption mais jais peur de me tromper ...

    mon quartz est de 4MHz

    j'utilise le timer0 sans prescaler

    donc d'apres mes calculs

    Fosc/4 = 1MHz

    1MHz / 256 ( timer0) sa me donne une frequence d'interuption de 3,9 Khz

    mes pwm etant sur 100 niveau 3900Hz / 100 = 39 Hz

    donc si je me trompe pas la frequence de mes pwm est de 39 Hz ??

    je vais peut etre diminuer le nombre de palier de mes pwm pour accelerer tout sa

  10. #9
    Gérard

    Re : Probleme TRM0 Pic 16F628

    Juste une parenthèse : dans la doc Proton, il est conseillé d'écrire les routines d'interruption en asm pour éviter des conflits de variables.

    Que penses-tu de ce compilateur ?

  11. #10
    MorpheusPic

    Re : Probleme TRM0 Pic 16F628

    salut

    oui il ne faut pas utiliser de fonction speciales ou utiliser autre que des variables 8 bit car les variables systeme de proton genre PBP_AARG peuvent etre mofidier (pour les calcul 16 bit par exemple)

    et si dans le programme principal on etait en train de s'en servir on obtien des calcul errone

    ce probleme met deja arriver c dailleur comme sa que jais compri le probleme
    (javait un afficheur graphique qui de temp en temp ecrivait nimporte quoi)

    puis aussi jetter un oeil de la routine d'interruption en asm generer par proton
    pour voir si justement il n'y a pas de variables genre "PBP_AARG" utiliseé et au cas ou les sauver et les restaurer et il n'y a aucun probleme

    je pense que c'est un des meilleur compilateur basic pour pic

    c'est un vrais bonneur de pouvoir ecrire a = (b - a) * 3,1415 ... etc

  12. #11
    Gérard

    Re : Probleme TRM0 Pic 16F628

    http://www.picbasic.org/forum/forumd...=70&order=desc un forum en anglais, mais très bien.
    Au cas où, ici peu de gens travaillent avec Proton et c'est dommage. Il n'y en a que pour le C !

    avant de me faire

  13. #12
    MorpheusPic

    Re : Probleme TRM0 Pic 16F628

    j'apprendrais bien le C mais jais rien compris ^^ ce n'est pas orienter dur le meme fonctionement il me semble ?

    qua til de plus avantageux comme langage ?

    si tu a des question je commence a bien le connaitre le proton

  14. #13
    MiGaNuTs

    Re : Probleme TRM0 Pic 16F628

    Le truc c'est surtout qu'il faut essayer de mettre le moins de tests possibles dans ta boucle d'interruption, et tant qu'a faire essayer d'y limiter le nombre d'instructions aussi.

    Apres d'un langage évolué a un autre, tu retrouve toujours a peu près les mêmes principes, c'est la façon de l'écrire qui change plus ou moins.

Discussions similaires

  1. 74C922 et PIC 16f628
    Par invite65764016 dans le forum Électronique
    Réponses: 8
    Dernier message: 18/07/2007, 13h32
  2. Pic 16f628
    Par invite4164fd5c dans le forum Électronique
    Réponses: 9
    Dernier message: 16/12/2006, 16h15
  3. pic 16F628
    Par LTHOMAS dans le forum Électronique
    Réponses: 7
    Dernier message: 29/03/2006, 21h13
  4. pic 16F628
    Par invitea78e17c9 dans le forum Électronique
    Réponses: 1
    Dernier message: 15/03/2004, 21h04
  5. pic 16f628
    Par invite7a98af17 dans le forum Électronique
    Réponses: 3
    Dernier message: 16/02/2004, 15h21
Découvrez nos comparatifs produits sur l'informatique et les technologies.