pic uart rs232 pc
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

pic uart rs232 pc



  1. #1
    invite16b1caa8

    pic uart rs232 pc


    ------

    Bonjour,
    Je n'arrive pas à envoyer des données correctement de mon pic 18F4550 vers un pc sur le port serie via un module usb.

    Code:
    void lettre (char symbole){
    	while (!TRMT);
    	TXREG=symbole;
    }
    
    void main(void){
    	BAUDCON=0;
    	SPBRG=129;		// pour 9600 baud a 20Mhz
    	TRISC.6=1;		// C6 en entrée TX si si ...
    	TRISC.7=1;		// C7 en entrée RX
    	RCSTA=0b10010000;	// spen=1 (TX et RX actif) cren=1 (recepteur actif) asynchrone
    	TXSTA=0b00100100;	// txen=1 (transmissions activées) sync=0 (asynchrone) brgh=1 (high speed)
    
    	while (1){
    		lettre(0x47);      // G
    		pause31;
    	}
    }
    ce code est compilé avec CC8E

    Je ne sais pas me servir de l'hyper terminal, mais avec teraterm, je vois le symbol exposant 3 (0xB3) alors que j'aimerais recuperer 0x47.
    J'envoie les données au travers d'un MAX232, et seul la liason Tx pic Rx PC et la masse sont branchées.
    Merci.
    fred

    -----

  2. #2
    Seb.26

    Re : pic uart rs232 pc

    Si tu as un oscillo sous la main, vérifie la durée de tes bits...

    9600bps = 104uS/bit (si ma mémoire est bonne)

    Et utilise un "unsigned char" au cas ou ...

    Et RTFM !!!
    The pins of the Enhanced USART are multiplexed with
    PORTC. In order to configure RC6/TX/CK and
    RC7/RX/DT/SDO as a USART:
    • bit SPEN (RCSTA<7>) must be set (= 1)
    • bit TRISC<7> must be set (= 1)
    • bit TRISC<6> must be cleared (= 0) for
    Asynchronous and Synchronous Master modes
    or set (= 1) for Synchronous Slave mode
    Dernière modification par Seb.26 ; 20/01/2012 à 19h43.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  3. #3
    invite16b1caa8

    Re : pic uart rs232 pc

    Merci,
    je vais essayer TRISC.6=0,et sous oscillo de voir le signal, et de passer sous unsigned, ce serai trop bien que ça marche. ?
    eh euh... RTFM, je l'ai raté, c'est quoi ?
    merci.
    fred

  4. #4
    RISC

    Re : pic uart rs232 pc

    Salut,

    Tout d'abord je te recommande d'utiliser le compilateur C18 version Lite (gratuite) plutôt que le CC8E qui ancien et limité.
    Ensuite, tu pourras utiliser les exemples de code pour les PIC18 dont certains pour l'UART.

    a+

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

    Re : pic uart rs232 pc

    Citation Envoyé par abrac Voir le message
    eh euh... RTFM, je l'ai raté, c'est quoi ?
    Read The Fuc**ng Manual ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  7. #6
    invite16b1caa8

    Re : pic uart rs232 pc

    Mouarf ... je pouvais le chercher longtemps ce pu**** de registre RTFM.
    C6=0 c'est pareil. en unsigned char, c'est pareil.
    Je vais ralentir le signal pour arriver à le voir sous oscillo.
    Je me demande si le souci ne viendrai pas de mon utilisation de teraterm ou de l'hyper terminal.
    Si je passe "lettre('A');" la réponse sur teraterm me renvoie toujours le 3exposant, mais avec des espaces et des sauts de lignes.
    pour visualiser le signal avec teraterm, je démarre sur com4, je branche mon pic, et sur la fenêtre, apparait directement ce résultat.
    Avec hyper terminal, je ne vois rien du tout, et si je demande une connexion par modem, le délais est toujours dépassé.
    Merci.
    fred

    ps : Je ne compile pas avec C18 parce que je n'ai jamais été foutu capable de le winer correctement pour mon ubuntu. Je développe avec un éditeur de texte. Je passe sous MPLAB uniquement sur un poste fixe juste avant de mettre le code dans le pic.
    Mais je viens de voir qu'il existe une version MPLABX qui fonctionne sous java et serais utilisable sous linux.

  8. #7
    paulfjujo

    Re : pic uart rs232 pc

    bonjour,


    La seule difference que je vois avec la version RS232 en C18
    est l'attende de registre TXIF vide lors de l'emission d'un caractere.
    Dans ton init à quoi correspond Baud=0 ?

    As-tu essayé de relier coté max232, les pins correspondant à RC6 et RC7 (en enlevant le µproc) pour verifier qu'en les reliant
    tu as bien l'echo de ce que tu frappes au clavier .

    Code:
    /*	emission d'un caractère */
    void putSerial(char c)
    	{
    	while(!TXSTAbits.TRMT);
        TXREG=c;                           /* envoie un caractère */
        while(!PIR1bits.TXIF);
    	}
    
    ci dessous une version C18 testée OK , 9600bds mais Q=10Mhz
    
    /* initialise les communications et interruptions*/
    void initSerial(void)
    	{
    	TRISCbits.TRISC7 = 1;  // RX - Set Recieve pin for tristate
    	TRISCbits.TRISC6 = 0;  // TX - Set as Output
         SPBRG = 64; 	                /* configure la vitesse (BAUD) 9600  Q=10Mhz */
        // TXSTA = 0x24;					/* TXEN=1  BRGH=1
        TXSTAbits.TXEN = 1; // transmit enabled
        TXSTAbits.BRGH = 1; // high data rate for sending
        TXSTAbits.TX9 = 0; // 8-bit transmission
       //  RCSTA = 0x90;    // active l'USART  SPEN=1  et   CREN=1
     	RCSTAbits.SPEN = 1; // enable serial port pins RX et TX port B
        RCSTAbits.CREN = 1; // enable asynchrone Continuous Receiver ENable bit
    
        PIR1bits.TXIF=0;				// IT en emission désactivée
        PIE1bits.RCIE=1;				// IT en reception activée
    
        INTCONbits.GIEH=1;              /*autorise les IT */
        INTCONbits.GIEL=1;
    }

  9. #8
    Seb.26

    Re : pic uart rs232 pc

    Citation Envoyé par paulfjujo Voir le message
    As-tu essayé de relier coté max232, les pins correspondant à RC6 et RC7 (en enlevant le µproc) pour verifier qu'en les reliant
    tu as bien l'echo de ce que tu frappes au clavier .
    Très bonne suggestion !

    Check aussi que ta pin Tx est bien à 5v et pas à 0v au repos ... (il y a un bit qui permet d'inverser les niveaux de l'UART ... je sais plus s'il est décrit dans la Datasheet principale ou seulement dans les "release-note" ... ?!)

    Par contre si quoi que tu envois, ton PC reçoit la même valeur, il doit y avoir un souci plus vicieux que ça ... un coup d'oscillo semble indispensable ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  10. #9
    RISC

    Re : pic uart rs232 pc

    Salut,
    Citation Envoyé par abrac Voir le message
    ps : Je ne compile pas avec C18 parce que je n'ai jamais été foutu capable de le winer correctement pour mon ubuntu. Je développe avec un éditeur de texte. Je passe sous MPLAB uniquement sur un poste fixe juste avant de mettre le code dans le pic.
    Mais je viens de voir qu'il existe une version MPLABX qui fonctionne sous java et serais utilisable sous linux.
    Effectivement
    Avec MPLAB X tu peux travailler en natif sous LINUX, y compris les compilateurs qui sont gratuits en version Lite.

    a+
    Dernière modification par RISC ; 21/01/2012 à 15h53.

  11. #10
    invite16b1caa8

    Re : pic uart rs232 pc

    Alors,
    Pour mon init j'ai mis BAUDCON à 0 pour avoir BRG16 sur 8bits TXCKP et RXCKP non inversé.
    Suite au remarque, j'ai essayé BAUDCON=Ob00010000;
    Ca ne change rien sur mon résultat sur teraterm ni à l'oscillo.
    J'ai vérifié de bien avoir l'echo sur l'hyper terminal.
    Sinon sur l'oscillo

    pour lettre(0xAA);
    _______¨¨_¨_¨_¨_____
    1111111001010101111
    <-
    pause31?10101010pause31 une fois remis dans l'ordre ca me donne bien mon 0xAA

    pour lettre(0x47);
    ________¨___¨¨¨_¨_____
    1111111101110001011111
    <-
    pause31?01000111pause31 ce qui me donne remis dans l'ordre 0x47

    Au repos l'état est à 1, je vois 9 bits passé, le premier "?" est toujours à 0.
    Je serais donc inversé ?

    sinon le script en C18 ressemble au mien, je n'utilise pas encore les interruptions, alors normalement le flag TXIF ne devrait pas me servir.

    Merci
    fred

  12. #11
    invite16b1caa8

    Re : pic uart rs232 pc

    Bonjour,
    J'ai mis TXCKP=1 en tapant BAUDCON.4=1, là le signal est inversé le repos est à 5V.
    Je n'ai toujours pas mon 'G', ni sur tera term, ni sur l'hyper terminal, ni sur gtkterm.
    Je me suis installé MPLABX, utilisé le script edité par paulfjujo, j'ai juste modifier SPBRG=129, que se soit avec BAUDCONbits.TXCKP=1 ou 0, RX PC branché directement sur TX pic ou après le MAX232, je n'ai toujours pas le résultat attendu. L'affichage sur le terminal n'est pas toujours le même symbole, il y en à plusieurs, comme si j'envoyais plusieurs caractères, mais ne n'envoie qu'un 'G'
    Je vais revoir mon montage...
    Si quelqu'un a une idée...
    Merci
    fred

  13. #12
    RISC

    Re : pic uart rs232 pc

    Salut,

    Au fait...on a pas vu ton schéma électronique...Peux-tu tout d'abord confirmer que tu utilises un quartz ?
    Ou sont les bits de configuration ?

    Tu trouveras ici des exemples de code pour les PIC18 dont certains pour la liaison UART

    a+

  14. #13
    Seb.26

    Re : pic uart rs232 pc

    Citation Envoyé par abrac Voir le message
    J'ai mis TXCKP=1 en tapant BAUDCON.4=1, là le signal est inversé le repos est à 5V.
    Il est pas inversé, il est normal : au repos une UART est à 1 (5v coté uCPU / -12v coté RS232 )

    Tu as essayé de relier les pins Tx et Rx qui sorte de ton MAX (avant d'aller dans le uCPU) ? ... tu devrais alors recevoir ce que tu envois ...

    Tes timings sont bon sur l'oscilo ???

    Aide toi et le ciel t'aidera ...
    Dernière modification par Seb.26 ; 23/01/2012 à 12h43.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  15. #14
    invite16b1caa8

    Re : pic uart rs232 pc

    Bonjour,
    Je confirme l'utilisation d'un quartz externe.
    Je crois bien que ma configuration doit pas être bonne.
    Code:
    /*
     * File:   main.c
     * Author: fred
     *
     * Created on 21 janvier 2012, 22:27
     */
    #include <p18f4550.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #pragma config PLLDIV=  5 // pour 20Mhz
    #pragma config FOSC=    HSPLL_HS
    #pragma config LVP=     OFF
    
    
    //#include "./pause.c"
    
    void init_uart(void){
        BAUDCONbits.TXCKP=1;
        TRISCbits.TRISC7 = 1;  // RX - Set Recieve pin for tristate
        TRISCbits.TRISC6 = 0;  // TX - Set as Output
         SPBRG = 129; 	                /* configure la vitesse (BAUD) 9600  Q=10Mhz */
        // TXSTA = 0x24;					/* TXEN=1  BRGH=1
        TXSTAbits.TXEN = 1; // transmit enabled
        TXSTAbits.BRGH = 1; // high data rate for sending
        TXSTAbits.TX9 = 0; // 8-bit transmission
       //  RCSTA = 0x90;    // active l'USART  SPEN=1  et   CREN=1
     	RCSTAbits.SPEN = 1; // enable serial port pins RX et TX port B
        RCSTAbits.CREN = 1; // enable asynchrone Continuous Receiver ENable bit
    
        PIR1bits.TXIF=0;				// IT en emission désactivée
        PIE1bits.RCIE=1;				// IT en reception activée
    
        INTCONbits.GIEH=1;              /*autorise les IT */
        INTCONbits.GIEL=1;
    
    }
    
    void lettre(unsigned char symbol){
        while (!TXSTAbits.TRMT);
        TXREG=symbol;
        while (!PIR1bits.TXIF);
    }
    void main(void) {
        int i;
        init_uart();
        while(1){
            lettre('G');
            for (i=800; i>0; i--);
        }
    
    }
    voila le code que j'ai mis et la config que j'ai testé.
    La vitesse doit me poser un problème puisque je n'ai pas la même fréquence quand je court-circuite TxRx lors de l'écho et quand j'envoie mon 'G' .
    je vais tester l'echo avant et après le max232.
    Je me débrouille pour numériser le schéma.
    Le repos est bien à 5v en sortie du max après inversion par le µc.
    Merci de votre attention.
    fred

  16. #15
    invite16b1caa8

    Re : pic uart rs232 pc

    Bonjour,
    bon bein finalement, j'ai eu ce que je voulais.
    avec le max232 je reste en BAUDCON=0
    mon problème venait bien de la configuration du pic. Je n'ai pas l'habitude de le configurer en écrivant le script, mais plutôt avec winpic800 au moment de graver le pic.
    - Oscillator ==> HS oscillator, HS used by usb
    - Oscillator Selection ==> divided by 5 (20 Mhz)
    - CPU Systeme Clock ==> No divide
    Voila, j'ai mon 'G', que ce soit en C18, ou en CC8, mais maintenant, j'ai mon MPLABX sous linux
    merci à tous. C'est cool.
    fred

  17. #16
    RISC

    Re : pic uart rs232 pc

    Salut,
    Citation Envoyé par abrac Voir le message
    mon problème venait bien de la configuration du pic. Je n'ai pas l'habitude de le configurer en écrivant le script, mais plutôt avec winpic800 au moment de graver le pic.
    fred
    On ne se méfie jamais assez des bits de configuration...qui sont essentiels
    D'ou ma question dans mon post précédent...

    MPLAB X...que du plaisir

    a+

  18. #17
    invite16b1caa8

    Re : pic uart rs232 pc

    Citation Envoyé par RISC Voir le message
    Salut,

    On ne se méfie jamais assez des bits de configuration...qui sont essentiels
    D'ou ma question dans mon post précédent...

    MPLAB X...que du plaisir

    a+
    D'ou ma recherche, sinon je crois que j'y serais encore. merci

Discussions similaires

  1. (Rx) RS232 -> UART TTL sans MAX232
    Par invitea2e9bd22 dans le forum Électronique
    Réponses: 5
    Dernier message: 15/02/2010, 23h10
  2. RS232 vers UART 3.3 ou 5V
    Par invitec35bc9ea dans le forum Électronique
    Réponses: 5
    Dernier message: 19/10/2009, 06h37
  3. enregistrer et sauvegarder trames Uart RS232
    Par invitebd358db9 dans le forum Électronique
    Réponses: 10
    Dernier message: 15/10/2009, 10h30
  4. (Rx) RS232 -> UART TTL sans MAX232
    Par Seb.26 dans le forum Électronique
    Réponses: 12
    Dernier message: 25/07/2009, 19h47
  5. [PB] PIC 16F638 UART et RS232
    Par invite50cc55df dans le forum Électronique
    Réponses: 3
    Dernier message: 09/03/2009, 18h29
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...