Répondre à la discussion
Affichage des résultats 1 à 28 sur 28

oh la belle girouette

  1. #1
    Ke2017

    oh la belle girouette

    Bonjour,
    Je souhaite realiser une girouette pour connaitre l orientation du vent a 10° pres par rapport a la ligne de foie de mon bateau.

    Je souhaite recuperer l info soit sur cadran lcd 3 lettres (angle au vent de 0 a 180° de chaque coté) soit sur un cadran ou je pourrais faire un rond avec 36 led où s allumerais la led qui correspond a l orientation ....

    Merci de votre aide

    -----


  2. Publicité
  3. #2
    vincent66

    Re : oh la belle girouette

    Bonjour et bienvenue sur futura...!

    Quel capteur d'angle penses-tu utiliser...?

    Belle journée...!
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  4. #3
    Ke2017

    Re : oh la belle girouette

    Les cours d electro remontes un peu mais soit une roue encodee soit un potar... Qu est ce que tu conseillerais?

  5. #4
    vincent66

    Re : oh la belle girouette

    Un encodeur absolu, cher mais étanche et moins de frottements qu'un potar...
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  6. #5
    penthode

    Re : oh la belle girouette

    le problème du potar , c'est qu'il y a une butée
    et chacun est rentré chez son automobile .

  7. #6
    SportsEngine

    Re : oh la belle girouette

    Le problème des codeurs absolus c'est qu'ils sont souvent chers... Il existe des codeurs à effet Hall et optiques qui n'ont ni butée ni frottement élevé (roulement bille ou palier bronze) et qui coutent moins de 10€. Il suffit d'ajouter un capteur supplémentaire (capteur effet Hall ou optique "interrupteur") pour donner la position zéro. Le calcul de l'angle se fait facilement en comptant/décomptant les impulsions

  8. #7
    penthode

    Re : oh la belle girouette

    et chacun est rentré chez son automobile .

  9. #8
    mag1

    Re : oh la belle girouette

    Citation Envoyé par Ke2017 Voir le message
    Bonjour,
    Je souhaite realiser une girouette pour connaitre l orientation du vent a 10° pres par rapport a la ligne de foie de mon bateau.

    Je souhaite recuperer l info soit sur cadran lcd 3 lettres (angle au vent de 0 a 180° de chaque coté) soit sur un cadran ou je pourrais faire un rond avec 36 led où s allumerais la led qui correspond a l orientation ....

    Merci de votre aide
    Bonjour,

    On doit pouvoir faire quelque chose avec ces composants:
    https://www.gotronic.fr/art-connecte...a736-20683.htm

    et une boussole:
    https://www.ebay.fr/itm/GY-273-HMC58...IAAOSw4QVZzhGr

    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  10. #9
    jiherve

    Re : oh la belle girouette

    Bonjour,
    la ligne de foie pour un marin c'est sans doute le bar le plus proche!
    Ceci dit soit récupérer un resolver et ce n'est pas simple à exploiter autrement il existe des solution avec capteur Hall il y a eu une discussion ici:
    Adaptation d'un ensemble anémomètre-girouette bateau à une station météo
    JR
    l'électronique c'est pas du vaudou!

  11. #10
    Ke2017

    Re : oh la belle girouette

    Merci pour toutes ces reponses. Je vais lire les sujets anexes partagés mais effectivement la solution de l encodeur optique est interessante. Ensuite comment recuperer les donnes?!

  12. #11
    penthode

    Re : oh la belle girouette

    à transmettre à un µ-proc , picbasic , arduino etc selon tes gouts et compétences
    et chacun est rentré chez son automobile .

  13. #12
    mag1

    Re : oh la belle girouette

    Citation Envoyé par Ke2017 Voir le message
    Merci pour toutes ces reponses. Je vais lire les sujets anexes partagés mais effectivement la solution de l encodeur optique est interessante. Ensuite comment recuperer les donnes?!
    C'est pas le plus compliqué: un petit µC et une ligne de code .
    Mais il est peut être plus simple de découper des pistes dans des magnets et 4 capteurs effet hall.

    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  14. #13
    Murayama

    Re : oh la belle girouette

    Bonjour!

    Je viens remettre 100 balles dans le juke-box avec exactement le même chip que
    l'autre jour pour mesurer les distances. Cette fois ci, l'encodeur rotatif est
    utilisé pour sa fonction première, mesurer un angle.

    Un encodeur absolu, cher mais étanche et moins de frottements qu'un potar...
    Cet encodeur est un des moins chers du marché. Environ 5 euros, voir article précédent
    pour les détais. En fait, il s'agit du chip seul.
    Il nécessite un aimant. Du point de vue étanchéité, il peut être noyé dans la résine,
    et résister à tout, même à l'eau de mer. Il n'y a évidemment pas de problème de butée,
    la mesure se fait sans contact. Il serait possible d'y associer un compas comme il en
    existe chez Honeywell ou autre pour avoir non seulement la direction du vent par rapport
    au bateau, mais aussi la direction absolue.

    Bon, donc je reprends le même hard et le même programme que pour ma mesure de distance.
    J'ai juste ajouté un #define LINEAR 0 (pour que mon code de mesure de distance soit
    encore valable dans le cas où je #define LINEAR 1). Dans la photo suivante, on voit une
    sorte de bouton de potar. Il est équipé d'un aimant cylindrique.

    Girouette01.jpg

    J'ai fait un montage avec du scotch double face sur ma table, ce qui est aussi une façon
    de montrer qu'il n'est pas nécessaire d'avoir un ajustement précis de l'aimant par rapport
    au capteur. Mais si vous faites une girouette, vous pouvez évidemment faire quelque chose
    d'un peu plus propre.
    Sur la photo suivante, on voit qu'il y a environ 5mm entre l'aimant et le chip. Donc
    pas mal de place pour le noyer dans la résine.

    Girouette03.jpg

    Cette photo montre le même chip que j'ai inclus dans un boîtier pour qu'il soit
    parfaitement étanche, pour un autre projet. 2 fils d'alimentation et 4 fils de SPI.
    15mm de diamètre.

    E?tanche.jpg

    Résultats. On voit dans la série de photos suivante 2 positions du bouton et l'affichage
    correspondant. Les specs donnent une précision de l'ordre du degré, donc largement
    suffisante. Il est possible d'étalonner le zéro par SPI, mais il est possible de le
    faire en tournant l'aimant par rapport à la flèche de la girouette.
    Je l'ai configuré en angle brut (0 ~ 360, un peu comme dans un avion), mais il est
    peut-être préférable d'avoir du -180 / 180 pour la direction du vent, avec le 0 droit
    devant.

    Girouette05.jpg

    Pascal

  15. #14
    Ke2017

    Smile Re : oh la belle girouette



    C'est cela que je souhaite réalisé !
    Avec des instrument différent que le bouton le scotch double face bien évidemment mais c'est le rendu attendu.
    je souhaite passer par un "arduino" également car je souhaite dans le futur y ajouter des fonctionnalités.

    Le programme est il a la disposition d'un novice?

    Merci

  16. #15
    Murayama

    Re : oh la belle girouette

    Bonjour!

    Le programme est il a la disposition d'un novice?
    Oui, bien sûr. Voici le code. Il n'y a rien de mystérieux. Comme ce n'est pas de
    l'Arduino, il faudra modifier un peu, compte tenu des difféerences. L'appel des fonctions
    dépendra de quel LCD vous utilisez, etc...
    Il y a déjà quelques années que je n'ai pas touché un Arduino, mais je me souviens qu'il
    y a une fonction configuration et une fonction boucle.

    La configuration est comme ceci:

    Configuration.PNG

    Un peu d’explications:
    Au commencement, je règle la tension du coeur du processeur pour pouvoir le faire tourner
    à 25 MHz. Donc 1.9V selon les specs. Ensuite, comme il n’y a qu’un quartz horloger à
    32768 Hz, j’utilise la boucle de fréquence (frequency lock loop ou FLL) pour régler la
    fréquence du processeur à 25 MHz.
    NB: Tout le code est disponible chez Texas Instruments (le processeur est un MSP430, la
    carte est de chez Texas). Je l’ai juste traduit en C++ pour le rendre plus facilement
    réutilisable.
    Ensuite, initialisation des différents éléments. Vous n’aurez pas besoin des filtres de
    Kalman Kal1 et Kal2 qui servent pour améliorer la résolution de mesure linéaire. C’est
    tout pour la config.

    Maintenant, pour l'interruption (dont le contenu serait géré par la fonction loop de l'Arduino...
    Mais par contre je ne sais pas s'il est facile d'utiliser des interruption dans l'environnement
    Arduino. À vérifier...).

    Loop.PNG

    Les lignes importantes sont la 82, qui va lire le capteur. 83 et 84 transcrivent la
    valeur brute en angle (degrés). Ensuite, mettre le curseur à la bonne position et
    écrire la valeur. L’angle brut est sur 10 bits, de 0 à 1023, bornes comprises. Donc
    il faut simplement multiplier par 360 et diviser par 1024 pour avoir la valeur en
    degrés.
    Le if un peu plus loin sert à ne pas mettre à jour à chaque fois. Pour un oeil, il est
    inutile de mettre à jour 1000 fois par seconde. 1000 fois, c’est la fréquence du timer
    (voir config, 1000µs, donc 1 ms). C’était utile pour l’application linéaire quand il
    s’agissait d’augmenter la résolution par suréchantillonnage (oversampling), mais là,
    vous n’avez pas besoin de précision, la précision brute du capteur (de l’ordre de 1
    degré) étant bien supérieure à ce que vous demandez (10 degrés).
    Donc en définissant DISPLAY_SKIP à 40, on affichera 1 fois toutes les 40 ms, donc 25
    fois par seconde.
    Ah oui, en relisant les messages plus haut, je précise: il s’agit bien d’un capteur
    absolu. Il n’y a donc pas besoin de capteur de position 0.

    Tout ceci doit être faisable avec Arduino.

    Pascal

  17. #16
    Ke2017

    Re : oh la belle girouette

    peux tu me dire ou trouver le petit capteur? Au moins son petit noms car je ne le retrouve pas sur mes sites habituels. Merci

  18. #17
    Murayama

    Re : oh la belle girouette

    Bonjour!

    peux tu me dire ou trouver le petit capteur? Au moins son petit noms car je ne le retrouve pas sur mes sites habituels. Merci
    Désolé du retard.
    J'avais mis un lien sur un site où on pouvait l'acheter dans un autre article, là où j'avais fait le premier prototype
    pour une mesure linéaire. Remontez de quelques pages, il s'agissait aussi d'un encodeur (mais linéaire) et d'Arduino.
    Le chip s'appelle TW11.
    Il vous faudra un circuit d'adaptation parce que c'est un boîtier QFN. Si vous googlez QFN16 to DIP breadboard
    et que vous choisissez les résultats images, vous en aurez un char et une barge.

    Bon, ben y'a pus qu'à!

    Pascal

  19. #18
    Ke2017

    Re : oh la belle girouette

    Citation Envoyé par Murayama Voir le message
    Bon, ben y'a pus qu'à!

    Pascal
    milles merci, j'ai commander le materiel. je vais me familiariser avec l’environnement arduino au travers de t'es conseils. je vous tiens au courant.

  20. #19
    Murayama

    Re : oh la belle girouette

    Bonjour!

    À tout hasard, vu que ma responsabilité semble engagée, voici un schéma. C'est un circuit que
    j'ai réalisé, son fonctionnement est testé dans cette configuration là.

    screenshot_1011.png

    Quelques détails: Sur les 16 pins, il y en a beaucoup qui sont définis, à la masse, etc. Ce qu'il vous faut,
    c'est le +3V, la masse, et les signaux du SPI (MISO, MOSI, CLOCK, CS). Le reset du chip peut être utile,
    alors à tout hasard, câblez aussi TW_RST sur un GPIO. Je ne me suis pas servi de TW_REQ, et je ne sais
    d'ailleurs plus si c'est un signal qu'on envoie pour demander un échantillon ou le contraire, le chip dit
    qu'il a un échantillon de prêt.
    Ce que j'ai fait était décrit dans mon programme:
    1. Génération d'une interruption à un certain rythme que vous définissez.
    2. À la réception de l'interruption, vous allez lire le chip et vous utilisez les données.

    En ce qui concerne la soudure, chacun sa méthode, mais j'ai décrit la mienne il y a peu de temps: vous
    étamez les pistes, vous chauffez en maintenant le chip, et c'est soudé. Une fois qu'un côté est collé,
    vous soudez les 3 autres en apportant de la soudure. Et vous refaites le premier côté parce qu'il n'est
    pas forcément bien soudé (c'est pourquoi j'ai dit "collé" ci-dessus). Pour que ce soit bien soudé, le flux
    à l'intérieur de la soudure est indispensable.

    Ah oui, avec une panne en forme de tounevis plat, l'avantage est que vous soudez les 4 pins à la fois.
    Ne pas s'inquiéter, s'il y a du flux, il n'y aura pas de pont. Il faudrait que je fasse une video... Ça parait
    toujours un peu farfelu de souder un composant qui est plus petit que la panne du fer, mais ça marche
    tellement bien et c'est tellement rapide que ça vaut la peine d'essayer.

    Dans la video suivante, il y a une autre méthode:

    https://www.youtube.com/watch?v=-1jmYkNXOAI

    Je ne comprends pas comment on peut travailler avec un fer aussi crade, mais bon, il y arrive.
    Et comme vous pouvez le voir, (il y a un commentaire), il n'y a pas de pont de soudure.

    Autre méthode:

    https://www.youtube.com/watch?v=lhOKSqipwqg

    Bref, cherchez, il y a à peu près autant de méthodes que de techniciens. En ce qui me concerne, je n'utilise
    pas d'autre flux que celui qui est dans la soudure. (Sn Ag Cu, sans plomb).

    Voilà!

    Pascal

  21. #20
    mag1

    Re : oh la belle girouette

    Bonjour,

    En #8, je signalais un module boussole GY-273, ces modules ont plusieurs niveaux de sensibilité (du champ terrestre à 8 gauss).

    En faisant tourner un aimant au dessus, il y peut être une solution simple et précise. J'en ai commandé un, résultat dans... le temps que la boussole trouve son chemin.

    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  22. #21
    Murayama

    Re : oh la belle girouette

    Bonjour!

    Oui, c'est probable que ça marche avec une précision suffisante. Il faudra juste
    éloigner suffisamment l'aimant pour éviter la saturation parce que 8 gauss, ce n'est
    pas beaucoup. Et ne pas trop l'éloigner non plus pour ne pas capter le champ terrestre.
    En plus, la carte est déjà câblée, ce qui simplifie le travail, surtout quand on n'a jamais
    soudé de QFN.

    Pascal

  23. #22
    Ke2017

    Re : oh la belle girouette

    Cool de t'investir avec moi XD.

    J'ai vu sur le net des girouette anémomètre à ultrason.
    Il y as quelques tuto à ce sujet pour des DIY et ça me semble pas mal aussi ...

    Vous en pensez quoi?

  24. #23
    Murayama

    Re : oh la belle girouette

    Bonjour!


    Je ne suis pas fan des des systèmes entièrement statiques pour ce genre d'application.
    Dans le cas d'une girouette ordinaire, même si l'électronique a des vapeurs, on peut
    tout de même voir la girouette, donc avoir tout de même une valeur approximative.
    Et puis les ultrasons, il faut faire 2 mesurees en XY. Ou 4 (une dans chaque sens sur
    chaque axe). Puis calculer l'arc tangeante du rapport. Mais on ne peut pas faire les
    mesures en même temps. Et le vent près des voiles est assez turbulent. On ne peut pas
    être sûr que la direction n'aura pas changé pendant les 2 mesures qui définissent votre
    angle. Quid de la précision, je ne saurais le dire.
    Mais bon, ceci dit, si ça se fait, c'est que ça doit tout de même un peu fonctionner.


    Pascal

  25. #24
    Ke2017

    Re : oh la belle girouette

    Salut,

    j'ai commencé a recevoir mes Equipements mais je ne m'en sort pas !

    Je me sent un peu blaireau mais est ce que quelqu'un aurais la gentillesse de me faire un programme?
    Je suis prêt a rémunéré celui qui voudras bien m'aider mais mon truc a moi c'est les bateaux ! pas la prog ^^^
    Je m'occupe de " la mécanique", possibilité de vous envoyer les elements ...

    Par avance merci a vous et si l'un d'entre vous est de la Rochelle ou a envie d'y passer quelques jours faire du bateau pour découvrir son programme en fonction se seras avec plaisirs. -> hébergement possible à bord !

  26. #25
    mag1

    Re : oh la belle girouette

    Citation Envoyé par Ke2017 Voir le message
    Salut,
    j'ai commencé a recevoir mes Equipements mais je ne m'en sort pas !
    Bonjour,

    "Le responsable" va repasser.

    Entre temps, j'ai vu un système de girouette avec deux capteurs à effet hall linéaire, placés à 90°, avec un aimant tournant au milieu.
    On obtient deux sinusoïdes en quadrature, en entrant dans une table, on connait l'angle.

    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  27. #26
    Murayama

    Re : oh la belle girouette

    Bonjour!

    "Le responsable" va repasser.
    Si c'est de moi que vous parlez, je n'ai jamais su repasser. C'est ce qui fait que
    j'ai opté depuis longtemps pour des chemises blanches infroissables qui feraient
    blêmir BHL pire que lors de ses nombreux entartages.

    Entre temps, j'ai vu un système de girouette avec deux capteurs à effet hall linéaire,
    placés à 90°, avec un aimant tournant au milieu.
    On obtient deux sinusoïdes en quadrature, en entrant dans une table, on connait l'angle.
    Ben c'est exactement ce que fait ce chip. Sauf qu'il y a 3 capteurs à 120 degrés.
    Et d'une manière générale, les sinusoïdes en quadrature, c'est la base de TOUS les
    encodeurs récents, qu'ils soient optiques ou magnétiques. Et dès que vous avez besoin
    de plus de, disons 1000 ou 2000 points par tour, alors la seule solution est de se
    colleter avec du traitement analogique sin / cos avant convertisseur AD. Même les
    "resolvers" fonctionnent sur ce principe après démodulation.

    À tout hasard pour ceux qui auraient envie d'essayer, il faut absolument calibrer
    les signaux. Suffisamment grands pour avoir une résolution correcte avec l'ADC du
    microcontrôleur que vous utilisez. Et pas trop pour ne pas "clipper". Et il faut
    aussi calibrer la phase, ce qui est un peu technique, mais peut se faire avec quelques
    amplis op. Si la phase n'est pas exactement à 90, on a un lissajous elliptique, une
    erreur d'angle. Et il faut aussi calibrer l'offset. Dans l'ordre, calibrer d'abord
    l'offset, ensuite la phase, et l'amplitude.
    Bref, fait en discret, c'est une usine à gaz, ce qui fait que l'utilisation d'un chip
    dédié est de loin la solution la plus simple.

    Je me sent un peu blaireau mais est ce que quelqu'un aurais la gentillesse de me faire un programme?
    Ce n'est pas une question d'être un blaireau ou pas. Si c'est votre première réalisation,
    on peut dire que vous n'avez pas pris le plus simple pour commencer, mais il n'y a pas
    de quoi se décourager.
    Dans la liste de ce qui peut merder:
    - Soudure sèche. Le chip est assez petit, et si on n'est pas habitué à souder des QFN,
    c'est une panne probable.
    - Aimant mal placé. Je m'aperçois que j'avais oublié d'en parler, mais comme vous avez
    pu le voir, l'aimant que j'ai utilisé est cylindrique. MAIS: sa magnétisation est radiale,
    et non axiale. Sinon, le chip verrait toujours le même champ, que ça tourne ou pas.
    En clair, l'axe de magnétisation de l'aimant doit être perpendiculaire à la normale
    au chip. Ou en d'autres termes, l'axe nord-sud de l'aimant doit être contenu dans un
    plan parallèle à celui de la surface du chip.
    - Ensuite, il peut y avoir des problèmes de programmation. Vous utilisez Arduino?
    J'ai juste utilisé Arduino une fois pour voir ce que c'était. J'ai vu. J'ai allumé
    une LED et fait quelques programmes, mais j'ai préféré continuer avec les cartes
    Launchpad de Texas.

    Je suis prêt a rémunéré celui qui voudras bien m'aider mais mon truc a moi c'est les
    bateaux ! pas la prog ^^^
    Je peux vous le faire, mais ça va vous coûter un max en chocolats! Non, sérieux, attendez
    que je reprenne le boulot au labo et je vous fais un programme simplifié sur une Launchpad.
    NB: ce Lundi est férié. Et puis je fais en principe en priorité le boulot qui me nourrit, mais
    je vais voir lors de mes pauses café cette semaine.
    Je vais en fait simplifier celui que j'ai fait pour qu'il tienne en 1 page, et je verrai
    si je peux trouver un LCD plus standard.

    Par avance merci a vous et si l'un d'entre vous est de la Rochelle ou a envie d'y passer
    quelques jours faire du bateau pour découvrir son programme en fonction se seras avec
    plaisirs. -> hébergement possible à bord !
    Chiche! J'attendrai au bistrot du port, histoire de ne pas gerber mon quatre heures,
    ce qui serait incongru devant les filles de la Rochelle.

    Affaire à suivre.

    Pascal

  28. #27
    Ke2017

    Re : oh la belle girouette

    YEAAAAH ! De l'aide !

    Effectivement c'est ma première création et sans doute la seule ! non pas que je soit décourager mais simplement que j'ai découvert que ce n’était pas pour moi ( chacun son truc après tout, je suis pas très branché informatique à la base ^^)

    Pour le programme je te propose de t'envoyer tout les équipements que j'ai acheter pour les faire fonctionner ensemble ou alors tu me donne tout ce que je dois acheter). après je m'occuperais de la partie " mécanique" avec des fichiers 3D pour aller les faire imprimer ( le dessin indus c'est mon truc, enfin ça l'était , j'ai fait ça pendant 6 ans).

    Pour info le projet a un réel intérêt pour pas mal de navigateur. je ne souhaite pas en faire un commerce mais je divulguerais sans doute cela autour de moi.
    Une centrale de navigation ( projet final) dont le dépannage est simple et toujours possible avec des fonctions de base à moindre coût ...

    Aujourd'hui les produits du commerce les plus simples n'on qu'entre 20 et 30% d’utilité et coûtent entre 4000 et 6000 euro. Et autant vous dire que quand les 1% des 20% utiles merde. c'est tout qui est mort. ( je parle là du projet final , la centrale de navigation)

    ce serait simpas que l'on parle de tout celà en message privé Pascal. biensur je ferais suivre l'avancé du projet sur le forum.

  29. #28
    Murayama

    Re : oh la belle girouette

    Bonjour!

    Je ne sais pas si vous êtes toujours là, mais voici un programme simplifié qui fonctionne.
    J'ai été un peu plus sollicité que prévu, ce qui a causé mon retard.
    J'ai fait pour que le programme tienne en un seul fichier, ce qui n'est pas la façon la plus
    élégante de programmer, mais en tout cas c'est la plus efficace quand il s'agit de faire un
    programme exemple.
    - Il n'y a pas de sortie LCD. La seule chose que le programme fait, c'est de lire la valeur
    du registre d'angle toutes les 50 ms environ.
    - Le timing utilise le VCO interne et n'est donc pas précis. Mais il n'y a pas besoin de précision.
    L'horloge est autour de 1 MHz.
    - Le programme principal tient en 6 lignes, configuration et démarrage des interruptions.
    - La LED orange ne sert à rien, je l'ai mise juste pour avoir un point qui me permette de
    vérifier la fréquence à l'oscillo.

    Ce que le pogramme fait:
    - Configuration du timer, et du SPI
    - Lecture du capteur d'angle à chaque interruption.

    Voilà.

    Pascal



    Code:
    #include "MSP430F5529.h"
    
    
    typedef unsigned long uint32;
    typedef unsigned short uint16;
    typedef unsigned char uint8;
    
    
    //  Definition of the LED related GPIOs, which will be used to measure the
    //  processing time with the scope.
    #define LED_PORT_DIR    P8DIR
    #define LED_PORT_OUT    P8OUT
    #define ORANGE_LED      0x02
    #define GREEN_LED       0x04
    //  Definition of the sensor signals
    #define TW11_CS         0x40
    #define TW11_RESET      0x10
    #define Select()        (P2OUT &= ~TW11_CS)
    #define Deselect()      (P2OUT |= TW11_CS)
    #define SPI_BITS        0x07
    
    
    //  Function prototypes
    void GPIOInit(void);
    void SPIInit(void);
    void TimerInit(void);
    uint8 SPIWriteByte(uint8 b);
    uint16 ReadSensor(void);
    void TW11Reset(void);
    
    
    void main( void ) {
        WDTCTL = WDTPW + WDTHOLD;
        GPIOInit();
        SPIInit();
        TW11Reset();
        TimerInit();
        __bis_SR_register(LPM0_bits + GIE);
    }
    
    
    void GPIOInit(void) {
        LED_PORT_DIR |= ORANGE_LED | GREEN_LED;     //  Enable LED pins output mode
        LED_PORT_OUT = 0;                           //  Off by default
        P2DIR |= TW11_CS | TW11_RESET;              //  Enable control pins
        P2DIR = TW11_CS | TW11_RESET;               //  Set control pins to 0
        P2OUT = TW11_CS | TW11_RESET;
     }
    
    
    void SPIInit() {
        P3SEL |= SPI_BITS;                          //  Change the output assignment from default output to SPI
        UCB0CTL1 |= UCSWRST;                        //  Put SPI engine to reset mode in order to configure it.
        UCB0BRW = 2;                                //  Max possible bit rate for current clock frequency
        UCB0CTL0 = UCSYNC   |                       //  SPI is synchronous
                UCMST       |                        //    Master mode
                UCMSB;                              //  Transmit most significant bit first.
        UCB0CTL1 |= UCSSEL_2;                        //    Select Sub Master clock (SMCLK)
        UCB0CTL1 &= ~UCSWRST;                       //  Enable SPI engine
    }
    
    
    void TimerInit(void) {
        TBCCTL0 = CCIE;                             //  CCR0 interrupt enabled
        TBCCR0 = 54000;                             //  Timer period
        TBCTL = TBSSEL_2 + MC_1 + TBCLR;            //  SMCLK, contmode, clear TBR
    }
    
    
    uint8 SPIWriteByte(uint8 b) {
        uint8 retval;
        UCB0IFG &= ~UCTXIFG;
        UCB0TXBUF = b;                              //  Send the parameter
        while(!(UCB0IFG & UCRXIFG));                   //  Wait until byte is sent (and therefore something is received)
        retval = UCB0RXBUF;                         //  Get received value
        return retval;                              //  return received value
    }
    
    
    uint16 ReadSensor(void) {
        uint16 retval;
        uint8 * retbuf = (uint8 *)(&retval);
        Select();
        retbuf[1] = SPIWriteByte(0);
        retbuf[0] = SPIWriteByte(0);
        Deselect();
        retval &= 0x03FF;                    //    Return only 10 bits
        return retval;
    }
    
    
    void TW11Reset(void) {
        P2OUT &= ~TW11_RESET;
        __delay_cycles(50000);
        P2OUT |= TW11_RESET;
    }
    
    
    #pragma vector=TIMER0_B0_VECTOR
    __interrupt void Timer0B0_interrupt(void) {
        static uint32 sensorval;
        _DINT();            //  Avoid nested interrupts
        LED_PORT_OUT ^= ORANGE_LED;
        sensorval = ReadSensor();
        if(sensorval > 1) LED_PORT_DIR |= GREEN_LED;
        else LED_PORT_DIR &= ~GREEN_LED;
        _EINT();            //  Reenable interrupts
    }

Discussions similaires

  1. Girouette sur RS232
    Par malo777 dans le forum Électronique
    Réponses: 13
    Dernier message: 21/11/2014, 11h55
  2. Actu - Science décalée : la belle-fille provoque la ménopause de la belle-mère
    Par RSSBot dans le forum Commentez les actus, dossiers et définitions
    Réponses: 5
    Dernier message: 28/08/2012, 20h11
  3. La Lune et la girouette
    Par jbfe dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 11
    Dernier message: 04/10/2011, 12h15
  4. Girouette electronique
    Par planoss dans le forum Électronique
    Réponses: 1
    Dernier message: 17/06/2009, 08h17
  5. La lune et la girouette
    Par jbfe dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 32
    Dernier message: 25/10/2008, 12h21