PIC : Envoie de 35 bits en série
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

PIC : Envoie de 35 bits en série



  1. #1
    invite27f7a62a

    PIC : Envoie de 35 bits en série


    ------

    Bonjour, dans le cadre de mon projet d'électronique je dois programmer un PIC.

    J'ai besoin d'afficher des températures sur deux digits. Mon PIC récupère une tension, applique la fonction affine permettant la transformation tension=> température et récupère la partie entière.

    Vu que j'utilise des drivers pour 7 segments à deux digits, le codage de cette température se fait sur 35 bits (cela fait parti du fonctionnement du driver et n'est pas modifiable). J'ai créé un tableau pour des valeurs de température de 20 à 90°C (température de coupure) dans lequel je vais piocher mes 35 bits.

    Quelqu'un pourrait-il m'aider en m'expliquant comment utiliser le timer pour. Je code en langage C.

    Si vous avez besoin de précisions, n'hésitez pas

    -----

  2. #2
    invite6ea6d79a

    Re : PIC : Envoie de 35 bits en série

    pourrais-tu donner plus de détails sur ton schéma et sur les composantes que tu utilises?

  3. #3
    invite27f7a62a

    Re : PIC : Envoie de 35 bits en série

    Bien sûr.

    J'utilise le pic 18f448 en PLCC.
    Le driver de 7 segments est le composant M5481 (data sheet ci jointe).

    Par contre je n'ai pas de schéma disponible sur PC, seulement au format papier. Mais globalement, le PIC est configuré comme ceci :
    void init_Pic(void)

    Code:
    {
    	//initialisation des ports
    
    	CCP1CON=0b00000000;	// Capture/Compare/PWM disabled 
    		
    	TRISC=0x00; // RC0-RC7 output
    	TRISE=0x01; // RE0 input
    	TRISA=0x2F; // RA0-RA3 input, RA5 input
    	PORTA=0x00;
    	PORTC=0x00;
    	PORTE=0x00;
    	
    	// interruption config interruption RB0
    	INTCONbits.GIE= 0; // disable interruption global
    		
    }
    D'ailleurs, voici le code complet que j'ai pour l'instant écrit. Il y a sûrement des fautes mais ce n'est qu'un premier jet.

    Code:
    #include <p18f448.h>
    #include <math.h>
    
    #pragma config MCLRE=ON, LPT1OSC=OFF, PBADEN=OFF, XINST=OFF, DEBUG=OFF, LVP= OFF
    
    void init_Pic(void);
    void init_tab(void)
    void main()
    {
    float a;
    int b,i;
    	
    	init_Pic();
    	init_tab();
    	i=0;
    
    	for (;;)
    
    	{
    
    		a = PORTAbits.RAi; //on récupère la tension du ième MOS
    		a=(a - 0.1828) x 0.0362; //conversion en température
    		b=floor(a); //on prend la partie entière
    		PORTCbits.RCi = 1; //on sélectionne le ieme afficheur
    		PORTCbits.RC6 = tab[b]; // !!!!!!!!!! envoi des données au ième afficheur
    
    		if (b>90) 
    		do  //si dépassement de température, on coupe tout en mettant la sortie reliée aux drivers MOS à 1
    			
    			{
    			PORTCbits.RC7 = 1;
    			}
    			
    		else 
    		do 
    			
    			{
    			i=i+1; //sinon on passe à l'afficheur suivant en prenant bien soin de déselectionner l'afficheur en court
    			PORTCbits.RCi=0
    			}
    		if (i=6)
    		i=0;
    
    	}
    }
    
    //------------Init PIC-----------------------------------------------//
    
    void init_Pic(void)
    {
    	//initialisation des ports
    
    	CCP1CON=0b00000000;	// Capture/Compare/PWM disabled 
    		
    	TRISC=0x00; // RC0-RC7 output
    	TRISE=0x01; // RE0 input
    	TRISA=0x2F; // RA0-RA3 input, RA5 input
    	PORTA=0x00;
    	PORTC=0x00;
    	PORTE=0x00;
    	
    	// interruption config interruption RB0
    	INTCONbits.GIE= 0; // disable interruption global
    		
    }
    
    //-----------Init tableau-----------------------------------------//
    
    void init_tab (void)
    {
    	char tab[90];
    	tab[20]=00000010000001000000100000000000000;
    	tab[21]=00000010000001000000111000010010000;
    	tab[22]=00000010000001000000010000001000000;
    	tab[23]=00000010000001000000011000000000000;
    	tab[24]=00000010000001000000001000010010000;
    	tab[25]=00000010000001000000001000000100000;
    	tab[26]=00000010000001000000000000000100000;
    	tab[27]=00000010000001000000111000010000000;
    	tab[28]=00000010000001000000000000000000000;
    	tab[29]=00000010000001000000001000010000000;
    	tab[30]=00000010000100000000100000000000000;
    	tab[31]=00000010000100000000111000010010000;
    	tab[32]=00000010000100000000010000001000000;
    	tab[33]=00000010000100000000011000000000000;
    	tab[34]=00000010000100000000001000010010000;
    	tab[35]=00000010000100000000001000000100000;
    	tab[36]=00000010000100000000000000000100000;
    	tab[37]=00000010000100000000111000010000000;
    	tab[38]=00000010000100000000000000000000000;
    	tab[39]=00000010000100000000001000010000000;
    	tab[40]=00000000000110000001100000000000000;
    	tab[41]=00000000000110000001111000010010000;
    	tab[42]=00000000000110000001010000001000000;
    	tab[43]=00000000000110000001011000000000000;
    	tab[44]=00000000000110000001001000010010000;
    	tab[45]=00000000000110000001001000000100000;
    	tab[46]=00000000000110000001000000000100000;
    	tab[47]=00000000000110000001111000010000000;
    	tab[48]=00000000000110000001000000000000000;
    	tab[49]=00000000000110000001001000010000000;
    	tab[50]=00000000000100100000100000000000000;
    	tab[51]=00000000000100100000111000010010000;
    	tab[52]=00000000000100100000010000001000000;
    	tab[53]=00000000000100100000011000000000000;
    	tab[54]=00000000000100100000001000010010000;	
    	tab[55]=00000000000100100000001000000100000;
    	tab[56]=00000000000100100000000000000100000;
    	tab[57]=00000000000100100000111000010000000;
    	tab[58]=00000000000100100000000000000000000;
    	tab[59]=00000000000100100000001000010000000;
    	tab[60]=00000000000000100000100000000000000;
    	tab[61]=00000000000000100000111000010010000;
    	tab[62]=00000000000000100000010000001000000;
    	tab[63]=00000000000000100000011000000000000;
    	tab[64]=00000000000000100000001000010010000;
    	tab[65]=00000000000000100000001000000100000;
    	tab[66]=00000000000000100000000000000100000;
    	tab[67]=00000000000000100000111000010000000;
    	tab[68]=00000000000000100000000000000000000;
    	tab[69]=00000000000000100000001000010000000;
    	tab[70]=00000110000110000000100000000000000;
    	tab[71]=00000110000110000000111000010010000;
    	tab[72]=00000110000110000000010000001000000;
    	tab[73]=00000110000110000000011000000000000;
    	tab[74]=00000110000110000000001000010010000;
    	tab[75]=00000110000110000000001000000100000;
    	tab[76]=00000110000110000000000000000100000;
    	tab[77]=00000110000110000000111000010000000;
    	tab[78]=00000110000110000000000000000000000;
    	tab[79]=00000110000110000000001000010000000;
    	tab[80]=00000000000000000000100000000000000;
    	tab[81]=00000000000000000000111000010010000;
    	tab[82]=00000000000000000000010000001000000;
    	tab[83]=00000000000000000000011000000000000;
    	tab[84]=00000000000000000000001000010010000;
    	tab[85]=00000000000000000000001000000100000;	
    	tab[86]=00000000000000000000000000000100000;
    	tab[87]=00000000000000000000111000010000000;
    	tab[88]=00000000000000000000000000000000000;
    	tab[89]=00000000000000000000001000010000000;
    	tab[90]=00000000000110000000100000000000000;
    }
    La ligne avec des !!!!! est celle qui me pose donc problème, vu que je ne peux pas envoyer 35 bits en utilisant la sortie TX du PIC.
    Images attachées Images attachées

  4. #4
    Jack
    Modérateur

    Re : PIC : Envoie de 35 bits en série

    Code:
        char tab[90];
    
        tab[20]=00000010000001000000100000000000000;
        tab[21]=00000010000001000000111000010010000;
        tab[22]=00000010000001000000010000001000000;
    Alors là je suis curieux de voir le résultat. Tu crées un tableau de char, donc d'octets, et ty veux mettre dans un élément par exemple '10000001000000100000000000000 ' alors que la valeur max est égale à 255.

    En plus, ça ne se fait pas d'initialiser comme çà. En C on peut faire une initialisation automatique:
    char tab[] = {25, 32, 02, 43, etc.};

    Pour initialiser tes données sur 35 bits, il te fait 5 octets. Il te faudra donc un tableau de tableau de 5 octets, par exemple:
    unsigned char tab[90][] = {{0x12,0x25,0xfa,0x21,0xc0},{0 x8b, etc.},etc.};

    A+

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

    Re : PIC : Envoie de 35 bits en série

    C'est possible de faire ça en rentrant un tableau de valeur en décimales et de faire un "getbinary" pour passer en binaire, puis envoyer les bits un par un en utilisant le timer ?

  7. #6
    Jack
    Modérateur

    Re : PIC : Envoie de 35 bits en série

    Citation Envoyé par Nazounet Voir le message
    C'est possible de faire ça en rentrant un tableau de valeur en décimales et de faire un "getbinary" pour passer en binaire, puis envoyer les bits un par un en utilisant le timer ?
    Getbinary? connaît pas! C'est spécifique à ton compilateur.

    A+

  8. #7
    invite27f7a62a

    Re : PIC : Envoie de 35 bits en série

    Ok jvais plutôt faire comme tu m'as dis alors.

    Peut-on m'indiquer une aide pour le timer ? Ca m'aiderait beaucoup. Merci !

  9. #8
    RISC

    Re : PIC : Envoie de 35 bits en série

    Salut,


    Citation Envoyé par Nazounet Voir le message
    Bien sûr.
    J'utilise le pic 18f448 en PLCC.
    1/ As-tu une raison spéciale pour utiliser ce vieux produit en boitier PLCC ??? Regarde le site de Microchip qui recommande d'utiliser plutot un PIC18F4480 :
    http://www.microchip.com/stellent/id...ct2=PIC18F4480

    2/ Peux-tu expliquer les lignes :
    a = PORTAbits.RAi ??? ou est définie cette structure à champ de bits ?? As-tu créé une macro (ça m'intéresse) ??
    PORTCbits.RCi = 1; ???

    3/ Concernant tes 35 bits :
    Comment veux tu les envoyer?
    en série ? (quel protocole ? UART, I2C, SIO, SPI, custom) ?
    quelle vitesse ?

    4/ Pour ton tableau, si tu as de la place en mémoire, le plus simple serait de faire un tableau de chaine de caractères, il te suffirait après de faire une conversion ASCII --> binaire (ou ASCII --> HEX en prenant ensuite seulement le bit0)
    C'est un peu gacher la mémoire (1 octet par bit) mais ca a le mérite d'être simple ;=) donc 35 bits -> 35 octets

    La méthode la plus efficace en utilisation mémoire étant celle proposée par Jack que tu pourrais écrire aussi en binaire pour des questions de lisibilité binaire des bits dans le tableau :
    au lieu de :
    unsigned char tab[90][] = {{0x12,0x25,0xfa,0x21,0xc0},{0 x8b, etc.},etc.};

    unsigned char tab[90][] = {{0b00010010,0b00100101,0b1111 0100,0b00100001,0b11000000},{. ...
    etc.},etc.};

    a+

  10. #9
    invite27f7a62a

    Re : PIC : Envoie de 35 bits en série

    1) Fourni par mon département

    2) Je t'avoue que ce que tu me dis m'embête, car je pensais qu'on pouvait le faire... Quelle serait la bonne syntaxe dans ce cas ?
    Je mets le bit Ci à 1 car ces bits sont reliés à l'entrée de sélection du driver. Le driver est sélectionné en envoyant un 1 logique sur cette entrée.

    3) Je voudrais les envoyer en série oui, pour le protocole aucune idée, je n'étais pas au courant de l'existence de ceux-ci.
    La vitesse : le plus rapidement possible (c'est possible en 1ms ?)

    4) Ok je vais modifier ça, merci.

  11. #10
    Jack
    Modérateur

    Re : PIC : Envoie de 35 bits en série

    La méthode la plus efficace en utilisation mémoire étant celle proposée par Jack que tu pourrais écrire aussi en binaire pour des questions de lisibilité binaire des bits dans le tableau :
    Si le compilateur l'autorise, c'est sur que c'est plus clair d'écrire les données en binaire.

    Je voudrais les envoyer en série oui, pour le protocole aucune idée, je n'étais pas au courant de l'existence de ceux-ci.
    La vitesse : le plus rapidement possible (c'est possible en 1ms ?)
    Le protocole série le plus simple et le plus rapide et reconu par la plupart des µC est celui de la SPI. Tu dois bien avoir ça sur ton PIC.

    A+

  12. #11
    invite27f7a62a

    Re : PIC : Envoie de 35 bits en série

    J'ai modifié mon tableau comme tu me l'as conseillé Jack. Au niveau du codage du timer, je trouve pas grand chose sur l'implémentation en C, si je pouvais avoir un peu d'aide ce serait bien. Je sais quels bits modifier pour rendre possible l'utilisation de celui-ci, mais j'avoue que je ne sais absolument pas coder une interruption et utiliser le timer pour envoyer les bits un par un.

    D'ailleurs l'utilisation du tableau sous cette forme me laisse un doute quant à la façon d'envoyer les données : on sélectionne un octet, on envoie les 8 bits puis on passe à l'octet suivant, c'est bien ça ?

    Merci d'avance.

  13. #12
    Jack
    Modérateur

    Re : PIC : Envoie de 35 bits en série

    D'ailleurs l'utilisation du tableau sous cette forme me laisse un doute quant à la façon d'envoyer les données : on sélectionne un octet, on envoie les 8 bits puis on passe à l'octet suivant, c'est bien ça ?
    Oui. Mais si tu utilises la SPI, il faudra vérifier que le registre de transmission soit vide avant d'envoyer un nouvel octet.

    Au niveau du codage du timer, je trouve pas grand chose sur l'implémentation en C, si je pouvais avoir un peu d'aide ce serait bien
    Je ne suis pas très porté sur les PICs. Je te laisse entre les mains de spécialistes.

    A+

  14. #13
    invite27f7a62a

    Re : PIC : Envoie de 35 bits en série

    Code:
    #include <p18f448.h>
    #include <math.h>
    
    #pragma config MCLRE=ON, LPT1OSC=OFF, PBADEN=OFF, XINST=OFF, DEBUG=OFF, LVP= OFF
    
    void init_Pic(void);
    void init_tab(void)
    void temporisation
    void main()
    {
    float a;
    int b,i,j,k;
    	
    	init_Pic();
    	init_tab();
    	T0CON=0b01011000;
    	i=0;
    	masque='00000001';
    	for (i=0;i<7;i++)
    
    	{
    
    
    		if (i=6)
    		{
    			i=0;
    		}		
    		a = PORTAbits.RAi; //on récupère la tension du ième MOS
    		a=(a - 0.1828) x 0.0362; //conversion en température
    		b=floor(a); //on prend la partie entière
    		PORTCbits.RCi = 1; //on sélectionne le ieme afficheur
    
    //Envoie des données avec le timer
    		for(j=0;j<4;i++)
    		{	
    			for (k=0;k<8;k++)
    			{
    				temporisation();
    				PortCbits.RC6=tab[b][j]&masque; //le masque sélectionne un seul bit de l'octet
    				masque<<=1; //décalage d'un rang vers la gauche du masque
    				temporisation();
    				PortCbits.RC?=1;         // front montant du clk
    				temporisation();
    				temporisation();
    				PortCbits.RC?=0;         // front descendant du clk
    				temporisation();
    			}
    		}	
    		
    
    
    //Fin de l'envoi des données en série
    
    		if (b>90) 
    		do  //si dépassement de température, on coupe tout en mettant la sortie reliée aux drivers MOS à 1
    			
    			{
    			PORTCbits.RC7 = 1;
    			}
    			
    		else 
    		do 
    			
    			{
    			PORTCbits.RCi=0 //on déselectionne l'afficheur en court
    			}
    		
    
    	}
    }
    
    //------------Init PIC-----------------------------------------------//
    
    void init_Pic(void)
    {
    	//initialisation des ports
    
    	CCP1CON=0b00000000;	// Capture/Compare/PWM disabled 
    		
    	TRISC=0x00; // RC0-RC7 output
    	TRISE=0x01; // RE0 input
    	TRISA=0x2F; // RA0-RA3 input, RA5 input
    	PORTA=0x00;
    	PORTC=0x00;
    	PORTE=0x00;
    	
    	// interruption config interruption RB0
    	INTCONbits.GIE= 0; // disable interruption global
    		
    }
    
    //-----------Tempo------------------------------------------------//
    
    void temporisation()
    {
    T0CONbits.TMR0ON=1; // lancement du timer
    while(tempo==0)
    {}
    tempo=0;
    }
    
    //-----------Init tableau-----------------------------------------//
    
    void init_tab (void)
    {
    	unsigned char tab[91][]= {{0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11101111,0b11011111,0b10111111,0b11111111},
    							  {0b11111111,0b11101111,0b11011111,0b10001111,0b01101111},
    							  {0b11111111,0b11101111,0b11011111,0b11011111,0b10111111},
    							  {0b11111111,0b11101111,0b11011111,0b10011111,0b11111111},
    							  {0b11111111,0b11101111,0b11011111,0b11101111,0b01101111},
    							  {0b11111111,0b11101111,0b11011111,0b11101111,0b11011111},
    							  {0b11111111,0b11101111,0b11011111,0b11111111,0b11011111},
    							  {0b11111111,0b11101111,0b11011111,0b10001111,0b01111111},
    							  {0b11111111,0b11101111,0b11011111,0b11111111,0b11111111},
    							  {0b11111111,0b11101111,0b11011111,0b11101111,0b01111111},
    							  {0b11111111,0b11101111,0b01111111,0b10111111,0b11111111},
    							  {0b11111111,0b11101111,0b01111111,0b10001111,0b01101111},
    							  {0b11111111,0b11101111,0b01111111,0b11011111,0b10111111},
    							  {0b11111111,0b11101111,0b01111111,0b11001111,0b11111111},
    							  {0b11111111,0b11101111,0b01111111,0b11101111,0b01101111},
    							  {0b11111111,0b11101111,0b01111111,0b11101111,0b11011111},
    							  {0b11111111,0b11101111,0b01111111,0b11111111,0b11011111},
    							  {0b11111111,0b11101111,0b01111111,0b10001111,0b01111111},
    							  {0b11111111,0b11101111,0b01111111,0b11111111,0b11111111},
    							  {0b11111111,0b11101111,0b01111111,0b11101111,0b01111111},
    							  {0b11111111,0b11111111,0b00111111,0b00111111,0b11111111},
    							  {0b11111111,0b11111111,0b00111111,0b00001111,0b01101111},
    							  {0b11111111,0b11111111,0b00111111,0b01011111,0b10111111},
    							  {0b11111111,0b11111111,0b00111111,0b01001111,0b11111111},
    							  {0b11111111,0b11111111,0b00111111,0b01101111,0b10111111},
    						 	  {0b11111111,0b11111111,0b00111111,0b01101111,0b11011111},
    							  {0b11111111,0b11111111,0b00111111,0b01111111,0b11011111},
    							  {0b11111111,0b11111111,0b00111111,0b00001111,0b01111111},
    							  {0b11111111,0b11111111,0b00111111,0b01111111,0b11111111},
    							  {0b11111111,0b11111111,0b00111111,0b01101111,0b01111111},
    							  {0b11111111,0b11111111,0b01101111,0b10111111,0b11111111},
    							  {0b11111111,0b11111111,0b01101111,0b10001111,0b01101111},
    							  {0b11111111,0b11111111,0b01101111,0b11011111,0b10111111},
    							  {0b11111111,0b11111111,0b01101111,0b11001111,0b11111111},
    							  {0b11111111,0b11111111,0b01101111,0b11101111,0b01101111},	
    							  {0b11111111,0b11111111,0b01101111,0b11101111,0b11011111},
    							  {0b11111111,0b11111111,0b01101111,0b11111111,0b11011111},
    							  {0b11111111,0b11111111,0b01101111,0b10001111,0b01111111},
    							  {0b11111111,0b11111111,0b01101111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b01101111,0b11101111,0b01111111},
    							  {0b11111111,0b11111111,0b11101111,0b10111111,0b11111111},
    							  {0b11111111,0b11111111,0b11101111,0b10001111,0b01101111},
    							  {0b11111111,0b11111111,0b11101111,0b11011111,0b10111111},
    							  {0b11111111,0b11111111,0b11101111,0b11001111,0b11111111},
    							  {0b11111111,0b11111111,0b11101111,0b11101111,0b10111111},
    							  {0b11111111,0b11111111,0b11101111,0b11101111,0b11011111},
    							  {0b11111111,0b11111111,0b11101111,0b11111111,0b11011111},
    							  {0b11111111,0b11111111,0b11101111,0b10001111,0b01111111},
    							  {0b11111111,0b11111111,0b11101111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11101111,0b11101111,0b01111111},
    							  {0b11111111,0b11001111,0b00111111,0b10111111,0b11111111},
    							  {0b11111111,0b11001111,0b00111111,0b10001111,0b01101111},
    							  {0b11111111,0b11001111,0b00111111,0b11011111,0b10111111},
    							  {0b11111111,0b11001111,0b00111111,0b11001111,0b11111111},
    							  {0b11111111,0b11001111,0b00111111,0b11101111,0b01101111},
    							  {0b11111111,0b11001111,0b00111111,0b11101111,0b11011111},
    							  {0b11111111,0b11001111,0b00111111,0b11111111,0b11011111},
    							  {0b11111111,0b11001111,0b00111111,0b10001111,0b01111111},
    							  {0b11111111,0b11001111,0b00111111,0b11111111,0b11111111},
    							  {0b11111111,0b11001111,0b00111111,0b11101111,0b01111111},
    							  {0b11111111,0b11111111,0b11111111,0b10111111,0b11111111},
    	  						  {0b11111111,0b11111111,0b11111111,0b10001111,0b01101111},
    							  {0b11111111,0b11111111,0b11111111,0b11011111,0b10111111},
    							  {0b11111111,0b11111111,0b11111111,0b11001111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11101111,0b01101111},
    							  {0b11111111,0b11111111,0b11111111,0b11101111,0b11011111},	
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11011111},
    							  {0b11111111,0b11111111,0b11111111,0b10001111,0b01111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11101111,0b01111111},
    							  {0b11111111,0b11111111,0b00111111,0b10111111,0b11111111}};
    }
    
    
    /* Ancienne version du tableau de valeur (incorrecte)
        tab[20]=00000000 00010000 00100000 01000000 00000000; ok
    	tab[21]=00000000 00010000 00100000 01110000 10010000; ok
    	tab[22]=00000000 00010000 00100000 00100000 01000000; ok
    	tab[23]=00000000 00010000 00100000 00110000 00000000; ok
    	tab[24]=00000000 00010000 00100000 00010000 10010000; ok
    	tab[25]=00000000 00010000 00100000 00010000 00100000;
    	tab[26]=00000000 00010000 00100000 00000000 00100000;
    	tab[27]=00000000 00010000 00100000 01110000 10000000;
    	tab[28]=00000000 00010000 00100000 00000000 00000000;
    	tab[29]=00000000 00010000 00100000 00010000 10000000;
    	tab[30]=00000000 00010000 10000000 01000000 00000000;
    	tab[31]=00000000 00010000 10000000 01110000 10010000;
    	tab[32]=00000000 00010000 10000000 00100000 01000000;
    	tab[33]=00000000 00010000 10000000 00110000 00000000;
    	tab[34]=00000000 00010000 10000000 00010000 10010000;
    	tab[35]=00000000 00010000 10000000 00010000 00100000;
    	tab[36]=00000000 00010000 10000000 00000000 00100000;
    	tab[37]=00000000 00010000 10000000 01110000 10000000;
    	tab[38]=00000000 00010000 10000000 00000000 00000000;
    	tab[39]=00000000 00010000 10000000 00010000 10000000;
    	tab[40]=00000000 00000000 11000000 11000000 00000000;
    	tab[41]=00000000 00000000 11000000 11110000 10010000;
    	tab[42]=00000000 00000000 11000000 10100000 01000000;
    	tab[43]=00000000 00000000 11000000 10110000 00000000;
    	tab[44]=00000000 00000000 11000000 10010000 10010000;
    	tab[45]=00000000 00000000 11000000 10010000 00100000;
    	tab[46]=00000000 00000000 11000000 10000000 00100000;
    	tab[47]=00000000 00000000 11000000 11110000 10000000;
    	tab[48]=00000000 00000000 11000000 10000000 00000000;
    	tab[49]=00000000 00000000 11000000 10010000 10000000;
    	tab[50]=00000000 00000000 10010000 01000000 00000000;
    	tab[51]=00000000 00000000 10010000 01110000 10010000;
    	tab[52]=00000000 00000000 10010000 00100000 01000000;
    	tab[53]=00000000 00000000 10010000 00110000 00000000;
    	tab[54]=00000000 00000000 10010000 00010000 10010000;	
    	tab[55]=00000000 00000000 10010000 00010000 00100000;
    	tab[56]=00000000 00000000 10010000 00000000 00100000;
    	tab[57]=00000000 00000000 10010000 01110000 10000000;
    	tab[58]=00000000 00000000 10010000 00000000 00000000;
    	tab[59]=00000000 00000000 10010000 00010000 10000000;
    	tab[60]=00000000 00000000 00010000 01000000 00000000;
    	tab[61]=00000000 00000000 00010000 01110000 10010000;
    	tab[62]=00000000 00000000 00010000 00100000 01000000;
    	tab[63]=00000000 00000000 00010000 00110000 00000000;
    	tab[64]=00000000 00000000 00010000 00010000 10010000;
    	tab[65]=00000000 00000000 00010000 00010000 00100000;
    	tab[66]=00000000 00000000 00010000 00000000 00100000;
    	tab[67]=00000000 00000000 00010000 01110000 10000000;
    	tab[68]=00000000 00000000 00010000 00000000 00000000;
    	tab[69]=00000000 00000000 00010000 00010000 10000000;
    	tab[70]=00000000 00110000 11000000 01000000 00000000;
    	tab[71]=00000000 00110000 11000000 01110000 10010000;
    	tab[72]=00000000 00110000 11000000 00100000 01000000;
    	tab[73]=00000000 00110000 11000000 00110000 00000000;
    	tab[74]=00000000 00110000 11000000 00010000 10010000;
    	tab[75]=00000000 00110000 11000000 00010000 00100000;
    	tab[76]=00000000 00110000 11000000 00000000 00100000;
    	tab[77]=00000000 00110000 11000000 01110000 10000000;
    	tab[78]=00000000 00110000 11000000 00000000 00000000;
    	tab[79]=00000000 00110000 11000000 00010000 10000000;
    	tab[80]=00000000 00000000 00000000 01000000 00000000;
    	tab[81]=00000000 00000000 00000000 01110000 10010000;
    	tab[82]=00000000 00000000 00000000 00100000 01000000;
    	tab[83]=00000000 00000000 00000000 00110000 00000000;
    	tab[84]=00000000 00000000 00000000 00010000 10010000;
    	tab[85]=00000000 00000000 00000000 00010000 00100000;	
    	tab[86]=00000000 00000000 00000000 00000000 00100000;
    	tab[87]=00000000 00000000 00000000 01110000 10000000;
    	tab[88]=00000000 00000000 00000000 00000000 00000000;
    	tab[89]=00000000 00000000 00000000 00010000 10000000;
    	tab[90]=00000000 00000000 11000000 01000000 00000000; /*
    Voilà ma nouvelle version. (Ne pas tenir compte du PORTCbits.RC?, je ne sais plus sur quel bit je dois envoyer ^^)

  15. #14
    invite27f7a62a

    Re : PIC : Envoie de 35 bits en série

    Ah oui, je viens de voir que j'avais désactivé les interruptions. Le bit GIE est bien évidemment à 1
    En fait j'ai envoyé une mauvaise version du code, à la place de tempo il faut lire INTCONbits.TMR0IF

  16. #15
    Jack
    Modérateur

    Re : PIC : Envoie de 35 bits en série

    J'ai l'impression que tu s en train de réinventer la roue. Pourquoi utiliser ne pas utiliser la SPI pour la transmission série, c'est tellement plus simple.

    Sur les PICs, le module qui s'en charge s'appelle "MASTER SYNCHRONOUS
    SERIAL PORT".

    A+

  17. #16
    invite27f7a62a

    Re : PIC : Envoie de 35 bits en série

    Je sais bien que ça parait archaique, mais je reprends la suite du projet d'un autre groupe, et la carte avec le PIC ayant déjà été réalisée, je n'ai pas d'autre choix que de faire comme ça vu qu'ils n'avaient pas utilisé le MSSP. D'où l'explication du timer.
    Voici mon code actuel

    Code:
    #include "p18f458.h"
    #include "math.h"
    
    #pragma config OSC=HS, OSCS=OFF, PWRT=ON, BOR=OFF, BORV=45, WDT=OFF, WDTPS=1, STVR=OFF, LVP=OFF, DEBUG=ON, CP0=ON, CP1=ON, CP2=ON
    #pragma config CP3=ON, CPB=ON, CPD=OFF, WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC = OFF, WRTD=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF
    
    void init_Pic(void);
    void init_tab(void);
    void temporisation();
    
    const unsigned char tab[91][5]= {{0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11101111,0b11011111,0b10111111,0b11111111},
    							  {0b11111111,0b11101111,0b11011111,0b10001111,0b01101111},
    							  {0b11111111,0b11101111,0b11011111,0b11011111,0b10111111},
    							  {0b11111111,0b11101111,0b11011111,0b10011111,0b11111111},
    							  {0b11111111,0b11101111,0b11011111,0b11101111,0b01101111},
    							  {0b11111111,0b11101111,0b11011111,0b11101111,0b11011111},
    							  {0b11111111,0b11101111,0b11011111,0b11111111,0b11011111},
    							  {0b11111111,0b11101111,0b11011111,0b10001111,0b01111111},
    							  {0b11111111,0b11101111,0b11011111,0b11111111,0b11111111},
    							  {0b11111111,0b11101111,0b11011111,0b11101111,0b01111111},
    							  {0b11111111,0b11101111,0b01111111,0b10111111,0b11111111},
    							  {0b11111111,0b11101111,0b01111111,0b10001111,0b01101111},
    							  {0b11111111,0b11101111,0b01111111,0b11011111,0b10111111},
    							  {0b11111111,0b11101111,0b01111111,0b11001111,0b11111111},
    							  {0b11111111,0b11101111,0b01111111,0b11101111,0b01101111},
    							  {0b11111111,0b11101111,0b01111111,0b11101111,0b11011111},
    							  {0b11111111,0b11101111,0b01111111,0b11111111,0b11011111},
    							  {0b11111111,0b11101111,0b01111111,0b10001111,0b01111111},
    							  {0b11111111,0b11101111,0b01111111,0b11111111,0b11111111},
    							  {0b11111111,0b11101111,0b01111111,0b11101111,0b01111111},
    							  {0b11111111,0b11111111,0b00111111,0b00111111,0b11111111},
    							  {0b11111111,0b11111111,0b00111111,0b00001111,0b01101111},
    							  {0b11111111,0b11111111,0b00111111,0b01011111,0b10111111},
    							  {0b11111111,0b11111111,0b00111111,0b01001111,0b11111111},
    							  {0b11111111,0b11111111,0b00111111,0b01101111,0b10111111},
    						 	  {0b11111111,0b11111111,0b00111111,0b01101111,0b11011111},
    							  {0b11111111,0b11111111,0b00111111,0b01111111,0b11011111},
    							  {0b11111111,0b11111111,0b00111111,0b00001111,0b01111111},
    							  {0b11111111,0b11111111,0b00111111,0b01111111,0b11111111},
    							  {0b11111111,0b11111111,0b00111111,0b01101111,0b01111111},
    							  {0b11111111,0b11111111,0b01101111,0b10111111,0b11111111},
    							  {0b11111111,0b11111111,0b01101111,0b10001111,0b01101111},
    							  {0b11111111,0b11111111,0b01101111,0b11011111,0b10111111},
    							  {0b11111111,0b11111111,0b01101111,0b11001111,0b11111111},
    							  {0b11111111,0b11111111,0b01101111,0b11101111,0b01101111},	
    							  {0b11111111,0b11111111,0b01101111,0b11101111,0b11011111},
    							  {0b11111111,0b11111111,0b01101111,0b11111111,0b11011111},
    							  {0b11111111,0b11111111,0b01101111,0b10001111,0b01111111},
    							  {0b11111111,0b11111111,0b01101111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b01101111,0b11101111,0b01111111},
    							  {0b11111111,0b11111111,0b11101111,0b10111111,0b11111111},
    							  {0b11111111,0b11111111,0b11101111,0b10001111,0b01101111},
    							  {0b11111111,0b11111111,0b11101111,0b11011111,0b10111111},
    							  {0b11111111,0b11111111,0b11101111,0b11001111,0b11111111},
    							  {0b11111111,0b11111111,0b11101111,0b11101111,0b10111111},
    							  {0b11111111,0b11111111,0b11101111,0b11101111,0b11011111},
    							  {0b11111111,0b11111111,0b11101111,0b11111111,0b11011111},
    							  {0b11111111,0b11111111,0b11101111,0b10001111,0b01111111},
    							  {0b11111111,0b11111111,0b11101111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11101111,0b11101111,0b01111111},
    							  {0b11111111,0b11001111,0b00111111,0b10111111,0b11111111},
    							  {0b11111111,0b11001111,0b00111111,0b10001111,0b01101111},
    							  {0b11111111,0b11001111,0b00111111,0b11011111,0b10111111},
    							  {0b11111111,0b11001111,0b00111111,0b11001111,0b11111111},
    							  {0b11111111,0b11001111,0b00111111,0b11101111,0b01101111},
    							  {0b11111111,0b11001111,0b00111111,0b11101111,0b11011111},
    							  {0b11111111,0b11001111,0b00111111,0b11111111,0b11011111},
    							  {0b11111111,0b11001111,0b00111111,0b10001111,0b01111111},
    							  {0b11111111,0b11001111,0b00111111,0b11111111,0b11111111},
    							  {0b11111111,0b11001111,0b00111111,0b11101111,0b01111111},
    							  {0b11111111,0b11111111,0b11111111,0b10111111,0b11111111},
    	  						  {0b11111111,0b11111111,0b11111111,0b10001111,0b01101111},
    							  {0b11111111,0b11111111,0b11111111,0b11011111,0b10111111},
    							  {0b11111111,0b11111111,0b11111111,0b11001111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11101111,0b01101111},
    							  {0b11111111,0b11111111,0b11111111,0b11101111,0b11011111},	
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11011111},
    							  {0b11111111,0b11111111,0b11111111,0b10001111,0b01111111},
    							  {0b11111111,0b11111111,0b11111111,0b11111111,0b11111111},
    							  {0b11111111,0b11111111,0b11111111,0b11101111,0b01111111},
    							  {0b11111111,0b11111111,0b00111111,0b10111111,0b11111111}};
    
    
    //------------Init PIC-----------------------------------------------//
    
    void init_Pic(void)
    {
    	//initialisation des ports
    
    	CCP1CON=0b00000000;	// Capture/Compare/PWM disabled 
    		
    	TRISC=0x00; // RC0-RC7 output
    	TRISB=0x00; // RB0 output
    	TRISE=0x01; // RE0 input
    	TRISA=0x2F; // RA0-RA3 input, RA5 input
    	PORTA=0x00;
    	PORTB=0x00;
    	PORTC=0x00;
    	PORTE=0x00;
    	
    	// interruption config interruption RB0
    	INTCONbits.GIE= 1; // enable interruption global
    	INTCONbits.TMR0IE=1; //enable timer
    	INTCONbits.TMR0IF=0; //se mettra à 1 à chaque fin de cycle du timer
    		
    }
    
    //-----------Tempo------------------------------------------------//
    
    void temporisation()
    {
    T0CONbits.TMR0ON=1; // lancement du timer
    while(INTCONbits.TMR0IF==0)
    {}
    INTCONbits.TMR0IF=0;
    }
    
    
    void main()
    {
    float a;
    int b,i,j,k;
    char masque;
    	
    	init_Pic();
    	init_tab();
    	T0CON=0b01011000;
    	i=0;
    	masque=1;
    	for (i=0;i<7;i++)
    
    	{
    
    
    		if (i==6)
    		{
    			i=0;
    		}		
    		a = PORTAbits.RAi; //on récupère la tension du ième MOS
    		a =(a - 0.1828) * 0.0362; //conversion en température
    		b=floor(a); //on prend la partie entière
    		PORTCbits.RCi = 1; //on sélectionne le ieme afficheur
    
    //Envoie des données avec le timer
    		for(j=0;j<4;i++)
    		{	
    			for (k=0;k<8;k++)
    			{
    				PORTCbits.RC6=tab[b][j]&masque; //le masque sélectionne un seul bit de l'octet
    				masque<<=1; //décalage d'un rang vers la gauche du masque
    				temporisation();
    				PORTCbits.RC7=1;         // front montant du clk
    				temporisation();
    				temporisation();
    				PORTCbits.RC7=0;         // front descendant du clk
    				temporisation();
    			}
    		}	
    		
    
    
    //Fin de l'envoi des données en série
    
    		if (b>90) 
    		  //si dépassement de température, on coupe tout en mettant la sortie reliée aux drivers MOS à 1
    			
    			{
    			PORTBbits.RB0 = 1;
    			PORTCbits.RCi=0;
    			}
    			
    		else PORTCbits.RCi=0;//on déselectionne l'afficheur en court
    			
    		
    
    	}
    }
    Comme on me l'avait fait remarqué, la syntaxe PORTCbits.RCi n'est pas correcte. Comment puis-je faire pour remédier à celà ?



    Merci.

Discussions similaires

  1. PIC assembleur et gestion de mots de 16 bits
    Par invite427c7eae dans le forum Électronique
    Réponses: 10
    Dernier message: 07/10/2009, 05h53
  2. [PIC]-Manipulations des bits
    Par invite3c35244f dans le forum Électronique
    Réponses: 9
    Dernier message: 19/03/2008, 12h40
  3. envoie par port série
    Par invite7670cc44 dans le forum Électronique
    Réponses: 5
    Dernier message: 26/06/2007, 04h43
  4. envoie de 4 bits de donées vers un port séie
    Par invite8c87fc59 dans le forum Électronique
    Réponses: 0
    Dernier message: 30/03/2007, 16h34
  5. Convertir 12 bits série en 7 bits paralléle avec un HC11 ?
    Par invite0ee134f7 dans le forum Électronique
    Réponses: 2
    Dernier message: 03/03/2005, 08h39
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...