Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
On parle des Pics, sans rapport avec le langage ou la programmation

Modérateur : Jérémy

Problèmes d'entrées/sorties PIC16F886
Reyes
Membre
Membre
Messages : 5
Enregistré en : juin 2020

#1 Message par Reyes » jeu. 11 juin 2020 10:10 lien vers la Data-Sheet : Cliquez ici

Bonjour à tous,

Ceci est mon premier post ici, désolé si il n'est pas au bon endroit.

Je suis actuellement en stage et je dois programmer un PIC16F886 pour refaire fonctionner un appareil. Je ne rentre pas dans les détails car le problème se situe ailleurs. En effet, je rencontre des difficultés à faire fonctionner mon PIC, et ce même avec des programmes très simples.
Pour résumer, je peux piloter une sortie sans entrée, mais lorsque j'utilise des entrées, je me retrouve avec divers phénomènes étranges en sortie.
Voici le programme de base que j'ai utilisé, sachant que j'ai changé de pattes d'entrées et de sorties à multiples reprises (tous mes tests seront décrits ci-dessous).

Code : Tout sélectionner

#include <xc.h>
#include "configuration_bits.h"
#define _XTAL_FREQ 4000000

void init_pic(void);//Fonction d'initialisation du PIC
    
void main
(void)
{
    init_pic();
    RC5=0;
    while(1)
    {  
        if
(RA3==1)
        {
            RC5=1;
        }
        if(RA3==0)
        {
            RC5=0;
        }
    }
}
void init_pic (void)
{
    //Configuration pattes analogiques/numériques
    ANSEL=0b00000000;
    ANSELH=0b00000000;
    //Définitions des entrées/sorties
    TRISA=0b11111111;
    TRISB=0b11111111;
    TRISC=0b11011111;

    //Désactivation des comparateurs
    C1ON=0;
    C2ON=0;
    
}


Voici les bits de configuration :

Code : Tout sélectionner

// PIC16F886 Configuration Bit Settings

// 'C' source line config statements

// CONFIG1
#pragma config FOSC = INTRC_NOCLKOUT// Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = ON       // Brown Out Reset Selection bits (BOR enabled)
#pragma config IESO = ON        // Internal External Switchover bit (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled)
#pragma config LVP = OFF        // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming)

// CONFIG2
#pragma config BOR4V = BOR40V   // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)
#pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>


A noter que j’ai testé ce programme pour plusieurs pattes d’entrées et sorties (RA0 à RA5 en entrée et RC4 à RC6 en sortie), et sur plusieurs PIC identiques et neufs. Mon PIC est alimenté en 5V via le pickit3, je programme depuis MPLAB X IDE v5.35 et j’utilise la carte PICKIT 28-Pin Demo board (DS:http://ww1.microchip.com/downloads/en/DeviceDoc/40001301B.pdf) pour transférer le programme et le tester. Les comportements que j’ai pu observer sont les suivants :

-Tension de sortie de 1.7V lorsqu’une des deux entrées est à 5V. La sortie reste à 1.7V pendant un temps similaire au temps passé par l’entrée à l’état haut, puis passe à 5V. Qu’on demande un état haut ou bas sur la sortie, on a toujours du 1.7V puis du 5V.

-En ajoutant 100us de délai avant et après l’ordre d’écriture de la sortie afin d’éviter d’éventuels problèmes de RWM, on obtient une tension de 2.5V en sortie lorsque celle-ci est commandée (encore une fois, peu importe quel est l’ordre). Cette valeur est toujours lisible au multimètre en mode AC, j’en ai donc déduit que la sortie oscillait de 0 à 5V et que la valeur mesurée correspondait à la valeur moyenne de cette tension.
D’après mes recherches, ce comportement peut être causé par des resets successifs du PIC, une mauvaise configuration entrée/sortie ou analogique/digitale, ou le watchdog timer. J’ai donc désactivé le watchdog, le low voltage programming et le MCLR, mais cela n’a rien changé.

-Toujours pour éviter les problèmes de RWM, j’ai aussi essayé de modifier ma sortie avec tout le registre PORTC au lieu de juste RC4 ou RC5, cela a résulté en un phénomène similaire au 1.7V, mais en 1.63V à la place.

-Il m’est également arrivé d’avoir 3V en sortie et d’avoir des comportements différents avec strictement le même programme sans modifications : lors d’un essai on a 3V en demandant un état haut et 0V en état bas, lors d’un autre essai après avoir retransféré l’exact même programme, on a 3V en sortie peu importe l’état demandé.

-Enfin, après avoir essayé de contrôler une sortie seule (que je pouvais correctement piloter seule) avec une entrée seule, j'ai remarqué que cela ne fonctionnait pas en utilisant RA1 ou RA2.
Avec RA1, ma sortie restait tout le temps à 5V, mais passait à 0V pendant quelques secondes lorsque je posais ma patte + de multimètre sur RA1.
Avec RA2, ma sortie changeait normalement d'état comme prévu, mais mettait bien 5-6 secondes à passer de 0 à 5V.
Le tout sachant que sur le schéma de la carte que j'utilise, ni RA1, ni RA2, ni RA3 ni RA5 (les deux dernières fonctionnant correctement) ne sont connectés à quoique ce soit. Et ces comportements étaient exactement les mêmes avec un autre PIC.
A noter que pour ces derniers essais j'ai tout désactivé dans le configuration_bits.h.

J’ai vérifié la tension d’alimentation, les tensions d’entrées, et j’ai utilisé des pins n’ayant aucune charge ou élément capacitif ou inductif, mais rien n’y fait.
Si quelqu’un a la moindre idée de piste sur le sujet, j’en serais bien reconnaissant, car à ce stade je n’ai aucune idée de ce qui se passe. J’ai peut-être raté quelque chose d’évident. Dans tous les cas, toute aide est la bienvenue.
Merci d'avance et désolé pour l'énorme pavé de texte, j'ai essayé d'être le plus précis possible.

Problèmes d'entrées/sorties PIC16F886
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#2 Message par satinas » jeu. 11 juin 2020 12:57 lien vers la Data-Sheet : Cliquez ici

Bonjour Reyes et bienvenue sur le forum :-)

Je ne vois pas de problème dans le programme et la configuration.
Le Brown-Out est réglé à 4V, ok pour l'alim 5V.

Le PicKit3 n'est pas une alimentation, il ne faut pas dépasser 30mA de consommation.
Il vaut toujours mieux que la carte ait sa propre alimentation.
Cela permet de tester aussi en débranchant le PicKit3.

Que se passe t-il si tu fais clignoter une led sur C5 ?

Code : Tout sélectionner

while (1) {
  delay_ms(1000);
  RC5 = !RC5;
}

Problèmes d'entrées/sorties PIC16F886
Reyes
Membre
Membre
Messages : 5
Enregistré en : juin 2020

#3 Message par Reyes » jeu. 11 juin 2020 13:10 lien vers la Data-Sheet : Cliquez ici

satinas a écrit :Bonjour Reyes et bienvenue sur le forum :-)

Je ne vois pas de problème dans le programme et la configuration.
Le Brown-Out est réglé à 4V, ok pour l'alim 5V.

Le PicKit3 n'est pas une alimentation, il ne faut pas dépasser 30mA de consommation.
Il vaut toujours mieux que la carte ait sa propre alimentation.
Cela permet de tester aussi en débranchant le PicKit3.

Que se passe t-il si tu fais clignoter une led sur C5 ?

Code : Tout sélectionner

while (1) {
  delay_ms(1000);
  RC5 = !RC5;
}


La led clignote à la bonne fréquence, rien d'anormal

Problèmes d'entrées/sorties PIC16F886
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#4 Message par Gérard » jeu. 11 juin 2020 13:40 lien vers la Data-Sheet : Cliquez ici

Bonjour et bienvenu,

As-tu mis une résistance de pull-up ou pull-down sur l'entrée?
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Problèmes d'entrées/sorties PIC16F886
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#5 Message par satinas » jeu. 11 juin 2020 13:57 lien vers la Data-Sheet : Cliquez ici

Pour détecter s'il y a des resets intempestifs

Code : Tout sélectionner

  while (1) {
    int i;
    for (i=0; i<1000; i++) {
      __delay_ms(1);
      RC5 = RA3;
    }
    RB0 = !RB0;           // led toggle chaque seconde
  }

Problèmes d'entrées/sorties PIC16F886
Reyes
Membre
Membre
Messages : 5
Enregistré en : juin 2020

#6 Message par Reyes » jeu. 11 juin 2020 14:01 lien vers la Data-Sheet : Cliquez ici

Gérard a écrit :Bonjour et bienvenu,

As-tu mis une résistance de pull-up ou pull-down sur l'entrée?


Non, je n'ai dans l'immédiat pas accès à de nouvelles résistances.

Est-ce recommandé d'en braser sur ce genre de cartes ? Y en a-t-il besoin ?

Aussi, pensez-vous que cela pourrait être la source du problème ? Certaines pattes (comme RA5) fonctionnaient sans ajout supplémentaire.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Problèmes d'entrées/sorties PIC16F886
Reyes
Membre
Membre
Messages : 5
Enregistré en : juin 2020

#7 Message par Reyes » jeu. 11 juin 2020 14:09 lien vers la Data-Sheet : Cliquez ici

satinas a écrit :Pour détecter s'il y a des resets intempestifs

Code : Tout sélectionner

  while (1) {
    int i;
    for (i=0; i<1000; i++) {
      __delay_ms(1);
      RC5 = RA3;
    }
    RB0 = !RB0;           // led toggle chaque seconde
  }


RA5 prend bien le niveau de RA3 et la led clignote bien chaque seconde, donc le programme tourne

Problèmes d'entrées/sorties PIC16F886
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#8 Message par Gérard » jeu. 11 juin 2020 17:30 lien vers la Data-Sheet : Cliquez ici

Une entrée doit être polarisée soit vers le + soit vers la masse.
Il est aussi possible sur certains PIC de configurer des pull-up sur certaines lignes de port.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Problèmes d'entrées/sorties PIC16F886
Reyes
Membre
Membre
Messages : 5
Enregistré en : juin 2020

#9 Message par Reyes » ven. 12 juin 2020 13:23 lien vers la Data-Sheet : Cliquez ici

Merci pour votre aide, en effet en faisant bien attention aux niveaux logiques des entrées, le programme se comporte correctement. Il semblerait que quelques entrées n'étaient pas polarisées correctement et n'étaient pas stables, ce qui faisait que le programme lisait des informations qui n'étaient pas censées être là. J'y ferais plus attention à l'avenir.


Retourner vers « Généralités sur les PICs »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 34 invités