IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MPLAB Discussion :

Problème de programmation PIC16F887


Sujet :

MPLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème de programmation PIC16F887
    Bonjour,

    Cela fait quelques années que je n'ai pas programmé sur un PIC16F887. Etant, anciennement étudiant, j'ai eu la possibilité gratuitement d'obtenir des exemplaires gratuitement de plusieurs PIC16F887-I/P (Que veux dire I/P au fait?)

    Bref, je veux m'amuser; j'ai fais un petit circuit imprimé avec deux LEDs qui s'allumerai quand on actionne un interrupteur câblé sur RC4 et RC3

    Au niveau câblage j'ai relié les interrupteurs à la broche RB0 et RB1 avec une résistance de pull-up de 10kOhm.
    Les LEDs sont allumées par l'intermédiaire d'un transistor.


    Quand j'essaye de programmer et d'allumer les LEDs sans action des interrupteurs cela fonctionne parfaitement : elles s'allument, je charge un programme pour les éteindre, elles s'éteignent.. Aucun souci.
    Mon souhait est maintenant est d'allumer une LED câblée sur RC4 quand on actionne RB0 et c'est la le drame : rien ne répond : La LEDs ne change pas d'état quand j'actionne l'interrupteur alors que j'observe bien un passage de tension sur la broche RB0 de 5 V à 0 V quand je l'actionne.

    Pouvez-vous me dire ce que vous pensez de ce code ? J'avoue que je suis perdu...

    PS : J'ai le compilateur HI-TECH.

    Merci d'avance
    Hector


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <htc.h>
    #define _XTAL_FREQ 8000000
    __CONFIG (0x0BF2);
     
    void main()
    {
      TRISC=0X00;
      TRISB=0xFF;
      PORTC=0X00;
     
      while(1)
      { 
        RC4=1;
    	if (RB0 == 1)
    		{RC4=0;}
      }
    }

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Bonjour,
    Citation Envoyé par Hector750 Voir le message
    Au niveau câblage j'ai relié les interrupteurs à la broche RB0 et RB1 avec une résistance de pull-up de 10kOhm.
    L'autre côté de l'interrupteur est bien au 0V ? Tu peux faire un petit schéma juste pour écarter un problème de câblage ?

    Ce micro a des pullup internes qu'on peut activer mais dans un premier temps c'est une bonne chose que d'en avoir mis en externes


    Citation Envoyé par Hector750 Voir le message
    quand j'actionne l'interrupteur alors que j'observe bien un passage de tension sur la broche RB0 de 5 V à 0 V quand je l'actionne.
    Tu mesures avec quoi ?

    Citation Envoyé par Hector750 Voir le message
    Pouvez-vous me dire ce que vous pensez de ce code ? J'avoue que je suis perdu...
    Ce code risque de s'exécuter tellement vite que tu pourrais ne rien voir. La LED va clignoter mais tu ne le percevras pas.

    Modifie le légèrement comme ci dessous :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <htc.h>
    #define _XTAL_FREQ 8000000
    __CONFIG (0x0BF2);
     
    void main()
    {
      TRISC=0X00;
      TRISB=0xFF;
      PORTC=0X00;
     
      while(1)
      { 
     
    	if (RB0 == 1)
    		{RC4=0;}
    	else
    		 RC4=1;
      }
    }


    Dit nous si ça fonctionne ?
    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour Vincent,

    Merci pour la réponse et merci également pour la clarté. Je vais essayer de répondre comme toi point par point.

    L'autre côté de l'interrupteur est bien au 0V ? Tu peux faire un petit schéma juste pour écarter un problème de câblage ?
    Ce micro a des pull-up internes qu'on peut activer mais dans un premier temps c'est une bonne chose que d'en avoir mis en externes
    Je t'ai fait un petit schéma à main levée, mais qui a le mérite d'être clair et lisible. Tu le trouveras en PJ de ce message.
    Personnellement, je ne me sers jamais des pull-up interne, car j'ai appris à faire en externe et je trouve ca beaucoup plus "pro".

    Tu mesures avec quoi ?
    Microcontrôleur enlevé je mesure avec mon Fluke entre le GND et le "trou" correspondant à RB0 ou RB1 (points rouge sur mon schéma)

    Ce code risque de s'exécuter tellement vite que tu pourrais ne rien voir. La LED va clignoter mais tu ne le percevras pas.
    Modifie le légèrement comme ci dessous :
    Ok je vais essayer et je redite le message après. Merci énormément de m'aider ! J'y pense. Est-ce que cela ne viendrais pas de mon Watchdog que j'ai paramétrer en début de programme a 0x0BF2?
    Autre information : mon quartz a une fréquence de 4MHz et je met la ligne "#define _XTAL_FREQ 8000000" est-ce bon?

    EDIT: Parfait ! Ca a marché. Comme quoi c'était une petite erreur ! Merci encore !

    Merci encore !
    Hector

    Nom : Bon_schéma.jpg
Affichages : 202
Taille : 1,41 Mo

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 35
    Points : 50
    Points
    50
    Par défaut
    Salut,

    Autre information : mon quartz a une fréquence de 4MHz et je met la ligne "#define _XTAL_FREQ 8000000" est-ce bon?
    non, ce n'est pas correct.
    Si ton quartz est de 4MHz, il faut donc déclarer 4MHz : #define _XTAL_FREQ 4000000

    NB : pour les PIC qui utilise une PLL, par exemple les PIC18 qui ont une PLL x 4, si elle est activée il faudrait donc déclarer une frequence de 16MHz ( 16000000 )

    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème de programmation.
    Par willow.A dans le forum C
    Réponses: 3
    Dernier message: 08/01/2007, 16h36
  2. Problème en programmant un GUI swing
    Par kaelem dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 05/01/2007, 11h59
  3. Problème de programmation orientée objet
    Par dan65 dans le forum WinDev
    Réponses: 8
    Dernier message: 17/09/2006, 01h04
  4. problème finalisation programme
    Par depelek dans le forum Installation, Déploiement et Sécurité
    Réponses: 9
    Dernier message: 02/05/2006, 16h17
  5. Réponses: 1
    Dernier message: 26/09/2005, 19h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo