Bonjour
Je souhaites utiliser un pic 18f26k22 pour recevoir des données du bus i2c.
Le bus provient d'une carte embeddian, avec un MCP23017 correctement piloté par ce même bus.
J'ai du coup enlevé le MCP et mis le pic à la même adresse.
Le programme fais tout simplement éteindre le PORTA quand il reçoit l'interruption.
Sous proteus cela marche mais pas sur plaquelab, la led ne s'éteind jamais... J'ai cependant bien les données à l'oscillo
Si vous auriez une idée ? merci d'avance
Voila mon programme :
Code:#include "p18f26k22.h" #include "i2c.h" #include "delays.h" #include <delays.h> #include <stdlib.h> #include <i2c.h> void ISR(void); void SSPISR(void); #pragma code H_vector=0x08 void H_vector(void) { _asm goto ISR _endasm } #pragma code #pragma interrupt ISR void ISR(void) { if (PIR1bits.SSPIF) { SSPISR(); PIR1bits.SSPIF = 0; } } // This is the actual SSP ISR void SSPISR(void) { PORTA = 0; PORTBbits.RB1=1; } void main(void) { TRISA = 0; PORTA = 255; TRISC = 255; INTCONbits.GIEH = 0; RCONbits.IPEN = 1; // Enable interrupt priorities IPR1bits.SSPIP = 1; // Set SSP interrupt priority to high PIR1bits.SSPIF = 0; // Clear the interrupt flag PIE1bits.SSPIE = 1; // Enable SSP interrupt INTCONbits.GIEH = 1; SSPADD = 0x20<<1; SSPCON2 = 0b00000000; SSPBUF = 0; IdleI2C(); OpenI2C(SLAVE_7 , SLEW_OFF); IdleI2C(); while(1); }
-----