Liaison UART Pic 18F45K20
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Liaison UART Pic 18F45K20



  1. #1
    sani300

    Liaison UART Pic 18F45K20


    ------

    Bonjour,

    Je suis un peu nouveau dans la programmation des PIC. Je souhaite réaliser une liaison Uart avec le Pic 18F45K20 compilateur C18.
    J'ai lu la doc technique et je l'ai suivit pour l'initialisation des registre pour l'uart : http://ww1.microchip.com/downloads/e...doc/41303g.pdf
    Et la doc du compilateur C18 : http://ww1.microchip.com/downloads/e...lib_51297d.pdf

    Et je suis arrivé ce programme de test :
    Code:
    #pragma config FOSC = HS
    #pragma config WDTEN = OFF, LVP = OFF, MCLRE = OFF
    
    
    /** I N C L U D E S **************************************************/
    #include <p18f45k20.h>
    #include <delays.h>
    #include <sw_uart.h>
    
    
    /** D E C L A R A T I O N S ******************************************/
    #define BAUD 9600 
    #define CLK 20000000 
    char data;
    //Delay Functions 
    //=============== 
    void DelayTXBitUART(void) 
    { 
       char delay_time = (((((2*CLK)/(4*BAUD))+1)/2)-12); 
       Delay10TCYx (delay_time); 
       return; 
    } 
    void DelayRXHalfBitUART(void) 
    { 
       char delay_time = (((((2*CLK)/(8*BAUD))+1)/2)-9); 
       Delay10TCYx (delay_time); 
       return; 
    } 
    void DelayRXBitUART(void) 
    { 
       char delay_time = (((((2*CLK)/(4*BAUD))+1)/2)-14); 
       Delay10TCYx (delay_time); 
       return; 
    }
    
    
    	char x = 'H';
    	int y;
    
    void main (void)
    {
    	// Initialisation des PORTS              	
    	TRISA = 1; 
    	TRISD = 0b11110000;
    	
    
    //Configuration Debugging
    	TRISBbits.TRISB6 = 0;
    	TRISBbits.TRISB7 = 0;
    	LATBbits.LATB6 = 0;
    	LATBbits.LATB7 = 0;
    	       
    
    	ANSELH = 0x00;              		//initialisation du port analogique B en port numérique
    	ANSEL = 0x00;						//initialisation du port analogique A en port numérique
    	
    //Configuration UART
    	SPBRG=12;					//Calcul Vitesse de Transmission
    	TXSTAbits.BRGH = 1;			//Rate Select High Speed
    	TXSTAbits.SYNC = 0;			//EUSART Mode Select Bit (Asynchronous Mode 0)
    	TXSTAbits.TXEN = 1;			//Transmit Enable Bit 
    	TXSTAbits.TX9 = 0; 			//9-bit Transmit Enable bit
    	
    	RCSTAbits.SPEN = 1;			//Serial Port Enable bit
    	RCSTAbits.CREN = 1;			//Continuous Receive Enable bit
    	RCSTAbits.SREN = 0;			// Single Receveive Enable bit
    	RCSTAbits.RX9 = 0; 			//9-bit Receive Enable bit
    	
    	PIE1bits.TXIE = 0;			//EUSSART Transmit interrupt Enable bit
    	PIE1bits.RCIE = 0; 			//EUSSART Receive interrupt Enable bit
    
    	BAUDCONbits.ABDOVF = 0;   	//Auto-Baud Detect Overflow bit
    	BAUDCONbits.BRG16  = 0;   	//16-bit Baud rate Generator bit
    
    	TRISCbits.TRISC6 = 1;
    	TRISCbits.TRISC7 = 1;
    
    	OpenUART();							//initialisation de l'UART
    
    
    	while( 1 )
    	{
    		WriteUART( x );
    	}
    }
    Avec un Ft230X je lit par usb et le logiciel Docklight la valeur que me sort le TX. Mais je n'ai strictement rien. Avec la liaison USART, j'arrive a recevoir des choses mais pas les bonnes! (Pour dire que le FT230X fonctionne). J'ai changé les pin's de RX et TX dans les fichiers de C18

    Quelqu'un a une idée?

    -----

  2. #2
    boux

    Re : Liaison UART Pic 18F45K20

    Avec la liaison USART, j'arrive a recevoir des choses mais pas les bonnes!
    Les paramètres de communication sont-ils cohérents entre ton programme et ton logiciel type HyperTerminal (nombres de bits, vitesse de communication, nombre de bits de stop, contrôle de flux ou non...).

  3. #3
    luc_1049

    Re : Liaison UART Pic 18F45K20

    Bonsoir

    Il s'agit d'un uart asynchrone vous parlez de l'usb , là c'est pas clair...

    Sinon dans votre logiciel vous activez les interruptions , mais mettez vous des routines elles ne sont pas dans le listing.

    Quel intêrêt des fonctions de délai ?

    Prenez la précaution de vider le buffer de réception qui peu contenir des octets ou des bits non voulus dus aux transitoirs ou pas vidés malgrè l'init de la liaison.

    Affranchissez vous du logiciel en reliant rx et tx sur le pic. Un oscilloscope serait le bienvenu.

    Vérifiez que les horloges sont bien programmées voire qu'elles sont suffisament stables, cf arbre d'horloge du pic.

    Testez vous des bits de dépassement ou d'overflow, voire d'autres je suppose qu'il y en a afin de ne pas rater une erreur.

    Bien entendu vous avez bien configuré le nb de bit, la parité ... en cohérence sur le tx et le rx.

    cdlt

Discussions similaires

  1. Liaison UART pour PIC18F2550
    Par invite9ddd7dfb dans le forum Électronique
    Réponses: 3
    Dernier message: 17/05/2010, 08h12
  2. PIC et I2C vs UART
    Par invite220a379c dans le forum Électronique
    Réponses: 3
    Dernier message: 15/07/2009, 11h36
  3. Liaison UART par PIC24F
    Par invite5b91726d dans le forum Électronique
    Réponses: 16
    Dernier message: 04/06/2008, 15h36
  4. Pic/uart
    Par ABN84 dans le forum Électronique
    Réponses: 5
    Dernier message: 06/03/2008, 09h46
  5. TRMT - liaison UART PIC16F876
    Par invite0f39f32f dans le forum Électronique
    Réponses: 6
    Dernier message: 19/05/2006, 10h43
Découvrez nos comparatifs produits sur l'informatique et les technologies.