Problème avec notre programmation (Basic)
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Problème avec notre programmation (Basic)



  1. #1
    viko54

    Unhappy Problème avec notre programmation (Basic)


    ------

    Bonjour à tous !

    Je viens à vous car me voilà dans une situation bien embarrassante. Nous avons décidé cette année de traiter le sujet du passage à niveau automatisé (TPE). Nous avons réussi à faire fonctionner toute la partie électronique, le circuit imprimé fonctionne à merveille, mais un problème subsiste
    Nous avons donc du utiliser un microcontroleur PIC16F628, nous l'avons correctement programmé, aucune erreur n'a été recensée lors de la compilation, et de plus, chose tout à fait surprenante, notre programme fonctionne parfaitement sur la plaque de test fournie au préalable par notre professeur.
    Cependant, lorsque que l'on insère le pic sur notre propre circuit imprimé, le comportement de notre système est très douteux...

    A l'origine, lors de la détection du train par le premier capteur, la barrière doit descendre et la signalisation sonore et visuelle doit se mettre en route. Un fin de course (microrupteur) indique alors au pic que la barrière est arrivée à la position désirée et coupe le moteur. Enfin, lorsque le train est détecté par le second capteur, celui-ci donne l'ordre à la barrière de remonter, jusqu'à la verticale (indiqué par le second fin de course).

    Malheureusement, il y a beaucoup de problèmes et le comportement de la barrière est vraiment innatendu. La barrière monte, puis se remet à descendre en cours de route, etc..., et nous pensons que cela ne peut que provenir de la programmation.

    Voici le code source de notre programme, auriez-vous une idée pour savoir d'où provient le problème?

    Code:
    'début du programme'
    program tpe
    
    'déclaration des entrées'
    symbol ILS1 = PortA.3
    symbol ILS2 = PortA.0
    symbol microRupteur1 = PortA.2
    symbol microRupteur2 = PortA.1
    
    'déclaration des sorties'
    symbol buzzerEtLed = PortB.7
    symbol sensDuMoteurPN = PortB.4
    symbol fonctionnementDuMoteur = PortB.1
    
    'variable booléenne pour savoir si un train est passé'
    dim detectionDuTrain as byte
    
    'variable qui sert dans la boucle de la signalisation du train'
    dim booleenPourBuzzerEtLed as byte
    
    'variable qui sert dans la boucle for pour les delay_ms du buzzer et de la led'
    dim i as byte
    
    'fonction qui traite la motorisation de la barrière lors du passage d'un train'
    sub procedure motorisationBarriere
        'motorisation de la barrière'
        while true
             fonctionnementDuMoteur = 1
             i = 0
             buzzerEtLed = 1
    
             if(microRupteur1 = 1) or (microRupteur2 = 1)
             then
                  goto sortieDeBoucle
             end if
        wend
    
        'étiquette qui permet la sortie de la boucle grâce au goto (qui est plus haut dans le for)'
        sortieDeBoucle:
    
        'desactivation du moteur'
        fonctionnementDuMoteur = 0
        buzzerEtLed = 0
    end sub
    
    
    'fonction principale du programme'
    main:
    
         'sert a l'initialisation du PIC
         CMCON = 07
         OPTION_REG = $80
    
         'definition du port A en entrée et du port B en sortie'
         trisa = $FF
         trisb = 0
    
         'initialisation de tout le port A et B a 0'
         porta = 0
         portb = 0
    
         'initialisation des variables a 0'
         detectionDuTrain = 0
         booleenPourBuzzerEtLed = 0
         i = 0
    
         'boucle principale du programme (elle boucle a l'infinie)'
         while true
    
               'recherche si un train est detecté'
               if(ILS1 = 1) or (ILS2 = 1) and (detectionDuTrain = 0)
               then
                    detectionDuTrain = 1
                    sensDuMoteurPN = 1
    
                    'si on a detecté un train on actionne la barriere grâce a l'appel de la fonction "motorisationBarriere"'
                    motorisationBarriere
    
                    'permet la desactivation du buzzer et de la led que quand le train est soit deja passé ou soit quand il n'est pas encore passé'
                    if(booleenPourBuzzerEtLed = 0)
                    then
                         booleenPourBuzzerEtLed = 1
                         buzzerEtLed = 1
                    else
                         if(booleenPourBuzzerEtLed = 1)
                         then
                              booleenPourBuzzerEtLed = 0
                              buzzerEtLed = 0
                         end if
                    end if
               else
                    if(ILS1 = 1) or (ILS2 = 1) and (detectionDuTrain = 1)
                    then
                         detectionDuTrain = 0
                         sensDuMoteurPN = 0
    
                         'si on a detecté un train on actionne la barriere grâce a l'appel de la fonction "motorisationBarriere"'
                         motorisationBarriere
    
                         'permet la desactivation du buzzer et de la led que quand le train est soit deja passé ou soit quand il n'est pas encore passé'
                         if(booleenPourBuzzerEtLed = 0)
                         then
                              booleenPourBuzzerEtLed = 1
                              buzzerEtLed = 1
                         else
                              if(booleenPourBuzzerEtLed = 1)
                              then
                                   booleenPourBuzzerEtLed = 0
                                   buzzerEtLed = 0
                              end if
                         end if
                    end if
               end if
         wend
    end.
    'fin du programme'
    Nous pensons que l'erreur provient de la boucle infinie de la fonction motorisationBarrière car nous avons l'impression qu'elle ne s'éxecute qu'une seule fois, et non pas indéfiniment.

    J'espère que vous allez pouvoir nous aider
    Je vous remercie d'avance,

    Viko54

    -----

  2. #2
    Flyingsquirrel

    Re : Problème avec notre programmation (Basic)

    Discussion déplacée dans le forum d'électronique.

  3. #3
    freepicbasic

    Re : Problème avec notre programmation (Basic)

    y a t il une pull up ou pull down sur les entrées ?
    A+, pat

  4. #4
    viko54

    Re : Problème avec notre programmation (Basic)

    Oui il y a une résistance aux entrées , voyez plutôt mon schéma électrique:
    http://files.journalpc.com/images/schemaelec.bmp

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

    Re : Problème avec notre programmation (Basic)

    Les relais ça fait beaucoup de parasites , il faut découpler le pic avec un réseau RC exemple; 22 ohms et 330µf et 0,1µf.

    Le MCLR est programmé en I/O ?
    voir les bits de config !
    A+, pat

  7. #6
    freepicbasic

    Re : Problème avec notre programmation (Basic)

    Comme je ne connais pas ce compilateur...
    Le compilateur interprète t il bien le 1 ou 0 sur les entrées ou sortie booléennes ?
    (microRupteur1 = 1)


    Le then est après la ligne est ce correct ?
    if(booleenPourBuzzerEtLed = 0)
    then
    normalement on écrit;
    if(booleenPourBuzzerEtLed = 0) then


    sinon je ne vois rien de spécial dans le prog , c'est surement hard.
    A+, pat

  8. #7
    freepicbasic

    Re : Problème avec notre programmation (Basic)

    mettre des condos sur le moteur,
    vérifier si l'alime ne s'effondre pas .

    une alime séparée aurait été mieux...

    Attention au BODEN qui peut reseter le pic !
    A+, pat

  9. #8
    viko54

    Re : Problème avec notre programmation (Basic)

    Salut FreePicBasic,

    Nous avons tout essayé, nous avons fait des centaines d'essais depuis 8 heures ce matin. Nous avons pensé à des faux contacts, à des soucis d'intensité pour alimenter le moteur, à une défaillance de l'horloge, à des interférences de champs magnétiques du à la proximité des relais, etc...

    Mais rien n'y fait, nous ne parvenons pas à faire fonctionner notre système, alors que sur la plaque de test tout est parfait !
    Ce dont nous sommes quasiment sûr c'est que le problème vient bel et bien de la programmation

    Je vous remercie beaucoup pour votre aide !

  10. #9
    freepicbasic

    Re : Problème avec notre programmation (Basic)

    Les interférences sont électriques pas magnétique !
    Avez vous mis un découplage sur l'alime du pic 22 ohms 330µF ?

    méthodes de test du matériel;

    Faites un test sans le moteur en le remplaçant par des leds.
    Pour voir si le moteur est la source du problème

    autre manip
    remplacer les relais par des leds

    faire les contacts manuellement ou avec des inters pour tester si tout se passe bien.

    pour le code;
    Mettre le test des contacts avant sinon le moteur tournera un peu à chaque test quand même.
    Et l'arrêter en sortant !
    Code:
        while true
          if(microRupteur1 = 1) or (microRupteur2 = 1)
             then
                  fonctionnementDuMoteur = 0
                  buzzerEtLed = 0
                  goto sortieDeBoucle
             end if
                fonctionnementDuMoteur = 1
             i = 0
             buzzerEtLed = 1
        wend
    A+, pat

Discussions similaires

  1. Programmation en basic du 16F876
    Par invite4406d345 dans le forum Électronique
    Réponses: 3
    Dernier message: 04/07/2009, 11h20
  2. problème programmation en basic instruction COUNT
    Par invitebf494562 dans le forum Électronique
    Réponses: 0
    Dernier message: 11/02/2007, 10h10
  3. Problème avec Pic basic 1S
    Par invitee66c3aa9 dans le forum Électronique
    Réponses: 0
    Dernier message: 09/02/2007, 19h54
  4. programmation en visual basic
    Par khalid dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 15/04/2006, 18h46
  5. Problème avec visual basic
    Par KHEOPS1982 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 13/08/2004, 23h11
Découvrez nos comparatifs produits sur l'informatique et les technologies.