Пример #1
0
        public void CtrlTest()
        {
            List <byte> packet = new List <byte>();
            var         bmp180 = new BMP180();

            bmp180.Reset();
            // Check the CtrlMeasurement register
            // Write a value to register
            byte ctrlValue = 0xAA;

            packet.Add((byte)0xFD);
            packet.Add((byte)0xF4);
            packet.Add(ctrlValue);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            // Read the CtrlMeasuremnent register value
            packet.Add((byte)0xFC);
            packet.Add((byte)0xF4);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] ctrlMeasurement = bmp180.Read();
            Assert.AreEqual(ctrlMeasurement[0], ctrlValue);
            // Check the SoftReset
            ctrlValue = 0xB6; //Should do same sequence as power-on-reset
            packet.Add((byte)0xFD);
            packet.Add((byte)0xE0);
            packet.Add(ctrlValue);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            // Read the SoftReset register value
            packet.Add((byte)0xFC);
            packet.Add((byte)0xE0);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] softReset = bmp180.Read();
            Assert.AreEqual(softReset[0], 0);
            // Read the CtrlMeasuremnent register value
            packet.Add((byte)0xFC);
            packet.Add((byte)0xF4);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            ctrlMeasurement = bmp180.Read();
            Assert.AreEqual(ctrlMeasurement[0], 0);
        }
Пример #2
0
        public void ReadMeasurementsTest()
        {
            List <byte> packet = new List <byte>();
            var         bmp180 = new BMP180();

            bmp180.Reset();
            // Read and setup calibration parameters.
            packet.Add((byte)0xFC);
            packet.Add((byte)0xAA);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibXX = bmp180.Read();
            Int16  AC1     = (Int16)(((Int16)calibXX[0] << 8) + (Int16)calibXX[1]);
            Int16  AC2     = (Int16)(((Int16)calibXX[2] << 8) + (Int16)calibXX[3]);
            Int16  AC3     = (Int16)(((Int16)calibXX[4] << 8) + (Int16)calibXX[5]);
            UInt16 AC4     = (UInt16)(((UInt16)calibXX[6] << 8) + (UInt16)calibXX[7]);
            UInt16 AC5     = (UInt16)(((UInt16)calibXX[8] << 8) + (UInt16)calibXX[9]);
            UInt16 AC6     = (UInt16)(((UInt16)calibXX[10] << 8) + (UInt16)calibXX[11]);
            Int16  B1      = (Int16)(((Int16)calibXX[12] << 8) + (Int16)calibXX[13]);
            Int16  B2      = (Int16)(((Int16)calibXX[14] << 8) + (Int16)calibXX[15]);
            // MB is currently not used
            //Int16 MB = (Int16)(((Int16)calibXX[16] << 8) + (Int16)calibXX[17]);
            Int16 MC = (Int16)(((Int16)calibXX[18] << 8) + (Int16)calibXX[19]);
            Int16 MD = (Int16)(((Int16)calibXX[20] << 8) + (Int16)calibXX[21]);
            // Start temperature measurement
            byte ctrlValue = 0x2E;

            packet.Add((byte)0xFD);
            packet.Add((byte)0xF4);
            packet.Add(ctrlValue);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            // Read the CtrlMeasuremnent register value
            packet.Add((byte)0xFC);
            packet.Add((byte)0xF4);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] ctrlMeasurement = bmp180.Read();
            Assert.AreEqual(ctrlMeasurement[0], ctrlValue);
            // Wait 5 milliseconds, (> 4.5 is ok - see Datasheet for BMP180)
            Thread.Sleep(5);
            // Construct packet list for read of temperature registers
            packet.Add((byte)0xFC);
            packet.Add((byte)0xF6);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            // Read Temperature MSB and LSB registers
            byte[] temp_bytes = bmp180.Read();
            // Calculate temperature
            // X1  = (UT - AC6)*AC5/2^15
            // X2  = MC*2^11/(X1+MD)
            // For pressure calculation B5 = X1 + X2 is needed
            // T   = (X1 + X2 + 8)/2^4
            Int32 UT             = (((Int32)temp_bytes[0] << 8) & 0xFF00) + ((Int32)temp_bytes[1] & 0xFF);
            Int32 X1             = (UT - Convert.ToInt32(AC6)) * Convert.ToInt32(AC5) / 0x8000;
            Int32 X2             = (Convert.ToInt32(MC) * 0x800) / (X1 + Convert.ToInt32(MD));
            Int32 B5             = X1 + X2;
            Int32 temperatureInt = (X1 + X2 + 8) / 16;
            // Temperature is given in 0.1 degrees C scale
            double temperature = Convert.ToDouble(temperatureInt) / 10.0;

            Assert.Greater(temperature, -40.0);
            // Start pressure measurement
            // Set oversampling ratio
            byte ossBits = 0; // 0,1,2,3 means 1,2,4,8 times oversampling

            ctrlValue = (byte)(0x34 + ((int)ossBits << 6));
            packet.Add((byte)0xFD);
            packet.Add((byte)0xF4);
            packet.Add(ctrlValue);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            // Read the CtrlMeasuremnent register value
            packet.Add((byte)0xFC);
            packet.Add((byte)0xF4);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            ctrlMeasurement = bmp180.Read();
            Assert.AreEqual(ctrlMeasurement[0], ctrlValue);
            // Wait 5 milliseconds, (> 4.5 is ok - see Datasheet for BMP180)
            Thread.Sleep(5);
            // Construct packet list for read of pressure registers
            packet.Add((byte)0xFC);
            packet.Add((byte)0xF6);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            // Read pressure MSB, LSB and XLSB registers
            byte[] pressure_bytes = bmp180.Read();
            // Calculate pressure ; B5 is carried over from temperature calculation
            // B6 = B5 - 4000
            // --- Calculate B3
            // X1 = B2 * (B6*B6 / 2^12) / 2^11
            // X2 = AC2 * B6 / 2^11
            // X3 = X1 + X2
            // B3 = ((AC1 * 4 + X3) << oss + 2) / 4
            // --- Calculate B4
            // X1 = AC3 * B6 / 2^13
            // X2 = B1 * (B6*B6 / 2^12) / 2^16
            // X3 = (X1 + X2 + 2) / 2^2
            // B4 = AC4 * (unsigned long)(X3 + 32768) / 2^15
            // --- Calculate B7
            // B7 = ((unsigned long)UP - B3) * (50000 >> oss)
            // --- Finally calculate pressure
            // if (B7 < 0x80000000)
            //   p = (2 * B7) / B4
            // else
            //   p = 2 * (B7 / B4)
            // X1 = (p / 2^8) * (p / 2^8)
            // X1 = (X1 * 3038) / 2^16
            // X2 = (-7357 * p) / 2^16
            // P = p + (X1 + X2 + 3791) / 2^4
            UInt32 uintUP = (((UInt32)pressure_bytes[0] << 16) & 0xFF0000) + (((UInt32)pressure_bytes[1] << 8) & 0xFF00) + (((UInt32)pressure_bytes[2]) & 0xFF);
            // Handle oversampling setting
            double UP = Convert.ToDouble(uintUP >> (8 - ossBits));
            Int32  B6 = B5 - 4000;

            X1 = Convert.ToInt32(B2) * (B6 * B6 / 4096) / 2048;
            X2 = Convert.ToInt32(AC2) * B6 / 2048;
            Int32 X3 = X1 + X2;
            Int32 B3 = (((4 * Convert.ToInt32(AC1) + X3) << ossBits) + 2) / 4;

            X1 = Convert.ToInt32(AC3) * B6 / 8192;
            X2 = Convert.ToInt32(B1) * (B6 * B6 / 4096) / 65536;
            X3 = (X1 + X2 + 2) / 4;
            UInt32 B4 = Convert.ToUInt32(AC4) * Convert.ToUInt32(X3 + 32768) / 32768;
            UInt32 B7 = (Convert.ToUInt32(UP) - Convert.ToUInt32(B3)) * Convert.ToUInt32((50000 >> ossBits));
            Int32  p1 = 0;

            if (B7 < 0x80000000)
            {
                p1 = Convert.ToInt32((2 * B7) / B4);
            }
            else
            {
                p1 = Convert.ToInt32(2 * (B7 / B4));
            }
            X1  = (p1 / 256) * (p1 / 256);
            X1  = (X1 * 3038) / 65536;
            X2  = 0;
            X2 -= 7357 * p1 / 65536;
            double pressure = Convert.ToDouble(p1 + (X1 + X2 + 3791) / 16);

            pressure = Math.Round(pressure, 0);
            Assert.Greater(pressure, 0);
            // Given the pressure at sea level p_0 e.g. 101325 Pa
            // Calculate altitude = 44330 * [1 - ( p / p_0 )^( 1 / 5.255 )]
            //Int32 altitudeInt = 44330 * (1 - Convert.ToInt32(Math.Pow((pressure / 101325.0), (1.0 / 5.255))));
            //Console.WriteLine("Altitude: " + altitudeInt.ToString() + " meters above sea level");
        }
Пример #3
0
        public void InitTest()
        {
            List <byte> packet = new List <byte>();
            var         bmp180 = new BMP180();

            bmp180.Reset();
            // Check the Chip ID
            packet.Add((byte)0xFC);
            packet.Add((byte)0xD0);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] chipId = bmp180.Read();
            Assert.AreEqual(chipId[0], 0x55);
            // Check the SoftReset
            packet.Add((byte)0xFC);
            packet.Add((byte)0xE0);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] softReset = bmp180.Read();
            Assert.AreEqual(softReset[0], 0);
            // Check the CtrlMeasurement
            packet.Add((byte)0xFC);
            packet.Add((byte)0xF4);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] ctrlMeasurement = bmp180.Read();
            Assert.AreEqual(ctrlMeasurement[0], 0);
            // Read, write and check all calibration parameters in one go
            packet.Add((byte)0xFC);
            packet.Add((byte)0xAA);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibXX = bmp180.Read();
            Assert.AreEqual(calibXX[0], 0x1B);
            Assert.AreEqual(calibXX[1], 0xCB);
            Assert.AreEqual(calibXX[2], 0xFB);
            Assert.AreEqual(calibXX[3], 0xCD);
            Assert.AreEqual(calibXX[4], 0xC6);
            Assert.AreEqual(calibXX[5], 0x91);
            Assert.AreEqual(calibXX[6], 0x7B);
            Assert.AreEqual(calibXX[7], 0xA8);
            Assert.AreEqual(calibXX[8], 0x5F);
            Assert.AreEqual(calibXX[9], 0xE8);
            Assert.AreEqual(calibXX[10], 0x43);
            Assert.AreEqual(calibXX[11], 0x35);
            Assert.AreEqual(calibXX[12], 0x15);
            Assert.AreEqual(calibXX[13], 0x7A);
            Assert.AreEqual(calibXX[14], 0x00);
            Assert.AreEqual(calibXX[15], 0x38);
            Assert.AreEqual(calibXX[16], 0x80);
            Assert.AreEqual(calibXX[17], 0x00);
            Assert.AreEqual(calibXX[18], 0xD4);
            Assert.AreEqual(calibXX[19], 0xBD);
            Assert.AreEqual(calibXX[20], 0x09);
            Assert.AreEqual(calibXX[21], 0x80);
            packet.Add((byte)0xFD);
            packet.Add((byte)0xAA);
            packet.Add((byte)0xDE);
            packet.Add((byte)0xAD);
            packet.Add((byte)0xDE);
            packet.Add((byte)0xAD);
            packet.Add((byte)0xDE);
            packet.Add((byte)0xAD);
            packet.Add((byte)0xDE);
            packet.Add((byte)0xAD);
            packet.Add((byte)0xDE);
            packet.Add((byte)0xAD);
            packet.Add((byte)0xDE);
            packet.Add((byte)0xAD);
            packet.Add((byte)0xDE);
            packet.Add((byte)0xAD);
            packet.Add((byte)0xDE);
            packet.Add((byte)0xAD);
            packet.Add((byte)0xDE);
            packet.Add((byte)0xAD);
            packet.Add((byte)0xDE);
            packet.Add((byte)0xAD);
            packet.Add((byte)0xDE);
            packet.Add((byte)0xAD);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            packet.Add((byte)0xFC);
            packet.Add((byte)0xAA);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            calibXX = bmp180.Read();
            Assert.AreEqual(calibXX[0], 0xDE);
            Assert.AreEqual(calibXX[1], 0xAD);
            Assert.AreEqual(calibXX[2], 0xDE);
            Assert.AreEqual(calibXX[3], 0xAD);
            Assert.AreEqual(calibXX[4], 0xDE);
            Assert.AreEqual(calibXX[5], 0xAD);
            Assert.AreEqual(calibXX[6], 0xDE);
            Assert.AreEqual(calibXX[7], 0xAD);
            Assert.AreEqual(calibXX[8], 0xDE);
            Assert.AreEqual(calibXX[9], 0xAD);
            Assert.AreEqual(calibXX[10], 0xDE);
            Assert.AreEqual(calibXX[11], 0xAD);
            Assert.AreEqual(calibXX[12], 0xDE);
            Assert.AreEqual(calibXX[13], 0xAD);
            Assert.AreEqual(calibXX[14], 0xDE);
            Assert.AreEqual(calibXX[15], 0xAD);
            Assert.AreEqual(calibXX[16], 0xDE);
            Assert.AreEqual(calibXX[17], 0xAD);
            Assert.AreEqual(calibXX[18], 0xDE);
            Assert.AreEqual(calibXX[19], 0xAD);
            Assert.AreEqual(calibXX[20], 0xDE);
            Assert.AreEqual(calibXX[21], 0xAD);
            // Reset calibration parameters
            bmp180.Reset();
            // Read, write and check calibration parameters individually
            packet.Add((byte)0xFC);
            packet.Add((byte)0xAA);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibAA = bmp180.Read();
            Assert.AreEqual(calibAA[0], 0x1B);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xAB);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibAB = bmp180.Read();
            Assert.AreEqual(calibAB[0], 0xCB);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xAC);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibAC = bmp180.Read();
            Assert.AreEqual(calibAC[0], 0xFB);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xAD);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibAD = bmp180.Read();
            Assert.AreEqual(calibAD[0], 0xCD);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xAE);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibAE = bmp180.Read();
            Assert.AreEqual(calibAE[0], 0xC6);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xAF);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibAF = bmp180.Read();
            Assert.AreEqual(calibAF[0], 0x91);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xB0);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibB0 = bmp180.Read();
            Assert.AreEqual(calibB0[0], 0x7B);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xB1);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibB1 = bmp180.Read();
            Assert.AreEqual(calibB1[0], 0xA8);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xB2);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibB2 = bmp180.Read();
            Assert.AreEqual(calibB2[0], 0x5F);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xB3);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibB3 = bmp180.Read();
            Assert.AreEqual(calibB3[0], 0xE8);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xB4);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibB4 = bmp180.Read();
            Assert.AreEqual(calibB4[0], 0x43);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xB5);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibB5 = bmp180.Read();
            Assert.AreEqual(calibB5[0], 0x35);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xB6);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibB6 = bmp180.Read();
            Assert.AreEqual(calibB6[0], 0x15);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xB7);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibB7 = bmp180.Read();
            Assert.AreEqual(calibB7[0], 0x7A);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xB8);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibB8 = bmp180.Read();
            Assert.AreEqual(calibB8[0], 0x00);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xB9);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibB9 = bmp180.Read();
            Assert.AreEqual(calibB9[0], 0x38);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xBA);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibBA = bmp180.Read();
            Assert.AreEqual(calibBA[0], 0x80);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xBB);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibBB = bmp180.Read();
            Assert.AreEqual(calibBB[0], 0x00);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xBC);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibBC = bmp180.Read();
            Assert.AreEqual(calibBC[0], 0xD4);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xBD);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibBD = bmp180.Read();
            Assert.AreEqual(calibBD[0], 0xBD);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xBE);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibBE = bmp180.Read();
            Assert.AreEqual(calibBE[0], 0x09);
            packet.Add((byte)0xFC);
            packet.Add((byte)0xBF);
            bmp180.Write(packet.ToArray());
            packet.Clear();
            byte[] calibBF = bmp180.Read();
            Assert.AreEqual(calibBF[0], 0x80);
        }