Bonjour à tous,
Je viens poster ici car je suis désespéré. En effet, je souhaite réaliser une liaison I2C entre un PIC18F2455 et une boussole électronique. Cependant depuis plusieurs semaines je cherche sans cesse sur différents sites (microchip et anglophone entre autres) mais rien a faire. Selon moi mon code est bon et mon compilateur (MCC18) compile parfaitement, par contre je ne récupère rien sur mes ports SDA et SCL (alors que je devrais au moins récupérer une clock même si la communication ne s'établie pas). Je ne demande pas a ce qu'on corrige mon code, sans aucune prétention, je ne pense pas qu'il y ait des erreur de syntaxe seulement des oublis de config ou autre chose. Je vous remercie d'avance.
code.c :
/* Programme C pour PIC 18F2455 */
/* Compilateur MCC18 */
#include <p18f2455.h>
#include "fonctions.h"
#include <i2c.h>
#pragma config WDT = OFF // Wachtdog disable
#pragma config FOSC = INTOSC_XT // activation de l'oscillateur interne
#pragma config PBADEN = OFF // port B en I/O numériques
#pragma config MCLRE = OFF // on n'utilise pas MCLR
#pragma const config FCMENB = OFF //Fail Safe Clock Monitor Disabled
#pragma const config IESOB = OFF //Internal External Osc. Switch Disabled
#pragma config PWRT = OFF //Power Up Timer Disabled
#pragma const config BOR = BOHW //Brown Out Reset Enabled in HW, SBOREN disabled
#pragma config DEBUG = OFF //DEBUG Disabled
void main(void) {
unsigned char data; //I2C
//------------------Configuration Clock ----------------------------------
T2CONbits.T2CKPS1=1; //Prescaler du timer2 mis à x16
T2CONbits.T2CKPS0=1;
OSCCON = 0x42; // configuration de l'oscillateur
TRISBbits.TRISB0 = 1; //Initialisation I2C
TRISBbits.TRISB1 = 1; //Initialisation I2C
ADCON1=0x06; //Désactiver l'acquisition analogique du port B
//------------------Configuration clock I2C ----------------------------------
SSPADD = 0x02; //clock = Fosc/(4*(SSPADD+1)). (ICI 100KHz)
//SSPADD = ((Fosc/clock)/4)-1
while(1){
OpenI2C(MASTER,SLEW_OFF); //Overture de l'I2C en master mode
data=ReadBoussole();
PORTA=data;
}
}
fonctions.c:
#include <p18f2455.h>
#include "fonctions.h"
#include "i2c.h"
unsigned char ReadBoussole()
{
unsigned char bRet = 0x00;
IdleI2C(); //Attente du bus OK
StartI2C(); //Envoi de message de début
IdleI2C(); //Attente de la disponibilité du bus
WriteI2C(0xC1); //Envoi de l'adress
IdleI2C(); //Attente de la disponibilité du bus
WriteI2C(0x01); //Envoi du registre a lire
IdleI2C();
RestartI2C();
WriteI2C(0xC1);
if (SSPCON2bits.ACKSTAT) //Si AckStat == 1, on n'a pas reçu d'acquittement
{
StopI2C(); //Envoi de la condition de stop
return bRet;
}
bRet = ReadI2C(); //Lecture I2C
NotAckI2C(); //Pas d'acquittement car on lit qu'un seul caractère
IdleI2C();
StopI2C(); //Envoi du stop
return bRet; //Retour de la valeur lue
}
-----