// Florian MOFFROI 2006 #include #include #include #include #include "HMC6352.h" // Fonction d'initialisation du port I2C // pour la boussole HMC6352 void initI2C() { // Déclaration des variables locales unsigned char cBuffer; OpenI2C(MASTER, SLEW_OFF); SSPADD = 9; // 100kHz pour Fosc = 4MHz cBuffer = SSPBUF; // Buffer vide } int HMCGetData() { unsigned char cHigh, cLow; int iValue; // Envoi du bit de start StartI2C(); IdleI2C(); // Adresse de la boussole en ecriture WriteI2C(HMC6352_ADDRESS_W); IdleI2C(); // Envoi d'une demande de valeur WriteI2C(HMC_GETDATA); IdleI2C(); // Envoi du bit de stop StopI2C(); IdleI2C(); Delay1KTCYx(10); // Envoi du bit de start StartI2C(); IdleI2C(); // Adresse de la boussole en lecture WriteI2C(HMC6352_ADDRESS_R); IdleI2C(); // Lecture de l'octet de poids fort cHigh = ReadI2C(); IdleI2C(); // Continuer à lire AckI2C(); IdleI2C(); // Lecture de l'octet de poids faible cLow = ReadI2C(); IdleI2C(); // Fin de la lecture NotAckI2C(); IdleI2C(); // Envoi du bit de stop StopI2C(); IdleI2C(); // Mise en forme du résultat iValue = (((int)cHigh) << 8) + cLow; return iValue; } unsigned char HMCGetVersion() { // Déclaration des variables locales unsigned char cVersion = 0; // Envoi du bit de start StartI2C(); IdleI2C(); // Adresse de la boussole en ecriture WriteI2C(HMC6352_ADDRESS_W); IdleI2C(); // Lecture dans l'EEPROM WriteI2C(HMC_EEPROM_R); IdleI2C(); // A l'adresse de la Version WriteI2C(HMC_EE_VERSION); IdleI2C(); // Envoi du bit de stop StopI2C(); IdleI2C(); // Envoi du bit de start StartI2C(); IdleI2C(); // Adresse de la boussole en lecture WriteI2C(HMC6352_ADDRESS_R); IdleI2C(); // Lecture de la Version cVersion = ReadI2C(); IdleI2C(); // Arret de la lecture NotAckI2C(); IdleI2C(); // Envoi du bit de stop StopI2C(); IdleI2C(); return cVersion; }