pic 16f877 et ccs
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

pic 16f877 et ccs



  1. #1
    invitee8a0b493

    pic 16f877 et ccs


    ------

    bonjour,
    j'ai un petit problème dans mon programme j'espère que vous pouvez m'aider.
    sans que j'entre trop dans les détail du programme, mon problème est le suivant:
    le pin B1 est relié à un relais qui commande un moteur, je veux que ce pin soit à 0 au repos et puis à un certain moment on doit la mettre à 1 pour une duré du temps pour faire tourner le moteur et ensuite on le remet à 0.
    j'ai utiliser ces instructions:
    output_high(pin_B1);
    output_low(pin_B1);
    mais ca n'a pas marcher
    je n'ai pas configurer le pin ni en entree ni en sortie est ce que je dois le faire?

    -----

  2. #2
    vincent66

    Re : pic 16f877 et ccs

    Bonjour !
    Oui il faut le configurer en sortie !
    Vincent
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  3. #3
    invitee8a0b493

    Re : pic 16f877 et ccs

    merci pour votre aide,
    j'ai configuré le port B en sortie, mais le probléme reste toujours ; le pin ne se remet pas à 0 lors de l'execution de output_low(pin_B1);

  4. #4
    vincent66

    Re : pic 16f877 et ccs

    Ceci peut être dû au hardware externe, un petit schéma de la partie concernée ..?
    Vincent
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

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

    Re : pic 16f877 et ccs

    bonjour,
    un petit schema , avec les caracteristiques du relais, en particulier la valeur de la bobine (en ohms)
    et sa tension nominale.
    Diode anti-retour aux bornes de la bobine ? sinon tres riski! pour la sortie PIC
    Habituellement on intercale un transistor entre une sortie PIC et un relais.

  7. #6
    invitee8a0b493

    Re : pic 16f877 et ccs

    j'ai mis une led a la sortie du pin pour tester.
    je vous envoie le code et la simulation sur ISIS, et je vous explique mieux ce que je veux faire: à l'apui sur le bouton start je comande le relais, le moteur tourne et le capteur capte les tours du moteur, j'incrémente un compteur a chaque tour, lorsque les tours sont égale à 70 j'arrête le moteur et je remis le compteur à zero.
    dites moi si vous voulez que je vous explique d'avantage.
    merci

    le code:
    #include <16F877.h>
    #include<stdlib.h>
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=20000000)
    #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

    int16 compteur1=0;

    #int_ccp1 //fonction d'interruption a chaque capture ccp1
    void isr()
    {
    compteur1++; //incrementation du compteur
    printf("compteur1=%lu\n\r",com pteur1);
    if(compteur1==70)
    {
    output_low(pin_B1); //arrêt moteur (désactiver la bobine du relais)
    printf("hh");
    compteur1=0; //remise a zero compteur
    }
    }

    void main()
    {
    set_tris_b(0b00000000); //configuration du port B en sortie(commande relais)
    set_tris_c(0b11111111); //configuration du port C en entrée (capteur)
    set_tris_d(0b11111111); //configuration du port D en entrée (bouton start)

    setup_ccp1(CCP_CAPTURE_RE); // Configure CCP1 to capture rise
    setup_timer_1(T1_INTERNAL); // Start timer 1

    enable_interrupts(INT_CCP1); // Setup interrupt on rising edge
    enable_interrupts(GLOBAL);

    output_low(pin_B1); //relai initialement désactivé

    while(1)
    {
    int test1=0;
    while(test1==0)
    {
    if(input(pin_D1)==1) //si bouton start est appuié
    {
    output_high(pin_B1); //activer le relais
    test1=1;
    }
    }
    }
    }
    Images attachées Images attachées  

  8. #7
    invitee8a0b493

    Re : pic 16f877 et ccs

    merci paulfjuj,
    oui je sais, c'est ce que je vais faire, mais mon problème maintenant dans la programmation du pic

  9. #8
    umfred

    Re : pic 16f877 et ccs

    à mon avis, ton programme ne se lance même pas. le PIC n'a aucun oscillateur/quartz de connecter sur ses pins OSC1/OSC2 et à ma connaissance (et y compris dans la datasheet) le pic 16f877 ne possède pas d'oscillateur interne.
    Sauf si ISIS sait le faire fonctionner sans que l'oscillateur soit présent.
    pour t'en convaincre, teste avec ce code dans le main et en mettant une led (avec une résistance série) sous isis:
    Code:
    void main()
    {
    set_tris_b(0);
    while(1)
    {
    output_b(0xFF);
    delay_ms(500); // tu peux mettre moins ou utiliser delay_us(x) 
    output_b(0);
    delay_ms(500);
    }
    }
    nota: déclare ta variable "int test1=0;" au début du main, ça fait plus propre

  10. #9
    invitee8a0b493

    Re : pic 16f877 et ccs

    bonjour umfred,
    Si, mon programme se lance, ISIS peut simuler sans oscillateur.
    j'ai tester ton code et ca marché, mais le problème dans mon code est dans cette boucle mais je n'arrive pas à le détécter:
    while(1)
    {
    test1=0;
    while(test1==0)
    {
    if(input(pin_D1)==1) //si bouton start est appuié
    {
    output_high(pin_B1); //activer le relais
    test1=1;
    }
    }
    }

  11. #10
    invitee8a0b493

    Re : pic 16f877 et ccs

    salut tous le monde,
    j'ai trouvé l'erreur, le problème n'était pas avec le code c'était avec ISIS ; j'ai remplacer l'alimentation du bouton 5V continu avec des impulsions de 5V et ca marché, mais je ne sais pas pourquoi est ce que quelqu'un as une explication?

  12. #11
    Antoane
    Responsable technique

    Re : pic 16f877 et ccs

    Bonjour,
    Isis ne simule effectivement pas l'oscillateur.
    Il faut mettre la broche MCLR à 1.
    Il faut une résistance en série avec la led (~470ohm)
    il faut ajouter des résistances de pull-down sur les entrées du µC.

    C'est beau la simu
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  13. #12
    umfred

    Re : pic 16f877 et ccs

    déjà ta variable test1 ne sert strictement à rien telle que tu l'utilises, puisque tu la remet à 0 avant de la tester dans le while. donc tu peux supprimer tout ce qui concerne cette variable.
    Normalement, il faut effacer les interruptions dans la routine d'interruptions (fonction clear_interrupt(x) dans ccs) mais a priori c'est fait implicitement par la fonction.
    Sinon je vois pas de raison particulière sauf si sur l'entrée capteur tu arrive aux 70 impulsions avant le relachement du bouton sur D1.

Discussions similaires

  1. PIC usb exemple ccs
    Par ben1015 dans le forum Électronique
    Réponses: 8
    Dernier message: 09/05/2010, 13h47
  2. Programmer 16F877 avec CCS
    Par invite00043ad3 dans le forum Électronique
    Réponses: 37
    Dernier message: 22/01/2010, 19h13
  3. Réponses: 0
    Dernier message: 18/03/2007, 16h43
  4. Pic 16f877 Pic basic pro conseil
    Par invite4ff7103d dans le forum Électronique
    Réponses: 10
    Dernier message: 04/01/2007, 18h26
  5. Port serie sur 16F877 avec CCS
    Par invitefbe9ec51 dans le forum Électronique
    Réponses: 7
    Dernier message: 12/07/2006, 18h56
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...