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

Liaison série entre un PIC18F4520 et un PC avec hyperterminal



  1. #1
    frouby

    Liaison série entre un PIC18F4520 et un PC avec hyperterminal


    ------

    Bonjour,

    J'aimerais établir une laison série entre un PIC18F4520 et un PC avec hyperterminal, seulement je ne sais pas configurer une liaison série sur le PIC ni établir un échange de données avec le RS232. Je programme mon PIC en C avec MPLAB C18 avec une plaquette de développement "Mechatronics". Il n'y a pas de quartz, je dois donc utiliser l'oscillateur interne au PIC.

    Je vous remercie de me répondre!!!

    A bientôt

    -----

  2. Publicité
  3. #2
    frouby

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    Voila le code que j'utilise

    #include <p18f4520.h>
    #include <usart.h>
    #include "liaison_serie.h"

    int data='a';

    void MyInterrupt(void);

    #pragma code highVector=0x008

    void atInterrupthigh(void)
    {
    _asm GOTO MyInterrupt _endasm
    }
    #pragma code // retour à la zone de code
    #pragma interrupt MyInterrupt


    //****************************** ********************//
    //Fonction d'interruption
    //****************************** ********************//
    void MyInterrupt(void)
    {

    if ((PIR1bits.RCIF)) //Interruption série provenant du PC?
    {
    data=RCREG; //Ecriture de l'angle du robot adverse pour orienter les SHARP
    PORTDbits.RD6=~PORTDbits.RD6;
    WriteUSART(data); //renvoit la valeur à l'ordi
    }


    }

    void main (void)
    {
    int compteur=0;

    TRISC=0b10000000; //RC7 en entrée et RC6 en sortie
    TRISD=0b00000000;
    PORTD=0x00;
    lance_serie(); // on lance la série avec SPBRG=70, TXSTA=0x20, RCSTA=0x90

    while(1)
    {
    if(data==0x00) //si la data est 0x00 alors la diode s'ammume
    {
    PORTDbits.RD7=1;

    }
    else
    {
    PORTDbits.RD7=0;
    }
    }
    }



    et voilà le lance_serie.h:

    // Lance la communication série à la vitesse (débit) donnée
    void lance_serie(void) {
    SPBRG=70; //31
    TXSTA=0x20;
    RCSTA=0x90;
    PIE1bits.RCIE = 1; // permet les interruptions
    INTCONbits.PEIE = 1; // sur réception
    INTCONbits.GIE = 1;
    }


    Lorsque j'appuie sur le clavier en laçant l'hyperterminal, le PIC renvoie bien au PC la touche pressée, par contre si je veux tester la variable data pour faire une action suivant la touche pressée sur le clavier, il ne se passe rien. Pourtant quand j'appuie sur la touche 'a' du PC, le PIC, avec WriteUSART(data) renvoie 'a' et je lis "a" sur la fenêtre de l'hyperterminal, c'est quand même bizarre!!!

    Est ce que ça vient de l'initialisation de TXSTA, RCSTA, SPBRG???? Je rapelle que mon pic fonctionne avec l'oscillateur interne!!
    Merci de me donner une réponse

  4. #3
    cherwam07

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    Pour l'oscillateur interne, il n'y a aucun souci !
    Tes registres...visiblement aucun non plus puisque la transmission s'effectue.

    Essai de declarer ta variable globale data comme un char, et non comme un int

    Bon courage

  5. #4
    frouby

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    ben en fait quand je la déclare en char cela ne change rien c pareil...

  6. #5
    cherwam07

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    ben en fait quand je la déclare en char cela ne change rien c pareil...
    Oui mais comme tu t'en sers pour y copier RCREG qui est un registre 8 bits, alors tu dois utiliser une variable 8 bits. Donc laisse un char quand même.

    Pour ton problème :
    quand j'appuie sur la touche 'a' du PC, le PIC, avec WriteUSART(data) renvoie 'a' et je lis "a" sur la fenêtre de l'hyperterminal
    Et quand tu tapes 'b', 'c', etc... tu lis quoi ??
    Et ca marche plusieurs fois de suite ou tu dois rebooter le pic à chaque fois ??

  7. A voir en vidéo sur Futura
  8. #6
    frouby

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    Nonça marche plusieurs fois de suite, même quand j'appuie sur d'autres touches ça m'affiche sur l'hyperterminal la touche appuyée. C'est juste quand je dois faire une condition sur ce que reçoit le PIC par série que la condition ne marche jamais. Par exemple, si en appuyant sur la touche 'a' je veux qu'une diode s'allume et ien si j'appuie sur 'a' la diode ne s'allumera pas!!

  9. Publicité
  10. #7
    cherwam07

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    Quand tu veux que la diode s'allume en appuyant sur 'a', tu écris ca ??
    Code:
    if(data=='a') 
    {
       PORTDbits.RD7=1;
    }
    else
    {
       PORTDbits.RD7=0;
    }

  11. #8
    frouby

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    Oui voilà c'est exactement cela et bien ce test ne marchera pas et pourtant quand je fais WriteUSART(data) il me renvoit bien 'a' sur l'écran de l'ordi, c'est quand même bizarre!!!! J'ai testé aussi avec le code ASCII, ca ne marche pas non plus....En tout cas, il va bien dans l'interrption car je fais clignoter ue diode dès qu'il rentre dans l'interruption, et elle change d'état....C'est vraiment bizarre!!!!

  12. #9
    RISC

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    Salut,
    Citation Envoyé par cherwam07 Voir le message
    Pour l'oscillateur interne, il n'y a aucun souci !
    Pas d'accord....Les PICs sont garantis à +/- 5% de tolérance sur la fréquence pour toute la gamme de température. NORMALEMENT, les PICs sont calibrés pour 0% d'erreur à 25C mais....les PC ont une très mauvaise tolérance à une erreur sur la vitesse du baudrate.

    Mon conseil no1 c'est déjà de monter un quartz (ou un résonnateur céramique) avec les condensateurs appropriés.

    Le problème actuel n'est sans doute pas lié au quartz mais à la programmation. Il ne faut néanmoins surtout pas négliger la précision de l'horloge...

    a+

    PS : tu trouveras des exemples de progr. pour UART sur ce site :http://www.aix-mrs.iufm.fr/formation...indexPIC_C.htm
    Dernière modification par RISC ; 01/06/2008 à 12h11. Motif: correction

  13. #10
    frouby

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    C'est vrai qur pour l'oscillateur interne, à mon avis ça y joue! Mais le problème c'est que je ne peux pas monter de quartz sur la plaquette, il n'y a aucun emplacement pour en mettre un! Tu as déjà fait une liaison série entre un PIC et un pC???

  14. #11
    cherwam07

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    D'accord pour la mauvaise précision de l'oscillateur interne. Quand je disais "il n'y a aucun souci" il fallait comprendre par là que dans le cas présent il n'y a pas de souci puisque la transmission se fait correctement.

    Mais je réitère ma question sur la facon dont tu testes si le caractère recu est 'a' ??
    Avec le code que tu as donné au début, ca ne marche pas on est d'accord ??

  15. #12
    frouby

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    Non le code "marche" puisqu'en en envoyant un caractère par série au PIC, il le renvoit au PC en l'affichant correctement à l'écran...Mais pourquoi lorsque je veux faire un test sur un caractère reçu, ça ne marche pas!!!!

  16. Publicité
  17. #13
    cherwam07

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    Certes, mais pour le test de la reception du caractère 'a' il ne marche pas....puisque tu a écrit :
    Code:
    if(data==0x00) //si la data est 0x00 alors la diode s'allume
    Tu compare la data recu à 0, donc remplace ca par :
    Code:
    if(data=='a') //si la data est 'a' alors la diode s'allume
    et la déja tu auras plus de chance que ca fonctionne.

  18. #14
    frouby

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    ah oui si c'était ausssi simple que cela ce serait bien!! Mais ça ne marche pas!! J'avais testé testant data==0x00 et c'est la seule valeur pour lequel ça marche sinon ça ne marche pas c'est ça que je ne comprends pas!! J'ai testé de faire le test dan l'interruption , dans le main en mettant le char pour tester la valeur ou la valeur en décimale ou en hexa et ça ne marche pas!!! Je ne compreds vraiment pas!!

  19. #15
    cherwam07

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    J'avais testé testant data==0x00 et c'est la seule valeur pour lequel ça marche sinon ça ne marche pas c'est ça que je ne comprends pas!!
    Et tu fais comment pour envoyer 0x00 avec l'hyperterminal ??

  20. #16
    frouby

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    j'appuie sur la touche '0', c'est la seule touche qui réagit!

  21. #17
    frouby

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    ce qui est encore plus bizarre c'est que la touche '0' n'a pas le code ascii 0x00 en hexa et pourtant c'est cette touche qui réagit....je ne comprends vraiment pas

  22. #18
    RISC

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    Frouby,

    As-tu bien respecté l'initialisation de l'EUSART préconisée par Microchip dans la datasheet paragraphe 18.0 ? :

    The pins of the Enhanced USART are multiplexed with PORTC. In order to configure RC6/TX/CK and RC7/RX/DT as a USART:
    • bit SPEN (RCSTA<7>) must be set (= 1)
    • bit TRISC<7> must be set (= 1)
    • bit TRISC<6> must be set (= 1)

    a+

  23. Publicité
  24. #19
    frouby

    Re : Liaison série entre un PIC18F4520 et un PC avec hyperterminal

    Oui, j'avais bien paramétré ces ports, j'ai réussi à trouver le problème, en fait c'était le registre SPBRG qui était mal configuré et OSCCON....du fait que j'utilise l'oscillateur interne, j'avais oublié de paramétrer OSCCON, du coup il devait démarrer avec une clock aléatoire ce qui fait que la data transférée sur le RS232 n'était pas bien décodé!!!

Sur le même thème :

Discussions similaires

  1. liaison série entre un PC et un PIC18F4520
    Par frouby dans le forum Électronique
    Réponses: 11
    Dernier message: 21/05/2008, 14h12
  2. Liaison Pocket PC-HyperTerminal-MicroC
    Par Padrino dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 22/04/2008, 14h54
  3. liaison serie avec labview
    Par halima11 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 15/08/2007, 21h43
  4. signal rs232 avec hyperterminal
    Par pol5700 dans le forum Électronique
    Réponses: 18
    Dernier message: 14/05/2007, 09h39
  5. Liaison série avec PIC16F873
    Par jetster dans le forum Électronique
    Réponses: 14
    Dernier message: 27/01/2006, 23h13
Découvrez nos comparatifs produits sur l'informatique et les technologies.