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 ---
- 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 ---
Modérateur : Jérémy
PIC10F322 : détection d'une INT externe sur RA3 possible ?
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 ?
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 ?
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 ?
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.
Même brochage, mais au niveau registres et périphériques, ils sont pas du tout pareils on dirait.
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 ?
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.
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;
}
}
}
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 ?
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.
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 :)
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 ?
Retourner vers « Généralités sur les PICs »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 6 invités