PIC 16F688 et TMR0
Répondre à la discussion
Affichage des résultats 1 à 27 sur 27

PIC 16F688 et TMR0



  1. #1
    blinbling

    PIC 16F688 et TMR0


    ------

    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é

    -----

  2. #2
    invitea683cd67

    Re : PIC 16F688 et TMR0

    A ta place je penserai a mettre un delay

  3. #3
    blinbling

    Re : PIC 16F688 et TMR0

    Merci de ta réponse.
    Mais, j'ai oublié de préciser que je veux utiliser les TIMER justement pour ne pas "stopper" l'exécution du programme (et donc pouvoir faire des chose en amont).
    Or, le delay, d'après ce que j'ai compris ne le permet pas.

    Je pense qu'il doit y avoir simplement une erreur dans mon code, mais merci quand même

  4. #4
    blinbling

    Re : PIC 16F688 et TMR0

    Quelqu'un aurait une idée ?

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

    Re : PIC 16F688 et TMR0

    ou est la gestion d'int ?
    T0IE n'est pas mis ON ?


    T0CS choix de la source de l'horloge
    T0SE choix du front de déclenchement du signal RA4.
    A+, pat

  7. #6
    blinbling

    Re : PIC 16F688 et TMR0

    Salut freepicbasic,

    Effectivement je n'ai pas configuré INTCON (ni CONFIG).

    Pour INTCON :
    GIE PEIE T0IE INTE RAIE T0IF INTF RAIF
    bit 7 - - - - - - - -- - - - - - - - - - - -bit 0

    donc : INTCON = 0b0b00100000;

    Pour CONFIG :
    Reserved Reserved Reserved Reserved FCMEN IESO BOREN1 BOREN0
    bit 15 - - - - - - - - - - - - - - - - - - - - - - bit11 - - - - - - - - - - - - - - - bit 8
    CPD(2) CP(3) MCLRE(4) PWRTE WDTE FOSC2 FOSC1 FOSC0
    bit 7 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bit 0

    donc : CONFIG = 0b000011110100;


    D'apres le datasheet :

    FOSC<2:0>: Oscillator Selection bits
    111 = EXTRC oscillator: External RC on RA5/OSC1/CLKIN, CLKOUT function on RA4/OSC2/CLKOUT pin
    110 = EXTRCIO oscillator: External RC on RA5/OSC1/CLKIN, I/O function on RA4/OSC2/CLKOUT pin
    101 = INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on
    RA5/OSC1/CLKIN
    100 = INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on
    RA5/OSC1/CLKIN
    011 = EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN
    010 = HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN
    001 = XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN
    000 = LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN

    Pour utiliser l'oscillateur interne il faut donc bien que je configure en 100 ?


    Ceci fait, voici mon code :


    Code:
    void main(void){
    	//CPD CP MCLRE PWRTE WDTE FOSC[2-0]
    	/* CONFIG = 0b11110100;
    	CC5X ne connait pas CONFIG  ? (erreur de compilation : Symbol 'CONFIG' is undefined)
    	*/
    	OPTION_REG = 0b11000111;
    	INTCON = 0b00100000;
    
    	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;
    		}
    	}
    }
    Cela fait, ma led ne clignote toujours pas :/

    Merci de ton aide

  8. #7
    DavidDB

    Re : PIC 16F688 et TMR0

    Salut,

    As-tu ouvert le datasheet à la section du PORTC ???

    Tu verras qu'il te manque l'initialisation du portc en numérique dans ton code...

    David.

  9. #8
    blinbling

    Re : PIC 16F688 et TMR0

    Salut David,

    J'ai configuré TRISC de telle sorte : 0b00000000;
    Ce qui paramètre PORTC en output.

    Maintenant, je ne comprend pas bien ce qui est entendu par : initialisation en numérique.

    Si tu pouvais m'éclaircir, Merci.

  10. #9
    DavidDB

    Re : PIC 16F688 et TMR0

    Non, ton PORTC n'est pas en sortie avec ta config...

    Il est configuré par défaut en analogique.

    Il faut ajouter à ton code :
    Code:
    CMCON0 = 0x07
    ANSEL = 0x00
    Ouvre le datasheet DS41203C de ton µC à la page 42 pour comprendre ton erreur.

    David.

  11. #10
    blinbling

    Re : PIC 16F688 et TMR0

    Re David,

    Donc, de ce que j'ai compris :

    Pour CMCOND0:

    CMCOND0 = 0x07;
    <=>
    CM<2:0> = 111, soit : Comparators off. CxIN pins are configured as digital I/O
    et les autres bits sont à 0.


    Ensuite pour ANSEL:
    ANSEL = 0x00;
    <=>
    tous les bits à 0. Donc, tous les ANSx en numérique.



    Actualisation de mon code :

    Code:
    void main(void){
    	OPTION_REG = 0b11000111;
    	INTCON = 0b00100000;
    	CMCON0 = 0x07;
    	ANSEL = 0x00;
    	TRISA = 0b00000000;
    	TRISC = 0b00000000;
    	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;
    		}
    	}
    }
    Cependant, toujours le même résultat sur ma led.
    Quels peuvent être les autres erreurs ?

    Merci pour ton aide

  12. #11
    DavidDB

    Re : PIC 16F688 et TMR0

    Ben, tu actives les INT du timer0 alors que tu n'utilises pas d'INT...

    Donc, en cas d débordement du timer0, c'est un bug...

    Pour vérifier le PORTC, commence avec un bête délais prévu pas ton compilo afin de valider la config. Ensuite tu t'attarderas à une tempo avec timer.

    David.

  13. #12
    blinbling

    Re : PIC 16F688 et TMR0

    En vérifiant mes calculs j'ai une autre erreur sur le comptage du temps :

    8Mhz => 8000000/s
    Fosc/4 => 8000000/4 = 2000000/s
    prescaler = 256 => 2000000/256 = 7 812,5 / s

    donc TMR0 s'incrément toutes les 1/7812,5 s soit tout les 0,128 ms et pas tout les 7,8125*10 ms.

    Mais celà ne résout quand même pas mon problème :/


    edit : je vais essayer merci David
    Dernière modification par blinbling ; 02/07/2010 à 12h51. Motif: pas vu

  14. #13
    blinbling

    Re : PIC 16F688 et TMR0

    En fait, je crois que CC5X ne propose pas de fonction de delai, cependant j'en avais créer une avec des nop(); en boucle, avant de me lancer sur les TMR0..


    Code:
    void delay_inconnu(uns16 x){
    	while(x>0){
    		nop();nop();nop();nop();
    		x--;
    	}
    }
    
    void main(void){
    	OPTION_REG = 0b11000111;
    	INTCON = 0b00000000;
    	CMCON0 = 0x07;
    	ANSEL = 0x00;
    	TRISA = 0b00000000;
    	TRISC = 0b00000000;
    	PORTC = 0;
    	PORTA = 0;
    	int ms = 0;
    	int sec = 0;
    	TMR0 = 0;
    
    	while(1){
    		PORTC.2 = 1;
    		delay_inconnu(5000);
    		PORTC.2 = 0;
    		delay_inconnu(5000);
    		
    	}
    }

    La led clignotte rapidement, le test est OK donc.


    sur mon code (celui utilisant le TMR0) j'ai mis INTCON = b00000000; donc, mais cela ne fonctionne toujours pas..


    Merci, personnellement je désespère pas ^^

  15. #14
    invite7a49d0d5

    Cool Re : PIC 16F688 et TMR0

    Salut,

    un ch'ti texemple utilisant le Timer0 et son interruption
    pour faire clignoter une led... disons à 1Hz...
    donc faut "créer" une période d'environ 500ms...

    comment je calcule :
    avec Fosc = 8Mhz, on à une instruction toute les 0.5us
    le Timer 0 est sur 8 bits (256 max), avec le prescaler sur 256, ça donne
    0.5 x 256 x 256 = 32768us...donc on a une interruption toutes les 32,768ms
    pour arriver à 500ms je rajoute une variable "compteur" d'interruptions= 500/32.768 = 15,...

    Code:
    // ATTENTION, je ne sais pas exactement comment 
    //         CC5x gère l'encodage des interruptions...
    #pragma origin 4
    interrupt timer0 (void)
    {
       int_save_registers;	// sauvegarde provisoire des registre 
       compteur++;
       if compteur > 15
       {
          compteur = 0;
          PORTC = !PORTC;     // inverse l'état des leds sur le PortC
       }
       TMR0IF = 0;            // efface le flag de l'interruption
       int_restore_registers; // restauration des registres W,STATUS et FSR
    }
    
    void main(void){
    	CMCON0 = 0x07;
    	ANSEL = 0x00;
    	TRISA = 0b00000000;
    	TRISC = 0b00000000;
    	PORTA = 0;
    	PORTC = 0;
     
         // active le TMR0, en mode "compteur de cycles 
         // d'horloge interne" (TOCS) + prescaler 256
    	OPTION_REG = 0b11010111;
         // active l'interruption du TIMR0
    	INTCON = 0b11100000;
    	int compteur = 0;
    
         // Le programme principal...
         // ... qui ne fait "rien"...
         // en "attendant" les interruptions
    	while(1){
    	   nop();
    	}
    }
    bon après je ne saurais que te conseiller les excellents cours de Monsieur BigOnOff...
    qui détaille le fonctionnement des Timers et leurs interruptions...

    vede
    ;O]
    __________________
    ...

  16. #15
    blinbling

    Re : PIC 16F688 et TMR0

    Merci Vede pour cet exemple. Pour utiliser ce code avec CC5X il semble falloir faire un include de "int16CXX.h", cependant TMR0IF ne semble pas être reconnu, peut être est ce T0IF sur CC5X ?
    Sinon, compteur est utilisé dans "interrupt timer0 (void);"
    mais il n'est pas déclaré à l'intérieur. Ne faut-il pas le déclarer en tant que variable globale ? (j'ai cependant testé mais ça ne fonctionne pas non plus).

    Sinon, j'ai bien compris le fonctionnement du code.



    Pour mon autre code, je n'ai toujours pas trouver l'erreur, j'ai fait un autre test :

    Code:
    void main(void){
    
    	CMCON0 = 0x07;
    	ANSEL = 0x00;
    	TRISA = 0b00000000;
    	TRISC = 0b00000000;
    	PORTC = 0;
    	PORTA = 0;
    	OPTION_REG = 0b11110011;
    	INTCON = 0b00000000;
    
    	TMR0 = 0;
    	while(1){
    
    		if(TMR0 > 100){ // chaque 12,8 ms
    			PORTC.2 = 1;
    			PORTC.1 = 0;
    		}else{
    			PORTC.2 = 0;
    			PORTC.1 = 1;
    		}
    	}
    }
    en testant ce code, PORTC.1 reste toujours à 1 (led éclairée) et PORTC.2 toujours à 2 (led éteinte). Donc apprement TMR0 ne s'incrémente pas du tout.. bizarre

  17. #16
    blinbling

    Re : PIC 16F688 et TMR0

    Je suis allé trop vite sur ma dernière phrase, je voulais dire :
    PORTC.1 reste toujours à 1 (led éclairée) et PORTC.2 toujours à 0 (led éteinte)
    de plus
    OPTION_REG = 0b11000111; configuré comme ceci

  18. #17
    blinbling

    Re : PIC 16F688 et TMR0

    Complétement hallucinant !!

    Apparemment mettre à jour le TMR0 le fait planter (enfin simple supposition). Après plusieurs tests... un clignotement :

    Code:
    void main(void){
    
    	CMCON0 = 0x07;
    	ANSEL = 0x00;
    	TRISA = 0b00000000;
    	TRISC = 0b00000000;
    	PORTC = 0;
    	PORTA = 0;
    	OPTION_REG = 0b11000111;
    	INTCON = 0b00000000;
    
    	int ms = 0;
    	int sec = 0;
    
    	while(1){
    
    		if(TMR0 > 100){ // chaque 12,8 ms
    			PORTC.2 = 1;
    			PORTC.1 = 0;
    		}else{
    			PORTC.2 = 0;
    			PORTC.1 = 1;
    		}
    	}
    }
    J'ai remarqué que dès que j'enlève un TMR0 = 0, le TMR0 semble enfin s'incrémenter.
    Quelqu'un aurait une explication à cela ?

    Gros soulagement ^^

    Merci a tous ceux qui répondront et qui m'ont déjà aidé

  19. #18
    invite7a49d0d5

    Cool Re : PIC 16F688 et TMR0

    re ;O]

    c'est pas zaisé de visualiser "un clignotement" avec une si petite période (12ms)...
    because la persistance rétinienne... à moins d'avoir des yoeux bioniques...
    (cf l'homme qui valait 3 milliards et sa copine Jaimie) ;O]

    sinon oui, pour l'interruption, utilises TOIF si CC5x le comprend...
    il faut regarder le fichier 16Fxxxx.h pour voir les noms associés aux registres par CC5x...

    pour la variable "compteur" je ne sais pas... ne connaissant pas les subtilités de CC5x...

    par contre le fait d'enlever TMR0= 0 ne devrait pas avoir d'influence notable...
    c'est très zétrange ;O]

    n'hésites pas si questions,
    vede
    ;O]
    ______________
    ...

    ps : je me suis basé sur ces 2 anciens fils pour mon code CC5x
    http://forums.futura-sciences.com/el...c16f690-3.html
    et
    http://forums.futura-sciences.com/el...c5x-svp-2.html

  20. #19
    blinbling

    Re : PIC 16F688 et TMR0

    Re,

    pour le coup de la persistance rétinienne j'avais prévu le truc donc c'est pour ça que j'ai fait le test sur 2 leds.

    Après pour ce qui est de CC5X j'ai l'impression qu'y a pas grand chose, juste la base, il ne gère pas les variables globales.
    Ex :
    Je place en début de code :
    Code:
    volatile int compteur = 0;
    ou
    Code:
    int compteur = 0;
    erreur de compilation dès que je déclare une variable gloable "Initialized static and global RAM variables are not supported", pas cool le CC5X, à moins que ça soit propre au 16F688 mais ça m'étonnerait.

    et le coup du TMR0 très étrange aussi c'est clair, jvais continuer à faire des tests demain et à trouver un moyen de dompter la bête avec CC5X, dans le pire des cas je serai obligé de changer de compilateur.

    merci, bonne soirée

  21. #20
    RISC

    Re : PIC 16F688 et TMR0

    Salut,

    Télécharges le compilateur C gratuit Hitech PRO mode lite pour PIC10/12/16 et ce genre de PB devrait disparaitre...

    a+

  22. #21
    invite7a49d0d5

    Cool Re : PIC 16F688 et TMR0

    Salut,

    Citation Envoyé par RISC Voir le message
    Salut,

    Télécharges le compilateur C gratuit Hitech PRO mode lite pour PIC10/12/16 et ce genre de PB devrait disparaitre...

    a+
    très très certainement une très très bonne suggestion...

    http://forums.futura-sciences.com/el...xactement.html

    et bonn'journée za toutes zé tous ;O]
    vede
    ;O]
    ____________
    ...

  23. #22
    blinbling

    Re : PIC 16F688 et TMR0

    Salut,

    Bon j'ai téléchargé HI TECH LITE, parfait il reconnait les variables globales etc..

    Mais j'ai un nouveau souci, quand je veux sauver les registres dans l'interruption puis les restaurer, je ne vois pas comment faire :

    Code:
    #include <htc.h>
    
    void interrupt timer0_isr(void);
    int cpt = 0;
    
    void main(void){
    	TRISC  = 0b00000000; // PORTC en output
    	OPTION = 0b11010111; // _ , _ , TOCS=0, PSA=0, precaler = 256
    	INTCON = 0b10100000; //GIE = 1, _ ,TOIE = 1, _ , _ , TOIF = 0, ...
    	ANSEL  = 0b00000000; // tous en numérique
    	TMR0 = 0;
    
    	while(1);
    }
    
    void interrupt timer0_isr(void){
    	//int_save_registers
    	#asm
    		;(vu sur le datasheet)
    		MOVWF W_TEMP ;
    		SWAPF STATUS,W ;
    		MOVWF STATUS_TEMP ;
    	#endasm
    
    	//code
    	if(cpt == 0) cpt = 10; //10 est une valeur quelconque pour le moment
    	if(cpt<5){ RC2 = 1; RC1 = 0; }
    	else{ RC2 = 0; RC1 = 1; }
    	cpt--;
    	T0IF = 0; //on efface le flag
    
    	//int_restore_registers
    	#asm
    		;(vu sur le datasheet)
    		SWAPF STATUS_TEMP,W ;
    		MOVWF STATUS ;
    		SWAPF W_TEMP,F ;
    		SWAPF W_TEMP,W ;
    	#endasm
    }
    en fait le problème c'est que le compilo ne connait pas les variable que j'utilise en asm :
    • symbole "W_TEMP" indéfini
    • symbole "STATUS" indéfini
    • symbole "STATUS_TEMP" indéfini


    de plus quelle utilité a le "#pragma origin 4" que l'on voit souvent ?

    Je rame..
    Merci tous

  24. #23
    invite7a49d0d5

    Cool Re : PIC 16F688 et TMR0

    Salut,

    d'après ce récent fil : http://forums.futura-sciences.com/el...timer-1-c.html
    Hi Tech C sauvegarde et restaure automatiquement les registres...
    donc tu n'as pas besoin de t'en occuper dans ton code...
    (supprime les lignes de sauvegarde et restauration)

    et "pragma origin 4" c'est pour forcer le compilateur à mettre
    le code de l'interruption à l'adresse 04, qui est l'adresse
    d'interruption des pics 16Fxxxx...

    vede
    ;O]
    __________
    ...

  25. #24
    blinbling

    Re : PIC 16F688 et TMR0

    Salut c'est encore moi...

    Tout d'abord, merci vede j'ai donc viré ces lignes de mon code. Mais le problème ne venait pas de là du coup.

    Je n'arrive toujours pas à faire clignoter ces leds

    Tout semble donc bien configuré pour fonctionner, le code et tout les reste m'ont l'air correct, mais il ne se passe rien.
    Je sèche sérieusement comme jamais là ^^

    mon code C sous HI TECH :
     Cliquez pour afficher


    Bien sûr j'ai fait plusieurs test :
    * TMR0 semble bien s'incrémenter
    * les pattes de mon PIC fonctionnent (sauf RA5 que j'ai pété à force de manipulation, j'imagine que c'est irréparable vu que la patte est cassée à la base du boitier :/ si il existe quand même une astuce jveux bien ^^).

    Si vous avez des idées... merci d'avance

  26. #25
    invite7a49d0d5

    Cool Re : PIC 16F688 et TMR0

    re ;O]

    une première question : tu déclare "ms" en int...
    mais est-ce un int 8 ou 16bits?

    si c'est un 8bits (comme normalement) ben ya un souci...
    car il ne peut "arriver" à compter jusqu'à 1000 (255 max)...

  27. #26
    blinbling

    Re : PIC 16F688 et TMR0

    Salut,

    Ola oui grosse erreur de ma part, vraiment bien vu (trop l'habitude de la prog C sur pc), mais ça ne résout toujours pas le problème (j'avais fait d'autres tests, en respectant la taille limite de int).

    J'ai pris mon second 16F688 neuf, qui n'a pas la patte RC5 cassée. J'ai pensais que l'erreur pouvait venir de là, lors du chargement du programme dans le pic si jamais RC5 était utilisée dans le transfert.
    Mais non.

    J'ai fait un code de "test" (en respectant cette fois-ci la limite du type int ^^):

     Cliquez pour afficher



    Avec ce code les résultats sont les suivants :

    RC0 clignote très rapidement.
    RC1 clignote très rapidement (plus rapidement encore que RC0).
    RC2 reste éteinte.
    RC3 reste éteinte.
    RC4 reste toujours allumée.

    D'après moi,
    RC0 : pas sensé clignoté du tout, devrait resté allumée en continu une fois le test (ms33>0) validé une fois.
    RC1 : test OK, très rapide car 20ms éteinte (TMR0<150), 13ms allumée (255>TMR0>150).
    RC2 : problème
    RC3 : problème aussi
    RC4 : test OK, c'est tout ce qu'on lui demande.



    Mes grosses question:
    - Le compilateur HI TECH ne prend pas en compte le pragma origin 4, le problème pourrait venir de là ?
     Cliquez pour afficher

    - Ce pourrait-il qu'une interruption TMR0 effectue une sorte de reset du programme ? (ça pourrait être ca ?, sauf peut être pour RC4 qui devrait s'éteindre brièvement lors du reset (puisque PORTC=0 dans l'initialisation))
    - Ca vous le coup de m'obsiter comme ça ?


    Merci Vede pour le temps que tu perds à me répondre

  28. #27
    invite7a49d0d5

    Cool Re : PIC 16F688 et TMR0

    Salut,

    ya pas de soucis, par contre là je suis assez occupé,
    mais demain soir je rentre enfin chez moi et delà je
    testerais le programme...

    en attendant tu devrais essayer de "faire plus simple",
    cad juste une led, et la "maîtriser" avec le Timer...
    (tu devrais... tu devrais... enfin ça n'est qu'une suggestion...)...

    vede
    ;O]
    _________
    ...

Discussions similaires

  1. [PIC] Détécter l'état logique d'une entrée sur pic 16f690
    Par invitece85d109 dans le forum Électronique
    Réponses: 12
    Dernier message: 31/12/2009, 17h53
  2. PICBASIC PRO: Thermometre + LCD + 16F688
    Par inviteb014f6d2 dans le forum Électronique
    Réponses: 7
    Dernier message: 07/11/2008, 18h10
  3. erreur 0X00 programmation PIC plus questions sur les PIC
    Par invite4a8ccabd dans le forum Électronique
    Réponses: 4
    Dernier message: 22/07/2007, 14h36
  4. Réponses: 0
    Dernier message: 18/03/2007, 15h43
  5. Qui connais logi pic & et question à propos des pic
    Par Floris dans le forum Électronique
    Réponses: 10
    Dernier message: 29/05/2006, 22h40
Découvrez nos comparatifs produits sur l'informatique et les technologies.