Quartz 20Mhz / 4 sur pic 18F4550
Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

Quartz 20Mhz / 4 sur pic 18F4550



Vue hybride

  1. #1
    invite0155ce91

    Quartz 20Mhz / 4 sur pic 18F4550

    Bonjour à tous,
    Je viens de mettre en place une liaison série asynchrone entre mon pic et mon PC. Actuellement tout marche mais j'ai mis un moment à la faire fonctionner pour une bonne raison :
    J'utilise un quartz de 20Mhz en HS, et d'après la datasheet du pic, il faut effectuer l'opération suivante pour initialiser le registre SPBRG = ((FOSC/Desired Baud Rate)/64) – 1. Je précise que c'est 9600bauds / 8bits de données / 1 bit de stop / sans parité / sans contrôle de flux. Je suis en low speed donc BRGH = 0.
    Mais voilà, d'après ce calcul je suis sensé trouver SPBRG = 31. Seulement avec cette donnée les caractères reçus et envoyés sont du grand n'importe quoi. Donc après une longue prise de tête et du tâtonnement, j'ai trouvé qu'avec SPBRG = 7, tout se passe bien, les caractères sont bons.
    Arrive la problématique : avec SPBRG = 7, je trouve une horloge cadencée à 5Mhz, soit 20Mhz / 4. Seulement je n'ai pas mis de pré diviseur ou autre. Est-ce donc normal de se retrouver avec cette fréquence ?
    Merci d'avance

    François

  2. #2
    invitedb9b1ced

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    Bonjour,

    Peux tu poster ton code stp ?

    Merci.

  3. #3
    RISC

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    Salut,

    Le PIC18F4550 a une horloge interne sophistiquée avec différents étages de division / multiplication.
    Commence pas lire la datasheet et regardes les bits de configuration.
    Si tu n'as pas initialisé ces bits au début de ton programme, ta fréquence interne Fosc n'est pas du tout celle que tu penses... en tout cas pas celle de ton quartz

    a+

  4. #4
    invite0155ce91

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    Et bien justement j'ai bien lu la datasheet à plusieurs reprises et notamment les registres OSCCON et OSCTUNE, j'ai d'après moi initialisé comme il fallait l'horloge pour avoir du 20Mhz, et fais attention à ce qu'il n'y est pas de pré diviseur, mais ça ne doit juste pas être le cas.
    Je vous posterai mon code de configuration demain.
    Merci pour vos réponses

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

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    Voilà les registres concernant l'horloge :

    //Clock externe : quartz 20MHz
    #pragma config FOSC = HS

    OSCCON = 0x00;
    OSCTUNE=0b00010000;

  7. #6
    invitedb9b1ced

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    Salut,

    Le peu que tu as posté ne semble pas mauvais pour ce que tu veux faire (même si toucher à OSCTUNE ne sert à rien ici).
    Mais peux tu poster tout ton code stp ?
    Car pour configurer l'oscillateur en externe tu n'as même pas besoin de toucher à OSCCON et OSCTUNE, tu dois pouvoir le faire juste en configurant correctement les fusibles de configuration.

    A+

  8. #7
    invite0155ce91

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    D'acc alors voilà mon fichier c principal :

    #include <p18f4550.h>
    #include <delays.h>
    #include "inout.h"
    #include "config.h"

    /////////////Variables globales/////////////
    unsigned char gChar;

    /////////////Mise en place de l'interruption/////////////
    void it_prioritaire(void);

    #pragma code int_toto=0x08 //0x18 pour basse priorité
    void int_toto(void) {
    _asm GOTO it_prioritaire _endasm
    }
    #pragma code

    #pragma interrupt it_prioritaire
    void it_prioritaire()
    {
    if(OERR)
    {
    CREN=0;
    CREN=1;
    }
    if(RCIF)
    {
    gChar=RCREG;
    }
    if(TMR0IF)
    {
    if(!RA1)
    {
    gScore+=1;
    }
    else if(!RA2)
    {
    gScore+=2;
    }
    else if(!RA3)
    {
    gScore+=3;
    }
    else if(!RA4)
    {
    gScore+=4;
    }
    gCpt++;
    TMR0IF=0;
    }
    }

    /////////////Fonctions tempo/////////////
    void ms8(unsigned char count)
    {
    Delay10KTCYx(count); //tempo de 8ms si count=1
    }


    /////////////Fonction d'initialisation/////////////
    void init(void)
    {
    // OSCCON = 0x00; //pas de prédiviseur => 20MHz
    OSCTUNE=0b00010000;
    ADCON1=0x0F; //Utiliser RAx comme entrée analogique
    TRISA=0b0111111;
    TRISB=0x00;
    TRISC=0b00000001;
    TRISD=0x00;
    TRISE=0xF;
    T0CON=0b11000011; //Définition du comptage du timer0
    SSPEN=0;
    GIE=1;
    TMR0IE=1;
    TMR0IF=0;
    }

    void init_RS232(void)
    {
    PEIE=1;
    RC7; //RX
    RC6; //TX
    RCSTA = 0b10010000;
    TXSTA = 0b00100010;
    BAUDCON = 0b00000000;

    SPBRGH = 0b00000000;
    SPBRG = 7;
    CREN=1;
    RCIE=1;
    }



    /////////////Main/////////////
    void main(void)
    {
    init();
    init_RS232();
    RB0=1;
    RB1=1;
    while(1)
    {
    if(gChar=='A')
    {
    while(gChar=='A')
    {
    RB0=1;
    RB1=0;
    ms8(1);
    }
    }
    }
    }

  9. #8
    invite0155ce91

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    Et voici mon config.h :

    /////////////Config/////////////
    //Pour le Timer0 T0CON
    #define TMR0ON T0CONbits.TMR0ON //timer0 ON/OFF
    #define T08BIT T0CONbits.T08BIT //8 ou 16 bits
    #define T0CS T0CONbits.T0CS //selection de l'horloge (0 pour l'interne)
    #define T0SE T0CONbits.T0SE //Compte sur Fmontant si à 0 et descendant si à 1
    #define PSA T0CONbits.PSA //pre diviser actif à 0
    #define T0PS2 T0CONbits.T0PS2 //Selection du prédiviseur 111=1/256 110=1/128...
    #define T0PS1 T0CONbits.T0PS1
    #define T0PS0 T0CONbits.T0PS0

    //Pour désactiver MCLR
    #pragma config MCLRE = OFF

    //Clock externe : quartz 20MHz
    #pragma config FOSC = HS

    //Pour l'interruption INTCON
    #define GIE INTCONbits.GIE
    #define PEIE INTCONbits.PEIE
    #define TMR0IF INTCONbits.TMR0IF
    #define TMR0IE INTCONbits.TMR0IE


    //Pour activer port série
    #define SSPEN SSPCON1bits.SSPEN

    //Désactiver Low Power Voltage pour activer RB5
    #pragma config LVP = OFF

    //Watch dog off
    #pragma config WDT = OFF


    #define RCIF PIR1bits.RCIF
    //#define TXIF PIR1bits.TXIF

    #define RCIE PIE1bits.RCIE
    //#define TXIE PIR1bits.TXIE

    #define TRMT TXSTAbits.TRMT //1 = TXREG empty / 0 = TXREG full

    #define OERR RCSTAbits.OERR
    #define CREN RCSTAbits.CREN

  10. #9
    paulfjujo

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    bonjour,


    Quand vas-tu montrer ta config bit complete ?

    CONFIG1L contient en autre CPUDIV1 et CPUDIV2
    postcaler divider ...
    For XT, HS, EC and ECIO Oscillator modes:
    11 = Primary oscillator divided by 4 to derive system clock <--- 20/4= 5MHz !!!
    10 = Primary oscillator divided by 3 to derive system clock
    01 = Primary oscillator divided by 2 to derive system clock
    00 = Primary oscillator used directly for system clock (no postscaler)

  11. #10
    paulfjujo

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    re..

    tu nous montre la config des registres et non pas la config des bits de configurations
    ex ci joint

    Nom : Pic_Config.jpg
Affichages : 326
Taille : 220,3 Ko:

  12. #11
    invite0155ce91

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    C'est justement parce que la case Configuration Bits set in code est coché, donc tous les bits de configurations non initialisés dans mon code ont pris leur valeur par défaut.
    Donc ce que tu dis Paulfjujo ne tient pas vu que dans la datasheet les registres CPUDIV sont initialisés à 0 par défaut donc pas de pré diviseur, ce que j'avais déjà vérifié préalablement avant de poster sur le forum ^^

    U-0 U-0 R/P-0 R/P-0 R/P-0 R/P-0 R/P-0 R/P-0
    — — USBDIV CPUDIV1 CPUDIV0 PLLDIV2 PLLDIV1 PLLDIV0

  13. #12
    invitedb9b1ced

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    Sinon pour être sûr que ce ne soit pas un souci de configuration d'oscillateur tu peux faire osciller une sortie avec une fréquence connue et visualiser le signal sur un oscillo.
    Si le signal a une fréquence identique à la théorie alors il n'y a pas de soucis d'oscillateur, sinon si.

  14. #13
    invite0155ce91

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    Oui en effet c'est une solution, mais bon à vrai dire je posais plus cette question par curiosité et interrogation. Ca ne me pose pas vraiment de probème dans mon travail d'utiliser du 5MHz mais je trouve ça tout de même bizarre après vérification de la config. En tout cas merci pour vos réponses.

  15. #14
    invitedb9b1ced

    Re : Quartz 20Mhz / 4 sur pic 18F4550

    Je suis tout de même curieux de connaître le pourquoi du comment ?
    Tu peux un peu investiguer ?

Discussions similaires

  1. aide sur la programmation USB pour le PIC 18F4550
    Par invitea9f115f3 dans le forum Électronique
    Réponses: 8
    Dernier message: 24/04/2012, 20h57
  2. rs232 parité sur pic 18f4550
    Par invite1208e497 dans le forum Électronique
    Réponses: 1
    Dernier message: 22/06/2011, 16h24
  3. utilité de l'oscillateur à quartz sur un PIC
    Par mariepour dans le forum Électronique
    Réponses: 4
    Dernier message: 17/01/2011, 14h28
  4. Quartz 20Mhz au lieu de 4MHz ?
    Par invite2c55735f dans le forum Électronique
    Réponses: 28
    Dernier message: 06/12/2009, 17h45
  5. Programmation sur PIC 18F4550
    Par inviteaa7c8409 dans le forum Électronique
    Réponses: 5
    Dernier message: 31/03/2009, 14h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...