Bonsoir à vous,
Ca faisait longtemps, mais j'espère revenir un peu plus souvent sur le site

...
Je recommence à nouveau avec le DSPic33FJ256... J'ai repris la ou je m'étais arrêter donc j'ai réussi à faire déplacer mon clignotement à l'aide d'un bouton poussoir cela fonctionne, je me suis amuser à ré-implémenter un script d'anti-rebond au niveau des touches, cela fonctionne... mais alors qu'est-ce qui cloche ???
C'est au niveau du Timer que j'ai configuré, j'aimerais avoir une interruption toutes les 5ms, donc j'ai fait mes différents calculs selon les configurations de l'oscillateur et du Timer1, et la je me retrouve avec le clignotement du programme précédent, et je n'arrive pas à comprendre ce que je fais de faux puisque j'ai l'impression de bien configurer le timer, de plus le script sur l'oscillateur n'a pas bougé
Je désire avoir une clock interne de 8Mhz pour cela j'ai opéré comme suis : --> voir le code ci-dessous !!!
//----------------------------------------------------------------------------------//
//--- nom : init_osci
//--- entrée - sortie : - / -
//--- description : configure l'oscillateur du DSP pour utiliser l'horloge
// à 8MHz
//----------------------------------------------------------------------------------//
init_osci()
{
//--- configuration de l'oscillateur interne à 40Mhz ---//
// utilisation fomrules du datasheet du DSPic33FJ256GP710A --> page 146
// Fcy = Fosc / 2 ; Fosc = Fin(M/(N1 N2))
// Fin = 8Mhz --> Fosc = 40Mhz --> Fcy = 40Mhz
OSCCONbits.COSC = 3; // sélection de l'oscillateur XT
OSCCONbits.CLKLOCK = 0; // l'horloge et la PLL peuvent être modifié
CLKDIVbits.ROI = 0; // pas d'effet si il y a interruption
CLKDIVbits.DOZE = 0; // pas de réduction sur l'horloge Fcy /1
CLKDIVbits.DOZEN = 0;
CLKDIVbits.PLLPRE = 0; // N1 = 2
CLKDIVbits.PLLPOST = 0; // N2 = 2
PLLFBDbits.PLLDIV = 38; // M = 40
__builtin_write_OSCCONH(0x03); // fonction appelant du code assembleur
// configuration du registre NOSC (OSCCON) -->
// 011 = Primary Oscillator with PLL (XTPLL, HSPLL, ECPLL)
__builtin_write_OSCCONL(0x01); // Active la commutation de la clock
while(OSCCONbits.COSC != 0b011); //
}
ensuite j'ai configuré le Timer 1 comme suis, pour les calculs de l'interrupteur voir mes commentaires : --> voir le code ci-dessous
//----------------------------------------------------------------------------------//
//--- nom : init_timer1
//--- entrée - sortie : - / -
//--- description : initilaiser le timer 1 pour avoir une horloge de 100ms
//----------------------------------------------------------------------------------//
void init_timer1(void)
{
//--- registre de configuration du Timer1 ---//
T1CONbits.TON = 0; // désactiver le timer pour la configuration
T1CONbits.TCS = 0; // clock interne
T1CONbits.TSYNC = 0; // synchroniser la clock externe
T1CONbits.TCKPS = 3; // prédivseur régler à 256 --> 8Mhz/256 = 31250Hz --> 32us
TMR1 = 0; // mise à zéro du registre lié au timer
PR1 = 62379; // période du timer --> 5ms/32us --> 62535 - 156 = 62379
//--- registres des configurations des interruptions liées au Timer1 ---//
IPC0bits.T1IP = 7; // choix de la priorité --> ici la plus élevée 7 = 111
IFS0bits.T1IF = 0; // remise à zéro de l'interruption
IEC0bits.T1IE = 1; // activation de l'interruption lié au Timer1
T1CONbits.TON = 1; // activer le timer1
}
Mais le problème, c'est que je devrais avoir aussi un clignotement rapide puisque je le traite dans ma boucle d'interruption la gestion du clignotement des leds, mais celui-ci se fait à la meme vitesse que le programme d'avant... beuh tout triste...
Je ne comprends pas... est-ce le mode debbuggeur que j'utilise ou le code que j'implémente...
si vous avez des idées, c'est bien volontiers... je vous mets le code complet de mon main
Un tout grand merci d'encore me lire après cette si grande interruption...
Amicalement le cht'y Philou