aide en c
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

aide en c



  1. #1
    invite78b3ecc4

    aide en c


    ------

    salut

    j'un mini projet un microcontroleur qui command atravers bus IIC un afficheur LCD j'ai 2 problemes

    1 comment programmer en c apres un appuie prolonger de 3 secondes sur BP on a une action quelconque ,
    merci d'avance

    -----

  2. #2
    invite5637435c

    Re : aide en c

    Bonjour,

    déjà il faudrait reformuler ta question car là personnellement je ne comprend rien.

  3. #3
    invite7b23d5a7

    Re : aide en c

    Bonjour,
    tu as 2 méthodes possible (à ma connaissance)
    ==>la premiere qui est très peu utilisé et tu vas comprendre pourquoi est le "delay_cyles (durée)" ceci est une tempo ayant pour argument durée qui correspond au nbres de cycles d'horloge nécessaire pour atteindre le temps que tu désires (si ton micro est cadencé à 1Mhz un cycle d'horloge est donc 1/1MHz) donc pour 3s il te reste plus qu'à faire le calcul (je ne tiens pas compte du type de l'argument (int, long...))
    le probleme avec cette méthode est (tiens toi bien) que ton micro est bloqué pendant TROIS secondes sur cette instruction, donc pendant ces 3 secondes tu ne peux rien faire d'autre
    ==> la 2eme methode qui est très très très employée, est une temporisation via une interruption timer ou un évènement périodique externe (exemple:le secteur).
    je vais parler uniquement de la methode dite IT TIMER.
    généralement ton micro possede une voir plusieurs interruption timer,
    celle ci est appelé "indéfiniment"(après l'avoir configurer correctement) à un temps défini par tes soins, admettons que tu donnes un temps de 20ms, donc toutes les 20ms ton" interruption timer "va etre appelé, alors maintenant si tu mettais une variable TEMPO dans cette interruption est celle ci s'incrementerai de 1 à chaque fois que l'interruption est appelé... t'as compris le truc
    l'avantage de cette méthode est que tu ne restes pas bloqué sur une instruction contrairement à la 1ere solution

  4. #4
    invited65bb93b

    Re : aide en c

    Bonjour a tous

    Je suis tombé ici par hasard, et comme quoi le hasard fais bien les chose, car je suis intéressé par cette remarque pertinente.

    Pourrai tu compléter les info que tu donné ici, cette idée de tempo via les interruptions ma l'air complexe mais fort intéressant.

    Bonne journée a tous

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

    Re : aide en c

    Salut,

    La temporisation par interruption de timer est très utilisée, elle permet d´avoir une base de temps précise et soit de faire autre chose en attendant la fin du delais ou de mettre l´µC en mode basse conso.

    La plupart des microcontroleurs intègrent des Timers, ce sont des compteurs qui s´incrémentent à chaque front d´horloge (donc à la fréquence de l´horloge utilisée pour "commander" le Timer).

    Tu définis donc la valeur du timer pour laquelle tu veux qu´il fasse la demande d´une interruption, tu le remets à zéro et tu le lance...
    Au bout du temps x (valeur du timer/fréquence horloge) il envoi une requête d´interruption au CPU.

    Ce qui te permets par exemple d´incrémenter un compteur de secondes, minutes et/ou heure (et pourquoi pas jour, mois, années) à chaque interruption du timer.
    Les timers sont aussi très utilisés pour créer des bases de temps pour du PWM.

    Ça n´a rien de complexe, il suffit de configurer ton timer comme tu les souhaites et de traiter la routine de traitement d´IT comme tu le souhaites.

  7. #6
    invite5ed70a3a

    Re : aide en c

    salut à tous,
    Je dois faire une tempo de 3s pour un programme en C en utilisant le timer 1 d'un µC à base de 8051, le pb c'est que je ne comprends pas bien comment faire une tempo avec un timer, est la description des paramètres composants un timer, les interruptions...
    Pour faire simple je dois introduire une tempo de 3s dans une boucle if:
    Si (carte_sous_puis==1){
    //tempo de 3s
    si (etat_moteur==0)
    envoi_puis_moteur=0;
    else
    envoi_puis_moteur=1;
    }

  8. #7
    invite5637435c

    Re : aide en c

    Bonjour,

    lil-vince à expliqué le principe, si vous savez ce qu'est un timer sur un µC type 8051 il ne doit pas subsister de problème.
    Quand votre timer déborde il génère une interruption qui vous permet d'incrémenter ou d'activer une variable (par exemple tempo_3s), selon un nombre précis de débordements qui vous permettra d'obtenir la ou les tempos désirées.

    Exemple de création de variables temps:
    On considère ici que le timer est réglé pour déborder à 10ms

    Code:
    void tempo (void)
    {
    
            Clock.Flag10ms = 0;     // On efface le flag créé par le
                                                // débordement du timer ("overflow")
                                                // en interruption
            Clock.Compteur10ms++;
    
            if(Clock.Compteur10ms == 10)
            {
                     Clock.Compteur10ms = 0;
                     Clock.Flag100ms = 1;     // tempo 100ms    
                     Clock.Compteur100ms++;
            }
    
            if(Clock.Compteur100ms == 10)
            {
                     Clock.Compteur100ms = 0;
                     Clock.Flag1s = 1;      // tempo 1s
                     Clock.Compteur1s++;
            }
    
            if(Clock.Compteur1s == 60)
            {
                     Clock.Compteur1s = 0;
                     Clock.Flag1min = 1;   // tempo 1mn
                     Clock.Compteur1min++;
            }
    
            if(Clock.Compteur1min == 60)
            {
                     Clock.Compteur1min = 0;
                     Clock.Flag1h = 1;   //tempo 1h
            }
    }
    A+

  9. #8
    invite5ed70a3a

    Re : aide en c

    bonjour,
    Le timer est paramétré pour 4ms, il faut que je multipli par 750 pour obtenir 3s.
    Je n'ai plus les valeurs en tête, elle sont inscrites dans TL1 et TH1.
    Je ne comprends pas bien votre code, qu'est ce :
    Clock.Flag10ms ?
    Clock.Compteur10ms ?
    Clock.Flag100ms ?
    Clock.Compteur100ms ?
    C'est fait longtemps que je n'ai pas utilisé de timer, et ce n'étais pas avec un 8051. Le microcontrôleur ici utilisé est un ds89c450.
    merci.

  10. #9
    invite5637435c

    Re : aide en c

    Ce ne sont que des exemples de variables temps que l'on peut créer pour déclencher des évènements ou des actions calibrés ailleurs dans le programme.
    Il n'est pas rare d'avoir besoin de plusieurs tempos comme la seconde ou la minute, tout dépend de ce qu'on doit faire.
    Le principe est le même avec tout les µC, un timer qui donne la cadence et ensuite on créé des variables de temps qui seront déclenchées ou incrémentées en interruption sur le débordement du timer.
    A+

  11. #10
    invite7b23d5a7

    Re : aide en c

    HULK28, pourquoi tu incrementes pas directement ta variable lors de l'interruption au lieu de passer par un flag et l'incrementer en tache de fond?

    jpense qu'il y aurait moins de risque

  12. #11
    polo974

    Re : aide en c

    Citation Envoyé par morpheus87 Voir le message
    HULK28, pourquoi tu incrementes pas directement ta variable lors de l'interruption au lieu de passer par un flag et l'incrementer en tache de fond?

    jpense qu'il y aurait moins de risque
    Imagine que tu lises les heures et minutes, et que ton IT tombe entre le moment où tu lis l'heure et le moment où tu lis les minutes...

    Si le main risque de durer plus d'un cycle de timer, au lieu d'utiliser un flag, tu utilise un compteur sur un octet (ou un mot de ta machine).

    Autrement, il y a moyen de faire dans la boucle main un :
    disable interrupt
    traitement des tempos
    enable interrupt,
    mais alors, s'il y a d'autres traitements temps réel, ils risquent de prendre du retard, ce qui peut être très grave.

Discussions similaires

  1. aide
    Par invited671add8 dans le forum Physique
    Réponses: 0
    Dernier message: 10/11/2008, 15h00
  2. aide DM
    Par invitefdf293c0 dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 05/10/2008, 13h33
  3. Aide
    Par inviteb2ab9929 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 12
    Dernier message: 04/02/2007, 12h25
  4. Aide
    Par inviteb2ab9929 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 0
    Dernier message: 27/01/2007, 14h22
  5. Aide !
    Par invite303a276a dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 30/08/2006, 12h15
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...