Programme en C : Problème synthaxe?
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 55

Programme en C : Problème synthaxe?



  1. #1
    jo-electrons

    Programme en C : Problème synthaxe?


    ------

    Bonjour,

    Je suis actuellement sur un projet en usine , contrôler des freins à disque et je me demandais si quelqu'un pourrais jeter un oeil s'il vous plait!
    J'aimerais aussi savoir si le microcontroleur fait la différence des niveaux de tension directement car à certains endroit je fais apelle à cette fonction.

    Voici mon début de programme:

    while(freinV<1 && imageI<1) //alimentation correcte?
    {ledR==1;}
    ledO==1;


    //--------------------------------------------------------//

    convertiV1==convertiV;

    delay_ms(19);


    convertiV2==convertiV;
    convertT1==convertV1-convertV2;
    while(convertT1<0) //Pente montante?
    {ledR==1;}
    ledO==1;


    delay_ms(18);


    convertiV3==convertiV;
    convertT2==convertV2-convertV3;
    while(convertT2<0) //
    {ledR==1;}
    ledO==1;

    delay_ms(19);


    convertiV4==convertiV;
    convertT3==convertV3-convertV4;
    while(convertT3<0) //
    {ledR==1;}
    ledO==1;


    delay_ms(18);


    convertiV5==convertiV;
    convertT4==convertV4-convertV5;
    while(convertT4<0) //
    {ledR==1;}
    ledO==1;

    delay_ms(19);


    convertiV6==convertiV;
    convertT5==convertV5-convertV6;
    while(convertT5<0)
    {ledR==1;}
    ledO==1;

    -----

  2. #2
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    <code>:
    /****************************** ***********************
    This program was produced by the
    CodeWizardAVR V1.25.7a Evaluation
    Automatic Program Generator
    © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 05/06/2009
    Author : Freeware, for evaluation and non-commercial use only
    Company :
    Comments:


    Chip type : ATmega8515
    Program type : Application
    Clock frequency : 8,000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 128
    ****************************** ***********************/

    #include <mega8515.h>
    #include <delay.h>
    #include <math.h>


    #define freinV ~PINA.1
    #define imageI ~PINA.2
    #define convertiV ~PINA.3
    #define economiV ~PINA.4
    #define ledO ~PORTB.1
    #define ledR ~PORTB.2
    #define ledV ~PORTB.3


    // Declare your global variables here
    unsigned char convertiV1,convertiV2,converti V3,convertiV4,convertiV5,conve rtiV6,convertiV7,convertiV8,co nvertiV9;
    unsigned char convertiV10,convertiV11,conver tiV12,convertT1,convertT2,conv ertT3,convertT4,convertT5,conv ertT6;
    unsigned char convertT7,convertT8,convertT9, convertT10,convertT11,convertV 1,convertV2,convertV3,convertV 4,convertV5;
    unsigned char convertV6,convertV7,convertV8, convertV9,convertV10,convertV1 1,convertV12;

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=In
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=T
    PORTA=0x00;
    DDRA=0xFE;

    // Port B initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTB=0x00;
    DDRB=0xFF;

    // Port C initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTC=0x00;
    DDRC=0xFF;

    // Port D initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTD=0x00;
    DDRD=0xFF;

    // Port E initialization
    // Func2=Out Func1=Out Func0=Out
    // State2=0 State1=0 State0=0
    PORTE=0x00;
    DDRE=0x07;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    EMCUCR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;





    while(freinV<1 && imageI<1) //alimentation correcte?
    {ledR==1;}
    ledO==1;


    //--------------------------------------------------------//

    convertiV1==convertiV;

    delay_ms(19);


    convertiV2==convertiV;
    convertT1==convertV1-convertV2;
    while(convertT1<0) //Pente montante?
    {ledR==1;}
    ledO==1;


    delay_ms(18);


    convertiV3==convertiV;
    convertT2==convertV2-convertV3;
    while(convertT2<0) //
    {ledR==1;}
    ledO==1;

    delay_ms(19);


    convertiV4==convertiV;
    convertT3==convertV3-convertV4;
    while(convertT3<0) //
    {ledR==1;}
    ledO==1;


    delay_ms(18);


    convertiV5==convertiV;
    convertT4==convertV4-convertV5;
    while(convertT4<0) //
    {ledR==1;}
    ledO==1;

    delay_ms(19);


    convertiV6==convertiV;
    convertT5==convertV5-convertV6;
    while(convertT5<0)
    {ledR==1;}
    ledO==1;

    //--------------------------------------------------------------//


    convertiV7==convertiV;

    delay_ms(6);


    convertiV8==convertiV;
    convertT6==convertV7-convertV8;
    while(convertT6>0) //pente descendante?
    {ledR==1;}
    ledO==1;

    delay_ms(5);


    convertiV9==convertiV;
    convertT7==convertV8-convertV9;
    while(convertT7>0)
    {ledR==1;}
    ledO==1;

    delay_ms(6);


    convertiV10==convertiV;
    convertT8==convertV9-convertV10;
    while(convertT8>0)
    {ledR==1;}
    ledO==1;

    delay_ms(5);


    convertiV11==convertiV;
    convertT9==convertV10-convertV11;
    while(convertT9>0)
    {ledR==1;}
    ledO==1;

    delay_ms(6);


    convertiV12==convertiV;
    convertT10==convertV11-convertV12;
    while(convertT10>0)
    {ledR==1;}
    ledO==1;


    //--------------------------------------------------------//

    convertiV1==convertiV;

    delay_ms(19);


    convertiV2==convertiV;
    convertT1==convertV1-convertV2;
    while(convertT1<0) //Pente montante?
    {ledR==1;}
    ledO==1;


    delay_ms(18);


    convertiV3==convertiV;
    convertT2==convertV2-convertV3;
    while(convertT2<0) //
    {ledR==1;}
    ledO==1;

    delay_ms(19);


    convertiV4==convertiV;
    convertT3==convertV3-convertV4;
    while(convertT3<0) //
    {ledR==1;}
    ledO==1;


    delay_ms(18);


    convertiV5==convertiV;
    convertT4==convertV4-convertV5;
    while(convertT4<0) //
    {ledR==1;}
    ledO==1;

    delay_ms(19);


    convertiV6==convertiV;
    convertT5==convertV5-convertV6;
    while(convertT5<0)
    {ledR==1;}
    ledO==1;

    //-------------------------------------------------------------//



    delay_ms(65);

    while(9<economiV<12) //tension d'économie normalement à 10V correcte?
    {ledR==1;}
    ledO==1;

    delay_ms(20);

    while(9<economiV<12)
    {ledR==1;}
    ledO==1;

    delay_ms(20);

    while(9<economiV<12)
    {ledR==1;}
    ledO==1;

    delay_ms(20);

    while(9<economiV<12)
    {ledR==1;}
    ledO==1;

    delay_ms(20);

    while(9<economiV<12)
    {ledR==1;}
    ledV==1; //led verte =>frein fonctionne correctement , si led orange en vérification , si led rouge =>mauvais fonctionnement
    }


    CECI est le programme entier

  3. #3
    invitebac23ddd

    Re : Programme en C : Problème synthaxe?

    Bonjour,
    le signe "==" n'est utilisé que pour les comparaisons si je me rapel bien.
    A mon avis, tes "convertT" sont toujours égal a 0, est-ce normal?
    Enfin, sauf si convetiV fait référence a deux tensions différente, et je suppose que c'est le cas. Mais dans ce cas, n'ayant pas de parametre, il calcul tjs la meme tension, a des moment différents, bien que tres proches pour les 1ers.

    Derniere chose, pourquoi allumer plusieurs fois la led orange? Utile seulement si tu sort de ton while, cad, de refaire une mesure de ta tension 1 ou X suivant celle que tu change DANS ton while car la tu entre dans une boucle sans fin a chaque fois.

    voila pour le global.

    while(freinV<1 && imageI<1) //alimentation correcte?
    Ne comprenant pas les parametres, je ne peux pas t'aider

    while(convertT1<0) //Pente montante?
    En francais:
    Tant que la tension de base (1) est inférieur a la tension prise 19 millisecondes apres (2), on allume la led rouge.
    Pour ce qui est de la pente montante, tu veux quels parametre en abscisse et ordonné?

    Partie electronique maintenant:

    En fait soit tu as des entrées analogiques directement sur ton microcontroleur, soit tu passe par un CAN.
    Vérifie de toute facon la tension d'entré max de ton microC, ou de ton convertisseur.
    Si t tension est trop grande/petite, un AOP ac une resistance et un potentio te reglera le probleme.

    En voila deja pas mal, bonne soirée

  4. #4
    jo-electrons

    Post Re : Programme en C : Problème synthaxe?

    Bonjour,

    Déja merci d'avoir répondu, le signe == je pense que si il est utilisé car dans les Tp que j'ai fait à l'école on les as utilisé et en plus avec while.
    Les convertT ne sont jamais à 0 oui car sinon sa n'aurais aucun intéret les valeurs qui sont soustraites sont prise à des intervalles différents dans le temps d'ou l'instruction delay
    Pourquoi il calculerais toujour la meme tension? je prend des tension différentes a chaque instant T.

    Le but de mon while c'est de faire une boucle tant que tel paramètre est à 1 ou 0 , j'allume la led rouge et quand ce n'est pas le cas j'allume la led orange.
    J'allume la led orange a plusieur reprise car il pourrais y avoir un défaut, mais c'est vrai que si il y a un défaut, je devré revenir au point de départ et signaler que le frein n'est pas correcte.

    Pour l'alimentation correcte , j'ai donné des noms au hasard mais c'est le courant et la tension de la bobine. D'ou le I et le V après les deux expressions.

    pourquoi tu me demande abscisse et ordonné? , le programme suffi non et oui tu as trouvé le principe^^ pas très dur à comprendre enfin quand rien n'est expliqué pas toujour évident!!

    Pour ce qui est de la partie électronique , si le micro ne supporte pas et que je réduit en gros la tension il faudrait que je recalcule tout aussi sa serais un peu dommage, la plus grande tension que j'ai dans ce projet est 50 volt +ou-.

    Merci , à bientôt

  5. A voir en vidéo sur Futura
  6. #5
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    si je remplace {ledR==1;} par {ledR=1;}
    Le logiciel me dit :
    error: must be lvalue =>après allé savoir ce que sa veut dire

  7. #6
    invitebac23ddd

    Re : Programme en C : Problème synthaxe?

    Pour la question absice et ordonné, je croyais comprendre que tu parlais d'une pente, soit un graph, mais oui le programme suffit, c'estit juste pour une visualisation personnelle.

    Maintenant, je ne peux que te conseiller de revoir tes whiles, car si tu y rentre, tu n'en sort jamais, si tu as besoin de retourner au début du prog, fait une interuption avec un revoye au début; quoi que tu choississe ne t'enferme pas dedant.

    pour la partie electronique, malheureusement les entrées analogique de ces cuircuits, si elles existent sont de 0 à 5V.

    Donc soit tu divise ta tension par 10 mais tu perd la partie négative, soit tu met un CAN de X bits suivant tes besoin de precision et supportant cette tension (j'en doute un peu mais je ne m'y connais pas trop).

    Si tu divise par 10 la tension, tu n'a as grand chose a modifier dans ton prog, tu prend t fonction convertT, et tu le multiplie par 10, ou mieu tu la modifie directement en lui ajoutant un facteur 10 interne.

  8. #7
    invitebac23ddd

    Re : Programme en C : Problème synthaxe?

    garde tes ==

  9. #8
    Jack
    Modérateur

    Re : Programme en C : Problème synthaxe?

    Citation Envoyé par tibobo77 Voir le message
    garde tes ==
    Non, l'affectation, c'est bien = et la comparaison ==

    si je remplace {ledR==1;} par {ledR=1;}
    Le logiciel me dit :
    error: must be lvalue =>après allé savoir ce que sa veut dire
    Dans une affectation, la lvalue est la valeur à gauche du = (l = left) Il faudrait voir comment a été défini ledR. Il faut que tu cherches une ligne #define ledR ... dans ton source

    while(convertT1<0) //Pente montante?
    {ledR==1;}
    ledO==1;
    les accolades ne servent à rien comme ça. Je suppose que tu voulais que ledO==1; soit compris dans la boucle while.
    Il faut alors écrire:
    Code:
    while(convertT1<0)                      //Pente montante?
    {
          ledR==1;
          ledO==1;
    }
    A+

  10. #9
    freepicbasic

    Re : Programme en C : Problème synthaxe?

    == est une comparaison et renvoie false ou true.
    led1==1 ne fera rien du tout !
    Led1=1 met 1 dans led1

    on aurait pu écrire a =( led1 == 1) ;
    a contiendrait le résultat de la comparaison , encore faudrait il que led1 soit en entrée, sinon on compare avec l'état dans lequel on l'a déjà mis...
    A+, pat

  11. #10
    invitebac23ddd

    Re : Programme en C : Problème synthaxe?

    pour l'histoire des "==" moi je donne ma lange au chat;

    Par contre je ne suis pas d'accord avec vous Jack sur l'histoire des leds.
    Ca ne sert a rien de mettre la orange aussi dans la boucle, d'une part, la leds rouge et la orange en meme tps allumer ne signifirai plus rien sur un tableau de commande, d'autre part, ca ne resoud en rien la boucle infinie.

    Si j'ai bien compris: si il y a un mauvais rapport de tension: on rentre dans le whille= on allumes la leds rouge (faudrais penser aussi a éteindre les autres.)
    et on y attend jusqu'a ce qu'un intervenant réparre le pb.. mais je pense qu'il serais bon, je me repete de faire une nouvelle mesure d'un parrametre dedans, histoire de pouvoir en sortir.

  12. #11
    Jack
    Modérateur

    Re : Programme en C : Problème synthaxe?

    De plus, à moins de connaitre par coeur la priorité des opérateurs, éviter à tout prix:
    Code:
    while(freinV<1 && imageI<1)
    et préférer

    Code:
    while((freinV<1) && (imageI<1))
    parce que si syntaxiquement (sans 'h' syntaxe ) l'expression est correcte, tu risques de passer du temps à chercher pourquoi l'expression ne produit pas ce que tu attends.

    A+

  13. #12
    Jack
    Modérateur

    Re : Programme en C : Problème synthaxe?

    Par contre je ne suis pas d'accord avec vous Jack sur l'histoire des leds.
    Ca ne sert a rien de mettre la orange aussi dans la boucle, d'une part, la leds rouge et la orange en meme tps allumer ne signifirai plus rien sur un tableau de commande, d'autre part, ca ne resoud en rien la boucle infinie.
    Comme je l'ai précisé, c'est une supposition car je ne connais pas l'algorithme de jo-electrons.

    A+

  14. #13
    jo-electrons

    Post Re : Programme en C : Problème synthaxe?

    Rebonjour,

    Pour répondre a tibobo77

    Oui sa va me gener enormement de diviser la tension par 10 car je ne verais plus cette pente descendant =>but de la vérification en elle même.

    J'ai déja prévu pour convertir le courant qui m'est donné en tension donc je pense pouvoir garder la pente descendante malgré tous. Je pourrais avec un ampli OP garder la forme de mon signal en convertissant 3A=>1V quelque chose comme sa.
    Je ne sais pas si la forme sera conservé!

    Pour les whiles, exemple de programme du lycée sur nos TP qui a très bien marché sans rester coincé:
    -while(PIND.6==1) //attendre l'appui sur le bouton poussoir
    {
    posvisee=consigne; //acquérir la consigne de position
    }
    while(PIND.6=0) //attendre que le bouton poussoir soit relaché
    {
    }
    delay_ms(20); //anti-rebond

    Voila et pourtant on ne restera pas coincé dans le programme on vérifi bien que le bouton soit relaché!
    Si j'ai besoin d'une interruption , comment la faire parce que sa fait un moment que je n'est pas pratiqué de C...^^(d'ou mon passage sur le forum).

    Pour répondre a jack maintenant:

    En fete, ledR... à été défini en tant que sortie directe et non comme variable donc je vais essailler de faire sa avec une variable mais je ne suis pas sur que sa marche. Déja ici sans refaire quoi que ce soit il me remet la meme erreur!

    Pour en revenir au while, ledO=1 doit rester en dehors de l'accolade pour s'éxecuter quand convertT1<0 n'est plus <0 mais >0 ou ... .
    Je veux l'éxecuter après! Pourquoi les accolades ne servent à rien misent comme sa , j'ai quand meme mis ledR=1 dedans.

    Pour répondre a tibobo77:

    C'est vrai qu'il faudrait un peu plus d'instruction pour controler cette histoire de led je m'y colle toute suite d'ailleur.
    Pour les whiles, je suis d'accord y rentrer c'est pas un problème et pour moi en sortir non plus regarde en haut mon exemple testé il marche très bien pour moi et vérifier en classe il me semble! Maintenant si tu as un ptit bout de programme a mettre vas-y

    Pour términer sur la réponse de jack, peut etre que les double parenthèses marchent mieux mais je trouve bizarre :

    while((freinV<1) && (imageI<1)) que je mette 1 ou 0, je resté bloqué dans la boucle au niveau du programme avr studio qui permet de vérifier le programme en C crée

    et si je met while((freinV<0) && (imageI<0)) , que je change ou non 1 ou 0 il ne distingue rien et passe a ledO directement sans passer par la boucle...!

    Voila

  15. #14
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    Donc Apparement, je n'ai pas le droit de mettre une valeur directement sur le PORT en sortie mais il faut d'abord passer par une variable=un nombre et varibale=PORT!

    J'ai quelques lignes a mettre en plus tient...

  16. #15
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    Petite question c'est port ou pin qui permet de sortir par les port du micro?car j'utilise port pour les sorties de led et il n'autorise pas que prise par ledRR=1 par exemple aille ledR=ledRR mais ledRR=ledR oui
    ce qui veux dire qu'il autorise seulement le fait que le port apporte l'infos dans la variable et non le contraire!

  17. #16
    invitebac23ddd

    Re : Programme en C : Problème synthaxe?

    Bon ton while tu en sortira pas, regarde:

    -while(PIND.6==1) //attendre l'appui sur le bouton poussoir
    {
    posvisee=consigne; //acquérir la consigne de position
    }
    while(PIND.6==0) //attendre que le bouton poussoir soit relaché
    {
    }
    delay_ms(20); //anti-rebond
    Ici tu fait la mesure dans la condition du while: PIND.6==0 est un test sur une de tes entrée

    convertiV3==convertiV;
    convertT2==convertV2-convertV3;
    while(convertT2<0) //
    {ledR==1;}
    ledO==1;

    delay_ms(19);
    Ici ta mesure est fait AVANT ton while avec "convertiV3==convertiV;"
    Dans la condition de ton while tu compare une variable ne pouvant pas changer (car pas de réaffectation): "convertT2" a ete défini par "convertT2==convertV2-convertV3;" qui est en dehors de la boucle.

    Pour ce qui est du reste, laisse moi regarder un peu dans mes cour que je m'y remette... La je programme en java pour windows, donc ca marche pas vraiment pareil.

    A+

  18. #17
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    Oui j'avoue que la dessus tu n'a pas tort , j'aurais aussi pensé a mettre un timer qui va actionner une fonction car je répète les meme instructions mais il faut que je trouve un temps bien préci pour répétition.

    Comment mettre en oeuvre un timer en C^^?

  19. #18
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    A mon sens je dois alléger les répétitions de groupe d'instruction mais aussi les variables qui sont vraiment de trop!

  20. #19
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    /****************************** ***********************
    This program was produced by the
    CodeWizardAVR V1.25.7a Evaluation
    Automatic Program Generator
    © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 05/06/2009
    Author : Freeware, for evaluation and non-commercial use only
    Company :
    Comments:


    Chip type : ATmega8515
    Program type : Application
    Clock frequency : 8,000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 128
    ****************************** ***********************/

    #include <mega8515.h>
    #include <delay.h>
    #include <math.h>


    #define freinV ~PINA.1
    #define imageI ~PINA.2
    #define convertiV ~PINA.3
    #define economiV ~PINA.4
    #define ledO ~PORTB.1
    #define ledR ~PORTB.2
    #define ledV ~PORTB.3
    #define warning ~PORTB.4

    // Declare your global variables here
    unsigned char convertiV1,convertiV2,converti V3,convertiV4,convertiV5,conve rtiV6,convertiV7,convertiV8,co nvertiV9;
    unsigned char convertiV10,convertiV11,conver tiV12,convertT1,convertT2,conv ertT3,convertT4,convertT5,conv ertT6;
    unsigned char convertT7,convertT8,convertT9, convertT10,convertV1,convertV2 ,convertV3,convertV4,convertV5 ;
    unsigned char convertV6,convertV7,convertV8, convertV9,convertV10,convertV1 1,convertV12,ledRR,ledOO,ledVV ;

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=In
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=T
    PORTA=0x00;
    DDRA=0xFE;

    // Port B initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTB=0x00;
    DDRB=0xFF;

    // Port C initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTC=0x00;
    DDRC=0xFF;

    // Port D initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTD=0x00;
    DDRD=0xFF;

    // Port E initialization
    // Func2=Out Func1=Out Func0=Out
    // State2=0 State1=0 State0=0
    PORTE=0x00;
    DDRE=0x07;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    EMCUCR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;

    50;//condition initiale après retour au programme:
    ledRR=0;
    ledOO=0;
    ledVV=0;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    PORTB.3=ledVV;

    //Début du programme:

    while((freinV<=0 && imageI<=0)) //alimentation correcte?
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    return 50;
    //--------------------------------------------------------//

    convertiV1=convertiV;

    delay_ms(19);


    convertiV2=convertiV;
    convertT1=convertV1-convertV2;
    while(convertT1<=0) //Pente montante?
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}


    delay_ms(18);

    convertiV3=convertiV;
    convertT2=convertV2-convertV3;
    while(convertT2<=0) //
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV4=convertiV;
    convertT3=convertV3-convertV4;
    while(convertT3<=0) //
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(18);

    convertiV5=convertiV;
    convertT5=convertV4-convertV5;
    while(convertT4<=0) //
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV6=convertiV;
    convertT5=convertV5-convertV6;
    while(convertT5<=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    //--------------------------------------------------------------//


    convertiV7=convertiV;

    delay_ms(6);

    convertiV8=convertiV;
    convertT6=convertV7-convertV8;
    while(convertT6>=0) //pente descendante?
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(5);

    convertiV9=convertiV;
    convertT7=convertV8-convertV9;
    while(convertT7>=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(6);

    convertiV10=convertiV;
    convertT8=convertV9-convertV10;
    while(convertT8>=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(5);

    convertiV11=convertiV;
    convertT9=convertV10-convertV11;
    while(convertT9>=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(6);

    convertiV12=convertiV;
    convertT10=convertV11-convertV12;
    while(convertT10>=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    //--------------------------------------------------------//

    convertiV1=convertiV;

    delay_ms(19);


    convertiV2=convertiV;
    convertT1=convertV1-convertV2;
    while(convertT1<=0) //Pente montante?
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(18);

    convertiV3=convertiV;
    convertT2=convertV2-convertV3;
    while(convertT2<=0) //
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV4=convertiV;
    convertT3=convertV3-convertV4;
    while(convertT3<=0) //
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(18);

    convertiV5=convertiV;
    convertT5=convertV4-convertV5;
    while(convertT4<=0) //
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV6=convertiV;
    convertT5=convertV5-convertV6;
    while(convertT5<=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;

    //-------------------------------------------------------------//



    delay_ms(65);

    while(9<economiV<12) //tension d'économie normalement à 10V correcte?
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    while(9<economiV<12)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    while(9<economiV<12)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    while(9<economiV<12)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    while(9<economiV<12)
    {ledRR=1;}
    ledVV=1;
    PORTB.2=ledRR;
    PORTB.3=ledVV;
    if(ledVV==1)
    {ledOO=0;
    PORTB.3=1;
    return;} //led verte =>frein fonctionne correctement , si led orange en vérification , si led rouge =>mauvais fonctionnement
    }


    Qu'est-ce qui pourrais me permettre de créer une interruption pou revenir au point de départ dans le programme au moment ou la led rouge est allumé?

  21. #20
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    LANGUAGE C:

    JE RELANCE LA DISCUSSION AVEC LES PROBLEMES A RESOUDRE ET UN PROGRAMME UN PEU PLUS COMMENTE SANS ERREUR VERIFIER PAR MON PROGRAMME ! Vous trouverez les problèmes en fin de page


    /****************************** ***********************
    This program was produced by the
    CodeWizardAVR V1.25.7a Evaluation
    Automatic Program Generator
    © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 05/06/2009
    Author : Freeware, for evaluation and non-commercial use only
    Company :
    Comments:


    Chip type : ATmega8515
    Program type : Application
    Clock frequency : 8,000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 128
    ****************************** ***********************/

    #include <mega8515.h>
    #include <delay.h>
    #include <math.h>


    #define freinV ~PINA.1
    #define imageI ~PINA.2
    #define convertiV ~PINA.3
    #define economiV ~PINA.4
    #define ledO ~PORTB.1
    #define ledR ~PORTB.2
    #define ledV ~PORTB.3
    #define warning ~PORTB.4

    // Declare your global variables here
    unsigned char convertiV1,convertiV2,converti V3,convertiV4,convertiV5,conve rtiV6,convertiV7,convertiV8,co nvertiV9;
    unsigned char convertiV10,convertiV11,conver tiV12,convertT1,convertT2,conv ertT3,convertT4,convertT5,conv ertT6;
    unsigned char convertT7,convertT8,convertT9, convertT10,convertV1,convertV2 ,convertV3,convertV4,convertV5 ;
    unsigned char convertV6,convertV7,convertV8, convertV9,convertV10,convertV1 1,convertV12,ledRR,ledOO,ledVV ;

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=In
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=T
    PORTA=0x00;
    DDRA=0xFE;

    // Port B initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTB=0x00;
    DDRB=0xFF;

    // Port C initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTC=0x00;
    DDRC=0xFF;

    // Port D initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTD=0x00;
    DDRD=0xFF;

    // Port E initialization
    // Func2=Out Func1=Out Func0=Out
    // State2=0 State1=0 State0=0
    PORTE=0x00;
    DDRE=0x07;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    EMCUCR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;

    50;//condition initiale après retour au programme:
    ledRR=0;
    ledOO=0;
    ledVV=0;
    PORTB.2=ledRR; //affichage led rouge
    PORTB.1=ledOO; //affichage led orange
    PORTB.3=ledVV; //affichage led verte

    //Début du programme:

    while((freinV<=0 && imageI<=0)) //test de tension(V) et de courant(I) pour détecter une présence de tension et de courant dans le système
    {ledRR=1;} //tant que il n'y a pas d'alimentation la led rouge est allumé
    ledOO=1; //Alimentation led orange allumé
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1) //si la led rouge est allumé on l'éteint
    {ledOO=0;}
    //--------------------------------------------------------//

    convertiV1=convertiV; //on prend une valeur du signal et on la met dans convertiV1

    delay_ms(19); //tempo de 19ms


    convertiV2=convertiV; //On reprend une valeur
    convertT1=convertV1-convertV2;
    while(convertT1<=0) //Pente montante du signal?
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1) //si la led rouge est allumé, on éteitn l'orange et on retourne au départ du programme
    {ledOO=0;
    PORTB.4=1; //On envoye un niveau 1 sur la patte 4 du port B en sortie
    return;}


    delay_ms(18);

    convertiV3=convertiV;
    convertT2=convertV2-convertV3;
    while(convertT2<=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV4=convertiV;
    convertT3=convertV3-convertV4;
    while(convertT3<=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(18);

    convertiV5=convertiV;
    convertT5=convertV4-convertV5;
    while(convertT4<=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV6=convertiV;
    convertT5=convertV5-convertV6;
    while(convertT5<=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    //--------------------------------------------------------------//
    //Meme principe avec une pente descendante

    convertiV7=convertiV;

    delay_ms(6);

    convertiV8=convertiV;
    convertT6=convertV7-convertV8;
    while(convertT6>=0) //pente descendante?
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(5);

    convertiV9=convertiV;
    convertT7=convertV8-convertV9;
    while(convertT7>=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(6);

    convertiV10=convertiV;
    convertT8=convertV9-convertV10;
    while(convertT8>=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(5);

    convertiV11=convertiV;
    convertT9=convertV10-convertV11;
    while(convertT9>=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(6);

    convertiV12=convertiV;
    convertT10=convertV11-convertV12;
    while(convertT10>=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    //--------------------------------------------------------//
    //Encore une pente montante

    convertiV1=convertiV;

    delay_ms(19);


    convertiV2=convertiV;
    convertT1=convertV1-convertV2;
    while(convertT1<=0) //Pente montante?
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(18);

    convertiV3=convertiV;
    convertT2=convertV2-convertV3;
    while(convertT2<=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV4=convertiV;
    convertT3=convertV3-convertV4;
    while(convertT3<=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(18);

    convertiV5=convertiV;
    convertT5=convertV4-convertV5;
    while(convertT4<=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV6=convertiV;
    convertT5=convertV5-convertV6;
    while(convertT5<=0)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;

    //-------------------------------------------------------------//



    delay_ms(65); //tempo de 65ms

    while(9<economiV<12) //vérification de la tension d'économie entre 9 et 12 volts
    {ledRR=1;}
    ledOO=1; //meme principe d'allumage des leds que précedement
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    while(9<economiV<12)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    while(9<economiV<12)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    while(9<economiV<12)
    {ledRR=1;}
    ledOO=1;
    PORTB.2=ledRR;
    PORTB.1=ledOO;
    if(ledRR==1)
    {ledOO=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    while(9<economiV<12)
    {ledRR=1;}
    ledVV=1;
    PORTB.2=ledRR;
    PORTB.3=ledVV;
    if(ledVV==1)
    {ledOO=0; //si on allume la led verte on éteint l'orangeaprès toutes les vérifications
    PORTB.3=1;
    return;} //led verte =>frein fonctionne correctement , si led orange en vérification , si led rouge =>mauvais fonctionnement
    }




    MES DERNIERS PROBLEMES SONT :
    -mise en oeuvre d'un timer pour alléger le programme
    -retour possible au début du programme
    -pouvoir sortir de la boucle while
    Aucune erreur et attention n'ont été détecté lors de la vérification du programme !

  22. #21
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    J'ai essaillé de voir a cette page pour le timer mais ils mettent des paramètres en plus alors que moi je n'ai pas sa à mettre normalement je veux juste apeller la fonction:

    http://www.siteduzero.com/tutoriel-3...html#ss_part_2

  23. #22
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    IL faurait que je puisse dire tant que j'ai 0V sa va pas, si sa ne bascule pas a 1 volt dans les 20ms qui suivent je redémarre le programme en déclenchant une alterte.

  24. #23
    invitebac23ddd

    Re : Programme en C : Problème synthaxe?

    Bon perso, en microC je ne connais que les interruption qui ressemblent un peu a des timers en C. Apres je ne sais pas si je peux t'en dire plus car ca remonte a loin, et je n'ai pas acces a mes cours de microC...

    Pour tes whilles, je te conseille de refaire une mesure dedant et d'ajouter une conditionce que j'ecrit est surremet n'importe quoi vis a vis de ton programme mais c'est un exemple)

    while( convertT1<=0)
    { ledR = 1; ledO = 0; ledV = 0;
    convertiV2=convertiV;
    convertT1=convertV1-convertV2;
    }//si tu ne veux pas ajouter de parametre


    while( (convertT1<=0) && (T1min<0))
    {ledR = 1; ledO = 0; ledV = 0;
    if (action)
    { T1min = 1;
    }
    }

    Voila ++

    PS: je ne comprend vraiment rien a ton histoire de pente....

  25. #24
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    Alors en faite j'ai trouvé une solution a la place du while que j'avais mis au début qui est un if . J'ai voulu mettre un while en croyant que je pouvais revenir au programme de départ avec sa mais malheureusement ce n'est pas le cas.
    De prendre l'instruction if me réduit meme considérablement mon texte.
    Pour les cours de micro, les instructions de sauts sont:
    -break
    -goto
    -return
    -continue
    J'ai trouvé cette liste sur le site : http://homepage.mac.com/pierremousel...ions.html#Saut Mais malheureusement il les énumèrent et n'explique rien.

    J'ai un autre truc a régler au niveau du timer car je ne sais pas comment en mettre un en place pourtant ils expliquent sa sur ce site ou j'ai été voir: http://www.siteduzero.com/tutoriel-3...html#ss_part_1
    J'ai compris comment l'initialiser, mais comment le mettre en application .... c'est autre chose. Ils parlent de paramètres mais moi je n'utilise que le temps et une fonction précise! je ne comprend pas trop leur facon de faire la!

    Il me manque a faire un timer pour appeller les fonctions et un retour au début de programme!

  26. #25
    invitebac23ddd

    Re : Programme en C : Problème synthaxe?

    Pour refaire le programme a l'infini :
    While(1)
    {ton programme}

    Mais t'en sort pas, verifie que c'est bien ce que tu veux (en général oui)

    Si a la place du while tu met un if, des que tu sort de ton if, tu reparts sur allumer led orange. Ce qui bloque de toute facon....
    si tu veux rester sur la rouge et continuer ton prog, supprime l'allumage des oranges.
    si tu veux rester a l'instruction de comparaison, retourne a ton while et ajoutes-y une variable (cf le dernier post)

    Si tu met ton prog dans un while(1), vas plutot faire un tour du coté des interuption, elles sont plus adaptées a mon sens. Le SDZ fait de la prog pour PC, je ne sais pas si le tps indiqué vas etre retrouvé par le microC... et en plus je ne peux mieu t'expliquer que ce site génial.

  27. #26
    Jack
    Modérateur

    Re : Programme en C : Problème synthaxe?

    Dans tes exemple, il est fait appel à des bibliothèques qui font appel au système d'exploitation. Tu n"='as pas de système d'exploitation.

    L'idéal est de configurer un timer et le faire générer une interrution toutes les x ms. ca te servira de base de temps. Dans le programme d'interruotion, tu peux gérer des compteurs (des variables que tu incrémentes) de manière à créer n'importe quelle tempo.

    A+

  28. #27
    invitebac23ddd

    Re : Programme en C : Problème synthaxe?

    Voila qui est mieu expliqué que moi! Merci Jack

  29. #28
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    Je ne sais pas comment comprendre entre quoi est mis PINA.4
    if(9<PINA.4<12)
    Est-elle compris entre 9 et 12 ou à l'exterieur de 9 et 12 je cherche entre 9 et 12 moi. Je n'arrive pas a lire cette equation.


    Programme:

    /****************************** ***********************
    This program was produced by the
    CodeWizardAVR V1.25.7a Evaluation
    Automatic Program Generator
    © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 05/06/2009
    Author : Freeware, for evaluation and non-commercial use only
    Company :
    Comments:


    Chip type : ATmega8515
    Program type : Application
    Clock frequency : 8,000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 128
    ****************************** ***********************/

    #include <mega8515.h>
    #include <delay.h>
    #include <math.h>


    // Declare your global variables here
    unsigned char convertiV1,convertiV2,converti V3,convertiV4,convertiV5,conve rtiV6,convertiV7,convertiV8,co nvertiV9;
    unsigned char convertiV10,convertiV11,conver tiV12,convertT1;


    void main(void)
    {
    // Declare your local variables here

    // Port A initialization
    // Func7=Out Func6=Out Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=Out
    // State7=0 State6=0 State5=0 State4=T State3=T State2=T State1=T State0=0
    PORTA=0x00;
    DDRA=0xE1;

    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0
    PORTB=0x00;
    DDRB=0x0F;

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x00;

    // Port E initialization
    // Func2=In Func1=In Func0=In
    // State2=T State1=T State0=T
    PORTE=0x00;
    DDRE=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    EMCUCR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;


    //Début du programme:

    while((PINA.1<=0 || PINA.2<=0)) //test de tension(V) et de courant(I) pour détecter une présence de tension et de courant dans le système
    {PORTB.1=1;
    PORTB.2=0; //on initialise les led à 0 car on a déja fait un cycle //on initialise les led à 0 car on a déja fait un cycle
    PORTB.3=0;} //on initialise les led à 0 car on a déja fait un cycle //Non alimenté alor led orange allumé

    PORTB.1=0; //on éteint la le dorange si alimenté et allume la verte
    PORTB.3=1;



    //--------------------------------------------------------//

    convertiV1=PINA.3; //on prend une valeur du signal

    delay_ms(19); //on met une tempo de 19ms


    convertiV2=PINA.3; //on reprend une autre valeur plus tard que la 1ère
    convertT1=convertiV1-convertiV2;
    if(convertT1>=0) //Pente montante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}


    delay_ms(18);

    convertiV3=PINA.3;
    convertT1=convertiV2-convertiV3;
    if(convertT1>=0) //Pente montante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV4=PINA.3;
    convertT1=convertiV3-convertiV4;
    if(convertT1>=0) //Pente montante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(18);

    convertiV5=PINA.3;
    convertT1=convertiV4-convertiV5;
    if(convertT1>=0) //Pente montante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV6=PINA.3;
    convertT1=convertiV5-convertiV6;
    if(convertT1>=0) //Pente montante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    //--------------------------------------------------------------//
    //Meme principe avec une pente descendante

    convertiV7=PINA.3;

    delay_ms(6);

    convertiV8=PINA.3;
    convertT1=convertiV7-convertiV8;
    if(convertT1<=0) //Pente descendante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(5);

    convertiV9=PINA.3;
    convertT1=convertiV8-convertiV9;
    if(convertT1<=0) //Pente descendante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(6);

    convertiV10=PINA.3;
    convertT1=convertiV9-convertiV10;
    if(convertT1<=0) //Pente descendante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(5);

    convertiV11=PINA.3;
    convertT1=convertiV10-convertiV11;
    if(convertT1<=0) //Pente descendante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(6);

    convertiV12=PINA.3;
    convertT1=convertiV11-convertiV12;
    if(convertT1<=0) //Pente descendante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    //--------------------------------------------------------//
    //Encore une pente montante

    convertiV1=PINA.3;

    delay_ms(19);


    convertiV2=PINA.3;
    convertT1=convertiV1-convertiV2;
    if(convertT1>=0) //Pente montante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(18);

    convertiV3=PINA.3;
    convertT1=convertiV2-convertiV3;
    if(convertT1>=0) //Pente montante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV4=PINA.3;
    convertT1=convertiV3-convertiV4;
    if(convertT1>=0) //Pente montante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(18);

    convertiV5=PINA.3;
    convertT1=convertiV4-convertiV5;
    if(convertT1>=0) //Pente montante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(19);

    convertiV6=PINA.3;
    convertT1=convertiV5-convertiV6;
    if(convertT1>=0) //Pente montante du signal?
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    //-------------------------------------------------------------//



    delay_ms(65); //tempo de 65ms

    if(9<PINA.4<12) //vérification de la tension d'économie entre 9 et 12 volts
    {PORTB.1=1;}
    else //sinon on allume la led rouge , on éteint la led orange et on envoye une "alarme"
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    if(9<PINA.4<12) //vérification de la tension d'économie entre 9 et 12 volts
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    if(9<PINA.4<12) //vérification de la tension d'économie entre 9 et 12 volts
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    if(9<PINA.4<12) //vérification de la tension d'économie entre 9 et 12 volts
    {PORTB.1=1;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;}

    delay_ms(20);

    if(9<PINA.4<12) //vérification de la tension d'économie entre 9 et 12 volts
    {PORTB.3=1;
    PORTB.1=0;}
    else
    {PORTB.2=1;
    PORTB.1=0;
    PORTB.4=1;
    return;} //led verte =>frein fonctionne correctement , si led orange en vérification , si led rouge =>mauvais fonctionnement
    }

  30. #29
    jo-electrons

    Re : Programme en C : Problème synthaxe?

    Dans la mesure ou jack je ne me souviens plus comment on fait je vais rester a ce pavé.
    Simplement si je met mon if, je vais avoir la led orange lorsque la condition est validé et après le else ne s'activera pas et sinon il s'activera led rouge.

    Donc le if convien très bien la led orange me permet de savoir si je suis en cour de vérification ou non.

    La led verte , je ne l'allume qu'à la fin et avant le départ de la vérification du frein.

  31. #30
    Jack
    Modérateur

    Re : Programme en C : Problème synthaxe?

    Code:
    if(9<PINA.4<12)                 //vérification de la tension d'économie entre 9 et 12 volts
    En C cette syntaxe est fausse.

    Il faut écrire:
    Code:
    if((9<PINA.4) && (PINA.4<12))                 //vérification de la tension d'économie entre 9 et 12 volts
    il faudrait voir aussi de la définition de PINA.4 parce que si c'est un bit, il ne peut avoir que les valeurs 0 et 1.

    A+

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. synthaxe requète sql
    Par invite685917ef dans le forum Logiciel - Software - Open Source
    Réponses: 15
    Dernier message: 04/05/2009, 16h27
  2. [Blanc] probleme de programme
    Par invite23853c45 dans le forum Dépannage
    Réponses: 3
    Dernier message: 20/05/2008, 17h17
  3. probleme d'installation de certain programme
    Par invite82369654 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 23/04/2006, 22h52
  4. problème programme
    Par invitea301fcd6 dans le forum Logiciel - Software - Open Source
    Réponses: 20
    Dernier message: 22/07/2005, 17h54
  5. Problème de programme.
    Par invite8d09e4b8 dans le forum Électronique
    Réponses: 3
    Dernier message: 11/07/2005, 15h56
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...