PIC16F628 Reboot constant (meme en plein While)
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

PIC16F628 Reboot constant (meme en plein While)



  1. #1
    RichardNoirPlus

    PIC16F628 Reboot constant (meme en plein While)


    ------

    Bonjour,

    J'ai un problème sur un programme simple et sur tout mes programmes en fait... Ce programme de test commande deux LEDs, lorsqu'on appuie sur un poussoir momentané, la LED1 s'allume, la LED2 s'éteint, et vice versa. Rien de bien complexe et le programme fonctionne mais reboot au bout de 10 secondes alors qu'à priori rien ne permet au programme de sortir de sa boucle While.

    Code:
    #include <htc.h>
    #ifndef _XTAL_FREQ
    #define _XTAL_FREQ 4000000
    #endif
    
    #define led1 RA0
    #define led2 RA1
    #define switch RB6
    
    void main(void)  {
    
    CMCON = 0x0f;
    TRISA = 0b00000000;
    TRISB = 0b01001000;
    PORTA = 0;
    
    led1 = 1;
    led2 = 0;
    int both = 0;
    
    int sel = 1;
    	
    while (1)
    	{
    	if (both == 0)
    		{
    		if (switch==0) // si switch appuyé
    			{
    			if (sel==1)
    				{
    				sel = 2;
    				led1=0;
    				led2=1;
    				__delay_ms(500);
    				CLRWDT();
    				
    				}
    			else if (sel==2)
    				{
    				sel = 1;
    				led1=1;
    				led2=0;
    				__delay_ms(500);
    				CLRWDT();
    				}
    			}
    		} 
    	}
    }
    Voila, si quelqu'un a une idée, je lui en serai extremement reconnaissant ! PS: je code sous MPLAB

    Cordialement,
    RNP

    -----

  2. #2
    RicounetZap

    Re : PIC16F628 Reboot constant (meme en plein While)

    Bonjour
    Comment fait tu pour faire un CLRWDT() si tu n'appuies pas sur les boutons ? ou si tu appuies sur le boutons 20ms avant l'échéance ?
    Cordialement
    N'importe quoi, for ever :-)

  3. #3
    RichardNoirPlus

    Re : PIC16F628 Reboot constant (meme en plein While)

    Merci pour ta réponse,

    Je débute et donc, comme tout le monde, je copie des bloc de code par ci par là

    ...sans forcément comprendre à quoi ils servent visiblement.

    En fait:

    __delay_ms(500);
    CLRWDT();

    est la seule solution qui a fonctionné pour moi lorsque je voulais faire un timer...

    Evidemment quand je retire ces commandes, mon programme ne reboot plus mais je n'ai plus de temporisation qui fait office d'anti rebond logiciel...

  4. #4
    RicounetZap

    Re : PIC16F628 Reboot constant (meme en plein While)

    Re bonjour

    Pour faire simple, pour l'instant, modifies la configuration de ton PIC afin de ne pas utiliser le Watchdog Timer. Pour apprendre, cette fonctionnalité est plus une gène qu'un avantage. Par contre, pour de la production...
    et met en commentaire les instructions CLRWDT().
    500 ms de delay pour un anti rebond, c'est très très très très long
    Fais des essais pour trouver une valeur acceptable ( < 50 ms )

    Cordialement
    N'importe quoi, for ever :-)

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

    Re : PIC16F628 Reboot constant (meme en plein While)

    Ca fonctionne ! Un grand merci à toi

    Effectivement 500ms c'est élevé pour l'anti rebond mais je mettais des valeurs larges pour "débugguer". Je vais réduire.

    Je vais de ce pas me documenter sur les Watchdog Timer car je dois dire que j'ai un peu zappé ça par flemme... le débutant classique quoi !

    Merci encore.

Discussions similaires

  1. Batterie plomb, de courant constant à tension constant.
    Par invited8d266f9 dans le forum Électronique
    Réponses: 2
    Dernier message: 30/12/2011, 23h56
  2. partial constant mesh/ fully constant mesh
    Par ahmedd83 dans le forum Physique
    Réponses: 4
    Dernier message: 18/05/2011, 08h22
  3. Réponses: 6
    Dernier message: 28/09/2010, 15h58
  4. Réponses: 4
    Dernier message: 28/05/2010, 19h27
Découvrez nos comparatifs produits sur l'informatique et les technologies.