affichage figé sur ecran LCD
Répondre à la discussion
Affichage des résultats 1 à 21 sur 21

affichage figé sur ecran LCD



  1. #1
    inviteb3913811

    affichage figé sur ecran LCD


    ------

    Bonjour,

    Voila je débute dans la programmation des microcontrôleurs en MikroC
    Je voulais créer une horloge numérique sur écran LCD, j’ai commencé par les secondes, voici le programme :

    void main()
    {
    // déclaration et initialisation des variables
    int sec=0;
    int min=0;
    int heure=0;
    char buffer[8];
    for (sec=0; sec=60; sec++)
    {
    // Configuration de l'afficheur LCD
    LCD_config(&PORTB, 4, 5, 6, 3, 2, 1, 0);
    LCD_Cmd(LCD_CLEAR);
    LCD_Cmd(LCD_CURSOR_OFF);
    IntToStr(sec,buffer);
    LCD_Out(2,8,buffer);
    Delay_ms(1000);
    }
    }


    le problème c'est que l'affichage reste figé sur 60 et je ne comprend pas où est l'erreur
    NB: j'utilise un afficheur 2*16 branché sur le port B du 16f876A

    merci beaucoup

    -----

  2. #2
    laurentnic

    Re : affichage figé sur ecran LCD

    Bonjour

    La boucle for s'arrête à 60 et on sort de la boucle d'où à mon avis le dernier affichage de 60 et cela reste figé!!!!

    cordialement

    Laurent

  3. #3
    inviteb3913811

    Re : affichage figé sur ecran LCD

    Bonjour laurentnic
    au début j'aimerai vous remercier pour votre réponse
    normalement, chaque valeur que va prendre la variable "sec" est convertie par la commande IntToStr, ensuite affichée par la commande LCD_out, la commande la variable "sec" à la prochaine valeur aprés 1 seconde par la commande delay_ms(1000), pour rendre la boucle infinie, j'ai ajouté une etiquette (aprés la declaration des variables), et à la fin du programme j'ai mis la commande goto[etiquette], mais ça ne fonctionne toujours pas

  4. #4
    Short

    Re : affichage figé sur ecran LCD

    Si tu réinitialise sec à 0 avant de rerentrer dans la boucle for?
    UTC- Génie Mécanique

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

    Re : affichage figé sur ecran LCD

    Bonjour

    Une boucle for n'est pas infinie

    il faut un while(1)

    Avec ton programme il faut penser à remettre à 0 la boucle for

    ou faire incrémenter des minutes et remettre à 0 les secondes.

    sinon cela risque de ne plus s'incrémenter si la boucle for est terminée.

    cordialement

    Laurent

  7. #6
    inoxxam

    Re : affichage figé sur ecran LCD

    Bonjour,
    Le problème que tu reportes est normal. Comme t'as programmé, tu fais ton for, et quand t'arrives à la fin de ton for (sec==60) tu en sors, et qu'est-ce qu'il y a juste après ton for? L'accolade de la fin du main, donc tu sors du programme.
    Une solution des de mettre ton for dans un while(1).
    Code:
    while(1)
    {
         for(...)
         {
                 ...
          }
    }
    Ainsi quand il a fini de compter jusqu'à 60, il repart à zéro!

    EDIT: Ah! Devancé d'une minute par Laurent.

  8. #7
    inviteb3913811

    Re : affichage figé sur ecran LCD

    je remercie tous le monde pour les précieuses informations, j'ai modifié mon programme suivant vos conseils comme suit:
    void main()
    {
    while(1)
    {
    // déclaration des variables
    int sec;
    int min;
    int heure;
    char buffer[16];
    // Initialisation des variables
    sec=0;
    for (sec=0; sec=60; sec++)
    {
    // Configuration de l'afficheur LCD
    LCD_config(&PORTB, 4, 5, 6, 3, 2, 1, 0);
    LCD_Cmd(LCD_CLEAR);
    LCD_Cmd(LCD_CURSOR_OFF);
    IntToStr(sec,buffer);
    LCD_Out(2,8,buffer);
    // Arrêt pendant 1 seconde avant de passer à la nouvelle valeur
    Delay_ms(1000);
    }
    }
    }
    aucun changement n'est constaté, ce que je ne comprend pas c'est que la variable "sec" normalement attend une seconde avec la commande : Delay_ms(1000) avant quelle ne prenne une nouvelle valeur, ce délais est largement suffisant pour qu'on constate les variations sur l'écran LCD, s'agit il d'une erreur de simulation car j'utilise Proteus V7.6?
    merci

  9. #8
    Short

    Re : affichage figé sur ecran LCD

    for (sec=0; sec=60; sec++)
    Il vaut mieux mettre : for (sec=0; sec<=60; sec++)
    non?

    Le signe égal est utilisé pour mettre une valeur dans une variable. On le double pour la comparaison.
    UTC- Génie Mécanique

  10. #9
    inoxxam

    Re : affichage figé sur ecran LCD

    Citation Envoyé par Short Voir le message
    Il vaut mieux mettre : for (sec=0; sec<=60; sec++)
    non?

    Le signe égal est utilisé pour mettre une valeur dans une variable. On le double pour la comparaison.
    Oui c'est là qu'est l'erreur, il faut mettre
    for (sec=0; sec==60; sec++)
    au lieu de
    for (sec=0; sec=60; sec++)
    Car avec sec = 60, à chaque tour de boucle au lieu de faire un test sur sec il va lui mettre sa valeur à 60.

  11. #10
    Short

    Re : affichage figé sur ecran LCD

    D’ailleurs j'ai dit une bêtise l'initialisation de sec à 0 est inutile ici, en revanche tu peux initialiser min et heure pour la suite de ton programme.
    UTC- Génie Mécanique

  12. #11
    inviteb3913811

    Re : affichage figé sur ecran LCD

    En effet, aprés correction ça marche à merveille, un profond respect pour tous le monde, merci infiniment

  13. #12
    Short

    Re : affichage figé sur ecran LCD

    Citation Envoyé par kimou12 Voir le message
    En effet, aprés correction ça marche à merveille, un profond respect pour tous le monde, merci infiniment
    Cool mon premier fan!
    UTC- Génie Mécanique

  14. #13
    Forhorse

    Re : affichage figé sur ecran LCD

    Je trouve quand même bizarre que tu configures et initialise l'afficher à chaque boucle. C'est inutile.

  15. #14
    Jack
    Modérateur

    Re : affichage figé sur ecran LCD

    Code:
    for (sec=0; sec==60; sec++)

    Je ne vois pas comment ce code a pu fonctionner vu qu'on entre jamais dans la boucle for.

    A+

  16. #15
    invite849f6457

    Re : affichage figé sur ecran LCD

    bonjour,
    moi je voulais juste savoir si ton horloge été précise? par exemple ton afficheur indique 60 secondes alors que ta montre indique qu'il c'est écoulé 65secondes.
    Car il y a quelques instructions entre chaque delay qui demande du temp qui sont ridicule (genre 20ms) mais misent bout a bout et répétés décales trés largement ton horloge.

  17. #16
    Short

    Re : affichage figé sur ecran LCD

    En effet Jack il faut plutôt mettre ! for (sec=0; sec<=60; sec++)

    Car il y a quelques instructions entre chaque delay qui demande du temp qui sont ridicule (genre 20ms) mais misent bout a bout et répétés décales trés largement ton horloge
    Le soucis c'est qu'il faut changer la valeur du delay en fonction du nombre d'instruction prédédentes et de leur tailles. Pour être trés précis il faudrait plutôt programmer en asm qui permet de faire du temps réel plutôt qu'en C.
    UTC- Génie Mécanique

  18. #17
    Jack
    Modérateur

    Re : affichage figé sur ecran LCD

    En effet Jack il faut plutôt mettre ! for (sec=0; sec<=60; sec++)
    dans ce cas tu vas maintenant entrer 61 fois dans la boucle (de 0 à 60 inclus)
    En conséquence:
    Code:
        for (sec=0; sec<60; sec++)
    Pour être trés précis il faudrait plutôt programmer en asm qui permet de faire du temps réel plutôt qu'en C.
    Absolument pas. C'est indépendant du langage. Il y a 2 solutions pour maintenir une heure précise:
    * une RTC (real time clock) qui est un circuit externe: c'est le cas des PC par exemple.
    * utiliser un timer du µcontrôleur générant une interruption toutes les x ms (ou µs)

    A+

  19. #18
    Short

    Re : affichage figé sur ecran LCD

    Absolument pas. C'est indépendant du langage. Il y a 2 solutions pour maintenir une heure précise:
    * une RTC (real time clock) qui est un circuit externe: c'est le cas des PC par exemple.
    * utiliser un timer du µcontrôleur générant une interruption toutes les x ms (ou µs)
    Piouf piouf je ne savais pas, ce n'est pas ce qu'on m'a dit en cours ><
    Merci pour l'infos! =)
    UTC- Génie Mécanique

  20. #19
    Jack
    Modérateur

    Re : affichage figé sur ecran LCD

    le développement d'applications en asm pour µcontroleurs est devenue marginale. Heureusement que l'on peut continuer à gérer le temps avec précision en C.

    A+

  21. #20
    Short

    Re : affichage figé sur ecran LCD

    Le hic c'est que je ne trouve pas de freeware pour programmer, les limitations a 1k ou 2k de codes sont vraiment trop restrictives!
    UTC- Génie Mécanique

  22. #21
    Jack
    Modérateur

    Re : affichage figé sur ecran LCD

    C'est un autre problème. Je ne connais pas trop Microchip. Il n'existe pas de compilateur gratuit permettant de générer un code de taille raisonnable?

    A+

Discussions similaires

  1. [Brun] Lecteur DVD LG RHT497H : affichage de l'heure se fige...
    Par binome18 dans le forum Dépannage
    Réponses: 2
    Dernier message: 05/11/2010, 21h20
  2. P18f4520, affichage d'une valeur sur écran LCD picdem 2+
    Par invite8d0b7120 dans le forum Électronique
    Réponses: 3
    Dernier message: 21/04/2010, 15h57
  3. affichage sur LCD 2*16
    Par inviteb815bb1a dans le forum Électronique
    Réponses: 2
    Dernier message: 09/04/2010, 20h43
  4. Réponses: 2
    Dernier message: 09/03/2010, 08h07
  5. affichage écran lcd
    Par invite58ab3889 dans le forum Électronique
    Réponses: 2
    Dernier message: 06/02/2009, 17h48
Découvrez nos comparatifs produits sur l'informatique et les technologies.