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

PIC10F322 : détection d'une INT externe sur RA3 possible ?
gwion
Passionné
Passionné
Messages : 212
Enregistré en : février 2022

#1 Message par gwion » jeu. 31 août 2023 10:33

Bonjour,

RA3 est normalement _MCLR mais j'ai précisé que MCLRE = OFF et LVP = OFF. La broche est tirée au +VDD par une 10K et j'applique l'INT en reliant RA3 directement à la masse via un bouton-poussoir.
J'attends mes PIC courant de semaine prochaine, je ne peux donc pas vérifier sur breadboard.
En simulation sous PROTEUS, avec un code C / XC8 / MPLAB X 6.05, la détection d'un front descendant sur RA2 se fait sans souci. Par contre la routine ISR n'est jamais appelée quand on applique l'int sur RA3.
Et si je teste l'état de RA3 dans le code il n'est jamais bas.
J'oublie quelque chose ou c'est impossible avec PROTEUS ?

PIC10F322 : détection d'une INT externe sur RA3 possible ?
gwion
Passionné
Passionné
Messages : 212
Enregistré en : février 2022

#2 Message par gwion » jeu. 31 août 2023 15:12

J'ajoute qu'à ce que je vois le fait de mettre RA3 à la masse provoque un reset même si la config lui dit de ne pas adopter le comportement standard.

Code : Tout sélectionner

#pragma config FOSC = INTOSC             
#pragma config BOREN = ON      
#pragma config WDTE = ON   
#pragma config PWRTE = ON      
#pragma config MCLRE = OFF
#pragma config CP = ON      
#pragma config LVP = OFF   
#pragma config LPBOR = ON   
#pragma config BORV = HI    
#pragma config WRT = ALL

PIC10F322 : détection d'une INT externe sur RA3 possible ?
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#3 Message par satinas » jeu. 31 août 2023 17:25

Bonjour gwion,
J'ai testé avec un pic 10F222 qui a un même brochage que le tien. Pas de problème, la pin GP3 fonctionne bien soit en input avec MCLR_OFF, soit en mode MCLR avec MCLR_ON. Voilà le code, je peux aussi tester ton programme C si tu le joins.

Code : Tout sélectionner

; Test 10F222

#include    <p10F222.inc>

#define     OUT_PIN GP0           ; output signal
#define     OUT_LED GP1           ; output led
#define     IN_PUSH GP3           ; input poussoir

            __CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF

            org     0

            movlw   ~(1<<T0CS)    ; TRIS GP2 actif
            option
            movlw   ~(1<<OUT_PIN) ; output signal
            andlw   ~(1<<OUT_LED) ; output led
            tris    GPIO
            bcf     ADCON0,ANS1   ; GP1 numérique
            bcf     ADCON0,ANS0   ; GP0 numérique

loop        bsf     GPIO,OUT_PIN  ; toggle output
            nop
            bcf     GPIO,OUT_PIN

            btfsc   GPIO,IN_PUSH  ; la led suit l'input GP3
            bsf     GPIO,OUT_LED
            btfss   GPIO,IN_PUSH
            bcf     GPIO,OUT_LED
            goto    loop

            end

Même brochage, mais au niveau registres et périphériques, ils sont pas du tout pareils on dirait.

PIC10F322 : détection d'une INT externe sur RA3 possible ?
gwion
Passionné
Passionné
Messages : 212
Enregistré en : février 2022

#4 Message par gwion » ven. 1 sept. 2023 09:05

Bonjour Satinas, bonjour le forum,

Merci pour les tests c'est vraiment sympa.
J'ai tenté autre chose de mon côté, en créant un second projet PROTEUS qui gère aussi la partie code. C'est exactement le même programme copié/collé, et le compilateur XC8.
Simulation 100% PROTEUS = fonctionnement parfait. Mais dès que je lance la simulation depuis MPLAB pour bénéficier du pas à pas, plantage garanti aussitôt que RA3 est mise à la masse.
Il me semble que le code est correct.

Code : Tout sélectionner

#include <xc.h>

#pragma config FOSC = INTOSC         
#pragma config BOREN = ON      
#pragma config WDTE = OFF      
#pragma config PWRTE = ON      
#pragma config MCLRE = OFF       
#pragma config CP = ON         
#pragma config LVP = OFF      
#pragma config LPBOR = ON      
#pragma config BORV = HI       
#pragma config WRT = ALL       

#define _XTAL_FREQ 16000000   

void main(void)
{
   TRISAbits.TRISA0 = 0;  // Output RA0
   ANSELAbits.ANSA0 =0;   // RA0 digital
   LATAbits.LATA0 = 0;     // RA0 bas
   
   TRISAbits.TRISA2 = 1;  // input RA2
   ANSELAbits.ANSA2 = 0;   // RA2 digital
   WPUAbits.WPUA2 = 1; // pull up on RA2   
   
   WPUAbits.WPUA3= 1; // pull up on RA3 
   OPTION_REGbits.nWPUEN = 0; 
   
   // 3 clignotements de la LED pour signaler entrée dans le main
   RA0=1;
   __delay_ms(30);
   RA0=0;
   __delay_ms(30);
   RA0=1;
   __delay_ms(30);
   RA0=0;
   __delay_ms(30);
   RA0=1;
   __delay_ms(30);
   RA0=0;
   
   //  choix INT sur RA2  ou RA3
   int surRA3 = 1;

   while(1)
   {
      if (surRA3==1)
      {
         RA0 = RA3;
      }
      else
      {
         RA0 = RA2;
      }
   }
}


Capture d’écran 2023-09-01 090708.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

PIC10F322 : détection d'une INT externe sur RA3 possible ?
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#5 Message par satinas » ven. 1 sept. 2023 11:13

Bonjour,

Lorsque tu écris sur une pin, A0 par exemple, je te conseille de ne pas utiliser RA0 mais le latch LATA0 qui est un raccourci de LATAbits.LATA0 (voir fichier pic10f322.h).

J'ai regardé le simulateur MPLABX. Mon programme 10F222 marche bien, mais j'ai remarqué qu'en modifiant l'état de A3 avec la fenêtre stimulus, la fenêtre file registers n'est pas aussitôt mise à jour, il faut qu'une instruction lisant A3 soit exécutée et c'est bon. Ton programme C 10F322 a l'air de fonctionner, l'affichage du contenu des registres de port étant en retard pour la raison citée.
J'ai ajouté ces lignes en début du while pour vérifier que A3 change bien d'état. Les lignes sont doublées car parfois le débugger, et peut être le simulateur ? peut sauter des lignes en mode pas à pas.

Code : Tout sélectionner

  while(1)
   {
     if (RA3==1)
     {
        RA0 = RA3;
        RA0 = RA3;
     }
     if (RA3==0)
     {
        RA0 = RA3;
        RA0 = RA3;
     }
   }     

Par contre en mettant MCLRE = ON cela n'a pas l'air de changer grand chose, le comportement est le même. C'est pour cela que je n'aime pas les simulateurs, on ne sait jamais si c'est le programme ou le simulateur qui déraille. Rien ne vaut une bonne planche à pain :)

PIC10F322 : détection d'une INT externe sur RA3 possible ?
gwion
Passionné
Passionné
Messages : 212
Enregistré en : février 2022

#6 Message par gwion » ven. 1 sept. 2023 13:12

Merci pour les tests et la confirmation.
Dans la simulation 100% PROTEUS, MCLRE = ON déclenche bien un reset.
C'est sûr qu'ils ne sont pas parfaits ces simulateurs, mais ils font quand même normalement gagner pas mal de manips et de temps. Enfin pas ce coup-ci...


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

Qui est en ligne

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