Bonjour à tous,
J'ai un projet qui consiste a communiquer en I2C entre deux ùcontroleurs.
Le programme du ùcontroleur maitre marche trés bien et à été essayer avec des esclaves non programmables (horloge temps réelle par exemple).
Je suis actuellement en train d'effectuer le programme pour un pic 18F2550 mis en esclave, pour l'instant j'essaie simplement de créer une interruption lorsque le pic voit que l'on communique avec lui en I2C. Seulement l'interruption ne fonctionne pas, j'ai fait des tests conditionnels sur les flags d'interruption et ils n'ont pas l'air de bouger. voici mon code, il y a surement une erreur que je n'ait pas vue (sa fait plusieurs jours que je fait des modifs et fait des recherches sur les forumsà.
//******** C18 *********************
#include <p18f2550.h>
#include <stdlib.h>
#pragma config WDT=OFF
#pragma config LVP=OFF
#pragma config MCLRE=OFF
#pragma config DEBUG=OFF
#pragma config FOSC=INTOSCIO_EC //ECPLLIO_EC to use with USB
int i=0;
void it_prioritaire(void) ;
#pragma code address_it=0x08 //0x18 pour basse priorité
void int_toto(void)
{
_asm GOTO it_prioritaire _endasm
}
#pragma code
#pragma interrupt it_prioritaire
void it_prioritaire(void)
{
PORTC=2;
// positionnement du FLAG
PIR1bits.SSPIF= 0;
}
void main(void)
{
// Initialisation
TRISC = 0x00;
PORTC = 0;
TRISB = 0xFF; // PORTB en entrée
INTCON=0b1100000; // autoriser les interruption (générales)
PIE1=0b00001000; // Autoriser interruption MSSP
IPR1bits.SSPIP=1; // Haute priorité
IPR2bits.BCLIP=0; // BUS collision basse priorité
PIE2 = 0; //desactivation des interruption bus collision
SSPADD=0x44; // Adresse de l'esclave
SSPCON1=0b00111110;
SSPCON2=0b10000000;
SSPSTATbits.SMP=0; // High-speed mode
SSPSTATbits.CKE=0; // Mode I2C
PIR1=0; // Reset Flag
PIR2=0; // Reset Flag
// traitement
while(1)
{
}
}
Comme vous pouvez voir dans le programme, je lance l'interrution lorsque je recoi mon adresse et j'allume simplement une LED pour tester l'interruption, je ne traite pas encore la réponse à donner. Mais sa ne rentre jamais dans l'interrution.
Lors d'une mesure de tram à l'oscilloscope, j'ai pu voir que la tram arrive bien au niveau du pic esclave.
Le maitre est un ùcontroleur Atmel qui pilote un ecran LCD.
Pour programmer j'utilise Mplab X, le compilateur C18 et le programeur Pic kit3.
Merci de donner vos idée, il y a surement un truc que j'ai loupé.
-----