[PIC18 / Language C] - Détermination de la parité
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

[PIC18 / Language C] - Détermination de la parité



  1. #1
    jorg1n

    [PIC18 / Language C] - Détermination de la parité


    ------

    Bonjour,

    dans le cadre de la mise au point d'une laision série gérée par un microcontroleur PIC18F2520, je souhaiterai déterminé la parité du mot de 8 bits envoyé.
    Concrètement, comment déterminer le nombre de "1" dans un mot de 8 bits?

    Merci d'avance,
    Bonne fin de journée à tous!

    -----

  2. #2
    vincent66

    Re : [PIC18 / Language C] - Détermination de la parité

    Bonjour,
    Simplement en examinant le byte bit par bit et en incrémentant un compteur... chose fastidieuse et totalement inutile car faite automatiquement et par hardware dans le UART...
    Vincent
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  3. #3
    inoxxam

    Re : [PIC18 / Language C] - Détermination de la parité

    Citation Envoyé par vincent66 Voir le message
    chose fastidieuse et totalement inutile car faite automatiquement et par hardware dans le UART...
    Sur les PIC18 il me semble que l'USART ne gère pas la parité en hardware, faut le faire en soft.

  4. #4
    DAUDET78

    Re : [PIC18 / Language C] - Détermination de la parité

    Citation Envoyé par inoxxam Voir le message
    faut le faire en soft.
    Effectivement ... voir page 203

    Vraiment minable de concevoir, en 2004, un UART sans parité hardware !
    J'aime pas le Grec

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

    Re : [PIC18 / Language C] - Détermination de la parité

    Tu fais 8 "AND" consécutifs avec les mots de 1000 0000.... 01000000..... 0000 0001 et tu comptes combien de fois l'opération donne un résultat non nul.

  7. #6
    invite03481543

    Re : [PIC18 / Language C] - Détermination de la parité

    Bonsoir,

    c'est vrai, voici une manière de pallier à la chose:

    Code:
    unsigned char octet_recu, i ;
    unsigned char calcul_parite ;
    unsigned char stockage_octet_ok[25];
    .........
    octet_recu = RCREG;
    i=0;
    
    calcul_parite = (octet_recu)^(octet_recu>>1)^(octet_recu>>2)
    ^(octet_recu>>3)^(octet_recu>>4)^(octet_recu>>5)
    ^(octet_recu>>6)^(octet_recu>>7))&0x01;
    
    if (calcul_parite == RCSTAbits.RX9D) stockage_octet_ok[i] = octet_recu;
    
    
    Plus qu'à adapter dans ton code.
    @+



  8. #7
    jorg1n

    Re : [PIC18 / Language C] - Détermination de la parité

    Bonjour,

    Avant toute chose, merci pour vos réponses...
    avant de lire vos réponses, j'avais réfléchis un peu plus à la chose pour la transmission, et j'ai essayé cela:

    Code:
    	data = c;      //> "c" est le mot de 8 bits à transmettre
    	cptbit = 0;
    	for (i=0; i<8; i++)
    		{
    		if((data&0x01)==0x01)cptbit++;
    		data=data>>1;
    		}
    	if((cptbit==0)||(cptbit==2)||(cptbit==4)||(cptbit==6)||(cptbit==8))parity = 0;
    	if((cptbit==1)||(cptbit==3)||(cptbit==5)||(cptbit==7))parity = 1;
    
    	/* Si Parité PAIRE */
    	if(parity == 0)TX9D = 0;
    	if(parity == 1)TX9D = 1;
    	/* Si Parité IMPAIRE */
    //	if(parity == 0)TX9D = 1;
    //	if(parity == 1)TX9D = 0;
    	TXREG = c;
    	TXEN = 1;
    Et après simulation, ça fonctionne...

    Je vais donc faire de même pour la réception.
    Je verrais ensuite le traitement en cas d'erreur.

    Par contre, j'ai une question, est ce vraiment utile d'utiliser le bit de parité alors que ma liaison série utilise le protocole MODBUS, et qu'il y a un controle (CRC)?

    Merci d'avance,
    Bonne journée à tous!

  9. #8
    jorg1n

    Re : [PIC18 / Language C] - Détermination de la parité

    Bon, je reviens vers vous car je suis un peu perdu:

    -En transmission, une fois que j'ai déterminé le nombre de "1" dans mon mot de 8 bits, comment j'affecte le bit TXSTAbits.TX9D en fonction du mode de parité choisi par l'utilisateur?

    -Et par la même occasion, en réception, lorsque j'ai déterminé le nombre de "1" dans mon mots de 8bits, comment je détermine si mon octet reçu est correct ou non avec le nombre de bits à 1 et le bit RCSTAbits.RX9D?

    Merci d'avance

  10. #9
    RISC

    Re : [PIC18 / Language C] - Détermination de la parité

    Salut,

    Si tu as un CRC sur ton message je ne vois pas l'utilité de faire de la parité...
    Pourquoi choisir un PIC18 sur ce projet alors que les PIC24 ont un générateur de CRC hardware qui permet un débit 10 fois supérieur car le calcul du CRC est assez violent..

    a+

  11. #10
    jorg1n

    Re : [PIC18 / Language C] - Détermination de la parité

    Merci RISC pour les conseils,

    en ce qui concerne le choix du microcontroleur, je souhaitais avoir un "petit" µC qui ne serve qu'a la liaison série, d'ou mon choix.

Discussions similaires

  1. Compilation Language C en Language Hex pour PIC16F877
    Par bibi_6919 dans le forum Électronique
    Réponses: 8
    Dernier message: 19/09/2011, 17h43
  2. Parité
    Par invite7094fe3d dans le forum Mathématiques du collège et du lycée
    Réponses: 7
    Dernier message: 16/10/2008, 05h47
  3. Parité
    Par invite51ae8ee2 dans le forum Électronique
    Réponses: 1
    Dernier message: 08/06/2006, 17h58
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...