I am having no success reading any values from the HMC5883L magnetometer.
I have its power connected to the 3.3V on the Uno
SCL and SDA have 4.7k pullups on the board and are connected to the corresponding Uno pins with wires approx 4 inches long.
There are many examples of code for this board on www and I have tried many of them. I get "can't find device" or all zeroes data, or no data at all (program hangs on the line getting data from the chip).
I ran the I2C scanner which finds a device at 0x0D which seems odd as the code all expects it to be at 0x1E.
I have now deleted all the stuff I downloaded in case one was interfering with another and I have downloaded the Sparkfun HMC5883L.pde code. This uses Wire.send and Wire.receive which I have changed to Wire.write and Wire.read. With this modification it compiles and uploads but gives only zeroes for x, y, and z.
I have tried using address 0x1E and 0x0D but get zeroes for both.
Any suggestions I should try?
datasheet states 1E .
use wire.read / wire.write (new syntax)
added: if your board has a 3v3 regulator, you can use Ucc=5V
Yes, I changed to Wire.read and Wire.write.
I added code to read the return value Wire.endTransmission.
Using address 0x1E the return value is 2 (NACK received)
Using address 0x0D the return value is 0 (Success)
The program checks Wire.available is at least 6 before using the values.
I added code to print Wire.available.
Using address 0x1E it prints 0
Using address 0x0D it prints 6! (although the values read are all zero)
I have two of these boards from different suppliers and they both do the same and they do seem to be insisting that their I2C address is 0x0D.
What the heck is going on here?
Did you solder the connections and check for shorts?
Try the I2C address scanner. If it doesn't find a valid device with the right address, either the module or your wiring is defective.
I may have found the solution - the wrong chip is fitted to the board >:(
(Applies to both the boards that I have - different boards from different suppliers!)
Here is someone with a board showing the same symptoms:
https://www.raspberrypi.org/forums/viewtopic.php?t=172244&p=1102197
Both my chips are marked DA5883.
Thanks for listening 
... fake chip (or 'clone')
try read ALL addresses, print their values to help you identify valid data
A google for your DA.. chip retuns nothing useful
After more searching I believe the chip marked DA5883 is a QMC5883L (just one letter different).
There is a data sheet here: https://github.com/luckypm/commn-informations/raw/master/地磁文档/航纬5983替代料资料/QMC5883L%20Datasheet%201.0%20.pdf
The basic functions are the same but the I2C address is different as already noted but also all the register addresses are different, the values are little endian (instead of big endian) and the way the chip is configured is different.
I still haven't managed to get readings that might represent the magnetic field.
Another attempt at that [datasheet](http://commn-informations/地磁文档/航纬5983替代料资料/QMC5883L Datasheet 1.0 .pdf) link.
Another attempt at the link.
From the data sheet link, the chip is made by a Chinese manufacturer that licensed the technology from Honeywell. So it should work, and registers 0-5 contain the magnetic field data.
However, if you connected SDA and SCL to a 5V Uno, you may have damaged or destroyed the chip. It is 3.3V ONLY.
SCL and SDA have 4.7k pullups on the board and are connected to the corresponding Uno pins with wires approx 4 inches long.
I have used Uno with a level converter for SDA and SCL. I get the same results with Seeeduino switched to run on 3.3V.
I do get reasonably consistent readings circa 6000, 2700, 5000 but the readings change very, very little with the orientation of the board.
I have sent a message to the supplier. I await their reply.