Programmation en C (logique??)
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Programmation en C (logique??)



  1. #1
    invite0c083bae

    Programmation en C (logique??)


    ------

    Bonjour à tous,

    Difficile de trouver un intitulé de post parlant. Bref je m'explique, pour certain ca paraitra surement très logique.

    J'ai une fréquence de consigne (en sortie de mon PIC), si j'arrive à +/- 2% de cette consigne en entrée (fréquence issue de sondes HALL) j'incrémente ma fréquence de 5Hz. Pour faire ceci je fais un calcul de min de max et pour augmenter ma fréquence je passe par un tableau. C'est un tableau de 17 valeurs et j'incrémente une variable pour changer de valeur. Mon problème est le suivant : lorsque je rentre dans ma fourchette de fréquence au lieu de s'incrémenter de 1, ma valeur s'incrémente de 17!

    En gros en consigne j'ai 25Hz, quand mes sondes arrivent à 25Hz je passe pas à 30 (soit une seule incrémentation) mais je passe à 80 85Hz ... avez vous un "test" qui vous vient à l'esprit pour bloquer cette incrémentation d'une seule unité? Parce que j'avoue bloquer. Voici mon code :

    Code:
    if ((i16PeriodeSondeTmr1 > i16FreqDiffMin) && (i16PeriodeSondeTmr1 <= i16FreqDiffMax)) {	// Si la fréquence des sondes est comprise entre + ou - 2% de la fréq des commandes
    	if(i8TabLancement < MAXI_TAB_LANCEMENT) {							// Et si la variable d'incrémentation < 17
    		i16Freq =i16tValeurLancement[i8TabLancement++];							// On augmente la fréquence des commandes
    Voila si quelqu'un a une petite astuce pour faire un test afin que cette variable puisse s'incrémenter qu'une fois je suis preneur!

    Par ava,ce, merci.

    -----

  2. #2
    invite0c083bae

    Re : Programmation en C (logique??)

    Edit : ça fonctionne avec un delay ... mais bon c'est vraiment pas le but, mais ça prouve qu'il manque juste un petit détail.

  3. #3
    Calou80

    Re : Programmation en C (logique??)

    Où est situé cette incrémentation? dans le "main" ou dans une interruption?
    Si c'est dans le main, cela ne m'étonne pas trop, il faut attendre, au moins, ta période de capture pour réaliser ton test et ta mise à jour de ta période de sortie

  4. #4
    invite936c567e

    Re : Programmation en C (logique??)

    Bonjour

    Si ton problème est réglé à l'aide d'un délai, c'est très probablement parce que ton incrémentation survient plusieurs fois du fait que tu n'attends pas que la mesure de la fréquence change avant de refaire le test.

    Si c'est bien la raison, il faut ajouter dans ton code le moyen de ne pas faire le test tant qu'une nouvelle fréquence n'a pas été imposée puis réévaluée.

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

    Re : Programmation en C (logique??)

    Citation Envoyé par Calou80 Voir le message
    Où est situé cette incrémentation? dans le "main" ou dans une interruption?
    Si c'est dans le main, cela ne m'étonne pas trop, il faut attendre, au moins, ta période de capture pour réaliser ton test et ta mise à jour de ta période de sortie
    Oui on peut dire qu'elle est dans le main puisque c'est une fonction que j'appelle dans ce dernier. Merci en tout cas

  7. #6
    invite0c083bae

    Re : Programmation en C (logique??)

    Citation Envoyé par PA5CAL Voir le message
    Bonjour

    Si ton problème est réglé à l'aide d'un délai, c'est très probablement parce que ton incrémentation survient plusieurs fois du fait que tu n'attends pas que la mesure de la fréquence change avant de refaire le test.

    Si c'est bien la raison, il faut ajouter dans ton code le moyen de ne pas faire le test tant qu'une nouvelle fréquence n'a pas été imposée puis réévaluée.
    Oui c'est bien ce que je me disais mais c'est la logique de programmation que j'arrive pas à situer ... Merci pour ta réponse aussi

  8. #7
    Calou80

    Re : Programmation en C (logique??)

    c'est bien ce que je pensais. Je ne connais pas les PICs mais il faudrait voir ta logique pour mesure ta période d'entrée. Il y a certainement une interruption liée à la fin de la mesure de ta période ou au font montant ou descendant de ton entrée et tu pourras rajouter ton test dans cette interrupt

  9. #8
    invite936c567e

    Re : Programmation en C (logique??)

    Attention. Il ne faut pas seulement attendre que la fréquence soit réévaluée. Il faut également attendre qu'elle ait préalablement eu le temps de changer et de stabiliser.

Discussions similaires

  1. logique
    Par invite3d3c8be1 dans le forum Mathématiques du supérieur
    Réponses: 17
    Dernier message: 16/10/2009, 15h34
  2. programmation d'une sonnerie de lycée avec un module logique "Eazy"
    Par invitec2fad112 dans le forum Électronique
    Réponses: 0
    Dernier message: 01/08/2008, 20h56
  3. logique
    Par invite01b26842 dans le forum Mathématiques du collège et du lycée
    Réponses: 7
    Dernier message: 27/02/2008, 15h04
  4. Logique Système - Logique Causale - Implications Cosmologiques
    Par invite1ab59cc3 dans le forum Epistémologie et Logique (archives)
    Réponses: 6
    Dernier message: 06/11/2007, 12h57
  5. logique ?
    Par invite945cb3d3 dans le forum Science ludique : la science en s'amusant
    Réponses: 6
    Dernier message: 20/07/2005, 21h03
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...