USART sur PIC 16F628
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

USART sur PIC 16F628



  1. #1
    marcel6566

    USART sur PIC 16F628


    ------

    Bonjour,

    J'ai relié 2 PIC via deux 75176 (bus de transmission différentiel) en utilisant les deux usart.
    Un pic 16F628 est en émetteur, l'autre en récepteur.
    La pattes MCLR est reliée à 5V : en intRC I/O in, il n'y a pas de quartz.
    Le signal série start, 8bits, stop arrive bien à la patte RX du PIC récepteur. A l'oscillo, j'ai bien 0 start - la valeur 53h inversée - 1 stop.
    L'interruption est bien reconnue comme interruption de usart.
    La réception est bien complete des 8 bits.
    Je fais la lecture
    Code:
    movf RCREG, W
    J'obtiens une valeur complètement différente de 53h.

    Pouvez-vous me dire pourquoi ?

    Code identique coté emetteur et recepteur
    Code:
    bsf STATUS,RP0           
    movlw 0x19               
    movwf SPBRG 
    movlw b'00100010'       
    movwf TXSTA             
    bcf STATUS,RP0           
    movlw b'10010000'     
    movwf RCSTA
    Code:
    bsf STATUS,	RP0         
    movlw B'00000110'       ;TX et RX en entrée	  
    movwf TRISB 			
    bcf STATUS,RP0
    Gestion des interruptions coté recepteur
    Code:
    bsf STATUS,RP0
    bsf INTCON,GIE
    bsf INTCON,PEIE	
    bsf PIE1,RCIE
    bcf PIE1,TXIE 
    bcf STATUS,RP0
    Merci pour votre aide

    -----

  2. #2
    marcel6566

    Re : USART sur PIC 16F628

    Je viens de maquetter en ajoutant un quartz de 4Mhz pour chaque PIC.
    le résultat est le même
    Envoyer 53h, reçu DF; 54 -> 1F; 55 ->00 et 56 ->1F

    ?????????????????????????????? ???

  3. #3
    gedonet

    Re : USART sur PIC 16F628

    Bonjour
    Quelle est la vitesse de transmission, car normalement avec 4MHz, et pour 9600, il faut SPBRG=D'103'(0x67), pour 19200 il faut SPBRG=D'51'(0x33).
    Mais ce ne doit pas être le probleme si les deux pics sont parametré à l'identique, par contre tu pourrais avec ces vitesses normalisées faire un test entre un PC et un de tes pics via un max232, attention, un +5V coté pic donne un -12V en sortie du max .
    Il sert à quoi ton 75176, les deux pics ont des sorties TTL, il peuvent être branchés en direct.
    Gilles

  4. #4
    marcel6566

    Re : USART sur PIC 16F628

    Merci pour ta réponse.

    Je ne savais pas que l'on pouvait relier les deux pics entres eux. Je viens de les maquetter, pas de changement.
    Le 75176 permet de transporter les infos en différentiel sur deux fils jusqu'a 1km. Il est possible d'en placer 256 ce qui permet de créer un réseau électronique.
    J'ai modifié SPBRG=D'103'(0x67) des deux cotés. A l'oscillo le débit est moins rapide, mais pour moi cela n'a pas d'importance.
    Je l'ai testé j'envoie 56h et j'obtiens CAh ???

    Si tu as d'autres idées elles sont les bienvenues.
    Merci

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

    Re : USART sur PIC 16F628

    Bonsoir,
    J'ai 2 PIC qui communiquent en direct avec ce code
    Code:
    DebutTX	macro
    	Bank1
    	BSF	TXSTA, TXEN	; TX valide
    	Bank0
    	endm
    
    FinTX	macro
    	Bank1
    	BTFSS	TXSTA, TRMT	; then	TRMT=1 si TX terminée 
    	 GOTO	$-1
    	BCF	TXSTA, TXEN	; TX arreté
    	Bank0
    	endm
    
    DebutRX	macro
    	BSF	RCSTA, CREN	; Reception	
    	endm
    
    FinRX	macro
    	BCF	RCSTA, CREN	; Arret Reception
    	endm
    
    ;Init
    	Bank1
    	MOVLW	b'00110100'	; PORTA 0,1,3 en Output 
    	MOVWF	TRISA
    	MOVLW	b'00001110'	; PORTB 0,4,5,6,7 en Output
    	MOVWF	TRISB
    	MOVLW	b'11001011'	; Watch dog 1:4 144ms (56ms) 
    	MOVWF	OPTION_REG	; B6 front montant
    	MOVLW	0x19		; 9600B   0x0C 19200B
    	MOVWF	SPBRG
    	MOVLW	b'01000100'	; b2 BRGH=1  b5 TXEN=0  b6 TX9=1
    	MOVWF	TXSTA
    	Bank0
    	MOVLW	0x07		; 12F629 - 16F628
    	MOVWF	CMCON
    	MOVLW	b'11000000'	; b4 CREN=0  b6 RX9=1  b7 SPEN=1
    	MOVWF	RCSTA
    
    ;Emission ( PIC 1 )
    	DebutTX		
    	MOVFW	VOctet
    	MOVWF	TXREG			; envoie VOctet
    	FinTX
    
    ;Reception ( PIC 2)
    	DebutRX
     	BTFSS	PIR1, RCIF		; =0?
    	 GOTO	$-1			; oui=0 pas de reception
    	MOVFW	RCREG
    	MOVWF	VOctet
    	FinRX
    Apres tu pourras essayer avec interruption et 75176

    @@+

  7. #6
    marcel6566

    Re : USART sur PIC 16F628

    Merci
    je vais maquetter et je vous tiens au courant

  8. #7
    gedonet

    Re : USART sur PIC 16F628

    Bonjour
    Les nombres que je t'ai donnés pour SPBRG, sont faux, ce sont des valeurs pour une liaison serie synchrone, il faut que tu regardes sur le tableau asynchrone, toutes mes excuses.
    Tu devrais, à mon avis, proceder en deux etapes, la premiere, c'est de tester la partie emetteur, pour cela tu fais transmetre des valeurs à ton pic et tu verifies la reception avec un PC, il te faut un petit montage avec un MAX232, voir le schema sur mon site: http://gedonet.free.fr/aide_pic/aide_pic.htm et tu peux utiliser le terminal de Windows, ou un autre, ou ecrire un petit programme en basic ( pas sous XP), voir: http://gdaquino.chez.com/Commu/RS232/rs232.htm pour des exemples.
    Un fois que la partie emetteur est validée, tu passes à la partie reception de la même maniere avec un PC qui transmet et ton pic, avec le même max232.
    Quand les deux parties sont validé, tu peux alors relier ensemble les deux pics en direct et si c'est bon tu ajoutes ton SN75176.
    Gilles

  9. #8
    dome45

    Re : USART sur PIC 16F628

    Bonjour,
    Citation Envoyé par gedonet Voir le message
    Bonjour
    Tu devrais, à mon avis, proceder en deux etapes, la premiere, c'est de tester la partie emetteur, pour cela tu fais transmetre des valeurs à ton pic et tu verifies la reception avec un PC, il te faut un petit montage avec un MAX232, voir le schema sur mon site.
    Un fois que la partie emetteur est validée, tu passes à la partie reception de la même maniere avec un PC qui transmet et ton pic, avec le même max232.
    Quand les deux parties sont validé, tu peux alors relier ensemble les deux pics en direct et si c'est bon tu ajoutes ton SN75176.
    Gilles
    Si cette partie de code marche chez moi, il n'y a pas de raison que ça ne marche pas chez "Marcel6566".
    Les deux parties étant validées, pourquoi compliquer avec des tests " PIC -> PC via un MAX232"

    Si le but du montage n'est pas de communiquer avec un PC, pour tester la transmission, on peut enregister les données coté reception, sur l'EEPROM

    Bonne journée
    @@@++

  10. #9
    gedonet

    Re : USART sur PIC 16F628

    Bonjour dome45
    Si ton code marche pour toi, il n'y a evidement pas de raison que cela ne marche pas chez Marcel6566, j'imaginais qu'il voulait corriger d'eventuelles erreurs sur son code et la un PC peut être bien utiles.
    Pour un de mes projet, je voulais transmetre plus de 200 données en continue et avec le PC je me suis aperçu qu'apres 100 valeurs, il y avait un decalage d'un bit à cause d'une legere erreur de vitesse sur le pic. Sans un petit programme basic sur mon PC qui recevait en continu le RS232 et qui affichait en binaire je ne l'aurrais pas vu.
    Gilles

  11. #10
    dome45

    Re : USART sur PIC 16F628

    Bonsoir Gilles,

    Avec USART, en asynchrone, il ne peut pas y avoir de decalage, on envoie un octet et on teste si le buffer est vide ( j'avais oublié ce bout de code)
    Code:
    Message
    	TX_ON
    	MOVLW	'*'
    	MOVWF	TXREG
    	CALL	WaitBuf
    	MOVLW	'R'
    	MOVWF	TXREG
    	CALL	WaitBuf
    	MOVLW	'F'
    	MOVWF	TXREG
    	CALL	WaitBuf
    	MOVLW	'*'
    	MOVWF	TXREG
    	CALL	WaitBuf
    	MOVLW	0x0D		; Carriage Return
    	MOVWF	TXREG
    	CALL	WaitBuf
    	MOVLW	0x0A		; Ligne feed
    	MOVWF	TXREG
    	TX_OFF
    	RETURN
    
    WaitBuf
    	BTFSS	PIR1, TXIF	; =0?
    	 GOTO	$-1		; oui=0 ,Buffer plein, on attend
    	RETURN
    Comme toi, j'ai une platine d'essai avec un Max232 pour communiquer avec HyperTerminal ; tres utile pour tester les programmes (RS232, HF, Courant Porteur, ....)

    Bonne nuit

  12. #11
    marcel6566

    Re : USART sur PIC 16F628

    Merci pour tous vos conseils.

    J'ai placé un afficheur LCD en sortie du PIC récepteur car mettre au point une liaison avec un PC par RS232 m'oblique à tout recabler et à débrancher la liaison série à chaque programmation du PIC.
    J'ai repris le programme de gedonet point à point et j'ai recréé un fichier simplifié emetteur et un fichier recepteur.
    Je me suis aperçu que dans les directives j'avais
    Code:
    LIST P=16F628, R=DEC
    au lieu
    Code:
    LIST P=16F628A
    et
    Code:
    __config  _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON
    que j'ai transformé en :
    Code:
    __config _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _MCLRE_ON
    Actuellement, l'émetteur envoie une octet que je visualise à l'osc avec un débit de 9600 bauds (démarrage au niveau haut, bit de start niveau bas, octet, bit de stop au niveau haut .
    La configuration du USART
    Code:
    bsf STATUS,RP0 
    movlw 0x19
    movwf SPBRG 
    movlw b'00100100'
    movwf TXSTA
    bcf STATUS,RP0
    movlw b'10010000'
    movwf RCSTA
    Je maintiens TXSTA, TXEN à 1 car il emet si tot qu'il a l'octet dans le registre, et RCSTA, CREN à 1 car il reçoit immédiatement l'octet envoyé.
    Je revois le programme récepteur car il n'identifie pas l'interruption USART. Alors que sur le programme reception normal cela fonctionnait ...
    Coté afficheur en l'absence d'interruption, j'ai bien la valeur attendue.
    Si ton code marche pour toi drome , il n'y a evidement pas de raison que cela ne marche pas pour moi !!!
    Je continue à chercher et je vous tiens au courant des mes avancées
    Encore merci

  13. #12
    marcel6566

    Re : USART sur PIC 16F628

    De net progres
    Envoyé 99 recu 89; 57 recu 47; 75 recu 65

    Ca avance ...
    Bonne nuit

  14. #13
    invite74b5b8f7

    Re : USART sur PIC 16F628

    Salut,

    La question est donc quelle "valeur" visualises-tu à l´oscillo?
    Comme ça, tu sauras si ça vient de l´émetteur ou du récepteur...
    Envoyé 99 recu 89; 57 recu 47; 75 recu 65
    En hexa ou en décimal?

  15. #14
    marcel6566

    Re : USART sur PIC 16F628

    Salut,
    C'est le bit 4 du PortA qui ne se met pas à 1.
    Je vais trouver rapidement.
    Merci

  16. #15
    dome45

    Re : USART sur PIC 16F628

    Bonjour,
    Citation Envoyé par marcel6566 Voir le message
    Salut,
    C'est le bit 4 du PortA qui ne se met pas à 1.
    Je vais trouver rapidement.
    Merci
    PortA 4 en collecteur ouvert !

    @@@+

  17. #16
    marcel6566

    Re : USART sur PIC 16F628

    Merci, tu m'as fait gagner du temps
    Donc tout est OK
    Merci à tous

    Marcel

Discussions similaires

  1. USART pic
    Par invitecb49b6c0 dans le forum Électronique
    Réponses: 5
    Dernier message: 04/08/2008, 16h47
  2. Prob USART en interruption avec PIC 16F628
    Par marcel6566 dans le forum Électronique
    Réponses: 13
    Dernier message: 13/07/2008, 13h11
  3. usart + pic + signaux inversé
    Par KHEOPS1982 dans le forum Électronique
    Réponses: 2
    Dernier message: 08/05/2008, 09h58
  4. USART sur PIC
    Par noisyboxes dans le forum Électronique
    Réponses: 6
    Dernier message: 23/04/2007, 07h39
  5. pic 16f628
    Par invite7a98af17 dans le forum Électronique
    Réponses: 3
    Dernier message: 16/02/2004, 15h21
Découvrez nos comparatifs produits sur l'informatique et les technologies.