Bonjour,
j'essaye depuis un moment d'utiliser le TIMER 0 du pic 16F688. Mais je n'arrive pas à comprendre comment faire.
Je programme en C, avec MPLAB + CC5X et j'utilise USB PIC Programmer pour envoyer le code dans le pic.
Le but : allumer une led à intervalle régulier.
Problème : elle reste toujours allumée.
Le circuit ; sur VDD +5V, sur VSS 0V, sur PORTC.2 une led + resistance.
Voici mon code :
Code:void main(void){ OPTION_REG = 0b11000111; TRISA = 0b00000000; // 0 -> output TRISC = 0b00000000; // 0 -> output PORTC = 0; PORTA = 0; int ms = 0; int sec = 0; TMR0 = 0; while(1){ //calcul du temps.. if(TMR0 >= 10){ // tout les 7,8125*10 ms? ms += 78; // TMR0 = 0; if(ms >= 1000){ sec++; ms = 0; } } //alimentation de led sur PORTC.2 if(sec <= 5){ PORTC.2 = 1; }else if(sec <= 10){ PORTC.2 = 0; }else{ sec = 0; } } }
pour OPTION_REG d'après le datasheet (du bit 7 au 0):
[RAPU] [INTDEG] [TOCS] [TOSE] [PSA] [PS2] [PS1] [PS0]
dans mon code : OPTION_REG = 0b11000111;
PS2 = 1, PS1 = 1, PS0 = 1
donc Timer0 Rate = 256
PSA = 0 car je veux utiliser le TRM0
TOSE = 0 (je n'ai pas vraiment compris son intérêt donc je met 0 :X)
TOCS = 0 car je souhaite utiliser l'horloge interne, donc j'utilise FOSC/4
INTDEG = 1 (là non plus aucune idée..)
RAPU = 1 (je n'ai pas besoin de RAPU pour le moment)
L'horloge interne du 16F688 est de 8Mhz, de plus Fosc/4 et prescaler de 256, donc :
(8/4)/256 = 7,8125 * 10^-3
donc TMR0 serait sensé s'incrémenter tout les 7,8125 ms
ensuite avant d'envoyer mon code dans le pic, mon logiciel me demande de choisir m configuration, je :
- désactive le WDT
- active MCLRE (par défaut)
- désactive CPD (par défaut)
- active InEx Switch Over (par défaut)
- selectionne INTRC_IO pour l'ocsillateur,
(j'ai le choix entre EXTRC_CLKOUT, EXTRC_CLKOUT, INTRC_CLKOUT, INTRC_IO, EC, HS, XT, LP)
- désactive PWRTE (par défaut)
- désactive Code Protect (par défaut)
- sélectionne BODon SBODENoff (par défaut)
- active Fail Clock Mon (par défaut)
Merci pour vos réponses et désolé pour ce gros pâté
-----