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

boucles infinies dans un pic



  1. #1
    Montd'est

    Question boucles infinies dans un pic


    ------

    Bonjour,

    je possède un PIC 16F84A , j'utilise le language Pascal, je voudrais savoir si il est possible de faire fonctionner plusieurs " boucles infinies "
    dans le même pic et ce simultanément et sans lien entre elles.

    J'ai essayé plusieurs combinaisons , ça n'a pas marché comme prévu
    voivi un exemple que j'ai essayé :
    ( juste pour l'essai j'ai voulu faire clignoter 2 dels à des fréquences différentes et en même temps)

    Le résultat inattendu est que les 2 dels ( sur port b 3 et b4 )clignotent presque alternativement, même si je met 10ms au lieu de 100;
    [LE watchdog timer est désactivé ]

    program grafcet2boucles;
    Var X0, X1, X2,X3,t2, t ,t3,t4: Byte;
    begin
    TRISA:=$FF;
    TRISB:=$0;
    portB:=0;
    X0:=1; X1:=0; X2:=1;X3:=0;t2:=0; t:=0;t3:=0;t4:=0;
    while (true) do
    begin
    // équations des étapes
    if (( X0=1) AND (t2=1))then
    begin
    X0:=0;
    X1:=1;
    t2:=0;
    end;
    if (( X1=1) AND (t=1))then
    begin
    X1:=0;
    X0:=1;
    t:=0;
    end;

    // équations des sorties:
    if (X0=1) then
    begin
    PORTB.3:=0;
    delay_ms(500);
    t2:=1;
    end;

    if (X1=1) then
    begin
    PORTB.3:=1 ;
    delay_ms(500);
    t:=1;
    end;


    // boucle suivante
    while (true) do
    begin
    if (( X2=1) AND (t3=1))then
    begin
    X2:=0;
    X3:=1;
    t3:=0;
    end;
    if (( X3=1) AND (t4=1))then
    begin
    X3:=0;
    X2:=1;
    t4:=0;
    end;

    // équations des sorties:
    if (X2=1) then
    begin
    PORTB.4:=0;
    delay_ms(100);
    t3:=1;
    end;

    if (X3=1) then
    begin
    PORTB.4:=1 ;
    delay_ms(100);
    t4:=1;
    end;
    end;

    end;


    end.

    Je vous remercie d'avance

    -----

  2. Publicité
  3. #2
    laurentnic

    Re : boucles infinies dans un pic

    Salut

    A ma connaissance il ne peut y avoir q'une boucle infini dans un pic celle ou se trouve le programme principal le main en C.

    je réfléchis sur ton programme

    cordialement

    Laurent

  4. #3
    laurentnic

    Re : boucles infinies dans un pic

    Re salut

    ton programme doit boucler en permanence dans la premiere boucle infini.

    et ne fait pas tout le code après cette boucle infini

    cordialement

    Laurent

  5. #4
    laurentnic

    Re : boucles infinies dans un pic

    ton programme n'est pas très lisible???

    les end et begin sont tous au même niveau!!!!!

    finalement ca boucle peut etre en permanence dans la deuxieme boucle infinie
    j'avais pas vu la position exacte des end;
    à suivre

    Laurent

  6. #5
    abracadabra75

    Re : boucles infinies dans un pic

    Bonjour.
    Par définition, les µc, pic's ou autres peu importe, n' exécutent qu' une seule instruction à la fois.
    Il ne peut donc y avoir 2 boucles infinies qui se déroulent en même temps.
    On peut par contre simuler une pseudo-simultanéité: une seule boucle infinie interrompue par.... devine??? interruption, et qui alors exécute en fonction d' un critère que tu détermines comme tu veux une routine ou une autre.
    A+
    Il n'y a que dans le dictionnaire où 'réussite' vient avant 'travail'.

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

    Re : boucles infinies dans un pic

    Ce que dit abracadabra est bien vrai

    Cela dit le programme en pascal reste à mon avis dans la boucle infini imbriquée dans la premiere boucle infini ce qui ne doit pas donner le resultat attendu

    Car un pic tourne avec une seule boucle infini+ interruptions si necessaire.comme le dit abracadabra

    cordialement

  9. Publicité
  10. #7
    stefjm

    Re : boucles infinies dans un pic

    Ca me rappelle la blague :
    "Il a compté jusqu'à l'infini deux fois de suite..."

    Imbriquées ou à la suites, il m'est impossible de comprendre l'intérêt de deux boucles infinies.
    Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».

  11. #8
    DAUDET78

    Re : boucles infinies dans un pic

    Citation Envoyé par stefjm Voir le message
    il m'est impossible de comprendre l'intérêt de deux boucles infinies.
    Si, dans deux taches complètement indépendantes, on attend un événement externe donc on fait une boucle infinie jusqu'à ce qu'on trouve un bouton poussoir actif.
    Ca, c'est le raisonnement d'un softeux boutonneux qui n'a jamais vu un bouton poussoir

    Comme c'est impossible pour un µprocesseur de le faire, on a inventé les O.S. multi-taches (par exemple OS9 que j'eusse connu et qui est un peu ancien) qui affectent successivement à chaque tâche une portion de temps (slice) de 10 mS (par exemple) du µprocesseur. Et le softeux fait un programme multithread qui marche.

    Evidemment, la bonne méthode, c'est la programmation par interruption si on veut surveiller un événement externe.
    J'aime pas le Grec

  12. #9
    MiGaNuTs

    Re : boucles infinies dans un pic

    Tu n'utilise pas du tout la bonne méthode.
    avec ta façon de faire, peu importe le langage que tu utilisera, ça ne marchera jamais.
    Pour que ça marche, il faut t'inspirer du fonctionnement interne d'un "vrai" automate.
    Une seule boucle infinie, 2 compteurs indépendants, un seul "wait" qui servira a incrément les deux compteurs a la fois.
    tu gère les seuils d'allumage de tes leds en fonction des valeurs de tes compteurs et les remise a zéro de tes compteurs séparément.

    De cette façon, tu peut avoir autant de leds qui clignotent a des fréquences différentes que tu veux (enfin t'est quand même limité par le nombre de sorties et la taille mémoire de ton micro, mais t'est large)


    Apres, si tu veux des fréquences vraiment élevées et précises "au quart de poil de cul" il va falloir utiliser les timers internes du micro, et peut être aussi le module PMW et les interruptions.
    Mais a ces fréquences la, y'a longtemps que ton oeil vois plus la différence.

  13. #10
    MiGaNuTs

    Re : boucles infinies dans un pic

    En langage a la con ca donnerais quelquechose du genre :

    compteur1=compteur2=0
    while(1){
    If compteur1<200
    led1=on
    else
    led1=off
    endif

    if compteur 1>412
    compteur 1=0
    endif

    if compteur 2<45
    led2=on
    else
    led2=off
    endif

    if compteur 2>1048
    compteur2=0
    endif

    wait(un_certain_temps)

    compteur1++
    compteur2++

    }


    Tes deux leds clignoterons a des fréquences différentes, et avec des rapports cyclique différents


    Je te laisse le plaisir de faire les chronogrammes correspondants a mon prog, et la traduction en pascal

  14. #11
    Montd'est

    Re : boucles infinies dans un pic

    Bonsoir,

    Merci à tous pour vos réponses si rapides qui me font réfléchir et qui m'éclaircissent aussi.

    Désolé pour la clarté du programme...

    Je pensais que des composants si complexes capable de "donner vie" un lecteur MP3 par exemple pouvait faire 2 boucles , ça me sembait simple.

    Comme le dit laurentnic j'ai parfois effectivement obtenu une seule boucle alors que la 2 ème était totalement ignorée.

    Et pour ton idée MiGaNuTs j'y avait très brièvement pensé mais je me suis dit que la syntaxe serait trop complexe pour moi qui débute depuis quelques mois ,et que par conséquent que 2 boucles serait plus simple.

    En tout cas merci pour tout , je vais essayer des choses en suivant vos conseils.

  15. #12
    invite76a

    Re : boucles infinies dans un pic

    Bonjour, Montd'est

    C'est bien sûr parfaitement possible de structurer un programmes en boucles indépendantes, qui s'appellent alors des "tâches". C'est même la structure de programmation adoptée sur tout les µCs un peu puissants. Il faut alors bien sûr un séquenceur ou OS ou RTOS pour ordonnancer le tout.
    Un exemple en C qui explique le principe et fait clignoter 2 led à 2 vitesses différentes en "même" temps :
    http://www.68hc08.net/modules/smarts...php?itemid=115

    th.

  16. Publicité
  17. #13
    stefjm

    Re : boucles infinies dans un pic

    Citation Envoyé par DAUDET78 Voir le message
    Si, dans deux taches complètement indépendantes, on attend un événement externe donc on fait une boucle infinie jusqu'à ce qu'on trouve un bouton poussoir actif.
    Ca, c'est le raisonnement d'un softeux boutonneux qui n'a jamais vu un bouton poussoir

    Comme c'est impossible pour un µprocesseur de le faire, on a inventé les O.S. multi-taches (par exemple OS9 que j'eusse connu et qui est un peu ancien) qui affectent successivement à chaque tâche une portion de temps (slice) de 10 mS (par exemple) du µprocesseur. Et le softeux fait un programme multithread qui marche.
    Si on a droit à un noyau multi-tâche alors...
    http://www.picos18.com/Docs/MCP_prag...seminar_FR.pdf

    Citation Envoyé par DAUDET78 Voir le message
    Evidemment, la bonne méthode, c'est la programmation par interruption si on veut surveiller un événement externe.
    Ou comme signalé par d'autres, la scrutation périodique avec un chien de garde.
    D'ailleurs, dans le post initial : [LE watchdog timer est désactivé ]

    Je reserverais la programation par interruption aux évènements fugitifs qu'on ne veut surtout pas rater.

    Cordialement.
    Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».

  18. #14
    stefjm

    Re : boucles infinies dans un pic

    Citation Envoyé par Montd'est Voir le message
    je possède un PIC 16F84A , j'utilise le language Pascal, je voudrais savoir si il est possible de faire fonctionner plusieurs " boucles infinies "
    dans le même pic et ce simultanément et sans lien entre elles.
    Il faut du PIC18 apparament.
    http://www.picos18.com/
    Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».

  19. #15
    MiGaNuTs

    Re : boucles infinies dans un pic

    un os temps réel et un pic18 pour un problème aussi "simple" que de faire clignoter 2 leds a des fréquences différentes, c'est sortir le lance roquettes pour tuer une mouche.
    notre camarade nous confie être débutant hein.

    Sur les bon vieux automates styles PB15 des années 70/80 on faisait très bien ce genre de choses, alors que les programmes s'exécutaient dessus tellement lentement qu'on arrivais presque a les "tracer" de tête.

    S'inspirer de ce genre de choses me semble plus adapté et didactique.


    J'ai du mal a suivre cette tendance a utiliser des solutions de plus en plus compliquées pour résoudre des problèmes qui sont parfois très simples.

  20. #16
    alainav1

    Re : boucles infinies dans un pic

    bonjour,
    pour repondre à migatus
    c'est plus difficile de faire simple que de faire compliqué !
    cordialement
    Alain
    Décider de faire, c'est bien . Décider quand, c'est mieux !

  21. #17
    stefjm

    Re : boucles infinies dans un pic

    Citation Envoyé par MiGaNuTs Voir le message
    un os temps réel et un pic18 pour un problème aussi "simple" que de faire clignoter 2 leds a des fréquences différentes, c'est sortir le lance roquettes pour tuer une mouche.
    notre camarade nous confie être débutant hein.
    [...]
    J'ai du mal a suivre cette tendance a utiliser des solutions de plus en plus compliquées pour résoudre des problèmes qui sont parfois très simples.
    Bien sûr qu'il faut faire simple, mais après tout, on a peut être à faire à un débutant en multitâche qui fait son "hello world"?
    C'est la question initiale "plusieurs " boucles infinies " dans le même pic et ce simultanément et sans lien entre elles." qui nous a conduit à parler multitâches (plus que temps réel d'ailleurs)
    Ca m'a tenté de chercher s'il existait des noyaux multitâches sur pic et je suis tomber sur picos18. Comme j'avais le lien sous la main, je l'ai inclus dans le fil.

    En programmation séquentielle, imbriquer ou cascader deux boucles infinies n'a pas grand sens.

    Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».

Sur le même thème :

Discussions similaires

  1. Egalité de limites infinies
    Par Seirios dans le forum Mathématiques du collège et du lycée
    Réponses: 6
    Dernier message: 11/12/2008, 16h31
  2. calcul branches infinies
    Par yves22 dans le forum Mathématiques du collège et du lycée
    Réponses: 6
    Dernier message: 07/12/2008, 14h45
  3. Détermination de branches infinies
    Par citron_21 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 24/08/2008, 15h23
  4. triangle à deux longueurs infinies
    Par julien_4230 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 30/01/2008, 23h42
  5. cheveux bouclés
    Par Latouffe dans le forum Biologie
    Réponses: 12
    Dernier message: 23/07/2005, 04h47
Découvrez nos comparatifs produits sur l'informatique et les technologies.