Pb initialisation oscillateur avec PIC24F
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Pb initialisation oscillateur avec PIC24F



  1. #1
    kronanberg

    Unhappy Pb initialisation oscillateur avec PIC24F


    ------

    Salut!

    Voila je suis en train de configurer une liaison RS232 entre mon PC et mon PIC et j'ai un souci pour initialiser mon oscillateur. Dans la doc je vois qu'il faut initialiser les bits "POSCMD1:POSCMD0" et les bits "FNOSC2:FNOSC0" du registre "configuration world 2".

    Mon souci est que le registre configuration world 2 se modifie avec une commande Config2 que je ne comprend pas trop.

    Du coup pour le moment j'essaie d'initialiser ma liaison sans configurer l'ocsillateur interne (car il normalement il est définit par défaut !!) mais impossible de calibrer un baud rate correct.

    Voici mon code :
    Code:
    #include <p24FJ256GB110.h>
    
    void init_uart();
    void PutByte(unsigned char byte);
    unsigned char GetByte(void);
    
    
    main()
    {
    	unsigned char reception;	
    	unsigned char envoie;
    
    	//*************************************************
    	// Unlock Registers	"__builtin_write_OSCCONL(OSCCON & 0xbf);"
    	//*************************************************
    	asm volatile ( "MOV #OSCCON, w1 \n"	
    				   "MOV #0x46, w2 \n"
    				   "MOV #0x57, w3 \n"
    				   "MOV.b w2, [w1] \n"
    				   "MOV.b w3, [w1] \n"
    				   "BCLR OSCCON,#6");
    
    	//*************************************************
    	// Configure Input Functions **********************
    	//*************************************************
    	RPINR18bits.U1RXR = 7;	// Assign UART1RX To Pin RP7
    	
    	//*************************************************
    	// Configure Output Functions *********************
    	//*************************************************
    	RPOR3bits.RP6R = 3;	// Assign UART1TX To Pin RP6
    	
    	//*************************************************
    	// Lock Registers	"__builtin_write_OSCCONL(OSCCON | 0x40);"	
    	//*************************************************
    	asm volatile (  "MOV #OSCCON, w1 \n"
    					"MOV #0x46, w2 \n"
    					"MOV #0x57, w3 \n"
    					"MOV.b w2, [w1] \n"
    					"MOV.b w3, [w1] \n"
    					"BSET OSCCON, #6" );
    
    	TRISBbits.TRISB6 = 0;	 //RB6 configuré en sortie correspond à Tx
    	TRISBbits.TRISB7 = 1;	 //RB7 configuré en entree correspond à Rx
    
    	init_uart();
    
    	while(1)
    	{
    			for(envoie=0;envoie<=255;envoie++)		// envoie de chaque caractère de 0 à 255
    			{
    				PutByte(envoie);
    			}
    	}
    }
    
    void init_uart()
    {
    
    	U1BRG = 207;			// configuration pour une horloge de 8Mhz et une transmission de 9600 bauds 13
    	U1MODE = 0x8008; 		// UARTEN = 1	--		BRGH = 1
    	U1STA = 0x0400; 		// UTXEN = 1
    	IFS0bits.U1RXIF = 0; 	//effaçage du flag d'interruption RX de l'uart
    }
    
    
    void PutByte(unsigned char byte)
    {
    	while(!IFS0bits.U1TXIF);	/* set when register is empty */
    
    	U1TXREG = byte;
    
    	return;
    }
    
    unsigned char GetByte(void)
    {
    	unsigned char recep;
    
    	while(!IFS0bits.U1RXIF);	/* set when register is not empty */	
    	
    	recep = U1RXREG;
    
    	return recep;	
    }
    Si quelqu'un peut m'aider merci.

    -----

  2. #2
    kronanberg

    Re : Pb initialisation oscillateur avec PIC24F

    J'ai oublié de préciser que je travaille sous MPLAB avec le compilateur C30.

    Merci pour les futures réponses.

  3. #3
    kronanberg

    Re : Pb initialisation oscillateur avec PIC24F

    Finalement j'ai trouvé la commande :

    _CONFIG2(FNOSC_FRC & IOL1WAY_ON)

    Elle me permet d'utiliser l'oscillateur interne 8Mhz avec Fcy = 8Mhz / 2.

    Donc j'arrive bien à transmettre des caractères au PC mais j'arrive pas en recevoir, Si quelqu'un à une idée pour ma fonction GetByte() ????

  4. #4
    Jack
    Modérateur

    Re : Pb initialisation oscillateur avec PIC24F

    Est-ce normal de tester les flags d'interruption, vu que tu ne travailles pas avec interruption pour la gestion de la transmission.

    Ne serait-il pas préférable de tester le flag UR1DA: Receive Buffer Data Available"
    Dernière modification par Jack ; 15/05/2009 à 11h45.

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

    Re : Pb initialisation oscillateur avec PIC24F

    Ben c vrai que c pas très logique mais j'utilisais cette technique sous un autre PIC.
    Mais la fonction "PutByte" fonctionne mais peut être que je devrais changer le teste du bit de Flag.
    Le souci c'est que j'ai essayé en testant aussi avec les bits U1STAbits.TRMT et U1STAbits.URXDA mais je n'arrive pas à faire fonctionner.

    Par contre je ne peux pas lire la suite de "Ne serait-il pas préférable de tester le flag " ?

    je voudrai bien la connaître

    Merci.

  7. #6
    Jack
    Modérateur

    Re : Pb initialisation oscillateur avec PIC24F

    J'ai modifié ce qui était illisible. Mais tu avais déjà testé ce bit. Donc retour case départ. Un problème matériel peut-être?

    A+

  8. #7
    kronanberg

    Re : Pb initialisation oscillateur avec PIC24F

    Je crois savoir d'ou vient l'erreur !!
    Apparament ça à l'air d'être les broches qui sont mal configurer. Le probleme c'est que je n'arrive pas à comprendre comment c'est configurer.
    Voila l'exemple que j'ai trouvé :
    #if defined(IO_MAPPING_REQUIRED)
    #if defined(__PIC24FJ64GA004__)
    //INPUTS **********************

    //U2RX = RP19
    RPINR19bits.U2RXR = 19;
    //SDI2 = RP20
    RPINR22bits.SDI2R = 20;

    //OUTPUTS *********************

    //RP25 = U2TX
    RPOR12bits.RP25R = U2TX_IO;
    //RP24 = SCK2
    RPOR12bits.RP24R = SCK2OUT_IO;
    //RP21 = SDO2
    RPOR10bits.RP21R = SDO2_IO;
    #elif defined(__PIC24FJ256GB110__) || defined(__PIC24FJ256GA110__)
    //INPUTS **********************

    //U2RX = RP19
    RPINR19bits.U2RXR = 10;
    //SDI2 = RP20
    RPINR22bits.SDI2R = 26;

    //OUTPUTS *********************

    //RP25 = U2TX
    RPOR8bits.RP17R = U2TX_IO;
    //RP24 = SCK2
    RPOR10bits.RP21R = SCK2OUT_IO;
    //RP21 = SDO2
    RPOR9bits.RP19R = SDO2_IO;
    #endif
    #endif
    Il y a une différence entre le PIC24FJ64 et PIC24FJ256. Je comprend on configure les pins pour le PIC24FJ64 mais je n'arrive pas à trouver dans la doc comment configurer mes broches pour mon PIC24FJ256.

    Si quelqu'un à une idée ??

  9. #8
    kronanberg

    Re : Pb initialisation oscillateur avec PIC24F

    Boujour !!

    Je veux maintenant utiliser un quartz externe de 7,3728 MHz afin de pouvoir réaliser une liaison avec l'uart à 230400 bauds.
    J'ai beau essayer d'initialiser avec les différentes commandes par exemple :

    _CONFIG2( FNOSC_PRI & OSCIOFNC_OFF & FCKSM_CSDCMD & POSCMOD_XT)

    Celle ci doit permettre d'initialiser l'oscillateur externe en mode XT mais je n'y arrive pas.
    Si quelqu'un sait sinon comment je peux vérifier que mon quartz fonctionne bien avec mon PIC je suis preneur !!!!

    Merci.

Discussions similaires

  1. Problème PIC24F
    Par kronanberg dans le forum Électronique
    Réponses: 4
    Dernier message: 14/05/2009, 10h36
  2. Liaison UART par PIC24F
    Par invite5b91726d dans le forum Électronique
    Réponses: 16
    Dernier message: 04/06/2008, 15h36
  3. oscillateur astable avec AOP
    Par violaine-è dans le forum Électronique
    Réponses: 11
    Dernier message: 21/02/2008, 14h53
  4. Problème d'utilisation CAN avec PIC24F
    Par invite5b91726d dans le forum Électronique
    Réponses: 5
    Dernier message: 24/07/2007, 14h57
  5. { Oscillateur avec 2 NOR }
    Par invite8242c798 dans le forum Électronique
    Réponses: 6
    Dernier message: 02/04/2007, 08h49
Découvrez nos comparatifs produits sur l'informatique et les technologies.