Reset logiciel sur un pic - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 46 sur 46

Reset logiciel sur un pic



  1. #31
    invitee6a3904a

    Re : Reset logiciel sur un pic


    ------

    Tu as enlevé le for qui faisait un débordement ?
    Sinon tu devrais essayer en enlevant tous les printf().
    Je viens de tester ça mais sans grand changement. Mis à part que le bug vient plus tardivement.

    En ce qui concerne, ton explication sur les tableaux je n'ai pas tout saisi. Je pense que c'est ce que j'ai fait.

    Voici mon programme : (le for et les printf sont en commentaires)

    Code:
    void main (void)
    {
    	int i;
    	char num;
    	char inputstr[3];			// Création d'une chaîne de caractères de 10 caractères
    	Init();						// Initialisation des ports
    	Init_leds();				// Inintialisation des leds
    	
    	//printf( "\nLancement process mesures\n" );
    
    	num = 0;
    	i=0;
    	inputstr[0]= '0';
    	inputstr[1]= '0';
    	inputstr[2]= '0';
    
    	while(1)
    	{		
    		//for(i=0;i<3;i++)
    		//{
    			getsUSART( inputstr + num, 1 );			// Lit un seul caractère venant de l'UART
    			num += 1;
    			//printf("%s", inputstr);				// Pour le débuggage, permet de lire les valeurs sur inputstr
    
    			//**************************************************************//
    			//			Tests avec lecture caractère après caractère		//
    			//**************************************************************//
    			if (num == 3 && inputstr[0] == 'O' && inputstr[1] == 'T' && inputstr[2] == 'R')
    			{
       			//	printf( "\nouverture des relais\n" );       //	Renvoi "ouverture des relais"
    				leds=0b11110111;		//Allumer la led rouge RA3	& Eteindre la led verte RA1	
    				relais = 0b00000000;			// Relais ouverts
    				num = 0;
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';			
    			}
    			else if (num == 2 && inputstr[0] == 'A' && inputstr[1] == 'M')
    			{
       			//	printf( "\nfermeture relais mesure\n" );       //	Renvoi "fermeture relais mesure"
    				leds=0b11111101;		// Eteindre la led rouge RA3 & allumer la led verte RA1	
    				relais = 0b00000010;			// Relais ouverts
    				num = 0;
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}
    			else if (num == 3 && inputstr[0] == 'F' && inputstr[1] == 'D' && inputstr[2] == '1')
    			{
       			//	printf( "\nFermeture relais diel 1\n" );       //	Renvoi "Fermeture relais diel 1"
    				relais = 0b01101000;		//Fermeture relais Diel à 2000V
    				Delay10KTCYx(100);			//Tempo
    				relais = 0b01101100;		//Fermeture relais Diel à 2000V + Fermeture Alim diel
    				num = 0;
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}
    			else if (num == 3 && inputstr[0] == 'F' && inputstr[1] == 'D' && inputstr[2] == '2')
    			{
       			//	printf( "\nFermeture relais diel 2\n" );       //	Renvoi "Fermeture relais diel 2"				
    				relais = 0b00011000;		//Fermeture relais Diel à 4000V
    				Delay10KTCYx(100);			//Tempo
    				relais = 0b00011100;		//Fermeture relais Diel à 4000V + Fermeture Alim diel
    				num = 0;
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}
    
    
    			else if (num == 3 && inputstr[0] == '1' && inputstr[1] == '1' && inputstr[2] == '5')
    			{
       			//	printf( "\nChoix du 115V\n" );       //	Renvoi "Choix du 115V"
    				alim = 0xFF;		//Fermeture relais Choix 115V sur RD0
    				num = 0;
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}
    			else if (num == 3 && inputstr[0] == '2' && inputstr[1] == '3' && inputstr[2] == '0')
    			{
       			//	printf( "\nChoix du 230V\n" );       //	Renvoi "Choix du 115V"
    				alim = 0x00;		//Fermeture relais Choix 115V sur RD0
    				num = 0;
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}
    	
    			//******************************************************************//
    			//			Vérifie si le 1er caractère est correcte				//
    			//				(Valeurs attendues : "O", "A", "F", "1", "2")		//
    			//******************************************************************//
    			else if (num == 1 && inputstr[0] != 'O' && inputstr[0] != 'A' && inputstr[0] != 'F' && inputstr[0] != '1' && inputstr[0] != '2')
    			{
    			//	printf("\ninstruction non reconnue\n");
    				num = 0; // au cas où il y a un problème
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}	
    	
    			//******************************************************************//
    			//			Vérifie si le 2nd caractère est correcte				//
    			//				(Valeurs attendues : "OT", "AM", "FD", "11", "23")	//
    			//******************************************************************//
    			else if (num == 2 && inputstr[0] == 'O' && inputstr[1] != 'T')
    			{
    			//	printf("\ninstruction non reconnue\n");
    				num = 0; // au cas où il y a un problème
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}
    			else if (num == 2 && inputstr[0] == 'A' && inputstr[1] != 'M')
    			{
    			//	printf("\ninstruction non reconnue\n");
    				num = 0; // au cas où il y a un problème
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}
    			else if (num == 2 && inputstr[0] == 'F' && inputstr[1] != 'D')
    			{
    			//	printf("\ninstruction non reconnue\n");
    				num = 0; // au cas où il y a un problème
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}
    			else if (num == 2 && inputstr[0] == '1' && inputstr[1] != '1')
    			{
    			//	printf("\ninstruction non reconnue\n");
    				num = 0; // au cas où il y a un problème
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}
    			else if (num == 2 && inputstr[0] == '2' && inputstr[1] != '3')
    			{
    			//	printf("\ninstruction non reconnue\n");
    				num = 0; // au cas où il y a un problème
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}
    	
    			//**********************************************************//
    			//			Vérifie si le 3ème caractère est correcte		//
    			//															//
    			//**********************************************************//
    			else if (num == 3) 
    			{
    			//	printf("\ninstruction non reconnue\n");
    				num = 0; // au cas où il y a un problème
    				inputstr[0]= '0';	// Initialisation du tableau de réception des données
    				inputstr[1]= '0';
    				inputstr[2]= '0';
    			}
    		//}
    	}
    	CloseUSART();
    }
    Je vais faire un imprime écran du terminal pour mieux montrer ce qui se passe.

    -----

  2. #32
    invitee6a3904a

    Re : Reset logiciel sur un pic



    Voici ce qui se passe sur le terminal. Identique à Excel, sauf que sur Excel le PIC ne réponds plus à moins de faire un reset manuel.

  3. #33
    sdec25

    Re : Reset logiciel sur un pic

    Citation Envoyé par ElLopez Voir le message
    Identique à Excel, sauf que sur Excel le PIC ne réponds plus à moins de faire un reset manuel.
    Dans ce cas le problème vient d'Excel.

  4. #34
    invitee6a3904a

    Re : Reset logiciel sur un pic

    Dans ce cas le problème vient d'Excel.
    Oui mais pourquoi cela arrive aussi avec le terminal ?

  5. #35
    sdec25

    Re : Reset logiciel sur un pic

    Citation Envoyé par ElLopez Voir le message
    Oui mais pourquoi cela arrive aussi avec le terminal ?
    Tu parlais du reset ou du blocage ?
    Si au lieu d'écrire des phrases tu écrivais un seul caractère après chaque commande, au bout de combien de temps le PIC se redémarrerait ?

    Et sinon ça ne sert à rien de remplir le tableau par des '0'. C'est le nombre num qui définit la longueur de la chaîne. Et au pire si on utilise les fonctions de string.h il faut mettre '\0' à la fin.

  6. #36
    invitee6a3904a

    Re : Reset logiciel sur un pic

    Si au lieu d'écrire des phrases tu écrivais un seul caractère après chaque commande, au bout de combien de temps le PIC se redémarrerait ?
    Peut être faire ça et utiliser des switch case

  7. #37
    sdec25

    Re : Reset logiciel sur un pic

    Je parlais des réponses (envoyées par le PIC) pas des instructions.
    Et fais un test au simulateur c'est le moyen le plus rapide de trouver l'erreur.

  8. #38
    invitee6a3904a

    Re : Reset logiciel sur un pic

    Ca vient de faire la même chose. Par contre, l'erreur est plus longue à venir.

    Mais là j'utilise quasiment plus les tableaux ? Je détecte "A", "B", etc. pour être plus simple.

    Et cette fois, le PIC à reseter mais également le port USB...

    Je parlais des réponses (envoyées par le PIC) pas des instructions.
    Ha pardon...

  9. #39
    invitee6a3904a

    Re : Reset logiciel sur un pic

    Ca me fait la même chose... Même en mettant \o à la fin...

    Ca me désespère...

  10. #40
    invitee6a3904a

    Re : Reset logiciel sur un pic

    A priori cela n'a même rien à voir avec le soft.

    En effet, j'ai déconnecté mon transformateur qui choisi le 115 V ou le 230 V et cela fonctionne parfaitement.

    Je dois avoir un problème de CEM.

    En tout cas merci, de m'avoir donné un coup de main.

  11. #41
    sdec25

    Re : Reset logiciel sur un pic

    ok donc tant mieux si ça marche, reste plus qu'à trouver le problème matériel.

  12. #42
    invitee6a3904a

    Re : Reset logiciel sur un pic

    J'ai vu sur un autre topic du forum, qu'on peut avoir des soucis si on initialise pas tout les ports, faut-il que je les mettent tous à 1 ou 0 ?

  13. #43
    sdec25

    Re : Reset logiciel sur un pic

    J'ai aussi lu quelque part qu'il vaut mieux mettre les ports inutilisés en sortie à 0, mais je ne le fais jamais et je n'ai pas de problème.
    Cherche plutôt du côté de l'alimentation si ça vient de ton transformateur.

  14. #44
    invitee6a3904a

    Re : Reset logiciel sur un pic

    Bonsoir,

    J'aimerais tester une solution mais je ne sais pas comment m'y prendre.
    Je souhaite envoyer un ordre de reset au PIC avant d'envoyer un quelconque ordre. Ainsi, j'espère que le PIC ne se réinitialisera pas pendant la procédure.

    Merci du coup de main

  15. #45
    sdec25

    Re : Reset logiciel sur un pic

    Il y a l'instruction RESET pour ça.
    Si elle ne marche pas vérifie dans le code désassemblé s'il y a bien l'instruction RESET en assembleur.

  16. #46
    invitee6a3904a

    Re : Reset logiciel sur un pic

    Bonjour,

    Comme je le disais, j'ai un problème avec le port USB qui se déconnecte de temps en temps. Vu que ma supposition était un problème de CEM, j'ai rajouté un tore sur le câble USB.

    Pour l'instant, ça à l'air de mieux fonctionner. (Je touche du bois...)

    Sinon pour le port série, je voulais rajouter également un tore afin de voir si c'était bien les problèmes de CEM qui faisait un reset sur le PIC.

    A ma grande stupeur, lorsque j'ai déconnecté la prise de la RS232 proche du PC en laissant la carte alimentée, la carte se réinitialise en boucle. Est-ce normale ?

    Je vais mettre tout de même mon tore sur le câble je vous donne la suite après.

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Problème reset Pic 16F57
    Par invite2b3366a1 dans le forum Électronique
    Réponses: 7
    Dernier message: 03/08/2009, 19h53
  2. Reset multiples PIC simultanément
    Par invite60243f9b dans le forum Électronique
    Réponses: 3
    Dernier message: 15/12/2008, 18h32
  3. reset PIC
    Par invite1208e497 dans le forum Électronique
    Réponses: 7
    Dernier message: 13/11/2008, 00h25
  4. reset sur pic ou atmel
    Par inviteac54bf81 dans le forum Électronique
    Réponses: 1
    Dernier message: 18/11/2007, 23h05
  5. Reset inattendu d'un PIC
    Par Toufinet dans le forum Électronique
    Réponses: 4
    Dernier message: 17/04/2006, 01h43
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...