Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C/C++]Acquisition d'une fréquence venant du port COM

Projet TPE

    15 janvier 2007 à 18:17:59

    Mais si il utilise un prgm qui fais la différence de temps s'écoulant entre deux fronts montants du signal, et que son programme se charge de faire le traitement et ensuite d'afficher le résultat, le problème ne se pose plus.

    (Enfin, selon moi)
    • Partager sur Facebook
    • Partager sur Twitter
      15 janvier 2007 à 18:22:07

      Citation : Magloan

      Mais si il utilise un prgm qui fais la différence de temps s'écoulant entre deux fronts montants du signal, et que son programme se charge de faire le traitement et ensuite d'afficher le résultat, le problème ne se pose plus.

      (Enfin, selon moi)


      Je m'égosille à expliquer qu'on ne sait pas faire de mesures de temps précises sur un PC. Si on se contente de ça, OK, mais c'est de la mauvaise conception...

      La résolution de time() est de 1 seconde.
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        15 janvier 2007 à 18:24:43

        en plus mateo en a parler dans sont cour.
        • Partager sur Facebook
        • Partager sur Twitter
          15 janvier 2007 à 18:26:37

          Je comprend ça, mais en fait je n'ai pas vraiment le choix,
          un PIC, c'est trop compliqué pour mon niveau, le prof d'éléc ne "veux" pas, et je pense aussi que à programmer, cabler... ça serait trop compliqué,

          maintenant quels sont les autres possibilités?

          la précision de la vitesse du vent n'est pas très importante, enfin ça dépend,
          si je n'ai aucun autre programme lancé sur le PC qui demande des ressources...
          la mesure ne sera pas très loin de la vérité, ?

          en même temps c'est un TPE de niveau 1ère, la note est en majeure partie evaluée par MES profs de SI, l'autre partie sur un exposé devant 2 autres profs de SI fin Mars...
          si je ne suis pas les conseils de mes profs de SI, ça va pas le faire^^



          • Partager sur Facebook
          • Partager sur Twitter
            15 janvier 2007 à 18:43:44

            -ed- (désolé, je débute en programmation C)
            La fonction difftime() a une résolution de 1s?

            Et alors? Pourquoi dans ce cas ne pas compter le nombre de fronts montants pendant cette seconde?
            On divise ensuite cette seconde par le nombre récupéré et on trouve la fréquence.

            Sans interface électronique, comment est ce que tu veux réaliser ça? Il faut sacrifier un peu de précision dans la mesure, y a pas d'autre solution.
            Pour être précis, il faut un montage assez lourd. A moins que tu ne penses a un compteur 8 bits qui compte les fronts montants et qui retourne une valeur hexa directement proportionnelle de la fréquence? (l'inconvénient, c'est que c'est un montage électronique externe au PC).

            Donnes ton avi sur cette hypothèse stp, ça peut régler les problèmes avec le PC.
            • Partager sur Facebook
            • Partager sur Twitter
              15 janvier 2007 à 19:24:16

              Citation : Magloan

              -ed- (désolé, je débute en programmation C)
              La fonction difftime() a une résolution de 1s?


              Oui, mais pas besoin de ça. Tu fais la différence entre 2 time() et c'est OK, tu arrives à générer un tic d'environ une seconde...

              int fin = 0;
              time_t old = time(NULL);

              while (!fin)
              {
                 time_t now = time(NULL);
                 /* Ca ne se fait pas de prendre 100% du CPU */
                 Sleep(1);

                 /* evaluation de la pendule */
                 if (old < now)
                 {
                    /* nouvelle seconde... */
                    old = now;

                   
                 }
              }

              Citation : Pas de titre


              Et alors? Pourquoi dans ce cas ne pas compter le nombre de fronts montants pendant cette seconde?
              On divise ensuite cette seconde par le nombre récupéré et on trouve la fréquence.

              Y pas de problème sur le principe. Simplement cette 'seconde' est imprécise, c'est tout. Si on accepte que la mesure sois fausse, c'est OK.

              Moi, en tant qu'industriel, ça me choque, parce que j'y vois une erreur de conception, mais si ça passe en milieu scolaire, pourquoi pas... Pas étonnant que le niveau technique soit si bas en France... Je commence à comprendre. On empêche les gens de réfléchir "c'est trop compliqué", "c'est trop long"... OK...

              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                15 janvier 2007 à 19:56:57

                ok d'accord, autant pour moi.

                Et pour mon histoire du compteur, penses tu que ça serait mieux?
                Parceque si on laisse tel quel, je suis d'accord avec toi, la mesure ne sera très précise (peut être a qq Hz près), alors qu'avec un compteur, on récupèrera un nombre hexa directement en relation avec la fréquence d'entrée, et le comptage ne sera pas géré par le PC.

                Bon, il restera tout de même le problème de la durée de la mesure (du temps de comptage), et en fin de compte, sans micro-controleur, on se retrouvera forcément avec une erreur minimale.

                Tu en penses quoi? Comment tu ferais ça d'un point de vue matériel?
                • Partager sur Facebook
                • Partager sur Twitter
                  15 janvier 2007 à 21:53:06

                  Je comprend que ça puisse choquer,
                  mais je préfère terminer un projet, même si ok il n'a pas la précision ultime, que de lancer quelque chose de trop compliqué et de ne pas le finir en 2 mois


                  j'ai une petite question:

                  mieux vaut que mon programme soit dans une console, ou dans une fenêtre ?

                  je n'ai jamais écrit de programme en C, par quoi commence -t-on?


                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 janvier 2007 à 21:56:10

                    Citation : sam_fra

                    j'ai une petite question:

                    mieux vaut que mon programme soit dans une console, ou dans une fenêtre ?

                    je n'ai jamais écrit de programme en C, par quoi commence -t-on?


                    Tu n'as pas l'impression de comme qui dirait squatter le topic d'un autre pour y poser tes propres question qui n'ont rien à voir ?
                    Et on commence évidemment par lire les cours...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 janvier 2007 à 22:00:11

                      Citation : remram44

                      Citation : sam_fra

                      j'ai une petite question:

                      mieux vaut que mon programme soit dans une console, ou dans une fenêtre ?

                      je n'ai jamais écrit de programme en C, par quoi commence -t-on?


                      Tu n'as pas l'impression de comme qui dirait squatter le topic d'un autre pour y poser tes propres question qui n'ont rien à voir ?
                      Et on commence évidemment par lire les cours...



                      C'est son topic en fait... il squatte pas ! :]
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
                        15 janvier 2007 à 22:00:52

                        o_O

                        c'est un peu moi qui est créé le topic hein...
                        pour un problème qui me concerne...

                        ce que je voulais dire par là c'est concrètement, on commence par faire un schéma de ce que doit faire le programme exactement et comment il doit le faire?
                        ou autre...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 janvier 2007 à 22:04:58

                          Il y a la fonction clock qui permet d'obtenir la meilleur précision en rapport au processeur.

                          clock_t debut,fin;
                          debut = clock();
                          //Traitement
                          fin = clock();
                          double duree = (double)(finish - start) / CLOCKS_PER_SEC;
                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 janvier 2007 à 23:58:04

                            Citation : sam_fra

                            mieux vaut que mon programme soit dans une console, ou dans une fenêtre ?

                            je n'ai jamais écrit de programme en C, par quoi commence -t-on?


                            En mode console. C'est expliqué dans le tuto de M@teo sur ce même site...
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Music only !
                              16 janvier 2007 à 15:36:20

                              Je rejoins l'avi de -ed-

                              Fais le en console, ça te sera plus facile.

                              Pour la marche a suivre, la norme veut que tu fasses tes algorigrammes avant de te mettre a coder, il faut que tu fasse un genre d'analyse fonctionnelle de ton programme pour que n'importe qui qui lise ce programme s'y retrouve.

                              Et ça t'aideras toi pour le codage, c'est en tout cas comme ça qu'on procède en assembleur, vois si ça peut t'être utile.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 janvier 2007 à 16:12:51

                                Citation : Magloan

                                Pour la marche a suivre, la norme veut que tu fasses tes algorigrammes avant de te mettre a coder, il faut que tu fasse un genre d'analyse fonctionnelle de ton programme pour que n'importe qui qui lise ce programme s'y retrouve.

                                Et ça t'aideras toi pour le codage, c'est en tout cas comme ça qu'on procède en assembleur, vois si ça peut t'être utile.


                                Il n'y pas de 'norme' en matière de création de programme. Il y a des conseils plus ou moins avisés et surtout le bon sens qui veut qu'avant de tenter de réaliser quelque chose, on est censé le définir (quoi ?) et l'analyser (comment ?).

                                Quand à 'algorigramme', que se cache-t-il donc derrière ce magnifique néo-barbarisme ?

                                http://algorigramme.free.fr/fr.htm

                                Ah, OK. Le nom officiel est ordinogramme...

                                C'est complètement dépassé et créateur de code spaghetti du plus indigeste... Depuis les années 70, on utilise les algorithmes et le pseudo-code, suite aux travaux de Niklaus Wirth sur la programmation structurée (algol, modula-2, Pascal etc.)

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Music only !
                                  16 janvier 2007 à 17:33:32

                                  -ed-

                                  Comme tu peux le voir, ta pensée sur le niveau technique des français est vérifiée, puisque c'est sous ce nom "néo-barbare" qu'on nous a enseigné la programmation assembleur (les profs n'étaient pas tout jeunes, donc ça peut se comprendre).

                                  De plus, j'ai précisé que ce genre d'analyse du programme est valable pour l'assembleur, je n'ai pas dit que c'était a faire obligatoirement pour un programme en C (sachant qu'une ligne en C vaut 1 bonne dizaine de lignes assembleur dans certains cas).
                                  C'est juste pour pouvoir avoir une idée du fonctionnement général du programme, et donc, a avoir les idées claires (enfin, normalement).

                                  J'ai utilisé "norme" pour "procédure" (désolé de t'avoir fait bondir :-° ), a savoir, définition du cahier des charges, analyse des fonctions du programme et codage de ces fonctions.

                                  Désolé pour l'emploi d'un vocabulaire pas très juste.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 janvier 2007 à 18:45:35

                                    pour info je viens de reçevoir l'anémomètre commandé dimanche (et oui ils ont été rapides,..)
                                    par contre ça manques un peu de doc technique, je veux dire par là qu la feuille de caractéristiques techniques se résume a 4 lignes:

                                    Citation : La super doc technique


                                    PUISSANCE CONTACT: 500 mA 180 VDC
                                    T° DE SERVICE: -20; +85°C


                                    c'est tout, pas d'information sur la fréquence, rien sur les deux fils qui pendent au bout de l'anémometre ( :p ) , ... ??
                                    Je ne connais pas l'unité VDC, queulqu'un peut m'éclairer?


                                    J'ai cherché plus en détail en italien car il me semble que la société qui le commerce est italienne,

                                    Citation : Un Site italien


                                    SENSORE VENTO WD01
                                    Contatto :100mA
                                    Riferimento : 1 impulso per 2,5KmH


                                    puis sur un autre site italien:

                                    Citation

                                    10 kmh de vent <=> 4 impulsions par secondes




                                    F= 1/T ici pour 10Kmh F(Hz) = 1/0.25(s) = 4Hz

                                    Cela fait donc 4Hz par 10km/h, c'est bien ça?


                                    Citation : Sam



                                    // En boucle permanente

                                    _ Scruter l'état du port parallèle, trouver le nombre d'impulsions durant la dernière seconde et le mettre dans une variable

                                    // En boucle permanente


                                    // Lorsqu'un nouveau nombre d'impulsions par seconde est donné, autrement dit quand la variable change


                                    _ Multiplier le dernier nombre renvoyé d'impulsions par seconde par 2.5

                                    _ Afficher le resultat obtenu




                                    En gros, ça doit donner ça...
                                    Je passe maintenant à "comment"
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      16 janvier 2007 à 19:04:57

                                      A priori, ça a l'air d'être ça, pour la fréquence.

                                      Par contre, pour l'histoire des 180VDC, je ne vois pas, ça m'étonnerais fort que ce capteur génère une tension continue (DC) de 180V, je te dis pas les dégats!

                                      L'idéal, ça serait que tu test en cours, avec un oscillo, comme ça, tu saurais quelle est l'amplitude du signal.

                                      Ensuite, c'est a toi de jouer, une fois que tu as tout ça, tu sauras comment le brancher sur ton port et comment récupérer la vitesse du vent via le port parallèle. (en espérant qu'il ne te faille pas d'électronique entre le capteur et le port //).

                                      Bon courage
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        16 janvier 2007 à 19:16:51

                                        par contre quelques chose m'intrigue

                                        pour les deux fils qui sortent,

                                        l'un sera sur lequel les impulsions seront par l'anémomètre,
                                        Etl'autre ?
                                        il faut bien alimenter en courant électrique l'anémomètre avant qu'il puisse délivrer des impulsions, non?

                                        et comment reconnaitre ces deux fils?
                                        je ne peux rien testez avec un oscilloscope si je n'envoie pas un courant électrique dans l'anémomètre, mais il faut pas que j'envoie le courant électrique sur le mauvais fil...
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          16 janvier 2007 à 19:30:59

                                          Citation : sam_fra

                                          Citation : La super doc technique


                                          PUISSANCE CONTACT: 500 mA 180 VDC
                                          T° DE SERVICE: -20; +85°C


                                          c'est tout, pas d'information sur la fréquence, rien sur les deux fils qui pendent au bout de l'anémometre ( :p ) , ... ??
                                          Je ne connais pas l'unité VDC, queulqu'un peut m'éclairer?


                                          V = Volt
                                          DC = Direct Current (courant continu)
                                          Le pouvoir de coupure du contact est 500mA, 180V continus.

                                          C'est probablement un ILS. (interrupteur à lame souples) commandé par la rotation d'un aimant.

                                          http://www.ac-orleans-tours.fr/sti-concours99/Hyperfiches/BFranklin/ILS.html

                                          C'est increvable si on respecte le courant dans le contact. Attention, il ne doit pas être trop faible (je dirais au pif 1 à 10 mA), afin que l'effet 'auto nettoyant' se manifeste.

                                          Il va donc falloir un petit montage pour fournir 1 mA dans un interrupteur sous 5 volt (ça doit se trouver sur une des broches de commandes du port //, voir un fil de données maintenu à 1. Vérifier la tension...). Je te laisse jouer avec la loi d'Ohm et faire le schéma.

                                          Il faut espérer que le signal produit est stable (pas de rebonds), sinon, on est mal... (le conditionnement d'un signal, c'est pas une mince affaire...)


                                          Citation : Pas de titre

                                          J'ai cherché plus en détail en italien car il me semble que la société qui le commerce est italienne,

                                          Citation : Un Site italien


                                          SENSORE VENTO WD01
                                          Contatto :100mA
                                          Riferimento : 1 impulso per 2,5KmH


                                          puis sur un autre site italien:

                                          Citation

                                          10 kmh de vent <=> 4 impulsions par secondes




                                          F= 1/T ici pour 10Kmh F(Hz) = 1/0.25(s) = 4Hz

                                          Cela fait donc 4Hz par 10km/h, c'est bien ça?


                                          Voilà ce que j'appelle une bonne initiative. Oui, ca parait être correct. C'est linéaire, tant mieux.

                                          Citation : Pas de titre


                                          En gros, ça doit donner ça...


                                          OK.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Music only !
                                            17 janvier 2007 à 16:04:27

                                            Il n'y a aucune indication sur le boitier a l'enbranchement des fils?

                                            Parceque là, oui, ça va être génant pour faire des tests et même pour cabler l'anémomètre sur le port //.

                                            Je n'ai pas pu trouver de doc technique approfondie sur ce capteur, mais ce serait bien le diable que Comelec vende du materiel sans un minimum d'explication avec.

                                            Les fils auraient ils une couleur différente? (ça pourrait aider)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              17 janvier 2007 à 16:46:26

                                              l'un gainé en bleu, l'autre gainé en marron-rouge

                                              je confirme aucun indication sur l'embranchement des fils
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                17 janvier 2007 à 17:02:00

                                                Citation : sam_fra

                                                l'un gainé en bleu, l'autre gainé en rouge

                                                je confirme aucun indication sur l'embranchement des fils


                                                Pas besoin c'est un contact.

                                                Le principe est le suivant :

                                                +5V ------| R |----+------> Tension variable
                                                                   |
                                                                   |rouge (arbitaire)
                                                                   |
                                                                   -
                                                                   / ILS de l'anénomètre
                                                                   -
                                                                   |
                                                                   |bleu (arbitaire)
                                                                   |
                                                0V ----------------+------> 0V
                                                 

                                                J'espère ne pas avoir à expliquer comment fonctionne ce mini-circuit, c'est du niveau 4ème...(je rappelle que l'ILS, c'est comme un interrupteur. J'ai déjà fourni la doc...).

                                                Dans la pratique, et d'après :

                                                http://www.beyondlogic.org/epp/epp.htm

                                                - Le 0V est la broche GROUND du port // (pin 18 à 25)
                                                - Le 5V est, par exemple, la broche STROBE (pin 1 à mettre à l'état 1)
                                                - L'entrée pour la tension variable est un de bit de données, par exemple D0 (pin 2).

                                                Je rappelle qu'il faut calculer la résistance pour un courant de quelques mA... Je ne vais peut être pas tout faire là...

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Music only !
                                                  17 janvier 2007 à 17:16:04

                                                  ok

                                                  Je vois bien mieux comment ce truc fonctionne maintenant.
                                                  Merci -ed- pour tes lumières.

                                                  Le reste pourra se faire par programme (avec une petite imprécision malgré tout).
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    17 janvier 2007 à 18:07:08

                                                    bah pour 1 mA
                                                    avec 5V
                                                    Si c'est aussi simple que U = R * I
                                                    R = 5 / 0.001 = 5000 Ohms?

                                                    ça veut dire qu'il faut une resistance de 5000 Ohms entre Strobe et la broche de donnée utilisée?


                                                    +5V ------| R |----+------> Tension variable *
                                                    STROBE   5000 ohms |           Broche de Bit de donnée
                                                                       |
                                                                       |red
                                                                       -
                                                                       / ILS de l'anénomètre
                                                                       -
                                                                       |
                                                                       |bleu
                                                                       |
                                                    0V ----------------+------> 0V  La par contre il suffit de relier le fil à une broche "Ground"? 


                                                    Là ou j'ai mis une *, ça sera comme ça IRL:
                                                    Il suffit de mettre Strobe à 1 au debut de mon programme (donc envoyant 5V), de relier Strobe à la resistance, le cable rouge(...) à l'autre pole de la resistance, et tout ça direction Broche de de donnée ?
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      17 janvier 2007 à 19:03:26

                                                      ouai, ça a l'air d'être ça.

                                                      En fait, ce montage réalise un genre de pull up: Tu force la mise a '1' du bit de donnée quand l'interrupteur est ouvert.

                                                      Et pour ta résistance, je te conseil 4700ohms (normalisée E12), ton courant sera légèrement plus élevé mais restera inoffensif.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        17 janvier 2007 à 19:29:14

                                                        Citation : Magloan

                                                        Et pour ta résistance, je te conseil 4700ohms (normalisée E12), ton courant sera légèrement plus élevé mais restera inoffensif.


                                                        4.7 kOhm, et c'est du E3 !

                                                        Il faudrait quand même vérifier la tension de STROBE et le courant qu'il peut fournir. Faudrait pas claquer un circuit...

                                                        Et puis il ne faudra pas oublier de mettre STROBE à 1 (même si je soupçonne que c'est sa valeur par défaut).
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Music only !
                                                          17 janvier 2007 à 20:10:46

                                                          Je confirme que c'est du E3.

                                                          Mais pour les résistances, j'ai l'habitude d'utiliser la E12, la E3, je la réserve pour les condensateurs (voire E6 pour les condos).
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            17 janvier 2007 à 22:18:30

                                                            Citation : infos port //

                                                            STROBE : cette ligne active basse (donc a 0)indique à l'imprimante que...



                                                            ça veut donc dire,puisqu'elle doit être inactive en permanence, qu'à l'origine elle est à 1.
                                                            enfin, ça sera possible de mettre dans mon pgrm "vérifier que strobe = 1" en condition ...

                                                            par contre, maintenant pour lire l'état de la broche de données, en admettant que j'utilise D0 (broche 2),

                                                            cela suffit-il vraiment: ..?

                                                            Citation : http://www.progzone.free.fr/basniveau/portp/portp.htm


                                                            Ecrire sur le port des données :

                                                            En C :
                                                            outportb(378h,Valeur_que_vous_voulez);

                                                            Lire sur le port d'état de l'imprimante :
                                                            En C :
                                                            valeur = inportb(379h); // retourne la valeur du port



                                                            parce que la ce n'est pas broche par broche le controle mais plutot, registre par registre:
                                                            Port du registre de données: 378h (je dois le lire en continu, mais seul le dernier bit changera 0<->1 ?)
                                                            Port du registre d'état: 379h (inutile pour moi)
                                                            Port du registre de commande: 37Ah (c'est là qu'il y a strobe, que je dois vérifié à 1 avant de lire l'état de D0))
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              18 janvier 2007 à 0:55:14

                                                              Citation : sam_fra

                                                              Citation : infos port //

                                                              STROBE : cette ligne active basse (donc a 0)indique à l'imprimante que...



                                                              ça veut donc dire,puisqu'elle doit être inactive en permanence, qu'à l'origine elle est à 1.
                                                              enfin, ça sera possible de mettre dans mon pgrm "vérifier que strobe = 1" en condition ...


                                                              Il suffit de positionner STROBE à 1 au démarrage et on en parle plus. Je ne sais pas quel bit c'est, mais en tout cas, c'est dans le registre de commandes :

                                                                 outportb (REG_CDE, STROBE);


                                                              On définira REG_CDE et STROBE plus tard, rien ne presse. Il est bon de raisonner et de coder de façon abstraite et de ne pas se laisser aveugler par des constantes numériques sans signification... Ce qui compte, c'est la sémantique, d'où l'importance donnée au bon choix des identificateurs.

                                                              http://mapage.noos.fr/emdel/codage.htm#nommage

                                                              Citation : Pas de titre

                                                              parce que la ce n'est pas broche par broche le controle mais plutot, registre par registre:
                                                              Port du registre de données: 378h (je dois le lire en continu, mais seul le dernier bit changera 0<->1 ?)


                                                              Tout à fait.

                                                              Citation : Pas de titre


                                                              Port du registre de commande: 37Ah (c'est là qu'il y a strobe, que je dois vérifié à 1 avant de lire l'état de D0))


                                                              Oui, enfin, le positionner...
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              Music only !

                                                              [C/C++]Acquisition d'une fréquence venant du port COM

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown