+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 29
    Points : 10
    Points
    10

    Par défaut [Débutant] Remplacer boucle While

    Bonjour à tous,

    Je réalise une carte électronique gérant des composants Dallas : les iButtons.

    Je programme mon µControleur avec MPLAB, compilateur C18.

    En gros mon programme attend qu'une personne mette son iButton sur le connecteur. Le programme va lire le code d'identification du iButton et ci celui la est correct une LED s'allume.

    Rien de bien fou fou...

    Mais j'aimerai savoir si le choix de ma boucle while(1) n'allait poser des problèmes (boucle infinie) :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    while(1)
    	{
    		
    		unsigned char presence = 0x00;
    		int i = 0;
    		presence = ow_reset_g();
    		
    		if(!presence)
    		{	
    			
    			struct Id_Key key = {0};	
    			unsigned char CRC = 0x00;
    			ecrire_octet(0x33);
    			Delay10TCYx(240);
    			
    			for( i=0 ; i<8 ; i++)
    			{
    			 	key.id[i] = lire_octet();
    			}
    			
    			if((key.id[0] == 0x01) && (key.id[7] != 0x00))
    			{
    				for( i=0 ; i<8 ; i++)
    				{
    					CRC = crc(CRC,key.id[i]);
    				}
    				
    				if(!CRC)
    				{
    					beep();
    					PORTAbits.RA1 = 0;
    					PORTAbits.RA2 = 1;
    				}
    		
    			}	
    		}
    		
    		if(presence)
    		{
    			
    			PORTAbits.RA2 = 0;
    			PORTAbits.RA1 = 1;	
    		
    		} 
    	
    	Delay10KTCYx(240);
    	
    	}
    En effet n'y a t'il pas un autre moyen de faire le test de "presence" par la boucle while.

    Merci.

    Bonne journée

  2. #2
    Membre expérimenté Avatar de Flob91
    Profil pro
    Ingénieur
    Inscrit en
    mai 2005
    Messages
    817
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2005
    Messages : 817
    Points : 538
    Points
    538

    Par défaut

    Le problème des boucles en générale dans les microcontroleurs, c'est qu'il bloque celui ci.
    Utilises plutôt les interruptions. tu déroules un programme.
    Et lorsque tu appuies sur un bouton, le programme s'arrete et execute un code que tu auras fais.

  3. #3
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : mai 2009
    Messages : 7
    Points : 10
    Points
    10

    Par défaut Remplacer une boucle While

    Bonjour,
    Si l'appareil n'a rien à faire tant qu'on ne présente pas de i-bouton, je le mettrais en sommeil (par l'instruction assembleur SLEEP), il ne consommerait plus rien, et le I-bouton appuyerait mécaniquement sur un microcontact relié à la patte 1 du PIC, qui le réveillerait et il ferait son travail de lecture.
    Plus simple que ça est difficile puisqu'il n'y a pas de routine à écrire.
    C'est bien plus simple qu'une interruption, et si l'appareil marche sur pile, c'est parfait, j'ai fait un code de portail comme ça, alimenté par une pile plate de 4,5V. Quand il a fini son action, il dort! Il ne craint pas les pannes EDF.
    pont-

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •