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
    invitef5e9f557

    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
    invite89303051

    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

  3. #3
    invitef5e9f557

    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
    invite89303051

    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

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

    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: 31/12/2011, 00h56
  2. partial constant mesh/ fully constant mesh
    Par inviteb75f7f92 dans le forum Physique
    Réponses: 4
    Dernier message: 18/05/2011, 09h22
  3. Réponses: 6
    Dernier message: 28/09/2010, 16h58
  4. Réponses: 4
    Dernier message: 28/05/2010, 20h27
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...