Problème avec le dsPIC
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Problème avec le dsPIC



  1. #1
    invite5989396e

    Problème avec le dsPIC


    ------

    Bonjour,

    je suis actuellement aux études. Je fais un graduat en électronique et je suis en dernière année. Dans le cadre de mon TFE, j'utilise le dsPIC30F4013.

    j'ai un problème avec le registre de transmission du module UART.
    je voudrais l'adresser bit à bit. lorsque je compile le programme, il ne détecte pas d'erreurs mais le dsPIC ne transmet rien.

    je joint ci dessous le code :

    //Déclaration des fonctions
    void init_UART(void);

    //intitialisation de la transmission UART

    void init_UART(void)
    {
    U1MODE=0x8000;
    U1STA=0x8400;

    U1BRG =0b0000000000000111;
    U1MODEbits.ALTIO = 0;

    U1MODEbits.PDSEL = 0b00;
    U1MODEbits.STSEL = 0;

    }

    //Fonction principale

    int main(void)
    {
    init_UART(void);
    U1MODEbits.UARTEN = 1;
    U1STAbits.UTXEN = 1;

    while(1)
    {
    U1TXREGbits.UTXREG0 = 0;
    U1TXREGbits.UTXREG1 = 1;
    U1TXREGbits.UTXREG2 = 0;
    U1TXREGbits.UTXREG3 = 0;
    U1TXREGbits.UTXREG4 = 1;
    U1TXREGbits.UTXREG5 = 0;
    U1TXREGbits.UTXREG6 = 1;
    U1TXREGbits.UTXREG7 = 0;
    while(U1STAbits.UTXBF == 1);

    }
    }

    Si quelqu'un peut m'aider, ce serait vraiment gentil.

    merci bien

    francois

    -----

  2. #2
    invitee05a3fcc

    Re : Problème avec le dsPIC

    Chaque fois que j'ai chargé le registre de transmission d'un UART, je l'ai fait avec un octet. Le fait de l'écrire declenche en général la transmission des 11 bits.
    Donc tu calcules ton octet bit à bit et tu le transferts dans le registre de transmission. point barre

  3. #3
    invite5989396e

    Re : Problème avec le dsPIC

    merci pour votre réponse.

    en fait je ne peux pas mettre directement la valeur sur 8 bits dans le registre U1TXREG parce que par la suite, je voudrais y introduire les valeurs présentes sur différentes pines.
    je m'explique : en fait je vais devoir récupérer des informations sur différents interrupteurs. Ces interrupteurs seront cablés sur les entrées du dspic. De plus, ces interrupteurs ne seront pas tous sur le même port (certains seront sur le portb et d'autre sur le portd). Il va donc falloir que j'introduise bit à bit ces valeurs dans le registre de transmission et qu'après je transmette la trame.

  4. #4
    Jack
    Modérateur

    Re : Problème avec le dsPIC

    On ne fait jamais comme ça. Il faut constituer l'octet, bit à bit si tu veux, dans un octet en RAM, puis l'envoyer dans le buffer d'émission.

    Sinon, une modification d'un bit consiste en fait à une lecture/modification/écriture du buffer d'émission. A chaque modification de bit, tu vas expédier le contenu du buffer sur la ligne série.

    A+

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

    Re : Problème avec le dsPIC

    bon voila j'ai trouvé une solution à mon problème.
    j'avoue que c un peu long ou compliqué mais ca fonctionne.

    je vous met le code ci-dessous :


    //Déclaration des fonctions
    void init_UART(void);
    void es(void); // Définition des E/S

    //intitialisation de la transmission UART
    void init_UART(void)
    {
    U1MODE=0x8000; // UART validé, 8 bits, pas de parité, 1 bit stop
    U1STA=0x8400; // Autorisation de l'émetteur de l'UART, interruption quand
    // un caractère est transféré
    U1BRG =0b0000000000000111;
    U1MODEbits.ALTIO = 0; // Utilise les broches UxTX et UxRX et pas les broches
    // alternatives
    U1MODEbits.PDSEL = 0b00; // transmission de données de 8 bits sans parité
    U1MODEbits.STSEL = 0; // 1 bit de stop

    }

    // Définition des E/S
    void es(void)
    {
    TRISB=0x0000;
    PORTB=0x0000;

    }


    int valeur0;
    int valeur1;
    int valeur2;
    int valeur3;
    int valeur4;
    int valeur5;
    int valeur6;
    int valeur7;
    int decal0;
    int decal1;
    int decal2;
    int decal3;
    int decal4;
    int decal5;
    int decal6;
    int decal7;
    int resul;

    //Fonction principale

    int main(void)
    {
    es(void);
    valeur0 = 0;
    valeur1 = 1;
    valeur2 = 1;
    valeur3 = 0;
    valeur4 = 1;
    valeur5 = 1;
    valeur6 = 0;
    valeur7 = 0;

    decal0 = valeur0;
    decal1 = valeur1<<1;
    decal2 = valeur2<<2;
    decal3 = valeur3<<3;
    decal4 = valeur4<<4;
    decal5 = valeur5<<5;
    decal6 = valeur6<<6;
    decal7 = valeur7<<7;

    resul = decal0|decal1|decal2|decal3|de cal4|decal5|decal6|d ecal7;


    init_UART(void);
    U1MODEbits.UARTEN = 1; // activation de l'UART
    U1STAbits.UTXEN = 1; // Activation de l'émetteur de l'UART

    while(1)
    {
    PORTB = resul;
    U1TXREG = resul;
    while(U1STAbits.UTXBF == 1); // transmission en cours

    }
    }

    Si jamais vous avez une idée pour faire ça plus simplement, je suis preneur, sinon un grand merci pour votre aide.

    Francois

  7. #6
    Jack
    Modérateur

    Re : Problème avec le dsPIC

    Hou la la, c'est très lourd. Il faut utiliser les champs de bits. Par exemple:

    Code:
    //***** déclaration**************************
    union{
        struct octet {
            unsigned char
                b0: 1,
                b1: 1,
                b2: 1,
                b3: 1,
                b4: 1,
                b5: 1,
                b6: 1,
                b7: 1;} bits;
        unsigned char octet;
    } resul; 
    
    //***** utilisation **************************
        resul.octet = 0;    // accès à l'octet entier
        resul.bits.b0 = 1;  // accès aux bits
        resul.bits.b5 = 1;
    A toi de jouer ...

    Tu remarqueras en passant que c'est comme ça que tu accèdes aux bits sur ton compilateur, par exemple:
    U1MODEbits.UARTEN = 1; // activation de l'UART

  8. #7
    invite_P89
    Invité

    Re : Problème avec le dsPIC

    LU
    En ASM je ferais :

    Boucle
    Recup bit sur pin
    rotation droite ou gauche dans position RAM
    on retour dans boucle pour nos 8bits

    puis envoi UART

    Mais en C la je laisse la place.

    a bientôt

  9. #8
    invitec99a3210

    Re : Problème avec le dsPIC

    bjr, bon jai un probleme moi aussi avec l'uart, je travail avec un dspic 30f4011, je ne sai pas si le probleme est materiel ou logiciel, voila le code source du programme.


    /****************************** ****************************** ********
    *** Programme d'apprentissage C30 ***
    *** dsPIC30F3011 ***
    ****************************** ****************************** ********/
    #include <p30f4011.h>
    #include <stdio.h>
    #include <uart.h>
    /*****************************
    * Programme principal *
    ******************************/



    int main (void)
    {


    PORTD=0; // port des leds en sortie
    TRISD = 0; //pin RE0 RE1 RE2 RE3 LED123 out
    INTCON2=0;
    IFS0bits.INT0IF=0; //flag INT1
    INTCON1bits.NSTDIS=0; //ENABLE TOUT LES INT
    IPC0bits.INT0IP=6; //NIVEAU
    IEC0bits.INT0IE=1; //ACTIVER
    /****************************** * configuration de l'uart*******************/
    U1BRG=64; // transmision,reception avec 9600 /
    U1MODE=0x0000; // l'uart est désactivé/
    U1STA=0x0000;
    U1MODEbits.UARTEN=1; //activé l'uart
    U1STAbits.UTXEN=1;//activé le transmetteur
    while(1)
    {
    PORTDbits.RD3=0;
    PORTDbits.RD2=0;
    }
    return 0;
    }



    void __attribute__((interrupt,no_au to_psv)) _INT0Interrupt(void)
    {
    PORTDbits.RD3=1;
    U1TXREG=0b10101010;
    PORTDbits.RD2=1;//test de transmition
    while(U1STAbits.TRMT==0);//transmition en cour
    IFS0bits.INT0IF=0; // reiniyialisé le flag

    }



    et ce que concerne la carte jai connecté directement le port serie avec luart1 du dspic (rx,tx,Gnd)
    merci d'avance.
    la visualisation sur lyperterminal donne n'importe quoi.
    merci

  10. #9
    invitee05a3fcc

    Re : Problème avec le dsPIC

    Citation Envoyé par autousto Voir le message
    et ce que concerne la carte jai connecté directement le port serie avec luart1 du dspic (rx,tx,Gnd)
    J'espère que ton DsPIC a supporté la torture !

    Le port COM du PC est en RS232 (-5/+5V)
    L'UART est en TTL (+5V/0V)

    Il faut obligatoirement passer par un MAX232 (ou autres)

  11. #10
    invitec99a3210

    Re : Problème avec le dsPIC

    merci DAUDT78 mais comme même c normale que j'ai utilisé un liaison MAX232 mais le probleme quand je visualise l'yperterminal je trouve des donnée bizard, et je ne sai pas ou est exactement le problème, j'ai même esseillé avec plusieurs vitesses 9600....etc , je veut m'assuré que ce n'est pas au niveau du programme.

  12. #11
    invitee05a3fcc

    Re : Problème avec le dsPIC

    Tu regardes à l'oscilloscope les signaux qui arrivent sur la broche Rx du DsPIC et qui partent du Tx du DsPIC

    - En absence de transmission, tu as du Vdd sur les deux pins
    - En transmission, tu regardes la largeur des bits, tu doit avoir la même valeur ( 0,1 mS à 9600 Bds)

  13. #12
    invitec99a3210

    Re : Problème avec le dsPIC

    ok, je vai voir, et pour vous dire que jutilise un quartz de 10MHZ.

  14. #13
    invitec99a3210

    Re : Problème avec le dsPIC

    bsr DAUDET , bon en abbssence du signal jai trouvé VDD sur rx et VSS sur tx, tu crois que c normale , et c tu veut je t'envoi le montage du luart.

  15. #14
    invitee05a3fcc

    Re : Problème avec le dsPIC

    J'y connais rien en dsPIC, un peu en RS232
    • Retire ton dsPIC de son support
    • Branche, avec un fil, Rx et Tx ensemble sur le support du µC
    • Tout ce que tu tapes sur le clavier HyperTerminal, tu le vois en écho sur l'écran du PC
    Si ça marche, tu as PB de soft, sinon de hard entre le PC et ton µC.

    Tu as un oscilloscope ?

  16. #15
    RISC

    Re : Problème avec le dsPIC

    Salut,

    Il existe plein d'exemples sur internet concernant la programmation des UART pour les dsPIC30 :

    * http://electronique.marcel.free.fr/#dsPIC_Microchip
    * http://moodle.epfl.ch/mod/resource/index.php?id=467
    * http://www.baghli.com/dspic_intro.php
    * http://www.microchip.com/appnotes
    * http://www.microchip.com/codeexamples

    Il n'y a qu'à se baisser pour trouver

    a+

  17. #16
    invitec99a3210

    Smile Re : Problème avec le dsPIC

    merciiii, je vai encore esseillé, oui jai un oscilloscope, et jai pas bien compri la méthode, que veut dire echo?

  18. #17
    RISC

    Re : Problème avec le dsPIC

    Salut,

    On parle d'echo "local" ou d'echo "distant", c'est à dire pour vérifier que les octets sont bien envoyés, on reçoit un octet sur RX et on le renvoie sur TX.
    Si tu tapes des caractères dans hyperterminal, avec l'echo distant les caratères affichés sont ceux reçus et renvoyés par ta carte au PC.
    L'echo local, si tu l'actives ne permet de rien voir car le PC te montre chaque caractère qu'il envoie.
    Si tu les as en double c'est que l'écho local et distant sont activés.
    A l'intérieur d'un chip il y a parfois aussi un echo local qui reboucle RX sur TX pour pouvoir tester sa liaison sans hardware externe ;=)

    a+

  19. #18
    invitec99a3210

    Re : Problème avec le dsPIC

    merciiiii ECHO, on cour d'esseil. a+

  20. #19
    invitec99a3210

    Re : Problème avec le dsPIC

    merci RISC

Discussions similaires

  1. cours sur les DSpic???
    Par invitee697ecfb dans le forum Électronique
    Réponses: 0
    Dernier message: 18/10/2007, 17h14
  2. achat dsPIC
    Par invitec35bc9ea dans le forum Électronique
    Réponses: 2
    Dernier message: 31/08/2007, 13h41
  3. Programmateur dsPIC
    Par invite1469b964 dans le forum Électronique
    Réponses: 4
    Dernier message: 26/02/2007, 01h10
  4. reception d un fax par DSPIC
    Par invite43cc251c dans le forum Électronique
    Réponses: 1
    Dernier message: 22/11/2006, 23h55
  5. programmateur de dsPIC
    Par invite0e36b18a dans le forum Électronique
    Réponses: 0
    Dernier message: 11/05/2006, 16h48
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...