Futura Sciences
Image de la rubrique en cours

Forum FS Generation

Précédent   Vous êtes ici : Forum FS Generation » Futura Technique » Électronique

Découvrir d'autres sujets sur ces thèmes : ,


Réponse
Vieux 18/05/2006, 18h53   Sujet interruption PIC18F - Message #1
induc
 
Date d'inscription: février 2006
Âge: 26
Messages: 30
interruption PIC18F
bonjour,

j'ai réalisé une interuption sur front montant sur la patte RBO que je pense être bien configurée.

Mon problème c'est que l'interruption n'a lieu qu'une fois : au premier front montant, le pic réalise les instructions de la boucle d'interruption, puis il retourne dans la boucle principale et y reste.
voilà mon code :

#include <p18f252.h>
#include <adc.h>
#include <timers.h>
#include <delays.h>


/****************************** ***********************/
/* définitions des pins I/O */
/****************************** ***********************/
#define DEL1_TRIS TRISCbits.TRISC1
#define DEL2_TRIS TRISCbits.TRISC2
#define DEL3_TRIS TRISCbits.TRISC3
#define DEL1 PORTCbits.RC1
#define DEL2 PORTCbits.RC2
#define DEL3 PORTCbits.RC3
#define zero_de_courant_TRIS TRISBbits.TRISB0
#define zero_de_courant PORTBbits.RB0


void MyInterrupt (void);
void delai (void);
void main (void);


/******************************/
/* fonction interruption */
/******************************/
void MyInterrupt(void);

#pragma code highVector=0x008
void atInterrupthigh(void)
{
_asm GOTO MyInterrupt _endasm
}
#pragma code // retour la zone de code



/*********************/
/* Interruptions */
/*********************/
#pragma interrupt MyInterrupt
void MyInterrupt(void)
{
/* sauvegarder des registres avant l'interruption */
unsigned char sauv1;
unsigned char sauv2;

INTCONbits.INT0IF = 0;

sauv1 = PRODL;
sauv2 = PRODH;

DEL1 = 0;
DEL3 = 1;
delai();
DEL3 = 0;

/* on restaure les registres sauvegardes avant l'interruption */
PRODL = sauv1;
PRODH = sauv2;
INTCONbits.INT0IF = 0;
}


/*********************/
/* Délai */
/*********************/
void delai (void)
{
int i;
for (i = 0; i < 10000; i++)
;
}



/****************************** */
/* fonction principale */
/****************************** */

void main (void)
{
/*tout digital sauf RA0-AN0 */
ADCON1=0xE;

/* on configure les pins en I/O */
DEL1_TRIS = 0;
DEL2_TRIS = 0;
DEL3_TRIS = 0;
zero_de_courant_TRIS = 1;


/* On active toutes les interruptions */
INTCON2bits.INTEDG0 = 1; /* interruption sur front montant */
INTCONbits.INT0IE = 0; /* mise à 0 avant de le mettre à 1 */
INTCONbits.INT0IE = 1; /* autorise interruption sur RB0 */
INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;


/*on demarre la boucle infinie */
while (1)
{ DEL1 = 1;
delai();
delai();
}
}




Comment remédier au problème?
induc est déconnecté   Réponse avec citation
Alt Aujourd'hui
Publicité

Beitrag Liens sponsorisés

   
Vieux 18/05/2006, 19h58   Sujet interruption PIC18F - Message #2
DavidDB
 
Date d'inscription: juillet 2004
Messages: 702
Re : interruption PIC18F
Salut,

Elle est où l'interruption sur RB0???

David.
DavidDB est déconnecté   Réponse avec citation
Vieux 19/05/2006, 08h36   Sujet interruption PIC18F - Message #3
induc
 
Date d'inscription: février 2006
Âge: 26
Messages: 30
Re : interruption PIC18F
oups.... j'avais mal selectionné mon code.
le revoilà :

#include <p18f252.h>
#include <adc.h>
#include <timers.h>
#include <delays.h>

#define DEL1_TRIS TRISCbits.TRISC1
#define DEL2_TRIS TRISCbits.TRISC2
#define DEL3_TRIS TRISCbits.TRISC3
#define DEL1 PORTCbits.RC1
#define DEL2 PORTCbits.RC2
#define DEL3 PORTCbits.RC3
#define zero_de_courant_TRIS TRISBbits.TRISB0
#define zero_de_courant PORTBbits.RB0


void MyInterrupt (void);
void delai (void);
void main (void);


void MyInterrupt(void);

#pragma code highVector=0x008
void atInterrupthigh(void)
{
_asm GOTO MyInterrupt _endasm
}
#pragma code // retour la zone de code


#pragma interrupt MyInterrupt
void MyInterrupt(void)
{
unsigned char sauv1;
unsigned char sauv2;

INTCONbits.INT0IF = 0;

sauv1 = PRODL;
sauv2 = PRODH;

DEL1 = 0;
DEL3 = 1;
delai();
DEL3 = 0;

PRODL = sauv1;
PRODH = sauv2;
INTCONbits.INT0IF = 0;
}

void delai (void)
{
int i;
for (i = 0; i < 10000; i++)
;
}


void main (void)
{
ADCON1=0xE;

DEL1_TRIS = 0;
DEL2_TRIS = 0;
DEL3_TRIS = 0;
zero_de_courant_TRIS = 1;

INTCON2bits.INTEDG0 = 1; /* interruption sur front montant */
INTCONbits.INT0IE = 0; /* mise à 0 avant de le mettre à 1 */
INTCONbits.INT0IE = 1; /* autorise interruption sur RB0 */
INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;

while (1)
{
DEL1 = 1;
delai();
delai();
}
}
induc est déconnecté   Réponse avec citation
Vieux 19/05/2006, 08h58   Sujet interruption PIC18F - Message #4
T-Bot
 
Date d'inscription: juin 2005
Localisation: 67
Messages: 236
Re : interruption PIC18F
on met pas un delai dans une interruption ...
c'est une interruption pas le code principal.
fait plutot changer le contenu d'une variable globale (genre My_Int0_CPT ++ ; )
et dans le main tu check cette variable...
T-Bot est déconnecté   Réponse avec citation
Vieux 19/05/2006, 09h17   Sujet interruption PIC18F - Message #5
DavidDB
 
Date d'inscription: juillet 2004
Messages: 702
Re : interruption PIC18F
Salut,

Désolé, je ne vois toujours pas l'INT sur RB0.

David.
DavidDB est déconnecté   Réponse avec citation
Vieux 19/05/2006, 09h53   Sujet interruption PIC18F - Message #6
induc
 
Date d'inscription: février 2006
Âge: 26
Messages: 30
Re : interruption PIC18F
qu'est-ce que vous vous attendiez à voir?

et pourquoi je ne peux pas mettre de délai dans la boucle d'interruption?
et puis je pense que je ne peux pas utiliser de variable que je check puisque je veux que la détection se fasse au front montant...

++
induc est déconnecté   Réponse avec citation
Vieux 19/05/2006, 10h37   Sujet interruption PIC18F - Message #7
DavidDB
 
Date d'inscription: juillet 2004
Messages: 702
Re : interruption PIC18F
Au minimum la déclaration d'accès à l'INT de RB0 -> INTE

et au minimum l'effacement du flag INTF dans l'INT...

David.
DavidDB est déconnecté   Réponse avec citation
Vieux 19/05/2006, 11h11   Sujet interruption PIC18F - Message #8
induc
 
Date d'inscription: février 2006
Âge: 26
Messages: 30
Re : interruption PIC18F
je croyais que ca "INTCONbits.INT0IF = 0;" c'était l'effacement du flag.

et sinon, comment déclarer l'accès à l'interruption?
induc est déconnecté   Réponse avec citation
Vieux 19/05/2006, 11h16   Sujet interruption PIC18F - Message #9
DavidDB
 
Date d'inscription: juillet 2004
Messages: 702
Re : interruption PIC18F
INT0IF ce n'est pour le timer0???

A vérifier car je ne connais pas ton compilo.

David.
DavidDB est déconnecté   Réponse avec citation
Vieux 19/05/2006, 12h31   Sujet interruption PIC18F - Message #10
T-Bot
 
Date d'inscription: juin 2005
Localisation: 67
Messages: 236
Re : interruption PIC18F
Citation:
Posté par induc
et pourquoi je ne peux pas mettre de délai dans la boucle d'interruption?
et puis je pense que je ne peux pas utiliser de variable que je check puisque je veux que la détection se fasse au front montant...
++

si tu as une interruption. Tu passes dans ton delai. Que se passe-t-il si pendant ce temps il y a un autre front montant ?

Pour la variable... que veux-tu que la détection déclenche ? allumer une LED pendant 1s ?...
T-Bot est déconnecté   Réponse avec citation
Vieux 19/05/2006, 13h44   Sujet interruption PIC18F - Message #11
induc
 
Date d'inscription: février 2006
Âge: 26
Messages: 30
Re : interruption PIC18F
mon microcontroleur commande un driver d'IGBT. Si j'ai besoin d'ouvrir l'interrupteur, je dois le faire sur un front montant du signal arrivant sur RB0, signal qui m'indique le passage du courant (alternatif qui circule dans mon système) au zéro.

Je dois donc remettre les sorties vers les drivers à 0, lorsque les conditions sont réunies et qu'alors je detecte un front montant. C'est à dire que l'interruption ne doit pas se faire à chaque front montant, mais seulement au premier front montant apparaissant une fois que l'on souhaite ouvrir les IGBT...
J'espère que c'est claire. et c'est pour ça que ça ne me dérangeait pas de mettre un delai dans ma boucl d'interruption.
++
induc est déconnecté   Réponse avec citation
Vieux 19/05/2006, 14h58   Sujet interruption PIC18F - Message #12
DavidDB
 
Date d'inscription: juillet 2004
Messages: 702
Re : interruption PIC18F
Tu as vérifié que INT0IF concerne bien RB0???

David.
DavidDB est déconnecté   Réponse avec citation
Vieux 19/05/2006, 17h17   Sujet interruption PIC18F - Message #13
induc
 
Date d'inscription: février 2006
Âge: 26
Messages: 30
Re : interruption PIC18F
oui. pour RB1 c'est INT1IF et pour RB2 c'est INT2IF.
induc est déconnecté   Réponse avec citation
Bienvenue
Si ceci est votre première visite, vous devez vous inscrire avant de pouvoir envoyer des messages. En étant inscrit vous pourrez poster votre question, participer aux débats, joindre vos images... alors n'attendez-plus, cela vous prendra 1 minute !

Pour commencer à lire les messages, depuis la page d'accueil des forums, sélectionnez le forum qui vous tente et partez ensuite à sa découverte...

Publicité

A voir aussi
du test a la pratique... PIC18F (Forum Électronique)
bug sur pic18f ??? (Forum Électronique)
Pic18f Adc (Forum Électronique)
comparaison de tensions par PIC18F (Forum Électronique)
programmation des pic18F (Forum Électronique)






A voir aussi (Futura Sciences n'est pas responsable du contenu de ces publicités)
Réponse



Outils
Modes d'affichage

Règles de messages
Vous pouvez ouvrir de nouvelles discussions : nonoui
Vous pouvez envoyer des réponses : nonoui
Vous pouvez insérer des pièces jointes : nonoui
Vous pouvez modifier vos messages : nonoui

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide


Les dernières actualités
08/07 17:12 - Paquet Télécom et contrôle des internautes : rendez-vous en septembre
08/07 15:43 - Le venin d'araignée au secours des neurones
08/07 13:34 - La première carte en haute résolution des connexions du cerveau humain
08/07 11:34 - La théorie de la comète tueuse de mammouth prend du poids !
08/07 10:14 - En bref : Ariane 5 lance deux nouveaux satellites de télécommunications
08/07 09:31 - Gazéification : exploiter le charbon en profondeur ?
07/07 17:11 - Thème du mois : dune du Pyla, Templiers et trekking en Queyras

Fuseau horaire GMT +2. Il est actuellement 09h13.

Propulsé par vBulletin
Copyright © 2000 - 2008, Jelsoft Enterprises Ltd. Tous droits réservés.
Traduction par l'association vBulletin francophone