Boucle while pic 12F675 - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 33 sur 33

Boucle while pic 12F675



  1. #31
    denfus

    Re : Boucle while pic 12F675


    ------

    Désolé Paulfjujo j' ai répondu à Gerard sans avoir vu que tu avais posté.
    Non, pas de résistance de rappel au +5V mon BP est connecté directement au 0V car resistance activée en interne avec OPTION_REG.
    C' est vrai qu' il me semble avoir lu l' importance du front dans l' initialisation. Et puis "si il est paramétrable c' est qu' il doit avoir une utilité" (Proverbe binaire)

    -----

  2. #32
    paulfjujo

    Re : Boucle while pic 12F675

    Bonsoir,


    Testé avec un 12F683 sous MikroC
    GPIF reagit pour toutes les entrees du PORT , contrairement à GPIO2 et sa propre interrupt INTF.
    à cause de cela, je pense qu'il est necessaire d'isoler le BP en test
    dans cet exemple c'est RB3 qui est testé (car c'est la seule PIN qui ne peut etre en sortie)
    J'ai utilisé aussi la sortie GPIO2 comme sortie UART TX
    voir #define Avec_UART
    mais qui mobilise aussi GPIO1 via RX , associé à une led de sortie.. qui ne marche donc plus si l'UART est actif.
    Avec l'UART on voit bien le cyclage du PORT et Compteur.. mais on n'est pas obligé de l'activer!

    Un petit delai de 10ms juste apres l'entree dans l'interrupt avant de tester l'etat bas de GPIO3
    evite des rebonds, puis agir en consequence..



    Code:
     // 11-12-2014
    //12F683 
    // INTernal 4MHz OSC
    // CONFIG : $2007 : 0x00D4
    
    // 8     VSS 0V  ICSP 0V  3 Noir
    // 7     GP0   ICSP DATA  4 Jaune    --- LED0 -----R 1K--+5V
    // 6     GP1   ICSP CLCK  5 Vert      ---Led1----R 1K--+5V
    // 5     GP2   ---- BP2 ---- (Pull Up interne) UART 2tr interface -> TX
    // 4     GP3   ICSP VPP   1 orange   --R 2,7K pullup-+5V  et ---BP1---/ 0V
    // 3     GP4  ---- LED2  --R 1K--+5V
    // 2     GP5  ---- LED3 --R 1K--+5V
    // 1      VDD +5V
    
    
    //#define Avec_UART
    
    
    //#define  BP2  GPIO.B2
    #define  BP1  GPIO.B3
    #define  Led0 GPIO.B0
    #define Led1  GPIO.B1
    #define Led2  GPIO.B4
    #define Led3  GPIO.B5
    
    #define UART1_Write Soft_UART_Write
    #define CLS 12
    #define CR 13
    #define LF 10
    #define TAB 9
    #define BACK 8
    
    #define MAX_LEN 64
    
    unsigned char TEXTE[MAX_LEN];
    unsigned char * txt;
    unsigned int i,j,k;
    volatile unsigned int  Compteur;
    
    //----------------Interrupt Routine------
    // voir paragraph 12.4 page 94
    
    void interrupt() iv 0x0004 ics ICS_AUTO
    {
    /* GPIO2 interrupt  dediée
      if ((INTCON.INTF) && (INTCON.INTE))
      { 
         if (Compteur<4) Compteur ++; else Compteur=0;
         INTCON.INTE=0;
         INTCON.INTF = 0;       //clear int flag
       }
       */
     // GPIO3 Interrupt      IT commune à toutes les ENtrees
       if ((INTCON.GPIE)&&(INTCON.GPIF)&&(IOC.IOC3))
      { 
         Delay_ms(10); // evite des rebonds de BP
         if(GPIO.B3==0)  // c'est bien celui ci
        {
          if (Compteur<4) Compteur ++; else Compteur=0;
         }
         INTCON.GPIF = 0;       //clear int flag
       }
    }
    
    
    // --- Copie le texte depuis ROM vers RAM
    void strConstRamCpy(unsigned char *dest, const code char *source)
     {
      while (*source)*dest++ = *source++ ;
      *dest = 0 ;    // terminateur
    }
    
    void CRLF()
    {
     UART1_Write(CR);
     UART1_Write(LF);
    }
    
    void UART1_Write_CText(const char *txt) {
       while (*txt)
          UART1_Write(*txt++);
    }
    void  UART1_Write_Text(unsigned char *t)
    {
    while (*t)
     UART1_Write(*t++);
    }
    
    
    //-------------------------Main Program-----------------------------------------
    void main()
    {
    
      //  OSCCON=0x71; // 8MHz
        OSCCON=0x61; // 4MHz
        OSCCON.SCS=1; // internal osc
        OSCCON.IRCF2=1; // 4Mhz
        OSCCON.IRCF1=1;
        OSCCON.IRCF0=0;
        OSCTUNE=0;
       // while(OSCCON.HTS==0);  // wait OSC stable
        CMCON0=0x07; // disable comparators
        CMCON1==0x02;
        ANSEL=0;
       TRISIO = 0b00001000; //  GPIO3 as input
       CMCON0=0x07; // disable comparators
       OPTION_REG=0;
       OPTION_REG.NOT_GPPU = 0; // valid Pull ups , falling INTEDG
       OPTION_REG.INTEDG=0;  // falling edge   BP2 relié au 0V
       WPU2_bit=1;
       GPIO=0xFF;
    
      // un 0 allume la led , car tiree au +5V via R=1K
       Led0 =0;
       Delay_ms(1000);
       Led0 =1;
       Led1=0;
       Delay_ms(1000);
       Led1 =1;
       Led2=0;
       Delay_ms(1000);
       Led2 =1;
       Led3=0;
       Delay_ms(1000);
       Led3=1;
    
    #ifdef Avec_UART
        Soft_UART_Init(&GPIO, 1, 2, 9600, 0);  // Serial data bus initialization (RX=GPIO.B0 TX=GPIO.B1)
        UART1_Write_CText("\r\n12F683 test interrupt on GPIO3\r\n");
        UART1_Write_CText( "la led 1 ne marchera pas, modilisée par RX \r\n");
        CRLF();
    #endif
    
        Compteur=0;
        
        IOC=0;
        IOC.IOC3=1;
        INTCON.GPIF=0;
        INTCON.INTF=0;
        INTCON.GPIE=1;  // enable IT sur GPIO3
        //INTCON.INTE=1;  // enable IT sur GPI02
        GIE_bit=1;
      
      while(1)
      {
        switch (Compteur)
         {
          case 0:
          {
            Led0=0;
            Led1=1;Led2=1;Led3=1;
    
            break;
          }
          case 1:
          {  Led1 =0;
             Led2=1;Led0=1;Led3=1;
    
            break;
          }
          case 2:
          { 
            Led1=1;Led0=1;Led3=1;
            Led2=0;
           break;
          }
          case 3:
           {
           Led3=0;
           Led2=1;Led0=1;Led1=1;
    
           break;
          }
          case 4:
          {
             #ifdef Avec_UART
             UART1_Write_CText("Compteur=4 => chenillard");
             CRLF();
             #endif
             while(Compteur==4)
           // on test si la condition d'entree du case reste inchangee ou non
              { // un appui sur BP changera la valeur du compteur , et ainsi on sort de la boucle
              GPIO =  0b11111110;// Led0
              Delay_ms(250);
              GPIO =  0b11111101;// led1  ** si UART activé avec RX en GPIO1 .. la led ne reagit pas
              Delay_ms(250);
              GPIO =0b11101111;  // Led 2
              Delay_ms(250);
              GPIO =0b11011111; // Led3
              Delay_ms(250);
              }
           break;
          }
        }// switch
        #ifdef Avec_UART
        txt=&TEXTE[0];
        UART1_Write_CText("PORT= ");
        ByteToStr(GPIO,txt);
        UART1_Write_Text(txt);   UART1_Write(TAB);
        UART1_Write_CText("Compteur=");
        WordToStr(Compteur,txt);
        UART1_Write_Text(txt);
        CRLF();
        #endif
        Delay_ms(1000);
       } // while
    }//end main
    resutat sur le teminal RS232


    12F683 test interrupt on GPIO3
    PORT= 62 Compteur= 0
    PORT= 62 Compteur= 0
    PORT= 55 Compteur= 1
    PORT= 63 Compteur= 1
    PORT= 47 Compteur= 2
    PORT= 47 Compteur= 2
    PORT= 31 Compteur= 3
    PORT= 31 Compteur= 3
    Compteur=4 => chenillard
    PORT= 31 Compteur= 0
    PORT= 62 Compteur= 0
    PORT= 62 Compteur= 0
    PORT= 63 Compteur= 1
    PORT= 47 Compteur= 2
    PORT= 47 Compteur= 2
    PORT= 31 Compteur= 3
    PORT= 31 Compteur= 3
    Compteur=4 => chenillard

  3. #33
    denfus

    Re : Boucle while pic 12F675

    Une démonstration vaut mieux que 100 discours. Je vais digérer ton code ligne par ligne pendant un moment jusqu' à compréhension car je t' avoue que je n' ai pas tout capté. J' ai beaucoup développé en basic et le C et nouveau pour moi de plus j' ai une formation de chimiste.
    En tout cas Paulfjujo merci beaucoup pour ton aide.

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. relation entre gain statique en boucle ouverte et celui en boucle fermee
    Par invite21730e48 dans le forum Électronique
    Réponses: 4
    Dernier message: 29/09/2014, 20h47
  2. problème boucle interruption avec boucle spi
    Par invitef9a5b0e0 dans le forum Électronique
    Réponses: 8
    Dernier message: 16/03/2013, 02h26
  3. Diagramme de Bode boucle ouverte et boucle fermée
    Par invite29a24ce3 dans le forum Physique
    Réponses: 4
    Dernier message: 21/06/2012, 13h24
  4. Probleme boucle for ou boucle do...while imbriquées
    Par invite3d4f2ff3 dans le forum Électronique
    Réponses: 8
    Dernier message: 09/06/2010, 10h32
  5. Boucle ouverte boucle fermée
    Par invitedaf7b98f dans le forum Physique
    Réponses: 5
    Dernier message: 10/01/2010, 15h13
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...