Urgent Liaison série et pic (Merci d'avance)
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Urgent Liaison série et pic (Merci d'avance)



  1. #1
    grd666

    Question Urgent Liaison série et pic (Merci d'avance)


    ------

    Bonjour a tous,
    voilà je suis en train d'essayer de faire communiqué mon pic avec la liaison série mais pour l'instant sa ne veux pas dialogué
    dans tout les exemples que j'ai trouvé c'est a chaque fois différent pour configurer la vitesse en bauds ici par exemple:
    http://www.abcelectronique.com/forum...p/t-36869.html
    il dit communiqué a 19200bauds avec SPBRG = 25
    hors j'ai plusieurs autre programme qui dissent qu'ils sont a 8mhz et configure aussi SPBRG = 25
    je veux communiqué a 9600bauds et j'ai un quartz de 20mhz d'après la formule
    SPBRG = Fosc/(16*(baud+1)) donc je devrais avoir: SPBRG = 130.
    C'est bien ça? a part ne pas bien configurer la vitesse je vois pas pourquoi je communique pas.
    Mon câble entre le Pc et le pic est correctement câblé.
    Sur les exemples de se site:
    http://www.aix-mrs.iufm.fr/formation...indexPIC_C.htm
    ils mettent SPBRG = 25 pour 9600bauds
    Merci de votre aide (Urgent)

    -----

  2. #2
    mat64

    Re : Urgent Liaison série et pic (Merci d'avance)

    méfie-toi : le baud rate dépends aussi de TXSTA,BRGH

  3. #3
    grd666

    Re : Urgent Liaison série et pic (Merci d'avance)

    oui mais dans mon cas s'est configurer avec ça je pense:
    OpenUSART (USART_TX_INT_OFF &
    USART_RX_INT_OFF &
    USART_ASYNCH_MODE &
    USART_EIGHT_BIT &
    USART_CONT_RX &
    USART_BRGH_HIGH,130); //130=Fosc/(16*(baud+1)) = 20*10^6 /(16*(9600+1))
    putchaine(mess); // intro
    seulement voila rien n'est envoyé sur l'hyperterminal (ou j'ai mit 9600bauds etc.. bien configurer)
    alors a moins que j'ai oublié un registre ou que mon max232 ne marche pas je vois pas ce qui cloche

  4. #4
    paulfjujo

    Re : Urgent Liaison série et pic (Merci d'avance)

    bonjour,

    Effectivement il y a aussi d'autre parametre ex: Choix high speed ..
    ci dessous un exemple (qui marche) avec calculs et tests incorporés
    je l'ai recompilé pour tes valeurs quartz et baudrate ce qui donne
    Code:
    ;==== Parametrage pour RS232 ====
    
    #define FOSC D'10000000'	; <<< frequence du quartz[Hz], max. 20 MHz
    #define BAUD D'19200'		; <<< vitesse du port serie [bit/sec]
    #define BAUD_ERROR D'4'; <<< erreur de vitesse [%]
    #define TIMEOUT  D'10'	
    
    ;===== verification ===============================================
    	IF ((FOSC/(D'16' * BAUD))-1) < D'256'
    		#define DIVIDER (FOSC/(D'16' * BAUD))-1
    		#define HIGH_SPEED 1
    	ELSE
    		#define DIVIDER (FOSC/(D'64' * BAUD))-1
    		#define HIGH_SPEED 0
    	ENDIF
    BAUD_REAL	EQU	FOSC/((D'64'-(HIGH_SPEED*D'48'))*(DIVIDER+1))
    	IF BAUD_REAL > BAUD
    		IF (((BAUD_REAL - BAUD)*D'100')/BAUD) > BAUD_ERROR
    			ERROR	"mauvaise vitesse de la liaison serie"
    		ENDIF
    	ELSE
    		IF (((BAUD - BAUD_REAL)*D'100')/BAUD) > BAUD_ERROR
    			ERROR	"mauvaise vitesse de la liaison serie"
    		ENDIF
    	ENDIF
    ;----------- F(Quartz) ------------
    	IF FOSC > D'10240000'
    		#define T1PS 8
    		#define T1SU 0x31
    	ELSE
    		IF FOSC > D'5120000'
    			#define T1PS 4
    			#define T1SU 0x21
    		ELSE
    			IF FOSC > D'2560000'
    				#define T1PS 2
    				#define T1SU 0x11
    			ELSE
    				#define T1PS 1
    				#define T1SU 0x01
    			ENDIF
    		ENDIF
    	ENDIF
    
    
    ***************************************
      partie Inititialisation
    ***************************************
    
    
    ;---------------------------------------------------------------------
    ;config  UART asynchrone PIC 16F877 DIL 40 broches
    ; pin 25  RC6 Tx ---vert -----  3 de DS275 --- RS232 --> Ecran
    ; pin 26  RC7 Rx ---blnc/vert-- 1 de DS275 --- RS232 <-- Clavier 
    ;----------------------------------------------------------------------
    		;movlw	0x90		; SPEN = 1, CREN = 1
    		;movwf	RCSTA		;configures RC7/RX/DT and RC6/TX/CK pins as serial port
    		CLRF RCSTA	; SYNC=0 asynchrone ,  8 bits data
    		BSF RCSTA,SPEN		;serial port Enable
    		BSF RCSTA ,CREN		;Enable receiver
    		bank1
    		CLRF TXSTA		; 8 bits datas
    		IF HIGH_SPEED == 1  ; 
    			bsf	TXSTA,BRGH	;
    		ELSE
    			bcf TXSTA,BRGH
    		ENDIF
    		bsf	TXSTA,TXEN	;transmit enable bit
    		movlw	DIVIDER     
    		movwf	SPBRG		
    		bank0
    		movlw TIMEOUT+1
    		movwf time	
    
    extrait du fichier *.lst
    008B   3081           00528                 movlw   DIVIDER     
    008C   0099           00529                 movwf   SPBRG
                               00530                 bank0
    ce qui donne BGR divider =129 @20MHz for 9600bds

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

    Re : Urgent Liaison série et pic (Merci d'avance)

    En C, tu peux essayer le test suivant pour essayer et valider la partie Hardware, sous mikroc (version demo OK!)

    Code:
    #define LedBlanche PORTB.F4
    
    
    int M;
    unsigned short  oj;
    
    char *txt="MikroC 16F877 test Q=10Mhz 19200 \n\r" ;
    char *p1="............................" ;
    char l;
    unsigned short int i,j,k;
    
    
    void Write_String();
    void octet_Bcd_to_2cars(short n);
    
    
    void InitMain() {
      PORTB = 0;           // set PORTB to 0
      TRISB = 0;           // designate portb pins as output
    
      ADCON1 = 0b10000101 ; // portA A0,A1=analog, A2=D, A3=+ref, A4,A5=digital
      PORTA = 255;
      TRISA = 255;          // PORTA is input
    
      PORTC = 0x0;          // set PORTC to $FF
      TRISC = 0;             // designate PORTC pins as output
     }
    
    void main()
    {
      initMain();
      USART_Init(9600);
      txt= strcpy(txt,"INIT usart 9600\n\r");
        Delay_ms(1000);
      Write_String();
      Usart_Write(13);
      Delay_ms(1000);
    
        while(1)
        {
        M = ADC_Read(0) ;
        txt= strcpy(txt,"Mesure ADC0= ");
        Write_String(); WordToStr(M, txt);
        Write_String();
        Usart_Write(13);
        LedBlanche=0;
        Delay_ms(500);
        LedBlanche =1;
        Delay_ms(500);
    
       } ;
    }

  7. #6
    grd666

    Re : Urgent Liaison série et pic (Merci d'avance)

    donc mettre sa :
    TXSTA = 0x24;
    RCSTA = 0x90; //active la communication série
    /* active l'USART*/
    OpenUSART (USART_TX_INT_OFF &
    USART_RX_INT_OFF &
    USART_ASYNCH_MODE &
    USART_EIGHT_BIT &
    USART_CONT_RX &
    USART_BRGH_HIGH,SPBRG);

    de plus j'ai mesuré a l'oscillo les broches :
    http://www.developpez.net/forums/sho...t=15542&page=2
    broche 1:rien de branché
    broche 2:-7v environ -->RD
    broche 3:0v -->TD
    broche 4:rien branché
    broche 5: 0v-->GND
    rien sur les autres broche
    je devrais avoir -7v aussi sur TD il me semble

    merci

  8. #7
    paulfjujo

    Re : Urgent Liaison série et pic (Merci d'avance)

    j'utilise un DS275 en dip8 au lieu d'un max232
    avantage : aucun condensateur necessaire
    j'ai bien -9V sur le 2 et -10V sur le 3 du DB9
    sans commande coté TTL du DS275
    Utilise tu les 2 voies du max232 ?
    essaie de relier les Tx et Rx coté TTL du Max232
    pour verifier si cela boucle avec le TERMINAL PC

  9. #8
    grd666

    Re : Urgent Liaison série et pic (Merci d'avance)

    nan j'utilise une seule voie et l'autre voie est a vide est ce qu'il faut la mettre a la masse comme le lecteur d'ou je vais récupérer les données du port série?
    http://www.lextronic.fr/P1500-platin...on-md-001.html
    montage page 5/7
    sur mon montage je n'est pas mit de résistance sur les lignes et la voie T2IN , R2IN n'est pas a la masse
    mais il est clair que j'ai un soucis si je mesure 0v broche 3

  10. #9
    grd666

    Re : Urgent Liaison série et pic (Merci d'avance)

    j'ai changé le câblage de mon câble en reliant 1,6,4 et 7,8 ensemble j'ai déja un changement d'état sur ma broche 2,elle passe de +10v a -7v après avoir normalement envoyé les données mais ma broche 3 reste a 0 avez vous une théorie qui m'aiderais a résoudre le problème merci

  11. #10
    paulfjujo

    Re : Urgent Liaison série et pic (Merci d'avance)

    est ce qu'il faut la mettre a la masse comme le lecteur d'ou je vais récupérer les données du port série?
    Non,ce n'est pas utile..
    le lecteur ?
    ce n'est pas un port com PC ?
    Hyperterminal n'est pas le must pour tester les dialogues..
    essaye plutot avec :


    Cela devrait marcher meme en mode 3 fils (Emission,Reception,masse!)
    ne pas oublier la liaison 0V (masse) entre les 2 equipements.
    Attention aux croisements 2 et 3 ...

  12. #11
    paulfjujo

    Re : Urgent Liaison série et pic (Merci d'avance)


  13. #12
    grd666

    Re : Urgent Liaison série et pic (Merci d'avance)

    bonjour,
    nan le lecteur n'est pas comme un port pc j'ai juste mettait juste 3 fils et je reliais au pc et je recevais bien les données du lecteur.
    Mais pour la liaison série du pic sa marche pas encore
    Merci pour le logiciel sa a l'air beaucoup mieux
    Mis a part les registres TXSTA et RCSTA y aurais pas un autre registre caché pour utilisé la liaison série? parce que j'ai beaux changé la valeur du baud sa change rien du tout
    Et j'ai testé mon quartz si il fait bien 20Mhz au vu du matériel que j'ai a disposition il semble bien faire cette valeur mais je ne pourrais le dire avec précision.

  14. #13
    grd666

    Re : Urgent Liaison série et pic (Merci d'avance)

    a prioris j'arrive a envoyé des données sur un terminal série en ayant une vraie valeur de spbrg
    pour 19200baud/s et avec mon 20mhz j'ai mit spbrg = 64 et je vois des caractères sur le terminal  y a des carrés  des U avec des accents et des { mais arrivée a la lecture de "toto" écrit dans le terminal sa reste en attente d'une réception.
    Je vois vraiment pas pourquoi sa veux pas lire

  15. #14
    paulfjujo

    Re : Urgent Liaison série et pic (Merci d'avance)

    bonjour,

    dans tes precedents posts
    je veux communiqué a 9600bauds et j'ai un quartz de 20mhz d'après la formule SPBRG = Fosc/(16*(baud+1)) donc je devrais avoir: SPBRG = 130.
    je confirme que cette valeur est OK !
    ton test est fait à 19200 bauds ?
    si tu vois des carres sur ton terminal,c'et que tu n'est pas à la bonne vitesse!
    ou que le format de la trame est incorrect:
    format des datas : sur 8 bits ?
    et la parité : sans parité ?
    Je vois vraiment pas pourquoi sa veux pas lire
    sur quoi lit tu les donnes recuperées par le PIC..
    les lit-tu par pooling ?
    car tu declare : USART_RX_INT_OFF &
    mets ton code source de la partie reception en ligne...

  16. #15
    grd666

    Re : Urgent Liaison série et pic (Merci d'avance)

    déja pour commencé et être d'accord la partie j'envoie:

    et en faite c'est plutôt 129 que 130 j'ai trouvé des explications au calcul
    Code:
    // envoie un caractère sur USART
    void putch(unsigned char c) 		//putch est défini sur le port série
    {
    	while(!TXSTAbits.TRMT);	// pas de transmission en cours ?
        TXREG=c;                           /* envoie un caractère */
        while(!PIR1bits.TXIF);
    }
    
    // envoie une chaine en ROM
    void putchaine(rom char* chaine)
    {
    	while (*chaine) putch(*chaine++);
    }
     
    PORTC = 0x0;          // set PORTC to $FF
    TRISC = 0;             // designate PORTC pins as output
    TRISCbits.TRISC7 = 1;  // RX - Set Recieve pin for tristate
    TRISCbits.TRISC6 = 0;  // TX - Set as Output
    SPBRG = 129; 
    baudUSART(BAUD_8_BIT_RATE &
    		   BAUD_WAKEUP_OFF &
    		   BAUD_AUTO_OFF);
    
    OpenUSART (USART_TX_INT_OFF &
    USART_RX_INT_OFF &
    USART_ASYNCH_MODE &
    USART_EIGHT_BIT &
    USART_CONT_RX &
    USART_BRGH_HIGH,SPBRG); //129 page 244 doc 18f4550
     putchaine(mess);
    et la partie réception qui a des fonctions incorporé au compilateur mcc18
    Code:
    char lecture[9];
    getsUSART(lecture,4); 
    et sa reste bloqué la dedans:
    
    void getsUSART(char *buffer, unsigned char len)
    {
      char i;    // Length counter
      unsigned char data;
    
      for(i=0;i<len;i++)  // Only retrieve len characters
      {
        while(!DataRdyUSART());//il bouge jamais de cette 
                                         // ligne sinon il recevrait  
                                         // et j'aurais pas de problème
    
        data = getcUSART();    // Get a character from the USART
                               // and save in the string
        *buffer = data;
        buffer++;              // Increment the string pointer
      }
    déja ne jamais avoir de changement d'état sur la ligne RX prouve que sa marche pas
    Si tu vois quelque chose

    merci

  17. #16
    grd666

    Re : Urgent Liaison série et pic (Merci d'avance)

    Bonjour,
    je suis toujours bloqué j'ai beaux changé des choses rien ne marche.
    Si quelqu'un a déja utilisé une liaison série sur un 18f4550 il serait sympa de m'aider.
    Merci

Discussions similaires

  1. Réponses: 43
    Dernier message: 26/06/2008, 21h02
  2. Liaison Serie Par Pic 16f873
    Par invite0ff982b6 dans le forum Électronique
    Réponses: 0
    Dernier message: 01/06/2007, 21h14
  3. polynôme merci d'avance
    Par invitecaf14d79 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 06/12/2004, 17h18
  4. barycentre merci d'avance
    Par invitecaf14d79 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 07/10/2004, 23h11
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...