communication RS232 avec PIC 16f877A
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

communication RS232 avec PIC 16f877A



  1. #1
    picall

    Angry communication RS232 avec PIC 16f877A


    ------

    Bonjour tt le monde;

    je souhaite avoir votre aide SVP sur un projet sur lequel je travail.
    je suis débutant en programmation des PIC et la je dois réaliser une communication entre un PC et un PIC 16F877 (juste la réception au moin)
    bref vous allez me dire que y'a plein d'exemples sur le net, bien sure , j'ai déjà commencé et j'ai fais un premier programme pour la reception RS232 en C, mais ma surprise en connectant avec le pc y'a rien qui se passe sur Hyper terminal....

    donc j'utilise un Pic 16f877, une carte PICDEM2plus avec OSC 4Mhz pour les test, je suis sous Windows 7

    et le code que j'ai est le suivant:

    Code:
    //**********************************************************
    //**********************************************************
    #include <int16cxx.h>
    
    #pragma chip PIC16F877
    
    
    //********************************************  
        int i,j,k, T;
        unsigned char millisec;
    //********************************************
    //*********************E/S*******************
    //******************************************** 
    #define CP_off |= 0x3F30
    #define LVP |= 128
    #pragma config CP_off, PWRTE = on, WDTE=off,FOSC = HS, BODEN = on, LVP
    
    #pragma origin 4
        interrupt passge_par_zero(void)
        {
         int_save_registers      // sauvegarde des registres de travail
    
    
            if(INTF){           //test de la communication   
    
                                //***********tempo en milisec avant l'impultion**********
                                    //    millisec = 20;
                                     OPTION = 2; // prescaler divide by 8
                                         do 
                                            { 
                                                TMR0 = 0;
                                                 clrwdt(); // only if necessary
                                                 while (TMR0 < 125); // 125us * 8 =1000us 
                                            } 
                                        while (-- millisec > 0); // variable de tempo avt impultion a recuperer (millisec)                
                                    //******************************************************
                                        PORTA.1=1; // mettre le port A à 1
                                  //***********tempo duree de l'impultion *****************                        
                                            
                                                    for (i=0; i<10; i++) //10 micro S
                                                     { 
                                                        clrwdt(); // only if necessary, nop(); a la place
                                                         nop();
                                                         nop();
                                                         nop();
                                                         nop();
                                                     }                                                 
                                    //******************************************************
                                        PORTA.1=0; //remettre le port A à 0
                                //*******************************************************
    
    
    
                        INTF=0; // REMISE A ZERO DU FLAG.
                    }
        int_restore_registers   // réstauration 
        }
    
    
    //****************************************************
    //*************************init usart*****************
    void InitUSART()
     {
            PORTA = 0;             //init port A
            PORTB = 0;              // init port B
            PORTC = 0;             // init portC
        TRISC.7 = 1;               // autiser la reception
        TRISC.6 = 0;              // pas de transmission
     
            BRGH = 1;              // high speed serial port mode
            SPBRG = 25;          //Set 9600 baud for 4 MHz oscillator
            SYNC = 0;              //clear sync bit; set_async_mode;
            SPEN = 1;             //set serial port enable
            TX9 = 0;              //8-bit transmissions sans parité
            //TXEN = 1;              //Enable transmission
            RCIE = 1;             //Rx interrupts are desired
            RX9 = 0;                //enable 8-bit receptions
            CREN = 1;               //enable reception
            TXIE=0;                 //disable tx interrupts
            RCIE=0;                 //disable rx interrupts
            TXEN=0;                 //reset transmitter
            SREN=0;                 //no effect
            TXEN=1;        
     }
    //*******************************************************
    unsigned char dummy;
    
    #define clear_usart_errors_inline    \
    if (OERR)                                                    \
    {                                                                    \
        TXEN=0;                                                    \
        TXEN=1;                                                    \
        CREN=0;                                                    \
        CREN=1;                                                    \
    }                                                                    \
    if (FERR)                                                    \
    {                                                                    \
        dummy=RCREG;                                        \
        TXEN=0;                                                    \
        TXEN=1;                                                    \
    }
    
    //*******************************************************
    //gets a character from the serial port without timeout
    unsigned char getch(void)
    {
    unsigned char Ch;
    
    //    while(!RCIF)
    if (RCIF)
        {
            Ch = RCREG;     // this clears the RCIF flag
            clrwdt();
            clear_usart_errors_inline;
        }
        return Ch;
    }
    //********************************************************
    
    
    
    
    //---------------------------- Programme Principal ----------------------------------------
    void main ( void ) 
    {
    TRISB = 0b11111111;            //port b en entree
    TRISA = 0b00000000;            //port a en sortie
    InitUSART();
    millisec=40;
    PORTA = 0x00;                //initialisation du portA
    PORTB = 0x00;                //initialisation du portB
    INTCON = 0b10010000 ;         // autorisation des interruptions en general et RB0 en particulier
    OPTION_REG =0b01000000;        //interruption sur le front montant
    //OPTION = 0b11000011 ;         // Pré division de l'horloge par 16 cela conduit à une durée de cycle de 3,2 micro secondes
    
    while(1) 
    {
    
    millisec = getch();
    }
    
    }
    //***********************************************************************************
    //********************************************************************************
    donc voila, si quelqu’un a quelque minutes a consacré svp

    -----
    Dernière modification par Jack ; 22/12/2011 à 12h15. Motif: Ajout balise code

  2. #2
    picall

    Re : communication RS232 avec PIC 16f877A

    re bjr

    après plusieurs essai avec hyper terminal et putty tjr rien donc c'est vraiment au niveau du programme....

    personne n'a une idée??!!!!!!!!!!!!!!!!!!!!!

  3. #3
    DAUDET78

    Re : communication RS232 avec PIC 16f877A

    Bonjour picall et bienvenue sur FUTURA
    Citation Envoyé par picall Voir le message
    c'est vraiment au niveau du programme....
    Pas sûr ... mais je ne fais pas de soft !
    Par contre, au point de vue Hard, tu relies comment ta carte PICDEM2plus au PC ?
    Un lien WEB sur la notice de la carte ?
    J'aime pas le Grec

  4. #4
    Jack
    Modérateur

    Re : communication RS232 avec PIC 16f877A

    J'ai ajouté les balises code dans le programme source du 1er message pour améliorer sa lisibilité.

    Merci d'y penser la prochaine fois.

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

    Re : communication RS232 avec PIC 16f877A

    Merci DAUDET78 pour ta réponse, et dsl pour mon retard

    alors pour la carte picdem 2 plus c'est une carte de demo de microchip équipée d'un port série, un lcd, quartz a 4Mhz ....voila un lien
    http://www.cis.upenn.edu/~lee/06cse480/data/picdem2.pdf, donc pour la connectique j'utilise un câble db9 entre la carte et le pc.

    Merci jack pour les balise.

  7. #6
    DAUDET78

    Re : communication RS232 avec PIC 16f877A

    Tu as mis un câble droit ?
    - Pin 2 DB9 PC <-> Pin2 DB9 Picdem
    - Pin 3 DB9 PC <-> Pin3 DB9 Picdem
    - Pin 5 DB9 PC <-> Pin5 DB9 Picdem

    Si tu relies les Pin 2 et 3 DB9 PC (sans brancher le câble) , ce que tu tapes au clavier , tu le vois à l'écran ?
    J'aime pas le Grec

  8. #7
    nornand

    Re : communication RS232 avec PIC 16f877A

    est tu sur que le TX et RX sur la db9 soient bien croisés ?

  9. #8
    picall

    Re : communication RS232 avec PIC 16f877A

    merci pour vos réponse:
    pour la carte picdem2plus c'est une carte concu spécialement pour ça, et pour le cable db9 c'est pas un cable de fabrication c'est un cable acheter dans le commerce, et puis c'est ce même câble que j’utilise pour programmé le PIC sur une carte JDN.
    et pour le programme c'est ok?? j'ai pas fais grand chose en principe, c'est juste pour faire un test.

    merci d'avance.

  10. #9
    DAUDET78

    Re : communication RS232 avec PIC 16f877A

    Citation Envoyé par nornand Voir le message
    est tu sur que le TX et RX sur la db9 soient bien croisés ?
    D'après la doc du picdem 2, c'est un câble droit
    J'aime pas le Grec

  11. #10
    picall

    Re : communication RS232 avec PIC 16f877A

    wi d’après la doc c'est un câble droit, et la j'ai récupéré le câble livré avec la carte et non plus y'a rien qui se passe. mais!!!!!

    la je viens d'essayer un appareil électronique avec port db9, c'est un appareil commandé par le port série et ca me fais la même chose donc a priori y'a autre chose aussi

    bon je branche l'alimentation de l'apareil, je branche le cable DB9 M/F
    j'ouvre hyper terminal (COM1, 9600bd, pas de parité, 1 bit de stop) est ce que y'a des erreurs dans mes manips.

    je commence a croir que c'est windows 7 64bit!!!!!!!!!!!!!!!!!!!!!!!!! !!!

  12. #11
    DAUDET78

    Re : communication RS232 avec PIC 16f877A

    Citation Envoyé par DAUDET78 Voir le message
    Si tu relies les Pin 2 et 3 DB9 PC (sans brancher le câble) , ce que tu tapes au clavier , tu le vois à l'écran ?
    Une réponse ?
    PS : tu as un vrai port COM ou un interface USB/COM ?
    J'aime pas le Grec

  13. #12
    picall

    Re : communication RS232 avec PIC 16f877A

    j'ai essayé les deux

  14. #13
    picall

    Re : communication RS232 avec PIC 16f877A

    non tjr pas de réponse

  15. #14
    picall

    Re : communication RS232 avec PIC 16f877A

    RE bjr

    la je viens de vérifier les câble en essayant au autre appareil comme mentionné dessus et ca marche bien..

    maintenant pour mon programme cmt je pourrais l'essayer, qd je me connecte j'ai rien sur hyper terminal, contrairement a l'autre apareil je vois la vitesse 9600,1...,
    ma questions est cmt je peut tester la liaison??

  16. #15
    picall

    Re : communication RS232 avec PIC 16f877A

    Merci tt le monde
    la j'ai confirmer la communication RS232 avec mon PIC je peut afficher sur le terminal du texte généré par le pic, il me reste plus qu'a tester le réception du coté du pic..

    merci a vous tous

  17. #16
    RISC

    Re : communication RS232 avec PIC 16f877A

    Salut,

    Ta carte PICDEM2PLUS elle est de quelle couleur (rouge, vert, bleu) ? (il y a eu 3 versions)
    Comment peux-tu être sur que le PIC est programmé corectement ?
    As-tu déjà fait un petit programme simple qui fait clignoter une led avant de t'attaquer à la liaison série ?

    Sur ta carte il y a un oscillateur 4MHz...à condition que les cavaliers soient correct (je crois que c'est l'option par défaut)
    Voir le user manual correspondant à ta carte (sur le CDROM si tu l'as).

    Quel compilateur utilises-tu ?

    Pour les bits de configuration cela a l'air correct (attention à toujours mettre LVP = OFF)
    Tu utilises un PIC16F877 ou PIC16F877A ?

    Pour le cable RS232 je confirme qu'il faut IMPERATIVEMENT un cable droit.

    Ta programmation du PORTA ne semble pas correcte...lis la documentation sur les I/O PORTS.
    Il faut absolument programmer les broches multiplexées analogique/digital en mode digital (registre ADCON1...)

    a+

  18. #17
    picall

    Re : communication RS232 avec PIC 16f877A

    slt RISC et merci pour ton msg:

    ma carte est une carte verte avec 4Mhz et le pic c'est un 16f877A (je me suis trompé ds le premier msg )
    et pour la programmation des port je crois que c ok puisque jai programmé une impulsion sur RA1 selon une interruption sur RB0 et ca marche bien enfaite le problème que j'ai actuellement est de savoir si le pic prend bien les donner que je lui donne du cout j'affiche un msg du genre entrer valeur et après je dois afficher cette valeur sur le terminal

    le msg s’affiche bien mais des que appuis sur n'importe quel touche la boucle démarre et ré affiche a chaque fois le même mesg ==>

    code:
    Code:
    putst("Starting up serial @ 9600 baud, N,8,1, no flow control ...\n\n");
    putst("This program tests the serial port.  It displays the text string '[alive]' every\n");
    putst("Enter temporisation ??\n");
    putchhex(millisec);
    putst("\n");
    while(1) 
    {
    millisec = getch();
    putst("you have entered :\n" );
    putchhex(millisec);
    putst("\n");
    
    }
    
    }

    et sur le terminal ca m'affiche a chaque fois

    Code:
    you have entered :
    4B
    you have entered :
    4B
    you have entered :
    4B
    you have entered :
    4B
    you have entered :
    4B
    you have entered :
    4B
    you have entered :
    4B
    you have entered :
    4B
    you have entered :
    4B
    you have entered :
    4B
    you have entered :
    4B
    you have entered :
    4B
    you have
    enfaite ^pour le compilateur j'utilise CC5X

    Merci d'avance

  19. #18
    RISC

    Re : communication RS232 avec PIC 16f877A

    Salut,

    Ma première recommendation : laisse tomber le très vieux compilo CC5X et télécharges la version gratuite (version Lite) du compilateur Hitech PIC10/12/16

    si tu cherches sur internet tu trouveras des dizaines d'exemples pour faire fonctionner l'UART sur le PIC16F877A en langage C (pour différents compilateurs).
    En général il faut adapter les déclarations des bits de configuration et aussi les structures à champs de bits qui diffèrent d'un compilo à l'autre.

    Tu peux aussi t'aider de ces tutoriels :
    * http://www.gooligum.com.au/tutorials.html
    * http://www.ac-limoges.fr/sti_ge/spip.php?rubrique4
    * http://www.aix-mrs.iufm.fr/formation...indexPIC_C.htm

    a+

  20. #19
    picall

    Re : communication RS232 avec PIC 16f877A

    merci RISC,

    je vais suivre tes conseilles pour le compilateur.

    la ca marche bien

Discussions similaires

  1. Rs232 pic 16f877a
    Par invitea0a062f4 dans le forum Électronique
    Réponses: 3
    Dernier message: 29/06/2010, 12h55
  2. Pic 16f877a - rs232 - spi
    Par loumi dans le forum Électronique
    Réponses: 5
    Dernier message: 24/06/2010, 07h32
  3. protocole pic 16f877a et pc (liaison rs232)
    Par invited776d929 dans le forum Électronique
    Réponses: 1
    Dernier message: 19/03/2009, 08h20
  4. communication rs232 avec pic 16f877 pour la commande de relais
    Par invite513767d8 dans le forum Électronique
    Réponses: 0
    Dernier message: 19/07/2008, 08h54
  5. communication pic rs232
    Par alainav1 dans le forum Électronique
    Réponses: 14
    Dernier message: 24/03/2008, 15h03
Découvrez nos comparatifs produits sur l'informatique et les technologies.