Problema Arduino UNO con i2c

Buenas tardes a todos!

Tengo un Problema con mi arduino, quisiera saber si hago algo mal o si tengo que reemplazar la placa

tengo un Magnetometer MAG3110 que Funciona mediante i2c el cual uso varios codigos y no funciona simplemente inicia y desdes el puesto serial puedo ver como se queda trabado y no corre mas el programa. les pongo el codigo que uso y la respuesta en monitor serial:

/*
HMC5883L_Example.pde - Example sketch for integration with an HMC5883L triple axis magnetomerwe.
Copyright (C) 2011 Love Electronics (loveelectronics.co.uk)

This program is free software: you can redistribute it and/or modify
it under the terms of the version 3 GNU General Public License as
published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

*/

// Reference the I2C Library
#include <Wire.h>
// Reference the HMC5883L Compass Library
#include <HMC5883L.h>

// Store our compass as a variable.
HMC5883L compass;
// Record any errors that may occur in the compass.
int error = 0;

// Out setup routine, here we will configure the microcontroller and compass.
void setup()
{
  // Initialize the serial port.
  Serial.begin(9600);

  Serial.println("Starting the I2C interface.");
  Wire.begin(); // Start the I2C interface.

  Serial.println("Constructing new HMC5883L");
  compass = HMC5883L(); // Construct a new HMC5883 compass.
    
  Serial.println("Setting scale to +/- 1.3 Ga");
  error = compass.SetScale(1.3); // Set the scale of the compass.
  if(error != 0) // If there is an error, print it out.
    Serial.println(compass.GetErrorText(error));
  
  Serial.println("Setting measurement mode to continous.");
  error = compass.SetMeasurementMode(Measurement_Continuous); // Set the measurement mode to Continuous
  if(error != 0) // If there is an error, print it out.
    Serial.println(compass.GetErrorText(error));
}

// Our main program loop.
void loop()
{
  // Retrive the raw values from the compass (not scaled).
  MagnetometerRaw raw = compass.ReadRawAxis();
  // Retrived the scaled values from the compass (scaled to the configured scale).
  MagnetometerScaled scaled = compass.ReadScaledAxis();
  
  // Values are accessed like so:
  int MilliGauss_OnThe_XAxis = scaled.XAxis;// (or YAxis, or ZAxis)

  // Calculate heading when the magnetometer is level, then correct for signs of axis.
  float heading = atan2(scaled.YAxis, scaled.XAxis);
  
  // Once you have your heading, you must then add your 'Declination Angle', which is the 'Error' of the magnetic field in your location.
  // Find yours here: http://www.magnetic-declination.com/
  // Mine is: 2� 37' W, which is 2.617 Degrees, or (which we need) 0.0456752665 radians, I will use 0.0457
  // If you cannot find your Declination, comment out these two lines, your compass will be slightly off.
  float declinationAngle = 0.0457;
  heading += declinationAngle;
  
  // Correct for when signs are reversed.
  if(heading < 0)
    heading += 2*PI;
    
  // Check for wrap due to addition of declination.
  if(heading > 2*PI)
    heading -= 2*PI;
   
  // Convert radians to degrees for readability.
  float headingDegrees = heading * 180/M_PI; 

  // Output the data via the serial port.
  Output(raw, scaled, heading, headingDegrees);

  // Normally we would delay the application by 66ms to allow the loop
  // to run at 15Hz (default bandwidth for the HMC5883L).
  // However since we have a long serial out (104ms at 9600) we will let
  // it run at its natural speed.
  // delay(66);
}

// Output the data down the serial port.
void Output(MagnetometerRaw raw, MagnetometerScaled scaled, float heading, float headingDegrees)
{
   Serial.print("Raw:\t");
   Serial.print(raw.XAxis);
   Serial.print("   ");   
   Serial.print(raw.YAxis);
   Serial.print("   ");   
   Serial.print(raw.ZAxis);
   Serial.print("   \tScaled:\t");
   
   Serial.print(scaled.XAxis);
   Serial.print("   ");   
   Serial.print(scaled.YAxis);
   Serial.print("   ");   
   Serial.print(scaled.ZAxis);

   Serial.print("   \tHeading:\t");
   Serial.print(heading);
   Serial.print(" Radians   \t");
   Serial.print(headingDegrees);
   Serial.println(" Degrees   \t");
}

esto es lo unico que muestra el monitor serial:

Starting the I2C interface.
Constructing new HMC5883L
Setting scale to +/- 1.3 Ga


Adicional a este sensor tengo una Adafruit Motor shield V2 que tambien usa tecnologia i2c que no logro hacerla funcionar.

Intento correr el el Programa para buscar Direcciones I2C_Scanner Arduino Playground - I2cScanner

y la respuesta es la misma nunca me da respuesta este me dice en el monitor solo:

I2C Scanner
Scanning...

Pero no me da ningun error ni nada solo se congela ahi.

Espero puedan ayudarme. Saludos :smiley:

Empieza retirando el motor shield y vuelve a hacer la prueba del Magnetometer MAG3110. Estas compartiendo direcciones o te falta una Resistencia si mal recuerdo que habia que conectar a 5V.

Prueba este código y nos dices. Por lo que veo viene con las resistencias PULL UP por defecto.
Usa el que dice Example Code

surbyte:
Empieza retirando el motor shield y vuelve a hacer la prueba del Magnetometer MAG3110. Estas compartiendo direcciones o te falta una Resistencia si mal recuerdo que habia que conectar a 5V.

Prueba este código y nos dices. Por lo que veo viene con las resistencias PULL UP por defecto.
Usa el que dice Example Code

Hola gracias por tu respuesta, Pues ese codigo ya lo intente usar pero me da el siguiente error: Wire.receive() ha sido renombrada Wire.read() para mantener la consistencia con otras librerías.

Y referente a la shield no llos estoy montando juntos las pruebas fueron por separado, pero ambas cosas fallan y son nuevas. Lo que me tiene con la duda es porque ni el codigo de I2C scanner funciona , no termina de hacerlo nunca. lastima que no tengo otro arduino uno cerca para probar.

¿has conectado como dijo surbyte 2 resistencias de 4k7 entre 5V y data y clock (A4 y A5)? ¿Seguro que no te has equivocado en el cableado?

Porque si el I2C scanner no encuentra nada, casi siempre es por eso.

armando_luisgz:
tengo un Magnetometer MAG3110 que Funciona mediante i2c el cual uso varios codigos y no funciona

/*

HMC5883L_Example.pde - Example sketch for integration with an HMC5883L triple axis magnetomerwe.

}

Primer error, mencionas un MAG3110 de la marca Freescale y pones un ejemplo de un HMC5883 de Honeywell’s.
Segundo error y el mas grave, Los 2 se alilmentan a maximo 3,6v si no estan protegidos o lo alimentas debidamente y proteges las lineas SDA y SCL, chau acelerometro.