Configuration UART pic24fj128ga010
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Configuration UART pic24fj128ga010



  1. #1
    jules38410

    Configuration UART pic24fj128ga010


    ------

    Bonjour,
    J'ai configuré mon UART et créer une fonction réception et transmission mais le routage de ma carte n'est pas encore fait pour pouvoir tester cette fonction.
    Je voudrais donc savoir si mon programme est juste ou du moins qu'il n'y ait pas d'erreur grossière.

    Merci.

    Code:
    ////////////////////////////////////////////////////////////////////////////////////////
    //
    //                             lib_UART.h
    
    
    ///////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////
    
    // Déclaration des E/S pour communication I2C (Entrées au départ)
    #define TX	    	PORTF.5		 	// Signal SDA
    #define RX		PORTF.4		 	// Signal SCL
    // A configurer en entrées à l'initialisation
    
    ///////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////
    // Prototypes des fonctions pour gestion UART
    void U2_init(void);
    void U2_ecrire(char i2c_octet);
    unsigned char U2_lire(void);
    
    ////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////
    // Utilisation Horloge (4 MHz) ////////
    ///////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////
    void U2_init(void)
    {
    
      U2BRG = 25; // fonctionnement 9600 bauds pour horloge interne de 4 MHz
      U2MODE=0x2000;                
      U2STA=0x0000;
      U2TXREG = 0x00;
      U2RXREG = 0x00;
      U2MODE=0xA000;                // active UART
    
      IEC1bits.U2TXIE=1;        // active int
      IEC1bits.U2RXIE=1;
    
      IEC1bits.U2TXIE=1;        // priorité de l'int
      IEC1bits.U2RXIE=1;
    }
    
    //////////////////////////////////////////////////////////////////////////
    void U2_ecrire(char U2_octet)
    {
      
            U2TXREG=U2_octet;			// Envoie octet vers dans registre de transmission
    	while (U2STAbits.UTXBF==0);            // Attente fin transmission
            U2STAbits.UTXEN=1;                    //   active la transmission          
    }
    
    //////////////////////////////////////////////////////////////////////////
    unsigned char U2_lire(void)			// ack=0: Acknowledge; ack=1: No Acknowledge
    {
    	
           unsigned char	octetlu;
            
           while(IFS1bits.U2RXIF==0)        // attente int signalant reception
           IFS1bits.U2RXIF=0;               // mise à 0 du flag
           if(U2STAbits.OERR==1)            // controle d'erreur
           {
               afftext("ERROR");
           }
           else
           {
            octetlu = U2RXREG;                  // récupere octet dans le registre de reception
           }
    	return(octetlu);
    }

    -----

  2. #2
    jules38410

    Re : Configuration UART pic24fj128ga010

    J'ai modifier mon code et celui marche à part pour la première fois
    sur mon LCD j'obtient le symbol de 0 en code ascii puis A à chaque fois comme prévu.


    Code:
    main :
    
     U2_init();
    
     while(1)
     {
         U2_ecrire('A');
        U=U2_lire();
         valcaract(U);
               while(BUTTON3==1);
                     while(BUTTON3==0);
                
     }
    
    
    
    
    
    
    
    
    
    
    ////////////////////////////////////////////////////////////////////////////////////////
    //
    //                             lib_UART.h
    
    
    ///////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////
    
    // Déclaration des E/S pour communication I2C (Entrées au départ)
    #define TX	    	PORTF.5		 	// Signal SDA
    #define RX		PORTF.4		 	// Signal SCL
    // A configurer en entrées à l'initialisation
    
    ///////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////
    // Prototypes des fonctions pour gestion UART
    void U2_init(void);
    void U2_ecrire(char i2c_octet);
    unsigned char U2_lire(void);
    
    ////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////
    // Utilisation Horloge (4 MHz) ////////
    ///////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////
    
    
    int recu;
    int U=0;
    
    void U2_init(void)
    {
    
      U2BRG = 25; // fonctionnement 9600 bauds pour horloge interne de 4 MHz
      U2MODE=0x2000;
      U2STA=0x0000;
      U2TXREG = 0x00;
      U2RXREG = 0x00;
      U2MODE=0xA000;                // active UART
    
      IEC1bits.U2TXIE=1;        // active int
      IEC1bits.U2RXIE=1;
    
      IPC7bits.U2TXIP=1;        // priorité de l'int
      IPC7bits.U2RXIP=2;
    }
    
    //////////////////////////////////////////////////////////////////////////
    void U2_ecrire(char U2_octet)
    {
      
            U2TXREG=U2_octet;			// Envoie octet vers dans registre de transmission
    	//while (U2STAbits.UTXBF==0);            // Attente fin transmission
            U2STAbits.UTXEN=1;                    //   active la transmission
    }
    
    //////////////////////////////////////////////////////////////////////////
    unsigned char U2_lire(void)			// ack=0: Acknowledge; ack=1: No Acknowledge
    {
    	
           unsigned char	octetlu;
    
        //    U2STAbits.UTXEN=0;               //   desactive la transmission
           while(recu==0);        // attente int signalant reception
           recu=0;               // mise à 0 du flag
           if(U2STAbits.OERR==1)            // controle d'erreur
           {
               afftext("ERROR");
              U2STAbits.OERR=0;
           }
           else
           {
            octetlu = U2RXREG;                  // récupere octet dans le registre de reception
           }
    	return(octetlu);
    }
    
    
    void __attribute__((interrupt, no_auto_psv)) _U2TXInterrupt(void)
    {
        IFS1bits.U2TXIF = 0;
       
    }
    
    void __attribute__((interrupt, no_auto_psv)) _U2RXInterrupt(void)
    {
    
    
        IFS1bits.U2RXIF = 0;
        recu=1;
    
    }

  3. #3
    RISC

    Re : Configuration UART pic24fj128ga010

    Salut,

    Utilises-tu l'horloge interne ou un quartz externe ?
    Pour que l'UART puisse fonctionner correctement sur ce PIC, il faut utiliser un quartz externe car l'horloge interne n'est pas assez précise.
    Lis bien la documentation, notamment le Family Reference manual relatif à l'UART car il faut faire certaines initialisations dans un ordre précis.
    Tu trouveras des exemples de code pour le PIC24FJ128GA010 sur cette page : http://www.microchip.com/codeexamples, ensuite tu filtres pour les PIC24F.
    Les exemples de code commencent par CExxx

    a+

  4. #4
    jules38410

    Re : Configuration UART pic24fj128ga010

    Oui j'utilise un quartz de 8Mhz
    Pour tester j'ai relié le RX et TX du meme pic.

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

    Re : Configuration UART pic24fj128ga010

    Salut,
    Si tu as un quartz c'est bon coté précision.
    Regarde maintenant les exemples de code auquels j'ai fait référence. Tu devrais trouver dans ton code ce qui cloche...
    a+

Discussions similaires

  1. pic24fJ128GA010 communication I2C
    Par jules38410 dans le forum Électronique
    Réponses: 18
    Dernier message: 21/06/2014, 15h12
  2. configuration du UART pour le mode Motorola
    Par CAPUCIN123 dans le forum Électronique
    Réponses: 22
    Dernier message: 04/06/2013, 23h49
  3. bus i2c ou UART et RTC
    Par Voltron dans le forum Électronique
    Réponses: 7
    Dernier message: 16/11/2008, 13h31
  4. Usb < -- > Uart
    Par invitee5173b0d dans le forum Électronique
    Réponses: 0
    Dernier message: 22/04/2008, 13h29
  5. Spi + Uart
    Par noisyboxes dans le forum Électronique
    Réponses: 6
    Dernier message: 08/03/2008, 23h19
Découvrez nos comparatifs produits sur l'informatique et les technologies.