Bienvenu(e)! Identification Créer un nouveau profil

Recherche avancée

Problème d'interruptions boutons poussoirs sur un 18F4550.

Envoyé par gonzalo94 
Problème d'interruptions boutons poussoirs sur un 18F4550.
jeudi 27 décembre 2007 12:24:52
Bonjour à tous, je suis étudiant en licence pro par alternance et je suis en train de développé une carte qui va tester l'impédance de câbles.

Pour cela j'utilise un 18F4550 et le systeme devra comporté deux boutons poussoirs.

J'ai opté pour connecter des boutons poussoirs sur RBO/INTO et RB1/INT1. Lorsqu'on appui sur le bouton "0V" sont présent sur la pattes respectives.

Après de multiples recherches sur votre si qui est dailleur tres complet je n'arrive toujours pas à résoudre mon problème. J'ai quelques doutes peut etre que vous pourriez m'eclaircir? Dois ton utiliser le timer0 obligatoirement pour lancer les interruptions sur INTO et INT1? et doit on utiliser les port RB4:RB7 pour lancer les interruptions sur INTO et INT1 ? je pense que non.. mais je suis pas sur..

Voici une partie de mon code peut etre que vous y verrez plus clair

MERCI d'avance.


// version du : 11/12/07
//auteur : Gonzalo Frasquet
//projet : Isolateur de câble
//------------------------Librairies----------------------//
#include <p18f4550.h>
#include <pwm.h>
#include <timers.h>
#include <adc.h>
//----------------------Variables globales-----------------//
long rcharge=0,moyenne=0;
unsigned int valeur_conv=0,tempp=0,tempmin=0,moy,i=10,feed;
unsigned int L1=1000,L2=15000,L3=100,L4=10000,L5=10000,
L6=10000,L7=10000,L8=10000,L9=10000,L10=10000;
float alim500=0;
float vs_alim=0,rlim=0;
short a=0,ctle=0,lalarme=0,ca_etat=0,pa=0,
pc=0,pb=0,pa2=0,pc2=0,pb2=0,conver=0;
unsigned int moy=0,tens=0;
//--------------------Déclaration de fonction--------------//
void init_uc(void); // déclarations UC
void r_charge(unsigned long longueur); // charge f(la longueur
void h_tension(unsigned int lg); // valeur NumF(longueur)/FB
void r_limite(unsigned int lg2);// Impédances limites du câble
void tempo(void);//temporisation
void tempom(void);//temporisation 2ms
void conversion(unsigned short conver);//1=fb,2=int,3=mesure,
void alarme(unsigned short alar);//selection d'alarme
void CTLR(unsigned short eta);//selection cable à mesurer
void etat(unsigned short ett);//selection Rcharge&Etatcable
void conv_etat(void);//conversion et detection d'etat du cable
void J6(unsigned short connector);//Selection du connecteur J6
void it_haute(void); // interruptions haute

#pragma code highVector=0x008
void atInterrupthigh(void)
{
_asm GOTO it_haute _endasm
}
#pragma code

//
//#pragma code lowVector=0x0018
//void atInterruptlow(void)
//{
//_asm GOTO it_basse _endasm
//}
//#pragma code
//

//------------------------Fonction principale-----------//

for(;winking smiley
{
// CCPR1L=104;
conversion(1);
CTLR(0b0011);
}

}
//---------------Declarations des sous fonctions--------//

void init_uc(void)
{
//-----------------------Oscillateur-------------------//
OSCCON=0b11101100;
//------------------------E/S--------------------------//
PORTA=0;
TRISA=0b10101100; // INT,FB,CTLE0,AN1,AN0
PORTB=0;
TRISB=0b11010011; // interruptions
PORTC=0;;
TRISC=0b00011000; // PWM
PORTD=0;
TRISD=0b00000000; // controle de CTLR&ALARME
LATD=0b00000000;
PORTE=0;
TRISE=0b1111000; //

//Activation interruption PORTB
INTCONbits.RBIE = 0;
//Activation interruption sur INT0
INTCONbits.INT0IE = 1;
//Activation interruption PORTB
INTCONbits.GIEH = 0;
//Activation interruption PORTB
INTCONbits.GIEL = 0;

//Activation détection front descendant de INT1
INTCON2bits.INTEDG0 = 0;
//Activation détection front descandant de INT2
INTCON2bits.INTEDG1 = 0;
//interruption PORTB haute
INTCON2bits.RBIP = 1;

//Activation interruption INT1
INTCON3bits.INT1IE = 1;

//Activation interruption haute et basse
RCONbits.IPEN = 1;


PR2=190; // choix de la fréquence du PWM
CCP1CON=0b00101100;
CCPR1L=20; // début du rapport cyclique (190/10)

OpenTimer2( TIMER_INT_OFF &
T2_PS_1_1 &
T2_POST_1_8 );

}



void it_haute(void)
{
if (INTCON3bits.INT1IF) // detection front descendant INT1
{
CCPR1L = 10;
INTCON3bits.INT1IF = 0; // effacement du drapeau

} //fin front descendant INT2
}

Re: Problème d'interruptions boutons poussoirs sur un 18F4550.
jeudi 27 décembre 2007 15:00:46
Salut,

Le timer0 et les interruption RB4..7 n'ont aucun rapport avec les interruptions INT0 et INT1...

Tu dois activer les interruptions que tu désires uniquement et ce au travers des registres INTCON et INTCON3 du pic... Voir page 101 et 103 du datasheet... Tu désactives les interruptions que tu ne veux pas... Mais apres ça et je ne le vois pas dans ton programme tu dois activer les interruptions global soit le bit GIE... Ce qui ne signifie pas activer les interruptions du timer mais qui signifie que tu allumes de façon générale la possibilité d'interruption au travers des interruptions que tu auras préalablement activé... (C'est clair???)

A++

Benjamin
Seuls les utilisateurs enregistrés peuvent poster des messages dans ce forum.

Cliquez ici pour vous connecter