Répondre à la discussion
Affichage des résultats 1 à 23 sur 23

Oscillateur interne PIC18F4431



  1. #1
    flolarajasse

    Oscillateur interne PIC18F4431


    ------

    Bonjour à tous,

    J'espère que vous allez bien. Juste une petite question, qui peut sembler élémentaire, mais il est vrai que je ne me suis encore jamais servit de l'oscillateur interne de ce PIC.

    Souhaitant avoir une fréquence interne de 8MHz, la datasheet indique qu'il faut configurer un ou plusieurs registres :
    - OSCTUNE
    - OSCCON

    Faut-il configurer les 2?Ou un seul suffit?On dirait que leur rôle est quasiment semblable, à savoir régler la fréquence, non?

    Si vous pouvez m'éclairer, car mon programme ne répond pas.

    Merci d'avance.

    -----
    Java is the best!

  2. Publicité
  3. #2
    extremgear

    Re : Oscillateur interne PIC18F4431

    Non tu n'as pas lu ou compris le datasheet .

    OSCTUNE sert à ajuster la précision de l'horloge interne .

    Dans un premier temps tu ne t'occupes pas de ce registre, il te faut configurer OSCCON et surement les bits de config.

  4. #3
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    J'ai configuré mes bits de config :

    Code:
    #pragma config OSC = IRCIO      // Oscillator Selection bits (Internal oscillator block, port function on RA6 and port function on RA7)
    #pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
    #pragma config IESO = OFF       // Internal External Oscillator Switchover bit (Internal External Switchover mode disabled)
    Du coup, je configure juste OSCCON? Je ne comprends pas vraiment le rôle de OSCTUNE. À moins qu'il y est une erreur dans mes bits de config?
    Dernière modification par flolarajasse ; 15/09/2015 à 09h09.
    Java is the best!

  5. #4
    extremgear

    Re : Oscillateur interne PIC18F4431

    osctune sert à compenser l'imprécision de l'oscillateur interne, qui est loin d'être aussi précis qu'un oscillateur externe avec quartz par exemple.

  6. #5
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    Ok, c'est ce que je viens de comprendre en relisant. Par contre, est-ce que mes bits de config sont bien réglés?ET OSCCON?

    Code:
        OSCCONbits.IDLEN = 0x0; // Run mode enabled; CPU core is clocked in power-managed modes
        OSCCONbits.IRCF = 0x7; // 8 MHz (8 MHz source drives clock directly)
        OSCCONbits.SCS1 = 0x1; // Internal oscillator block (RC modes)
    Java is the best!

  7. A voir en vidéo sur Futura
  8. #6
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    Lorsque je veux vérifier ma fréquence d'oscillation, je règle mes bits de config comme ceci, afin d'obtenir sur RA6 Fosc/4 :

    Code:
    #pragma config OSC = IRC      // Oscillator Selection bits (Internal oscillator block, CLK0 function on RA6 and port function on RA7)
    À l'oscillo, je retrouve bien 2MHz, soit 4 * 2 = 8MHz. Donc, ou ai-je fait une erreur?
    Dernière modification par flolarajasse ; 15/09/2015 à 10h50.
    Java is the best!

  9. Publicité
  10. #7
    antek

    Re : Oscillateur interne PIC18F4431

    Citation Envoyé par flolarajasse Voir le message
    À l'oscillo, je retrouve bien 2MHz, soit 4 * 2 = 8MHz. Donc, ou ai-je fait une erreur ?
    Donc il n'y a pas d'erreur -> Souhaitant avoir une fréquence interne de 8MHz, . . .

  11. #8
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    Je sais bien, je retrouve bien ma fréquence. Le soucis, c'est que mon programme fonctionne avec un oscillateur externe, mais lorsque j'utilise l'oscillateur interne, plus rien ne fonctionne. C'est pour cela que je demandais si j'avais tout bien configuré dans mes registres.
    Java is the best!

  12. #9
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    J'ai fais le test sur la même carte, qui dispose d'un quartz externe (10MHz):
    - En utilisant ce quartz comme horloge, mon programme fonctionne bien.
    - Lorsque j'utilise l'oscillateur interne (8MHz que je retrouve bien à l'oscillo), mon programme ne fonctionne plus. Ai-je oublié de régler des paramètres? Voici ce que j'ai fait :

    Carte avec oscillateur externe :
    Code:
    // CONFIG1H
    #pragma config OSC = HSPLL      // Oscillator Selection bits (HS oscillator, PLL enabled (clock frequency = 4 x FOSC1))
    #pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
    #pragma config IESO = OFF       // Internal External Oscillator Switchover bit (Internal External Switchover mode disabled)
    Carte avec oscillateur interne :
    Code:
    // CONFIG1H
    #pragma config OSC = IRCIO      // Oscillator Selection bits (Internal oscillator block, port function on RA6 and port function on RA7)
    #pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
    #pragma config IESO = OFF       // Internal External Oscillator Switchover bit (Internal External Switchover mode disabled)
    Configuration du registre OSCCON dans mon programme :
    Code:
    void Config_Oscill (void)
    {
        //OSCCONbits.IDLEN = 0x0; // Run mode enabled; CPU core is clocked in power-managed modes
        OSCCONbits.IRCF = 0x7; // 8 MHz (8 MHz source drives clock directly)
        OSCCONbits.SCS = 0x2; // Internal oscillator block (RC modes)
    }
    J'ai fais les ajustements dans mon programme concernant toutes les bases de temps (étant donné que je passe d'une horloge de 40Mhz à 8MHz), donc je ne comprends vraiment pas d'où vient le bug. Si vous pouvez m'éclairer, ce serait gentil.

    D'avance merci !!
    Java is the best!

  13. #10
    freepicbasic

    Re : Oscillateur interne PIC18F4431

    RCIO resistance externe
    INTIO1 et INTIO2 c est interne !
    A+, pat

  14. #11
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    Je n'ai pas tout comris, j'ai fait une erreur dans mes bits de config?
    Java is the best!

  15. #12
    RISC

    Re : Oscillateur interne PIC18F4431

    Salut,
    soit plus explicite concernant le problème avec l'horloge interne. Quand tu dis qu'il ne fonctionne pas, qu'est-ce qu'il ne fait pas ou fait différemment du quartz externe ?
    As tu de la communication (UART) dans ton programme ?
    a+
    Ma marotte ? les microcontrôleurs ;=)

  16. Publicité
  17. #13
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    Oui, j'ai de la communication UART dans mon programme (je reçoit à 250000kbits) pour ensuite faire du PWM ; avant, suivant les data que je recevait dans mon UART, mon pic envoyait la valeur en PWM ; maintenant, il n'envoie plus rien...
    Java is the best!

  18. #14
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    Voici la config de mon UART, qui normalement est correcte :

    Code:
    void Config_UART1 (void)
    {
        BAUDCTLbits.BRG16 = 0;  // Générateur 8 bits
        SPBRG = 1; // Vitesse de transmission 250kbits/seconde
        TXSTAbits.BRGH = 1; //Haute vitesse
        TXSTAbits.SYNC = 0; // Asynchronous mode
        RCSTAbits.SPEN = 1; // Serial port enabled
        RCSTAbits.RX9 = 1; //Selects 9-bit reception
        RCSTAbits.CREN = 1; // Enables receiver
    }
    Je ne vois vraiment pas d'où vient le problème...
    Java is the best!

  19. #15
    bisou10

    Re : Oscillateur interne PIC18F4431

    Faisons plus simple....

    La config d'horloge se fait avec les configbits. Pas besoin d'y repasser manuellement ensuite.

    Une fois ta config faite (dans un premier temps, désactive le WDT et met un BOR assez haut), tu peux essayer de lancer en debug en mettant un breakpoint au debut de ton fichier main(): tu verras si ca passe.

    D'expérience, c'est effectivement les timings qui sont à l'origine du plus grand nombre de problèmes. Passer de plusieurs Mhz à une config bcp plus basse (500kHz) rend les boucle de timing (principalement basée sur "for(; nop()" ) tellement lente qu"il faut adapter ça. En general, on spécifie FCYC ou FOSC et on se base dessus.

  20. #16
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    Citation Envoyé par bisou10 Voir le message
    Faisons plus simple....
    La config d'horloge se fait avec les configbits. Pas besoin d'y repasser manuellement ensuite.
    Tu es bien obligé de régler ta fréquence à la valeur souhaitée?Ceci ne se fait pas avec les config bits. À moins que tu ne parlais de cette ligne, à ton avis elle est en trop?
    Code:
    OSCCONbits.SCS = 0x2; // Internal oscillator block (RC modes)
    Ma fréquence est bien réglée à 8MHz quand je regarde à l'oscillo sur la pin RA6 de mon PIC (j'avais modifié mes bits de confi afin d'avoir Fosc/4 sur RA6).
    Java is the best!

  21. #17
    bisou10

    Re : Oscillateur interne PIC18F4431

    Oui j'aurais du préciser: pour un réglage par défaut fonctionnel, pas besoin de toucher OSCON dans ton initialisation hardware. Je te conseille de la commenter, et de partir en debug de suite

  22. #18
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    Je ne comprends vraiment pas, mon programme est exactement le même, mon hard est ok et ma fréquence est bonne. Qu'est ce qui peut varier??
    Java is the best!

  23. Publicité
  24. #19
    bisou10

    Re : Oscillateur interne PIC18F4431

    Ca donne quoi en debug ???!!!

  25. #20
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    J'ai l'impression que mon traitement est trop long par rapport à mes interruptions UART ; peut-être est-ce dû à la fréquence de 8MHz...
    Java is the best!

  26. #21
    paulfjujo

    Re : Oscillateur interne PIC18F4431

    bonsoir,



    impossible d'obtenir 250Kbs avec 8Mhz !



    2.jpg

  27. #22
    flolarajasse

    Re : Oscillateur interne PIC18F4431

    SPBRG = ((Fosc / Baud rate)/16) - 1 => SPBRG = ((8.10E6 / 250000)/16)-1
    SPBRG = 1

    C'est donc possible.
    Java is the best!

  28. #23
    paulfjujo

    Re : Oscillateur interne PIC18F4431

    la theorie mathématique !

    dans la spec de ton PIC page 228
    SYNC = 0, BRGH = 1, BRG16 = 1 or SYNC = 1, BRG16 = 1
    le maxi plafonne à à 115.2 Kbds SPBRG=16
    et l'erreur est déja de -2,12% !

    250Kbs => fiabilité plus que douteuse , surtout avec l'oscillateur interne

    essaie pluto avec SPBRG=7 ou 8
    avec ensuite un ajustement de OSCTUNE
    pour minimiser l'erreur (en bauds reels)
    OSCTUNE agit sur + -12% sur FOSC

    testé avec un autre PIC
    action de OSCTUNE.TUN
    ou +-12% sur FOSC interne
    ce qui donne sur FOSC/4 +-3%
    31 => 4.145 Mhz
    0 => 4.006 MHz
    32 => 3.873 Mhz

    RCSTAbits.RX9 = 1; //Selects 9-bit reception
    tu es en 9 bits ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/10/2013, 22h57
  2. l'oscillateur interne du PIC 16F688
    Par arzew dans le forum Électronique
    Réponses: 11
    Dernier message: 23/05/2012, 05h30
  3. Problème Oscillateur interne (FRC) dsPIC33EP512MU810
    Par ingegnere dans le forum Électronique
    Réponses: 2
    Dernier message: 28/03/2012, 07h10
  4. oscillateur interne pic
    Par paterson dans le forum Électronique
    Réponses: 3
    Dernier message: 09/05/2008, 15h27
  5. Oscillateur interne Pic
    Par micpic dans le forum Électronique
    Réponses: 7
    Dernier message: 02/08/2007, 15h52
Découvrez nos comparatifs produits sur l'informatique et les technologies.