Carte easyPIC v7 avec mikroC - Page 2
Répondre à la discussion
Page 2 sur 5 PremièrePremière 2 DernièreDernière
Affichage des résultats 31 à 60 sur 134

Carte easyPIC v7 avec mikroC



  1. #31
    dje8269

    Re : Carte easyPIC v7 avec mikroC


    ------

    Merci Gabuzo, ton lien est pas mal , car il retranscrit le code a coté permettant de mieux comprendre les réglages ;

    Mais je n'est pas réussis à passer le timer0 en 16bit (bit7 a 0). En tout cas on se rend compte qu'il est impossible d'avoir 1seconde d'overflow avec ce timer en 8bit . sauf en diminuant grandement la valeur du quartz, ce qui est réel n'est pas possible

    -----
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  2. #32
    invite11398957

    Re : Carte easyPIC v7 avec mikroC

    je ne vois pas ou il est indiqué logiciel payant.

  3. #33
    adipie

    Re : Carte easyPIC v7 avec mikroC

    Voici la conversion en Jpg de mon pdf précédent.
    Nom : Scan0009-page-001.jpg
Affichages : 147
Taille : 233,1 Ko

  4. #34
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    Merci adipie , car je commence à deseperer de creer un compteur de 1s en 1s . j'espere qu'il eclairera ma lanterne .
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  5. #35
    adipie

    Re : Carte easyPIC v7 avec mikroC

    Nom : Scan0007.jpg
Affichages : 150
Taille : 249,9 Ko
    Citation Envoyé par dje8269 Voir le message
    Merci adipie , car je commence à deseperer de creer un compteur de 1s en 1s . j'espere qu'il eclairera ma lanterne .
    Ci-joint le même document, jette le précédent car certaint signes = se sont transformé en signes - lors de la conversion de PDF en JPG

  6. #36
    RISC

    Re : Carte easyPIC v7 avec mikroC

    Salut
    Citation Envoyé par dje8269 Voir le message
    Ce que j'ai retenus c'est = pour donner une valeur à une variable par exemple , et == pour une comparaison . Tu as donc raison , mais pourquoi ca marche nickel, même avec le = ?
    Si tu écrit BP = 1, le compilateur est heureux. Il affecte 1 à BP.
    Ensuite si tu fais if ( BP = 1 ) comme le compilo peux toujours affecter 1 à BP ce test conditionnel sera donc toujours vrai ;=)
    Vu du C il n'y a pas d'erreur de syntaxe donc c'est compilable (mais totalement faux pour l'application)

    La bonne méthode pour éviter ce piège aux débutants en langage C est d'inverser les opérandes du test :
    essaye : if ( 1 = BP ) et tu auras une erreur de compilation, par contre if ( 1 == BP ) compilera correctement ;=)
    En écrivant de cette manière tu n'oublieras jamais d'écrire == pour tester au lieu de = (pour affecter)

    a+
    Dernière modification par RISC ; 09/09/2014 à 20h22.

  7. #37
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    Héhéhé, merci bien je pense avoir compris l'idée ;

    J'ai plus qu'a essayé de le transposé à mon pic ; D'après ce que j'ai compris sur mon pIC le 18F45K22 , mon timer0 peut passer en 16bit . donc remplacer ton timer1 .
    Allez j'essaie et je reviens , pour trouvé quelqu'un pour vérifier tous ca .

    PS : tu as le fait le document ? tu l'as récuperé ?
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  8. #38
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    Alors je pense qu'il y as un petit probléme je vais reprendre mes calculs . dans quelle mesure la frequence est elle precises ;

    J'ai declencher un chrono en meme temps que mon petit compteur . au bout de 6 minutes j'avais 24 secondes d'ecart ! est ce normal, ou je me suis trompé quelque part .

    Voici le code .
    PIC18f45k22 , quartz de 8Mhz .

    Code:
    #include "Display_utils.h"
    
     unsigned short h ;   // Déclaration de la variable compteur
     unsigned short i ;   // Déclaration de la variable i secondes : 0à255
     unsigned short j ;   // Declaration  de la variable j dizaine de secondes
     unsigned short g ;   // Declaration  de la variable minutes
     
       void interrupt(){
          h++ ;
             if (h>4){
                i++ ;
                   if (i>9){
                      i=0 ;
                      j++ ;
                         if (j>5){
                            j=0 ;
                            g++ ;
                                if (g>9){
                                   g=0 ;
                                }
                         }
                   }
             }
       INTCON.TMR0IF = 0x0;    // on remet le flag d'interruption a 0
    
       }
                
    
    void main(){
    
         TRISA = 0 ;          // Configure le port A en sortie
         LATA = 0 ;           // desactive tous les afficheurs
         TRISD = 0 ;          // Configure le port D en sortie
         LATD = 0 ;           // Efface tous les segments
        
         T0CON = 0x84 ;       //   0b10000010   , timer sur 16bit presacler de 8
         INTCON.GIE = 1 ;     // On active les interruptions
         INTCON.TMR0IE = 1 ;// On active l'interrutpion du timer 0
         TMR0H = 0x2F ;
         TMR0L = 0x70 ;
         
         i=0 ;
         j=0 ;
         g=0 ;
    
         while(1) {           // Boucle infinie   on affiche les variables
    
            LATD = mask(i) ;   // On ramene la bonne valeur a l'afficheur
            LATA = 1;          // On active l'afficheur
            delay_ms(5) ;
            
            LATA = 2 ;
            LATD = mask(j) ;
            delay_ms(5) ;
            
            LATA = 4 ;
            LATD = mask(g) ;
            
            Delay_ms(5);
    
        }
    }
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  9. #39
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    Bon toujours pas !

    JE vois qu'une seule possibilité , c'est que le timer0 ne soit pas incrementer toutes les 4µs

    Code:
    #include "Display_utils.h"
    
     unsigned short h ;   // Déclaration de la variable compteur
     unsigned short i ;   // Déclaration de la variable i secondes : 0à255
     unsigned short j ;   // Declaration  de la variable j dizaine de secondes
     unsigned short g ;   // Declaration  de la variable minutes
     
       void interrupt(){
          h++ ;
             if (h>=4){
                h=0 ;
                i++ ;
                   if (i>9){
                      i=0 ;
                      j++ ;
                         if (j>5){
                            j=0 ;
                            g++ ;
                                if (g>9){
                                   g=0 ;
                                }
                         }
                   }
             }
       INTCON.TMR0IF = 0;    // on remet le flag d'interruption a 0
       TMR0H = 47 ;          // On charge la valeur du timer0 au début
       TMR0L = 112 ;         //
       }
                
    
    void main(){
    
         TRISA = 0 ;          // Configure le port A en sortie
         LATA = 0 ;           // desactive tous les afficheurs
         TRISD = 0 ;          // Configure le port D en sortie
         LATD = 0 ;           // Efface tous les segments
        
         T0CON = 0x82 ;       // 0b10000010   , timer sur 16bit presacler de 8
         INTCON.GIE = 1 ;     // On active toutes les interruptions
         INTCON.TMR0IE = 1 ;  // On active l'interruption sur depassement du timer0
         TMR0H = 47 ;
         TMR0L = 112 ;
         
         i=0 ;
         j=0 ;
         g=0 ;
         h=0 ;
         
         while(1) {           // Boucle infinie   on affiche les variables
    
            LATD = mask(i) ;   // On ramene la bonne valeur a l'afficheur
            LATA = 1;          // On active l'afficheur
            delay_ms(5) ;
            
            LATA = 2 ;
            LATD = mask(j) ;
            delay_ms(5) ;
            
            LATA = 4 ;
            LATD = mask(g) ;
            
            Delay_ms(5);
    
        }
    }
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  10. #40
    adipie

    Re : Carte easyPIC v7 avec mikroC

    Tu as oublier de précharger le registre du timer, donc tu compte 4 fois 65536, ce qui ne correspond pas à une seconde mais à 1.048576 secondes.
    Enlève ceci: if (i>9){
    i=0 ;
    j++ ;
    if (j>5){
    j=0 ;
    g++ ;
    if (g>9){
    g=0 ;
    Et colle le dans le Main
    Si tu fait un traitement trop long dans l'interrupt tu risque de louper des interruptions.

  11. #41
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    Bonjour adipie,

    Tout d'abord merci de ta patience ;

    Tu as oublier de précharger le registre du timer, donc tu compte 4 fois 65536
    Ce n'est pas ce que je fais avec :
    TMR0H = 47 ; // On charge la valeur du timer0 au début
    TMR0L = 112 ; //
    Sinon quelle est la fonction pour pré charger ce registre ?
    Pourrait tu me preciser l'ordre d'execution des fonctions .

    Pour l(interruption est comme une sub qui s'appelle toute seule en fait , sur une action déterminée , ici un depassement du timer0
    Donc une fois qu'un interruption a eu lieu , j'imagine que le programme revient la ou il etait, c'est a dire dans la boucle infinie non ?
    La fonction main s'exécute qu'une fois en début de programme pour l'initialisation ?

    Peut tu m dire c'est j'ai juste ? car sinon je me gourre depuis le début .
    Dernière modification par dje8269 ; 10/09/2014 à 09h56.
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  12. #42
    adipie

    Re : Carte easyPIC v7 avec mikroC

    J'avais regardé le code du post #38 dans lequel tu avais oublier de recharger le registre.
    Dans le code du post#39 c'est mieux, mais déplace le comptage dans la boucle infinie du Main et place
    TMR0H = 47 et TMR0L = 112 avant INTCON.TMR0IF = 0
    En ce qui concerne la scrutation du programme.
    Le code entre Void Main et while s'exécute une fois puis le programme boucle entre while et la fin (boucle sans fin).
    Lors d'une interruption, le programme saute de la boucle sans fin vers la procédure d'interruption puis revient dans la boucle sans fin à l'endroit où il l'a quitté.

  13. #43
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    Merci encore pour ces petites précisions, j'essayerais ce soir en rentrant ! .

    Si ce programme fonctionne, il me restera une zone d'ombre à eclaircir . sur ce fameux :

    TMR0H = 47 ; // On charge la valeur du timer0 au début
    TMR0L = 112 ; //
    J'ai bien compris que pour obtenir une seconde , on dois ajuster la première boucle à 12144 . Pourquoi doit on dissocier le TMR0 en deux parties ? Ne pourrait on pas écrire TMR0 = 0x2F70 ?
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  14. #44
    Gérard

    Re : Carte easyPIC v7 avec mikroC

    Données de départ : FQz = 8MHz
    Objet : obtenir une fréquence de 1Hz

    Utilisation du Timer 2

    F entrée Prescaler : 2MHz
    Config Prescaler : div / 16 (sortie : 125 000Hz)
    Config PR2 : 250
    F entrée Postscaler : 500Hz
    Config postscaler : 10

    On génère une interruption à 50Hz

    Dans la procédure d'interruption, il faut incrémenter une variable, quand elle est à 50, une seconde est passée.

    Voir doc 1846K22 (et ses frères) page 175 et les 3 suivantes.

  15. #45
    adipie

    Re : Carte easyPIC v7 avec mikroC

    Citation Envoyé par dje8269 Voir le message
    Merci encore pour ces petites précisions, j'essayerais ce soir en rentrant ! .

    Si ce programme fonctionne, il me restera une zone d'ombre à eclaircir . sur ce fameux :



    J'ai bien compris que pour obtenir une seconde , on dois ajuster la première boucle à 12144 . Pourquoi doit on dissocier le TMR0 en deux parties ? Ne pourrait on pas écrire TMR0 = 0x2F70 ?
    C'est simple, tu essaye et tu attends la réponse du compilateur.
    Un petit cadeau pour toi:
    http://fr.wikiversity.org/wiki/Utili...0_en_langage_C

  16. #46
    adipie

    Re : Carte easyPIC v7 avec mikroC

    Ci-dessous un programme écrit pour Mikrobasic et permettant de tester le Timer0 d'un PIC 18F2420 avec une horloge à 8Mhz et un prédiviseur de 8.
    Un top est envoyé vers l'Uart du PC pour tracer les minutes
    Tu peux t'en inspirer.
    Code:
    program Interrup1sec
    'Test Timer0 avec PIC 18F2420 à 8Mhz le 10/09/2014
    'Declaration des variables
     dim CptDeb, CptMin as byte
    
     Sub Procedure INTERRUPT()
       if INTCON.TMR0IF = 1 then               'Si interruption Timer0
        Inc(CptDeb)                            'Incrément compteur débordement
         if CptDeb>= 4 then                    'Si 4ème débordement
          CptDeb = 0                           'Raz compteur débordement
          Inc(CptMin)                          'Incrément compteur minute
          TMR0H        = $2F                   'Préchargement registre Timer0 haut
          TMR0L        = $70                   'Préchargement registre Timer0 bas
         end if
        INTCON.TMR0IF = 0                      'Raz flag int Timer0
      end if
     end Sub
    
     Sub Procedure SpSetup()
           T0CON         = $82                 '16 bits et pédiviseur par 8
           TMR0H         = $2F                 'Préchargement registre Timer0 haut
           TMR0L         = $70                 'Préchargement registre Timer0 bas
           T0CON.TMR0ON  = 1                   'Timer1 enable
           INTCON.TMR0IE = 1                   'Timer1 interrupt enable = true
           INTCON.PEIE   = 1                   'Perif interupt enable = true
           INTCON.GIE    = 1                   'Global interrupt enable = true
     end sub
    
    main:
     UART1_Init(19200)                         'Init Uart à 19200 bauds
     SpSetup()
     CptDeb = 0
     CptMin = 0
     while true                                'Boucle sans fin
      if CptMin = 60 then                      'Test si 1 minute
       CptMin = 0
       Uart1_Write_Text("Il est:")             'Top toutes les minutes
      end if
     wend
     end.
    Pour le test j'ai utilisé cette petite appli Delphi qui trace l'heure du top envoyé par le PIC.
    Nom : Top60.JPG
Affichages : 136
Taille : 14,5 Ko
    Si ça t'intéresse je peux te l'envoyer par message privé, car ce forum n'accepte pas l'envoi de fichier EXE

  17. #47
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    Bon apres avoir fais des milliers de tests j'ai enfin reussis !

    J'ai tout repris a zéro , tout détaillé et enfin j'ai ma seconde d'incrémentation .....

    même si je n'ai pas tout compris ( marqué avec des ????)

    J'ai mis des question dans le code , si jamais vous avez des réponses ce serait cool .

    Aprés cinq minutes de chrono , pas d'erreur avec mon chrono c'est parfait !

    J'ai faillis baissé les bras quand même, car voila la galère pour faire un simple chronomètre .

    Voila si ca peut aider quelqu'un. je suis ouvert à toutes améliorations/suggestions/commentaires , permettant de faire progresser !

    Code:
    #include "Display_utils.h"
    
     unsigned short h ;   // Déclaration de la variable compteur
     unsigned short i ;   // Déclaration de la variable i secondes : 0à255
     unsigned short j ;   // Declaration  de la variable j dizaine de secondes
     unsigned short g ;   // Declaration  de la variable minutes
     
       void interrupt(){
          h++ ;
             if (h>=4){
                h=0 ;           // Remise a zéro du compteur d'interrupt
                i++ ;           // On incremente les secondes
                TMR0H = 47  ;    // On charge la valeur du timer0 au début
                TMR0L = 112 ;   // Pour repartir avec une base de 1 seconde
             }
        INTCON.TMR0IF = 0 ;    // on remet le flag d'interruption a 0
        INTCON.TMR0IE = 1 ;    // Reactive l'interruption
        // doit pouvoir etre remplacé par INTCON = 0x20  A tester
    
       }
                
    
    void main(){
    
         TRISA = 0  ;          // Configure le port A en sortie
         LATA = 0   ;           // desactive tous les afficheurs
         TRISD = 0  ;          // Configure le port D en sortie
         LATD = 0   ;           // Efface tous les segments
         
    //****************     configuration TIMER0     *******************
    
    // ------ REGISTRE  T0CON ( timer0 control) réglage du timer
    
    T0CON.TMR0ON = 1 ;// active ou non le timer0 .
    T0CON.T08bit = 0 ;// Configure le TMR0 est 16 bit . en 8bit mettre 1
    T0CON.T0CS = 0   ;// Timer0 Clock Select : choix de l'horloge interne=0 par le portA T0CKL=1
    T0CON.T0SE = 0   ;// Timer0 Source Edge : à utilisé en cas de mode compteur
    T0CON.PSA =  0   ;// Pre Scaler Assignement . non assigné=1 , assigné/activé =0
    T0CON.F2 = 0     ;// Bit 0,1 et 2 pour choisir la valeur du préscaler
    T0CON.F1 = 1     ;// Bit = 010 correspondant a un prescaler de 8
    T0CON.F0 = 0     ;
    
     // QUESTION peut on remplacé au dessus par: T0CON = 0x82 = 0b10000010   , timer sur 16bit presacler de 8
     
     // ------ REGISTRE  INTCON   ( Interrupt control) réglage de l'interruption
     
         INTCON.GIE = 1    ;     // Global Interrupt ENABLE, On active toutes les interruptions
         INTCON.PEIE = 0   ;     // Peripheral Interrupt Enable ?????
         INTCON.TMR0IE = 1 ;  // Otimer0 overflow interrupt Enable : active l'interruption sur depassement si = 1
         INTCON.INT0IE = 0 ;  // Active l'interrption externe quand =1
         INTCON.RBIE = 0   ;    // ?????
         INTCON.TMR0IF = 0 ;  // Timer overflow Interrupt flag , mettre a 0 pour re-armement
         INTCON.INT0IF = 0 ;  // Extrenal interrupt flag
         INTCON.RBIF = 0   ;    // ?????
         TMR0H = 47        ;
         TMR0L = 112       ;
         // doit pouvoir etre remplacé par  INTCON = 0xA0  A tester
         
         i=0 ;
         j=0 ;
         g=0 ;
         h=0 ;
         
         while(1) {                 // Boucle infinie   on affiche les variables
    
            if (i>9){               // si i STRICEMENT superieur à 9 donc à 10
              i=0 ;                 // On remet i à 0
              j++ ;                 // On incremente les dizaines de secondes
                   if (j>5){        // Si les dizaines de secondes sont STRICTEMENT superieur a 5 donc a 6
                      j=0 ;         // On RaZ les dizaines de secondes
                      g++ ;         // On incremente les minutes
                          if (g>9){ // si les minutes sont STRICTEMENT superieur a 9 donc a 10
                              g=0 ; // On RaZ les minutes
                          }
                   }
            }
    
            LATD = mask(i) ;   // On ramene la bonne valeur a l'afficheur
            LATA = 1;          // On active l'afficheur
            delay_ms(5) ;
            
            LATA = 2 ;
            LATD = mask(j) ;
            delay_ms(5) ;
            
            LATA = 4 ;
            LATD = mask(g) ;
            
            Delay_ms(5);
    
        }
    }
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  18. #48
    adipie

    Re : Carte easyPIC v7 avec mikroC

    Ta question: // QUESTION peut on remplacé au dessus par: T0CON = 0x82 = 0b10000010 , timer sur 16bit presacler de 8
    Pourquoi tu n'essayes pas pour voir ce que ça donne.
    Franchement ta question m'étonne et il va falloir que tu commence par travailler les bases.
    1000 en binaire fait bien 8 en héxa, de même 0010 fait 2 en héxa.

  19. #49
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    Pourquoi tu n'essayes pas pour voir ce que ça donne.
    ces maudites 5 minutes avant de pouvoir modifier le texte grgrgrgrrrrr !!

    j'ai donc essayer , et bien évidement ca fonctionne !!
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  20. #50
    RISC

    Re : Carte easyPIC v7 avec mikroC

    Salut,

    Attention, il y a plusieurs choses à corriger dans l'interruption, surtout pour le futur quand tu utiliseras plusieurs interruptions..

    Code:
       void interrupt()
    { if ( (1 == INTCON.TMR0IF ) && (1 == INTCON.TMR0IE) ) { h++ ; if (h>=4){ h=0 ; // Remise a zéro du compteur d'interrupt i++ ; // On incremente les secondes TMR0H = 47 ; // On charge la valeur du timer0 au début TMR0L = 112 ; // Pour repartir avec une base de 1 seconde } INTCON.TMR0IF = 0 ; // on remet le flag d'interruption a 0 }
    // INTCON.TMR0IE = 1 ; // Ce n'est pas nécessaire et dangereux..le flag TMR0IE n'est pas touché par l'interruption mais seulement TMR0IF }
    a+

  21. #51
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    Merci RISC pour ce commentaire judicieux !

    INTCON.TMR0IE = 1 ; // Ce n'est pas nécessaire et dangereux..le flag TMR0IE n'est pas touché par l'interruption mais seulement TMR0IF
    Il me semblait que TMR0IE, permettait d'activer l'interruption sur un overflow du timer0 ? je savais pas que c'était pas un flag . j'avoue avoir pris ca sur un exemple

    if ( (1 == INTCON.TMR0IF ) && (1 == INTCON.TMR0IE) )
    Pourrais tu m'expliquer cette ligne ?


    j'ai des millions de questions . une facile pour commencer , puis je faire plusieurs interruption avec le même timer ( timer0) par exemple ?
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  22. #52
    Gérard

    Re : Carte easyPIC v7 avec mikroC

    Je t'ai proposé une solution avec TMR2 en #44, as-tu jeté un oeil ?

    On ne peut générer qu'une seule interruption avec TMR0 mais on peut faire plusieurs traitement (de courte durée) dans une interruption.

  23. #53
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    Bonsoir Gérard ,

    Oui oui j'ai étudié ton explication . mais tu utilise le timer2 , et j'avoue ne pas avoir trop compris le post scaler, pr2 . Ta solution marche certainement , je ne me permettrais pas d'en douter , mais disons qu'elle répond a coté de mon cahier des charges , qui etait d'utilisé le timer0 . ensuite je passerais au timer 1 lol .

    J'essaye d'y aller doucement , avec de bonnes bases, et à ma facon .

    @RISC

    j'ai essayé d'enlever cette ligne :
    ca ne fonctionne pas quand je met à 0 , le chiffre "1" apparait et après ça reste bloqué . l'interruption n'est pas réactivée je pense ??

    INTCON.TMR0IE = 1 ; // Ce n'est pas nécessaire et dangereux..le flag TMR0IE n'est pas touché par l'interruption mais seulement TMR0IF
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  24. #54
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    @RISC :

    Maudite 5 minutes . correction : ca fonctionne , quand j'enleve le TMR0IE , mais pas quand je le met a 0 . donc en sortie d'interrupt , il faut seulement re-armer le flag. c'est noté .

    @Gérard:

    Ok pour le timer , une seule interrupt alors ; qu'il faut traiter vite , sinon on risque d'en louper .
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  25. #55
    Gérard

    Re : Carte easyPIC v7 avec mikroC

    TMR0IE : Timer0 Interrupt Enable : bit de validation de l'interruption de TMR0, si tu ne le mets pas à 1, tu n'auras pas cette interruption.
    Dans la routine d'interruption, tu dois effacer le flag TMR0IF.

  26. #56
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    On complique ?

    je voudrais créer un bouton sur le port B , qui met le compteur en pause , et quand on rappuie dessus il repart de la ou on l'as arreté .
    Peut-etre qu'il existe une parade , une petite fonction pour faire cela, sans passer par une usine a gaz a base de flag ?

    Il serait trop simple de faire un bouton différent pour pause et lecture

    au faite combien de variable je peux affecté ?
    Dernière modification par dje8269 ; 10/09/2014 à 23h04.
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  27. #57
    RISC

    Re : Carte easyPIC v7 avec mikroC

    Salut
    Citation Envoyé par dje8269 Voir le message
    Code:
    if ( (1 == INTCON.TMR0IF ) && (1 == INTCON.TMR0IE) )
    Pourrais tu m'expliquer cette ligne ?
    Une partie de ma réponse est dans le post #36.

    L'autre est que le vecteur d'interruption est partagé (potentiellement) par plusieurs interruptions (timers, UART, SPI,...) si tu les autorisent.
    Donc quand tu rentres dans l'interruption, il faut vérifier quel flag t'a fait rentré en interruption mais seulement si son interruption correspondante est validée sinon tu vas traiter le flag même si l'interruption a été momentanément désactivée dans le programme principal

    a+

  28. #58
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    L'autre est que le vecteur d'interruption est partagé (potentiellement) par plusieurs interruptions (timers, UART, SPI,...) si tu les autorisent.
    Donc quand tu rentres dans l'interruption, il faut vérifier quel flag t'a fait rentré en interruption mais seulement si son interruption correspondante est validée sinon tu vas traiter le flag même si l'interruption a été momentanément désactivée dans le programme principal

    Oullaaalala ca se complique la ! . Donc plusieurs choses peuvent me faire rentrer dans la même interruption , et je dois définir laquelle avec le test de condition , pour effectué le bon traitement , suivant le flag .

    Par exemple , dans mon programme je pourrais affecter un bouton , pour lancer la même interruption ? ça me parait bizarre.
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  29. #59
    Gérard

    Re : Carte easyPIC v7 avec mikroC

    Citation Envoyé par dje8269 Voir le message
    Oullaaalala ca se complique la ! . Donc plusieurs choses peuvent me faire rentrer dans la même interruption , et je dois définir laquelle avec le test de condition , pour effectué le bon traitement , suivant le flag .

    Par exemple , dans mon programme je pourrais affecter un bouton , pour lancer la même interruption ? ça me parait bizarre.
    Tu peux autoriser plusieurs interruptions.
    Quand l'une d'elle est générée, tu ne sais pas de laquelle il est question, tu dois donc vérifier les flags.

    Ex : tu autorises les interruptions de TMR0 et de TMR2.
    Au début du traitement de l'interruption, tu regardes si TMR0IF est à 1 ou si TMR2IF est à 1.
    En fonction du résultat de ce test, tu traites ce qui doit l'être.

    Tu saisis ?

  30. #60
    dje8269

    Re : Carte easyPIC v7 avec mikroC

    d'accord, je pense que j'ai saisi ; en fait qu'une interruption se produise avec mtr0 ou tmr2 , on se retrouveras toujours dans la même procédure "void interrupt(){" . je pensais que pour un autre timer l'interruption s'appelait différemment en fait ! .

    Donc la oui effectivement il faut savoir quoi faire pour distinguer une interruption d'une autre .
    C'est en faisant des erreurs; que l'on apprend le mieux !!

Page 2 sur 5 PremièrePremière 2 DernièreDernière

Discussions similaires

  1. Easypic 7, mikroC et 16F84
    Par invite3c35398d dans le forum Électronique
    Réponses: 12
    Dernier message: 31/01/2013, 00h53
  2. commander un téléphone via le port USB de la carte easypic 7
    Par invitebd188048 dans le forum Électronique
    Réponses: 1
    Dernier message: 24/05/2012, 10h48
  3. Donne carte EasyPIC v5 contre rien en échange
    Par BastienBastien dans le forum Électronique
    Réponses: 5
    Dernier message: 03/01/2012, 17h01
  4. easypic, pic, C, et mikroC
    Par invite4c1ed2fa dans le forum Électronique
    Réponses: 11
    Dernier message: 09/03/2011, 11h33
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...