Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Liaison serie avec PIC32



  1. #1
    mortaurat

    Liaison serie avec PIC32


    ------

    Bonjour,
    J'ai un petit problème avec la liaison série de mon PIC32MX534F064H, impossible d'obtenir une réponse (echo) via l'hyper terminal.
    J'ai mesuré (en pièce jointe), le signal transmis du pc vers le µc (TX liaison serie), nous avons bien un signal +-12V, cependant l'écho se situe sur la plage -5 +12v (RX liaison série).
    Ainsi je n'obtient pas le code ASCII saisie au clavier dans mon hyper terminal...
    J'utilise des max233 (max232 mais sans capa) dont l'alim est découplé (j'ai verifié l'alim), et la vitesse de transmission est de 9600bauds.
    Je ne pense pas que sa vienne du programme, j'ai bien une réponse, le PIC rentre bien dans l'interruption et la valeur "data" est celle saisie au clavier.
    Notez que si j'utilise un câble avec convertisseur usb/serie avec FTDI, le signal est encore plus dégradé et deviens quelque chose comme 0-10V.
    Avez vous une idée du problème ?
    Merci

    #include "p32mx534f064h.h"
    #include "plib.h"
    //#include "uart.h"
    //#include "interrupt.h"

    unsigned char data='a';
    //---------------------interrupt----------------------
    void __ISR(_EXTERNAL_0_VECTOR,ipl1) Int0Handler(void)
    {
    //Doit lancer un timer de 500µs pour décaler l'impulsion
    PORTE=~PORTE;//inverse la valeur de portE
    //IFS0bits.INT0IF=0;//clear interrupt flag
    INTClearFlag(INT_INT0);
    }

    void __ISR(_UART1_VECTOR, ipl2) IntUart1Handler(void)
    {
    data = ReadUART1();
    WriteUART1(data);
    while(BusyUART1()==1);
    INTClearFlag(INT_U1RX);
    //IFS1bits.U2RXIF=0;
    }

    void __ISR(_UART2_VECTOR, ipl2) IntUart2Handler(void)
    {
    IFS1bits.U2RXIF=0;
    }


    //------------------MAIN------------------

    void main ()
    {
    //intterruption externe
    ConfigINT0(EXT_INT_PRI_1 | FALLING_EDGE_INT | EXT_INT_ENABLE);
    INTConfigureSystem(INT_SYSTEM_ CONFIG_MULT_VECTOR);
    INTEnableInterrupts();

    //config interruption UART
    ConfigIntUART1(UART_ERR_INT_DI S | UART_RX_INT_EN | UART_INT_PR2 | UART_TX_INT_DIS | UART_TX_INT_PR2 );
    ConfigIntUART2(UART_RX_INT_EN | UART_INT_PR2);
    OpenUART1(UART_EN | UART_RX_TX | UART_NO_PAR_8BIT | UART_1STOPBIT | UART_NORMAL_RX, UART_TX_ENABLE | UART_RX_ENABLE | UART_INT_RX_CHAR ,520);

    while(1);

    }

    -----
    Images attachées Images attachées

  2. Publicité
  3. #2
    ftorama

    Re : Liaison serie avec PIC32

    Le MAX233 n'est pas prévu pour fonctionner à 3,3V....

    Voir du côté du MAX3233....ou équivalent

  4. #3
    mortaurat

    Re : Liaison serie avec PIC32

    Pourtant le "Input Logic Threshold High" min est de 2V (typ=1.4v).
    et j'ai regardé les états haut en sortie du pic sont à 3.3v.

  5. #4
    mortaurat

    Re : Liaison serie avec PIC32

    Ah oui je vois ce que tu veux dire.
    Mais le max233 est alimenté en 5V =)

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    ftorama

    Re : Liaison serie avec PIC32

    Citation Envoyé par mortaurat Voir le message
    Ah oui je vois ce que tu veux dire.
    Mais le max233 est alimenté en 5V =)
    Ouh là, l'entrée de ton PIC32 est 5V tolerant?

    ça manque cruellement de découplage aussi....

    Il y a une capa sur le 5V. Elle est au plus près du MAX?

    Fais attention au câblage du MAX également. Selon le package, le pinout est différent. Si le composant vient d'une lib certifiée pas de soucis. Sinon prudence de ce côté là aussi...

    Sur le PIC, je vois à la louche 6 broches d'alim....ça veut dire 6 condos, au plus près des Vdd. ça ne va sans doute pas résoudre ton problème, mais ça en évitera de suivants

  9. #6
    mortaurat

    Re : Liaison serie avec PIC32

    Oui les pins sont 5v tolérant, et j'avais rajouté une capa de découplage au plus proche de l'alim du max (qui n'est pas sur le schéma), ce qui donnait un signal un peut plus propre.
    J'en est aussi rajouté une sur l'alim du pic, mais sa n'a pas réglé le problème...

  10. Publicité
  11. #7
    ftorama

    Re : Liaison serie avec PIC32

    tu as un autre MAX233 sous la main?

    J'ai ouï dire que ces bêtes étaient du genre sensible...

    Perso, j'ai fumé des MAX3226 à la chaine. ça meurt à la moindre contrariété

  12. #8
    mortaurat

    Re : Liaison serie avec PIC32

    Oui j'en ai deux, mais j'ai dejà essayé de les changer...

    Ce qui m'étonne, c'est que si je retire le câble de la liaison série, j'ai un signal parfait +-12V...

  13. #9
    RISC

    Re : Liaison serie avec PIC32

    Salut,

    Je te recommande de télécharger les exemples de code sur les PIC32.

    D'après ce que j'ai vu de ton code, tu fais tourner le PIC32 comme une brouette car tu as oublié de configurer les registres internes du coeur...

    Voilà l'instruction magique à mettre au début de tout programme pour un PIC32 :

    Code:
    // CONFIGURATION BIT SETTINGS
    
    //  XTAL with PLL ( based on 8MHz XTAL)
    #pragma config FNOSC = PRIPLL
    
    //  Input Divider    2x Divider		//	(8MHz / 2) = 4MHz
    #pragma config FPLLIDIV = DIV_2
    
    //  Multiplier      20x Multiplier	//	(4MHz x 20) = 80MHz
    #pragma config FPLLMUL = MUL_20
    
    //  Output Divider	 1x Divider		// 	(80MHz / 1) = 80MHz
    #pragma config FPLLODIV = DIV_1
    
    //	Peripheral Bus = 40 MHz			//	(80MHz / 2) = 40MHz
    #pragma config FPBDIV = DIV_2
    
    // Primary Osc XTAL
    #pragma config POSCMOD = HS
    
    //  WDT disabled
    #pragma config FWDTEN = OFF
    
    //  Secondary Oscillator disabled
    #pragma config FSOSCEN = OFF
    
    //  Two-Speed startup disabled
    #pragma config IESO = OFF
    
    //  PB clock out on OSC2 disabled
    #pragma config OSCIOFNC = OFF
    
    //======================================
    #define CLOCK_FREQ 80000000   // cette valeur dépend des bits de configuration ci-desus avec un quartz à 8MHz. Valeur max = 80MHz
    
    int main()
    {
    SYSTEMConfigPerformance(CLOCK_FREQ)
    ...
    a+
    Ma marotte ? les microcontrôleurs ;=)

  14. #10
    mortaurat

    Re : Liaison serie avec PIC32

    Hey,
    j'ai trouvé l'erreur !!!
    Il s'agissait de l'emprunte du subDB9 qui était à l'envers !!!!

    @RISC: J'ai mis un quartz 4MHz avec une PLL x20 pour le faire tourner à 80MHz
    C32 permet de configurer ces registres avec son soft.

    Merci

  15. #11
    RISC

    Re : Liaison serie avec PIC32

    Salut,

    Les bits de configuration DOIVENT être configurés dans ton fichier source et surtout pas dans l'environnement MPLAB...
    Cela garantit que ton fichier compilé produit un fichier HEX qui CONTIENT les bits de configuration, ce qui n'est pas le cas si tu fais cela dans MPLAB.

    Regarde mon code dans le post précédent qui montre les bits de configuration. Si tu tournes avec un quartz 4 MHz, il faut donc changer le diviseur en entrée :

    // Input Divider 2x Divider // (8MHz / 2) = 4MHz
    #pragma config FPLLIDIV = DIV_1

    Ensuite, je te recommande d'ajouter les lignes suivantes au début de ton main() :

    Code:
    #define CLOCK_FREQ 80000000
    
    int main()
    {
    	DDPCONbits.JTAGEN = 0;	// désactiver le JTAG !  (toujours actif au Reset)
            SYSTEMConfigPerformance(CLOCK_FREQ)   // configure les waits states / cache / ...pour optimisation maximum du coeur
    ...
    a+
    Ma marotte ? les microcontrôleurs ;=)

  16. #12
    titilaflamme

    Re : Liaison serie avec PIC32

    bonjour, je profite de ton sujet mortaurat pour poser une petit question en raport avec l'UART de mon PIC32
    Je suis encore débutant en programmation.
    J'ai aussi une liason RS232 et j'aimerai générer une interruption lorsque je recois mes ordres dessus.
    je recois mes données de cette facon pour l'instant:

    while(!DataRdyUART1());
    carte = (char)ReadUART1();

    while(!DataRdyUART1());
    module_1 = (char)ReadUART1();

    while(!DataRdyUART1());
    module_2 = (char)ReadUART1();


    Et t'il possible que l'on m'explique comment générer une interruption pour incrémenter un compteur avec le timer2, car tous ce que je trouve sur le web et toujours mis dans un programme plus compliqué et je n'arrive pas à identifier la partie qui m'interesse.

    Merci

  17. Publicité
  18. #13
    RISC

    Re : Liaison serie avec PIC32

    Salut Titi,

    Regarde le message 9 de ce sujet tu trouveras un lien pour des exemples de code pour les PIC32.
    Ces exemples de code montrent comment mettre en oeuvre un seul périphérique particulier

    a+
    Ma marotte ? les microcontrôleurs ;=)

Discussions similaires

  1. liaison série avec open office (ubuntu)
    Par verdifre dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 28/05/2010, 20h54
  2. Gestion de la liaison série avec Qt
    Par Ferl0w dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 06/11/2009, 08h17
  3. Réponses: 18
    Dernier message: 03/06/2008, 13h10
  4. liaison serie avec labview
    Par halima11 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 15/08/2007, 20h43
  5. Liaison série avec PIC16F873
    Par jetster dans le forum Électronique
    Réponses: 14
    Dernier message: 27/01/2006, 22h13
Découvrez nos comparatifs produits sur l'informatique et les technologies.