Programme LED
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 56

Programme LED



  1. #1
    invitea24c621b

    Lightbulb Programme LED


    ------

    Bonjour à tous,

    Dans mon projet que je dois réaliser, il y a une partie programmation C. N'ayant pas de notions dans la langage C, je souhaite tout de même créer un programme qui me permettait d'allumer une LED lorsque la valeur de la tension est correcte.

    Pour cela, j'utilise un microcontrôleur PIC 18F2550.

    Voici le schéma de réalisation que j'ai pu trouver sur le net ainsi que son programme C (ce programme permet de faire clignoter deux LEDs):

    Nom : clignotant_18F.gif
Affichages : 184
Taille : 23,4 Ko

    #include <p18f2550.h>

    #pragma config WDT = OFF // watchdog timer OFF

    #pragma config PWRT = ON // power-up timer ON

    #pragma config BOR = ON // brown-out detect ON

    #pragma config FOSC = HS // oscillator HS (quartz 4 MHz)

    #pragma config PBADEN = OFF // PORTB<4:0> pins are configured as digital I/O on Reset

    #pragma config LVP = OFF // low voltage programming OFF



    void temporisation (int max)

    {

    // boucle de temporisation

    int i ;

    for (i = 0 ; i < max ; i++) ;

    }

    void main (void)

    {

    // Initialisation

    TRISB = 0x00 ; // Configuration en sortie des broches RB0 à RB7 du port B

    PORTB = 0xFF ; // On éteint les LEDs

    while (1)

    {

    // On éteint la LED 0

    PORTBbits.RB0 = 1 ; // RB0 = 1

    // On éteint la LED 1

    PORTBbits.RB1 = 1 ; // RB1 = 1

    // Temporisation

    temporisation (7500) ;

    // On allume la LED 0

    PORTBbits.RB0 = 0 ; // RB0 = 0

    // Temporisation

    temporisation (7500) ;

    // On éteint la LED 0

    PORTBbits.RB0 = 1 ; // RB0 = 1

    // On allume la LED 1

    PORTBbits.RB1 = 0 ; // RB1 = 0

    // Temporisation

    temporisation (7500) ;

    // On allume la LED 0

    PORTBbits.RB0 = 0 ; // RB0 = 0

    // Temporisation

    temporisation (7500) ;

    }
    }

    Je dois remplacer la partie rouge du code C par ce que je veux faire (allumer LED verte lorsque la valeur mesurée est dans la plage de valeurs souhaitée / allumer LED rouge lorsque la valeur mesurée est en dehors de la plage de valeurs souhaitée).

    Voici concrètement ce que je dois réaliser : Je fais une mesure de tension avec un multimètre et si la tension est correcte, c'est à dire si elle rentre dans la plage de tension, la LED verte s'éclaire, sinon c'est la LED rouge qui s'éclaire (LED vert éteinte). Il faut imaginer ce montage dans une boite (alim et multimètre intégrés dans la boite).

    Je sais que vous n'allez pas me donner le code en entier, et je comprends très bien. C'est pourquoi je voudrai, afin de bien commencer le programme, savoir comment déclarer cette plage de valeurs : x compris entre 0v et +/- 0.03v.

    Une fois cette plage déclarée, je pourrai poursuivre avec une condition "if" afin de dire si la LED verte dois s'éclairer ou pas.

    -----

  2. #2
    invite655b9112

    Re : Programme LED

    Bonjour,

    Comment comptez vous faire la conversion analogique/numérique ? Autrement dit, comment votre microcontrolleur va t'il interpréter la tension mesurée par le voltmètre ?

    A+

  3. #3
    invitea24c621b

    Re : Programme LED

    Il est vrai que le PIC 18F2550 n'intègre pas de CAN... Je me suis penché sur le PIC 16F88, celui-ci l'intègre. Pouvez vous m'aider pour le programme?

  4. #4
    invite655b9112

    Re : Programme LED

    Bonjour,

    Le CAN fera tout le boulot, ou presque. Une fois la tension convertie en numérique (X), il suffira de comparer cette valeur à un seuil préalablement choisi (S).
    Si X ≥ S alors la LED verte est allumée, sinon LED rouge.
    Reste à déterminer la valeur du seuil, et les entrées sorties.
    A+

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

    Re : Programme LED

    C'est quoi le but final ? parce qu'allumer une led pour une plage de tension on le fait très bien avec un comparateur.
    Tout projet flou conduit à une connerie précise !

  7. #6
    invitea24c621b

    Re : Programme LED

    Le but est de régler un manche (joystick). Il émet une tension à chaque mouvement de ce dernier. Je dois régler les butées, pour cela j'ai une plage de tension (entre 0v et +/- 0.03v). Donc je mesure la valeur de manche avec mon voltmetre, puis à l'aide de mon pic 16F88 je dois dire si la valeur correspond à la plage de tension ou pas (LED verte ou rouge allumée).

  8. #7
    Forhorse

    Re : Programme LED

    J'ai pas compris grand chose, mais je pense à 99% que tu n'as pas besoin de µC pour ça.
    Tout projet flou conduit à une connerie précise !

  9. #8
    invite655b9112

    Re : Programme LED

    En y réfléchissant je suis daccord avec Forhorse, le PIC n'est pas la meilleure solution. Mais pour des valeur a +/- 0.03V faut être précis dans l'électronique pour le comparateur.

    A+

  10. #9
    invitea24c621b

    Re : Programme LED

    Voici le programme que j'ai commencé à faire :

    #include <system.h>


    #pragma DATA _CONFIG, _PWRTE_OFF & _BODEN_OFF & _WDT_OFF & _LVP_OFF & _CPD_OFF & _DEBUG_OFF & _HS_OSC & _CP_OFF

    #pragma CLOCK_FREQ 20000000


    void main( void )
    {

    //Initialisation port A
    porta = 0x00;

    //Initialisation port B
    portb = 0x00;

    //Initialisation port C
    portc = 0x00;

    //Initialisation port D
    portd = 0x00;

    //Initialisation port E
    porte = 0x00;


    //Configuration port A
    trisa = 0x00;

    //Configuration port B
    trisb = 0x00;

    //Configuration port C
    trisc = 0x00;

    //Configuration port D
    trisd = 0x00;

    //Configuration port E
    trise = 0x00;


    //Configuration A/D pins
    adcon1 = 0x06;

    //désactivation du mécanisme de gestion des interruptions
    clear_bit( intcon, GIE );



    //Boucle sans fin
    while( 1 )
    {

    }
    Au niveau de la configuration et de l'initialisation des ports , est ce cohérant?
    De plus, je préfère rester sur le µC car il y a plus de précision vue la plage de valeurs que je dois respecter. Cependant, pouvez m'en dire d'avantage concernant l'idée d'un comparateur. Est ce plus simple à réaliser? Je vois à peu près comment faire mais je ne suis pas expert dans le domaine...

    Merci en tout cas de prendre le temps de m'aider.

  11. #10
    invitefaaca50b

    Re : Programme LED

    une seule LED? une seule entree? un 12F675 / 683 sera amplement sufisant...

  12. #11
    invitea24c621b

    Re : Programme LED

    Non deux LEDs. Une verte pour dire que la tension mesurée rentre dans la plage de tensions, et une rouge pour dire que la tension mesurée est en dehors la plage de tensions.

    Mon programme est il bon?

  13. #12
    invitefaaca50b

    Re : Programme LED

    ton programme je sais pas, mais je reitere qu'un 12F675/683 sera mieux car il a assez d'IO pour faire ce travail.... plus petit et plus adapté.

  14. #13
    invitea24c621b

    Re : Programme LED

    La seule entrée est la valeur qu'indique le voltmètre. J'aimerai savoir par la même occasion, comment coder en C la valeur instantanée du voltmètre (c'est dire la valeur aléatoire)? Puis, comment dire dans le programme que la valeur mesurée rentre bien dans la plage de tension?

  15. #14
    invitea24c621b

    Re : Programme LED

    Merci Franck, je viens de voir la datasheet de 12F683, mais du coup je ne vois plus très bien quels ports configurer dans mon programme...

    De plus, il n'y a personne qui puisse m'en dire plus au niveau de l'idée du comparateur?

  16. #15
    invitea24c621b

    Re : Programme LED

    Personne pour m'aider...

  17. #16
    invitea24c621b

    Re : Programme LED

    J' ai refais le programme avec le PIC 12F683. J'aimerai savoir si la configuration des ports (entrée/sortie) est correcte ainsi que la partie CAN. Egalement, la partie juste après le include. Est ce correcte? Je n'ai pas très bien compris cette partie. Où doit on chercher dans la doc du PIC pour trouver ces données?

    Désolé si je pose trop de questions d'un coup, mais je veux essayer de comprendre au mieux ce que je fais. Merci d'avance pour votre aide en tout cas...

    #include <system.h>


    #pragma DATA _CONFIG, _PWRTE_OFF & _BODEN_OFF & _WDT_OFF & _LVP_OFF & _CPD_OFF & _DEBUG_OFF & _HS_OSC & _CP_OFF

    #pragma config FOSC = HS

    #pragma CLOCK_FREQ 20000000



    void initialisation_port(void)

    {

    //Initialisation GP0
    GP0 = 0x00;

    //Initialisation GP1
    GP1 = 0x00;

    //Initialisation GP2
    GP2 = 0x00;

    //Initialisation GP3
    GP3 = 0x00;

    //Initialisation GP4
    GP4 = 0x00;

    //Configuration GP5
    GP5 = 0x00;

    //Configuration GP6
    GP6 = 0x00;

    //Configuration GP7
    GP7 = 0x00;

    }


    void configuration_port(void)

    {

    //Configuration GP0
    TRISIO0= 0x00;

    //Configuration GP1
    TRISIO1= 0x00;

    //Configuration GP2
    TRISIO2= 0x00;

    //Configuration GP3
    TRISIO3= 0x00;

    //Configuration GP4
    TRISIO4= 0x00;

    //Configuration GP5
    TRISIO5= 0x00;

    //Configuration GP6
    TRISIO6= 0x00;

    //Configuration GP7
    TRISIO7= 0x00;
    }



    void main( void )

    {

    initialisation_port();
    configuration_port();


    //Boucle sans fin
    while( 1 )
    {
    TRISIO1=0b01000000; // GP1 en entrée
    TRISIO2=0b00100000; // GP2 en entrée
    TRISIO4=0b00001000; // GP4 en sortie
    TRISIO5=0b00000100; // GP5 en sortie

    VCFG=1; // VDD
    ADFM=1; // Justification à droite
    CHS1=0b00000000; // sélection de la voie annalogique AN0
    ADON=1; // ADC activé
    GO/DONE=1;

    }

  18. #17
    invite7cf71f12

    Re : Programme LED

    Si tu doit récupéré une valeur analogique, il te faudra utiliser une variable type float.
    Je pense que ca resemble à ca:

    float Ten; // definition de ta variable
    Ten = "ton port CAN"; // affectation de ta valeur

    Mais je ne suis pas sure du tout!
    Après j'imagine que tu dois utiliser une intéruption ou quelque chose dans le genre afin de faire ta mesure de tension continuellement.
    Mais je pense que pour quelqu'un qui n'y connai rien en C ou en Assembler, tu t'ennuis à utiliser un µC.

    Ravi si j'ai réussi à t'éguiller,

    Rémi

  19. #18
    invitea24c621b

    Re : Programme LED

    Merci pour ta réponse rémi.

    Il y aurait la solution du comparateur, mais personne n'a su m'en dire d'avantage... Cependant, j'ai pu avec un peu de recherche, trouver peut être une solution : avec 2 comparateurs (LM324), j'utilise 2 tensions de références (entrée -) que je fixe grâce à un pont diviseur multiple. Du coup, je peux avoir ma plage de tension de référence. Le problème est que la tension d'entrée (entrée +) est strictement supérieur à la tension de référence... Or moi je veux que la tension d'entrée soit supérieur ou égale à la tension de référence.

    Il en résulte donc la question suivante : Par quel moyen puis-je avoir ma tension d'entrée supérieur ou égale à ma tension de ref et non pas quelle soit strictement supérieur?

  20. #19
    invite7cf71f12

    Re : Programme LED

    Tu ne peux pas faire un pont diviseur de tension sur l'entrée+?

  21. #20
    invite655b9112

    Re : Programme LED

    Bonjour,

    pour fixer ton seuil rien de bien compliquer avec un comparateur, un pont diviseur et le tour est joué. Cependant j'ai toujours un problème avec ce montage, c'est la tension que tu veux mesurer. Si j'ai bien compris, tu souhaite mesurer une tension entre -0.03V et +0.03V ? Donc fixer un seuil à 0V ? Si la tension est supérieur ou égale à 0V tu allume la LED verte sinon la rouge. C'est bien ça ?

    A+

  22. #21
    Forhorse

    Re : Programme LED

    Citation Envoyé par ld.remi Voir le message
    Si tu doit récupéré une valeur analogique, il te faudra utiliser une variable type float.
    T'es sérieux quand tu dis ça ? Tu as réfléchi 2 secondes avant de sortir une énormité pareil ?
    Tout projet flou conduit à une connerie précise !

  23. #22
    invitea24c621b

    Re : Programme LED

    Ce n'est pas tout à fait ça kakashi. Je m'explique : je souhaite bien faire une mesure comprise entre +/-0.03v, mais d'après ce que tu dis, le -0.03v ne sera pas pris en compte (c'est à dire que ma LED verte ne s'éclairera pas si je suis à -0.02v admettons) car ma LED s'éclairera lorsque je serai supérieur ou égale à 0v (seuil). Donc le mieux est de fixer mon seuil à -0.03v et d'être supérieur ou égale à ce seuil. Mais la question que je me pose est qu'avec un pont diviseur, puis je arriver à une telle précision (seuil=-0.03v)?

  24. #23
    invite655b9112

    Re : Programme LED

    Re,

    OK, en fait j'avais pas vraiment compris ton montage. Je pensé que tu voulai faire un montage qui allume une LED verte si la tension est entre 0 et +0.03V, et allumer la LED rouge si la tension est entre -0.03V et 0V.

    Donc admettons que le seuil que tu veux fixer soit de -0.03V, avec des résistances classiques (grand public) de la gamme E24, tu aura une précision au mieux de +/-5% donc pour avoir un seuil de 0.03 ça va être très dur. Peut être que faire un montage AOP en amont pourrait améliorer tout ça.

    A+

  25. #24
    invite7cf71f12

    Re : Programme LED

    Citation Envoyé par Forhorse Voir le message
    T'es sérieux quand tu dis ça ? Tu as réfléchi 2 secondes avant de sortir une énormité pareil ?
    Tu te sent fort là?
    Ton but c'est d'aider les gens ou de montrer que tu es plus intéligent qu'eux?
    Tu ferais mieux de gentiment expliquer au lieu de faire ton malin.

  26. #25
    invitea24c621b

    Re : Programme LED

    Citation Envoyé par kakashi1401 Voir le message
    Re,

    OK, en fait j'avais pas vraiment compris ton montage. Je pensé que tu voulai faire un montage qui allume une LED verte si la tension est entre 0 et +0.03V, et allumer la LED rouge si la tension est entre -0.03V et 0V.

    Donc admettons que le seuil que tu veux fixer soit de -0.03V, avec des résistances classiques (grand public) de la gamme E24, tu aura une précision au mieux de +/-5% donc pour avoir un seuil de 0.03 ça va être très dur. Peut être que faire un montage AOP en amont pourrait améliorer tout ça.

    A+

    Merci pour ta réponse, mais pourrais-tu être un peu plus précis au sujet de l' AOP en amont? Il s'agit d'un AOP suiveur? J'ai du mal à voir comment ça pourrait augmenter la précision de mon seuil.

  27. #26
    invite655b9112

    Re : Programme LED

    Re,

    j'ai pas dis que d'utiliser un AOP amélioreré le seuil, mais travailler avec un comparateur sur des tension de l'ordre de +/-0.03V c'est pas raisonable. En faisant un montage amplificateur avant le comparateur tu pourrais travailler avec des tensions bien plus élevées de l'ordre de +/-3V (pour un gain de 100 sur l'AOP). Ca fait un moment que j'ai pas bossé sur ce type de montage, il nous faudrait d'autre avis... je ne suis pas sûr de ce que j'avance.

    A+

  28. #27
    Forhorse

    Re : Programme LED

    Citation Envoyé par ld.remi Voir le message
    Tu te sent fort là?
    Ton but c'est d'aider les gens ou de montrer que tu es plus intéligent qu'eux?
    Tu ferais mieux de gentiment expliquer au lieu de faire ton malin.
    Non, mais je suis curieux de lire tes arguments concernant l'utilisation d'un type de donné "float" pour la lecture d'un ADC de 10bits
    Tout projet flou conduit à une connerie précise !

  29. #28
    invitea24c621b

    Re : Programme LED

    Bonour !

    Le problème est que je n'arrive toujours pas à régler mes seuils comme je le souhaite... En effet, lorsque je "règle " mon pont diviseur multiple je n'arrive pas aux valeurs de seuils souhaitées. Mon autre plage de tension que je dois respecter est 1.45v/1.65v. J'ai testé avec cette dernière mais en vain... Je ne suis pas assez precis. Comment puis-je procéder? J'ai tout essayé.

    Avez vous une (autre) solution à me proposer? Ou pouvez vous me dire si mon début de programme avec le PIC 12F683 est juste (cf post #16)?

    Merci pour vos furtur réponses...

  30. #29
    invite655b9112

    Re : Programme LED

    Bonjour,

    Quel est le problème exactement pour les seuils ? Pas assez de précision ? Pas stable ? Pour le PIC je ne suis pas bien fort en C, je vais m'y penché un peu dessus et je vous donne mon avis.

    A+

  31. #30
    invitea24c621b

    Re : Programme LED

    Je vous remercie de votre investigation que vous apportez à mon égart.

    Avec les valeurs normalisées des résistances (E24), je n'arrive pas à avoir les valeurs exacte de mes seuils. Je n'ai pas de précision. Voici le schéma pour mieux comprendre ce que je veux dire (d'après le schéma, je cherche les valeurs des R. Avec les données fournies sur le schéma à combien sont les valeurs des R?).

    Nom : Sans titre1.JPG
Affichages : 104
Taille : 15,3 Ko


    En outre, concernant la solution du PIC, on m'a parlé du codage assembleur lorsqu'on doit programmer un PIC. Or n'est il pas possible de le faire en C (langage que j'utilise depuis le début)? De plus, je souhaite savoir comment peut on coder en C une valeur qui varie en temps réelle (en entrée) avec toujours le même PIC 12F683?

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. programme gestion led avec arduino
    Par invite039e7366 dans le forum Électronique
    Réponses: 4
    Dernier message: 03/01/2012, 18h29
  2. Recherche programme de commande led (jeux de lumières Noêl)
    Par invite8356f6ee dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 29/12/2011, 19h00
  3. programme pour allumer une led
    Par invitea883d7b1 dans le forum Électronique
    Réponses: 10
    Dernier message: 21/04/2011, 20h05
  4. Réponses: 24
    Dernier message: 14/04/2010, 21h45
  5. Comment faire allumer 1 led, 2 led, 3 led, etc
    Par inviteb70eb1f7 dans le forum Électronique
    Réponses: 5
    Dernier message: 17/07/2008, 21h18
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...