PIC18f452 + MCP2200 - Page 2
Répondre à la discussion
Page 2 sur 5 PremièrePremière 2 DernièreDernière
Affichage des résultats 31 à 60 sur 121

PIC18f452 + MCP2200



  1. #31
    invite56c261eb

    Re : PIC18f452 + MCP2200


    ------

    J'ai donc réalisé un autre code juste pour tester.
    Ce code a pour fonction d'écrire sur le terminal ce que je suis censé taper au clavier.

    Code:
    #include <p18f452.h>	 // d?claration SFR pour ICD2
    #include <delays.h>	 // d?claration prototype fonctions delay
    #include <usart.h>   // pour fonctions UART
    #include <string.h>  // pour strmcp
    #include <stdio.h>  // pour printf
    #include <stdlib.h> // pour atoi
    
    #define	FOREVER	 while(1)
    
    
    // **** configuration du circuit *************
    
    // configuration avec quartz
    #pragma config OSC = HS, OSCS = OFF
    #pragma config PWRT = OFF, BOR = OFF
    #pragma config WDT = OFF
    #pragma config CCP2MUX = OFF
    #pragma config STVR = ON
    #pragma config LVP = OFF
    #pragma config DEBUG = ON
    #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF, CPB = OFF, CPD = OFF
    #pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF
    #pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF
    #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTRB = OFF 
    
    
    // Définir des nouveaux types données
    
    typedef unsigned char 	BYTE;
    typedef unsigned int 	WORD;
       
    
     /* Liaison série : **************************************************/
    
    
    
    
    //*****	variables globales ********************
    void Init_UART (void);
    
    //*************	Programme principal *******************/
    void main(void)
    	{
    
    	//*****	init variables ****************************
    
    	//*****	init Ports ****************************
    	TRISCbits.TRISC6=0;  // les deux sont à 1 en sortie, l'EUSART se débrouille pour le sens
    	TRISCbits.TRISC7=1;
    	Init_UART();
    
    
    	//*****	boucle principale ****************************
    
    	while (1)						// boucle principale
    		{
    			if ( PIR1bits.RCIF==1)		// caractere recu ?
    			{
    				TXREG=RCREG;	// envoi en echo
    	
    			}
    	
    			
    		}
    	}
    
    void Init_UART (void)
    {	
    		OpenUSART( USART_TX_INT_OFF &
    		USART_RX_INT_OFF &
    		USART_ASYNCH_MODE &
    		USART_EIGHT_BIT &
    		USART_CONT_RX &
    		USART_BRGH_HIGH,
    		25 );							// configure la vitesse (BAUD) 9600 N 8 1
    		TXSTA=0b00100100;
    		RCSTA=0b10010000;
    }
    Mais quand je tape sur mon clavier, ça me donne des caractères illisibles et aléatoires... A base de . ? & $ etc...

    -----

  2. #32
    paulfjujo

    Re : PIC18f452 + MCP2200

    essaie d'envoyer du texte rudimentaire :

    Code:
    FOREVER	 // boucle forever
    {
    if(Flag_seconde==1)
    {
    UART1_Write('A');
    UART1_Write('B');
    UART1_Write('C');
    UART1_Write('D');
    UART1_Write('a');
    UART1_Write('b');
    UART1_Write('c');
    UART1_Write('d');
    UART1_Write(13);
    UART1_Write(10');
      Flag_seconde=0;
    }
    
    }


    si c'est pas bon, tu as un probleme d'init UART coté PIC
    ou de config com coté PC

  3. #33
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Non ça ne marche pas...

    Voici ma config côté PIC:

    Code:
    void Init_UART (void)
    {
    		OpenUSART( USART_TX_INT_OFF &
    		USART_RX_INT_OFF &
    		USART_ASYNCH_MODE &
    		USART_EIGHT_BIT &
    		USART_CONT_RX &
    		USART_BRGH_HIGH,
    		25 );							// configure la vitesse (BAUD) 9600 N 8 1
    		TXSTA=0b00100100;
    		RCSTA=0b10010000;
    }
    Ma config côté PC est censé être identique, j'ai vérifié..

  4. #34
    paulfjujo

    Re : PIC18f452 + MCP2200

    apparament l'init UART est mauvaise
    en plus l'ecriture dans les registres TXTA et RSCTA destroyent l'init de OpenUsart

    si *Q=20MHz ( n'est pas ideal pour regler un UART)
    avec BRGH=1 et 130 => vitesse entre 9600 bauds et -0.6% d'erreur sur la vitesse
    avec BRGH=0 et 32 => 9600 bauds et -1.36% erreur

    Code:
    void Init_UART (void)
    {	
    		OpenUSART( USART_TX_INT_OFF &
    		USART_RX_INT_ON &
    		USART_ASYNCH_MODE &
    		USART_EIGHT_BIT &
    		USART_CONT_RX &
    		USART_BRGH_HIGH,
    		130 );							// configure la vitesse (BAUD) 9600 N 8 1
    		//TXSTA=0b00100100;  la fonction openusart s'occupe d'initialiser ces registres!
    		//RCSTA=0b10010000;
    }

  5. #35
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Citation Envoyé par paulfjujo Voir le message
    apparament l'init UART est mauvaise
    en plus l'ecriture dans les registres TXTA et RSCTA destroyent l'init de OpenUsart

    si *Q=20MHz ( n'est pas ideal pour regler un UART)
    avec BRGH=1 et 130 => vitesse entre 9600 bauds et -0.6% d'erreur sur la vitesse
    avec BRGH=0 et 32 => 9600 bauds et -1.36% erreur

    Code:
    void Init_UART (void)
    {	
    		OpenUSART( USART_TX_INT_OFF &
    		USART_RX_INT_ON &
    		USART_ASYNCH_MODE &
    		USART_EIGHT_BIT &
    		USART_CONT_RX &
    		USART_BRGH_HIGH,
    		130 );							// configure la vitesse (BAUD) 9600 N 8 1
    		//TXSTA=0b00100100;  la fonction openusart s'occupe d'initialiser ces registres!
    		//RCSTA=0b10010000;
    }
    J'avais déjà essayé sans les registres, et avec USART_RX_INT_ON .
    J'ai essayé de nouveau dans le doute, mais ça me donne exactement le même résultat...
    Images attachées Images attachées  

  6. #36
    paulfjujo

    Re : PIC18f452 + MCP2200

    et si tu enleves le PIC et relie les pins TX du PIC avec RX du PIC
    est-ce que tu vois ce que tu tapes au clavier

  7. #37
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Citation Envoyé par paulfjujo Voir le message
    et si tu enleves le PIC et relie les pins TX du PIC avec RX du PIC
    est-ce que tu vois ce que tu tapes au clavier
    Si j'enlève le PIC et que je relie les pins du PIC? Je ne comprends pas je suis désolé...
    Actuellement j'ai le pin Tx du PIC relié au Rx du MCP, et le Rx du PIC relié au TX du MCP.

  8. #38
    paulfjujo

    Re : PIC18f452 + MCP2200

    Ach so !
    donc ton terminal est relié au MCP, pas au PIC !

    Diviser pour mieux regner:
    il faut tester separement la liaison UART PIC et la liaison MCP..
    relier le PIC UART au terminal via un convertisseur MAX232 . pour tester la liaison PIC en 1er...

    Le probleme est sans doute plutot coté MCP,
    car ton PIC ne gere pas les pins DTR et CTS de ce circuit...
    qui en plus est pas forecement à 9600 bauds

    Une liaison UART PIC dans le sens PIC vers terminal PC est ULTRA CLASSIQUE
    et doit fonctionner à tous les coups
    (au reglage de vitesse bauds pres et eventuelle parité)
    Dernière modification par paulfjujo ; 03/06/2014 à 16h46.

  9. #39
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Il n'y a aucun moyen de régler ce problème avec mon montage, sans utiliser un MAX232?

  10. #40
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Dans la configuration utility de mon MCP, j'ai uniquement coché la case "Enable Tx/Rx LEDs". Mais pas les autres. Il faudrait ou non?
    http://ww1.microchip.com/downloads/e...Doc/22228A.pdf --> page 9 (j'ai évidemment changé le baud rate à 9600)

  11. #41
    paulfjujo

    Re : PIC18f452 + MCP2200

    Il faut bien faire la part des chose ,
    sinon tu vas tourner en rond pendant 107 ans...
    soit tu peux connecter un autre terminal à la place du PIC pour tester ton module MCP
    mais il faut aussis un convertisseur genre MAX232...

    soit tu devermine le programme PIC avec
    un moyen simple pour interfacer l'uart
    montage à 2 transistors ..
    pour etre sur de ce que tu transmet au MCP..

    Je ne peux pas t'aider coté MCP..
    Dernière modification par paulfjujo ; 03/06/2014 à 16h57.

  12. #42
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Par contre, si je branche le Tx du Pic au Tx du MCP, et le Rx au Rx, lorsque j'écris sur le terminal, ça me renvoie bien les caractères que je tape.
    Mais impossible d'écrire sur le terminal via le programme du Pic...

  13. #43
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Je suis allé à mon IUT pour tester là bas, et miracle ça marche! Alors je me demande si ça viendrait pas de l'ordinateur de mon stage, je verrai ça demain...
    En attendant je vais réfléchir à comment récupérer le compte tour + le cycle analyst en même temps!

  14. #44
    paulfjujo

    Re : PIC18f452 + MCP2200

    Citation Envoyé par gautyy5 Voir le message
    Par contre, si je branche le Tx du Pic au Tx du MCP, et le Rx au Rx, lorsque j'écris sur le terminal, ça me renvoie bien les caractères que je tape.
    Mais impossible d'écrire sur le terminal via le programme du Pic...

    tu as peut-etre le mode local ECHO activé sur ton terminal

  15. #45
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Pardon j'ai pas précisé. J'ai refait le branchement normal quanf j'étais à l'IUT. J'ai remis le Tx avec Rx, et Rx avec Tx comme il faut. Je sais pas ce qui a fait que la bas ça a marché correctement. Je peux afficher la valeur de mon compte tour a l'intervalle de temps que je veux sans soucis! Maintenant faut voir pour afficher les paramètres du Cycle Analyst en même temps

  16. #46
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Je suis vraiment pas loin...
    J'arrive à afficher le compteur sur le terminal:
    Code:
    Compteur =  00000 ,               seconde = 3
    Mais dès que je touche la poignée d'accélérateur, le programme s'emballe:
    Code:
    ·¿ÿ»{·{k{«{·û¿û¿û¿û¿ÿ»û÷ê¿¿û»Ü¿¿
    Ça proviendrait de l'interruption sur RB0 qui perturberait l'affichage?

  17. #47
    paulfjujo

    Re : PIC18f452 + MCP2200

    Peux-tu reposter ta derniere version de programme...

  18. #48
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Bien sur!

    Déclarations:
    Code:
    char k;
    unsigned int temp,i;
    volatile unsigned int  tour;
    volatile unsigned int compteur,seconde;
    Interruption:
    Code:
    void Interrupt_B0(void)
    {
    
    				 if ((INTCONbits.INT0IE==1) && (INTCONbits.INT0IF==1)) 
    				{             // Si une interruption du port B0 est détectée
    				             tour++;            // incrémenter la variable de tour
    				 			 INTCONbits.INT0IF=0;
     				}
    
                     if ((INTCONbits.TMR0IE==1) && (INTCONbits.TMR0IF ==1))
    				{
    						    compteur = (tour/4)*60;         // Multiplier le nombre de tour/seconde par 60 (pour tour/min)
    							TMR0H=0x67;
    							TMR0L=0x68;
    			                tour=0;
    		                    INTCONbits.INT0IE = 1;     // Activer RB0/INT interruption
    		                    seconde++;                                      // incrémente le nombre de secondes écoulées
    							INTCONbits.TMR0IF = 0;		
     				}
    }
    Boucle while:
    Code:
    FOREVER	 // boucle forever
    {
    
    	Affiche_Compteur();               // Fonction d'affichage sur LCD
    	if (seconde==1)                    // Pour n secondes
    	{	
    		k=fprintf(_H_USART,"Compteur =  %05d ,               seconde = %d \n \r",compteur,i); 
    		i=i++;						 //Affichage nb de secondes
    		seconde=0;
    	}
    }
    Initialisations interrupt + UART;
    Code:
    void Init_Interrupt (void)
    {
    		T0CON =0b00000110;    		    // Config T0CON pour avoir prescaler 128 et le timer sur 16bits.
    		TMR0H=0x67;
    		TMR0L=0x68;
    		T0CONbits.TMR0ON = 1; 			// Timer 0 marche (debut du comptage)
    		RCONbits.IPEN=0;
    
    		INTCON2bits.INTEDG0=1;		    // front montant RB0
    		INTCON2bits.TMR0IP=1; 		    // high level
    		INTCON2bits.RBIP=0; 
    
    		INTCONbits.PEIE = 1; 
    		INTCONbits.INT0IF=0; 
    		INTCONbits.INT0IE=1;  			// autorise RB0 interrupt
    		INTCONbits.TMR0IE = 1; 			// Autorise TMR0 interrupt
    		INTCONbits.PEIE = 1;   			// autorisation des IT des périphériques
    		INTCONbits.GIE = 1;    			// active global interrupt
    
    }
    
    void Init_UART (void)
    {
    		SPBRG = 130; /* configure la vitesse (BAUD) 9600 N 8 1*/ 
    		TXSTA = 0x24; 
    		RCSTA = 0x90; /* active l'USART*/ 
    }

  19. #49
    paulfjujo

    Re : PIC18f452 + MCP2200

    Cela sent à plein nez, un probleme de parasitage !

    Est-ce que tu as fait des mesures à l'oscillo , sur ce signal d'entree sur RB0 ?
    Rajouter eventuellement un filtre passe bas RC sur l'entree RB0
    commencer par R=1.5K et C=0.01µF
    et essayer d'augmenter progressivement C , sans perdre le signal...

    nota:
    Code:
     compteur = tour*15;
    sera plus concis que :

    Code:
     compteur = (tour/4)*60;
    car, vu qu'on ne travaille pas en flottant , on perd de la resolution en divisant d'abord

  20. #50
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Citation Envoyé par paulfjujo Voir le message
    Cela sent à plein nez, un probleme de parasitage !

    Est-ce que tu as fait des mesures à l'oscillo , sur ce signal d'entree sur RB0 ?
    Rajouter eventuellement un filtre passe bas RC sur l'entree RB0
    commencer par R=1.5K et C=0.01µF
    et essayer d'augmenter progressivement C , sans perdre le signal...
    J'ai essayé de le faire avec une 10K et un 100nF (c'est tout ce que j'avais sous la main), j'ai le même résultat... Ce que je remarque par contre, c'est que lorsque je relâche la poignée, l'affichage normal se remet plus rapidement en action qu'avant, où il y avait un laps de temps de 2 secondes environ avant de pourvoir lire correctement.
    J'aurai un oscillateur à disposition demain. Où je suis actuellement je n'en ai pas.

    Citation Envoyé par paulfjujo Voir le message
    nota:
    Code:
     compteur = tour*15;
    sera plus concis que :

    Code:
     compteur = (tour/4)*60;
    car, vu qu'on ne travaille pas en flottant , on perd de la resolution en divisant d'abord
    Effectivement, c'est tout bête mais merci de cette précision!

  21. #51
    paulfjujo

    Re : PIC18f452 + MCP2200

    J'aurai un oscillateur à disposition demain
    tu veux dire Oscilloscope !

    Elle vient d'où exactement cette impulsion sur RB0 ?
    Y a-t-il une mise en forme prealable du signal ?
    Un autre artifice serait de rajouter un monostable permettant de calibrer l'impulsion
    à une largeur bien definie et qui passerait outre de phenomenes parasiteres ou rebonds.

  22. #52
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Citation Envoyé par paulfjujo Voir le message
    tu veux dire Oscilloscope !

    Elle vient d'où exactement cette impulsion sur RB0 ?
    Oscilloscope pardon...

    L'impulsion sur RB0 vient d'un capteur à effet Hall dans le moteur qui détecte un aimant présent à l'intérieur. Il y a 4 aimants par tour. L'impulsion se fait alors lors de la détection d'un aimant, c'est à dire quand RB0 reçoit un front montant.

  23. #53
    paulfjujo

    Re : PIC18f452 + MCP2200

    OK,


    Y a-t-il une mise en forme prealable du signal ?
    entre le capteur et l'entree RB0.

    C'est un capteur effet hall TOUT ou RIEN (avec seuil incorporé) ou Analogique ?
    Si analogique, circuit de mise en forme indispensable.

    Liaison blindée entre le capteur et RB0 ?

    Attendons de voir le signal au scope...

  24. #54
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Fonctionnement du senseur
    Le senseur à effect Hall n'est pas activé (OFF) lorsqu'il n'y a pas de champ magnétique. Il s'active (ON) en présence d'un champ magnétique

    Le senseur est inactif en l'absence de champ magnétique.

    Le senseur s'active lorsqu'un champ magnétique de type SUD est présenté sur la face avant du senseur.

    http://mchobby.be/wiki/index.php?tit...L.27effet_Hall

    J'espère que ça répond à ta question ^^

    Pour ce qui est de "liaison blindée", c'est à dire?

  25. #55
    paulfjujo

    Re : PIC18f452 + MCP2200

    Pour ce qui est de "liaison blindée", c'est à dire?
    le cable qui amene l'info sur RB0 , comporte -t-il un blindage exterieur ?
    Si ton moteur est commandé en PWM, ou via un variateur de frequence
    tres forte chance de perturber ledit signal.

    De plus l'alim des capteurs effet hall doit etre decouplee de l'alim principale,
    ne serait-ce que par une cellule de filtrage.
    Dernière modification par paulfjujo ; 05/06/2014 à 15h07.

  26. #56
    invite56c261eb

    Re : PIC18f452 + MCP2200

    Je verrai ça demain quand je serai à l'IUT. En attendant, j'essaie maintenant de récupérer les informations du Cycle Analyst.
    Pour cela, j'ai branché le Tx du Cycle au Rx du PIC, et le G au VSS.
    J'ai laissé le Tx -> Rx, Rx -> Tx entre le PIC et le MCP.

    Le programme:

    interruption:

    Code:
    if(PIR1bits.RCIF) // si un car arrive
    				   {
    				   C =ReadUSART(); // le lire => RAZ  RCIF
    				   if(RCSTAbits.FERR || RCSTAbits.OERR)
    				     {
    				      RCSTAbits.CREN = 0 ; RCSTAbits.CREN= 1 ;
    				     }
    				    while(BusyUSART()); // par sécurité
    				     if(i<MAXLEN)
    				      {
    				        buffer[i]=C ; // stockage
    				        i++;
    				         Index1++;
    				        }
    				      else
    				        {
    				         buffer[i]=0; // fin de chaîne si CR
    				         Index1=i;
    				         i=0;
    				         received =1; // arme le flag reception Trame
    				       }
    				      }

    affichage:

    Code:
    void Affiche_USART (void)
    {
    		if  ((seconde==1)&&(received==1))                    // Pour n secondes
    	{	
    		k=fprintf(_H_USART,"Cycle= %s \n \r",buffer); 
    		i=i++;						 //Affichage nb de secondes
    		j=i*seconde;
    		seconde=0;
      		received=0;
      		Index1=0;
    	}
    }
    J'obtiens des résultats du genre:
    Code:
    Cyclÿ 51.256    0.ó?›J0.âwÇ.000p¿tr’Ê’‚J51>û7   0ï¿0P
                                                           =Cyclm0.0000
    Cyclÿ@155025þŸN&J51.25  ¼kJpÿN(R
    7.ò?›LBÍÎIªJ0nFr‚‚J0.008û
                             7ï¿94
                                    mCyclýOŠr’²J0.3³.0ðÙ9.0000½ß“IÊ’ŠJ51.½rûOBR ¯Cycl} 0.0000
    ou encore:
    Code:
    Cyãÿ_OÂþ_7.2960 51.29   0.2     0.00    0.0000
    00      0.00I
    On dirait que ça écrit correctement par moment, mais il doit y avoir un soucis quelque part, ça écrit un peu comme le mcp a envie

  27. #57
    paulfjujo

    Re : PIC18f452 + MCP2200

    il y a un probleme dans le code Interrupt USART
    la reception est declaree OK que sur la reception du nombre MAXLEN de car et non pas
    sur le CR (=13) qui n'est jamais detecté...

    j'ai remis dans l'ordre le test

    Code:
    if(PIR1bits.RCIF) // si un car arrive
    {
       C =ReadUSART(); // le lire => RAZ  RCIF
       if(RCSTAbits.FERR || RCSTAbits.OERR)
       {
          RCSTAbits.CREN = 0 ; RCSTAbits.CREN= 1 ;
        }
        // while(BusyUSART()); // par sécurité    <- inutilisé
       // on arme le drapeau received sur reception du CR fin de trame Cycle
       //  ou si on deborde la taille du buffer de reception
       if ((C==13) || (i>=MAXLEN-1))
          {
             buffer[i]=0; // fin de chaîne si CR
             Index1=i;
             i=0;
             received =1; // arme le flag reception Trame
           }
        else
         {
            buffer[i]=C ; // stockage
            i++;
             Index1++;
           }
      }

    Je suppose aussi que MAXLEN est >= à la longueur de trame
    Dernière modification par paulfjujo ; 05/06/2014 à 16h28.

  28. #58
    invite56c261eb

    Re : PIC18f452 + MCP2200

    ça doit venir de mes soudures ou des connexions...
    Parce que des fois ça m'écrit correctement ce que je veux, les informations du compte tour et du cycle, et il suffit que je touche à peine la carte et tout s'emballe..

  29. #59
    RISC

    Re : PIC18f452 + MCP2200

    Salut,
    Si tu veux éviter de perdre du temps, refait et vérifie ton cablage pour stabiliser le système qu'il réagisse toujours de la même manière...
    rien de pire qu'une maquette qui réagit quand on approche la main...
    a+

  30. #60
    invite56c261eb

    Re : PIC18f452 + MCP2200

    J'ai refait les soudures etc, ça ne peut plus venir de là maintenant.
    Même un simple affichage ça déconne, ça marche 1 fois sur 50...
    Je veux juste afficher "DEBUT"...
    Code:
    void Affiche_USART (void)
    {
    		if  ((seconde==2)&&(received==1))                    // Pour n secondes
    	{	
    		
    		printf("\n \r");
    		printf("DEBUT");
    		printf("\n \r");
    		seconde=0;
      		received=0;
      		Index1=0;
    	}
    }
    Et ça m'affiche:
    Code:
    DEBUTŠ¶ù
    DEBUT>³†
    DEBUTú;
    DEBUÔ7Sø
    DEBUTŸ£
    Il affiche un peu ce qu'il veut..

Page 2 sur 5 PremièrePremière 2 DernièreDernière

Discussions similaires

  1. Probléme avec le convertisseur UART/USB MCP2200
    Par invite5feda8f2 dans le forum Électronique
    Réponses: 0
    Dernier message: 18/02/2011, 18h45
  2. PWM sur Pic18f452 en C
    Par invite2a7ab739 dans le forum Électronique
    Réponses: 8
    Dernier message: 21/02/2010, 18h51
  3. pic18F452
    Par invite6e11e829 dans le forum Électronique
    Réponses: 4
    Dernier message: 05/08/2007, 13h35
  4. Pic18f452
    Par invite29283208 dans le forum Électronique
    Réponses: 1
    Dernier message: 31/03/2007, 23h10
  5. Can Pic18f452
    Par invite9f8cba25 dans le forum Électronique
    Réponses: 1
    Dernier message: 15/05/2006, 16h17
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...