Exemplo n.º 1
0
        static void Main(string[] args)
        {
            using (BMP180 bmp180 = new BMP180())
            {
                try
                {
                    var temperature = bmp180.ReadTemperature();
                    var pressure    = bmp180.ReadPressure();
                    var altitude    = bmp180.ReadAltitude();
                    var p0          = bmp180.ReadSeaAltitude();

                    Console.WriteLine("Temperature {0}.{1} *C", temperature / 10, temperature % 10);
                    Console.WriteLine("Pressure {0} Bar", pressure);
                    Console.WriteLine("Altitude {0:0.##} mts", altitude);
                    Console.WriteLine("Sealevel Pressure {0} Pa", p0);
                }
                catch (Exception ex)
                {
                    var st    = new StackTrace(ex, true);
                    var frame = st.GetFrame(0);
                    var line  = frame.GetFileLineNumber();

                    Console.WriteLine("[{0}]: {1}", line, ex.Message);
                }
            }
        }
Exemplo n.º 2
0
        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            Sens = new BMP180();
            await Sens.Init();

            dt.Tick += ReMeasure;
            dt.Start();
        }
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            _deferral = taskInstance.GetDeferral();
            LED8x8Matrix matrix = new LED8x8Matrix(driver);

            BMP180 tempAndPressure = new BMP180();


            while (true)
            {
                var message = $"{Math.Round(tempAndPressure.Temperature.DegreesCelsius, 1)}C, {Math.Round(tempAndPressure.Pressure.Hectopascals, 1)}hPa ";

                matrix.ScrollStringInFromRight(message, 70);
            }
        }
Exemplo n.º 4
0
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            _deferral = taskInstance.GetDeferral();  // get the deferral handle

            int count = 0;

            MAX7219             driver = new MAX7219(2);
            SevenSegmentDisplay ssd    = new SevenSegmentDisplay(driver);
            BMP180 bmp = new BMP180(BMP180.Mode.HIGHRES);

            ssd.FrameClear();
            ssd.FrameDraw();
            ssd.SetBrightness(4);

            while (true)
            {
                temperature = bmp.Temperature.DegreesCelsius;

                data.Clear();

                // is temperature less than 3 digits and there is a decimal part too then right pad to 5 places as decimal point does not take up a digit space on the display
                if (temperature < 100 && temperature != (int)temperature)
                {
                    data.Append($"{Math.Round(temperature, 1)}C".PadRight(5));
                }
                else
                {
                    data.Append($"{Math.Round(temperature, 0)}C".PadRight(4));
                }

                data.Append(Math.Round(bmp.Pressure.Hectopascals, 0));

                if (blink = !blink)
                {
                    data.Append(".");
                }                                          // add a blinking dot on bottom right as an I'm alive indicator

                ssd.DrawString(data.ToString());

                ssd.DrawString(count++, 1);

                ssd.FrameDraw();

                Task.Delay(2000).Wait();
            }
        }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
        private static void Main()
        {
            _bmp180 = new BMP180(Hardware.SocketOne)
            {
                OverSamplingSetting = BMP180.Oss.UltraHighResolution,
                TemperatureUnit     = TemperatureUnits.Celsius
            };

            Debug.WriteLine("BMP180 Demo");
            Debug.WriteLine("Is a BMP180 connected? " + _bmp180.IsConnected());
            Debug.WriteLine("BMP180 Sensor OSS is - " + _bmp180.OverSamplingSetting + "\n");

            while (true)
            {
                Debug.WriteLine($"Temperature : {_bmp180.ReadTemperature():F2} °C");
                Debug.WriteLine($"   Pressure : {_bmp180.ReadPressure():F1} Pascals");
                Debug.WriteLine($"   Altitude : {_bmp180.ReadAltitude():F0} meters\n");
                Thread.Sleep(2000);
            }
        }
Exemplo n.º 7
0
        public static void Main()
        {
            _bmp180 = new BMP180(Hardware.SocketThree, ClockRatesI2C.Clock400KHz, 1000, Hardware.SocketThree.An)
            {
                OverSamplingSetting = BMP180.Oss.UltraHighResolution,
                TemperatureUnit     = TemperatureUnits.Fahrenheit
            };

            _bmp180.MeasurementComplete += MeasurementComplete;

            Debug.Print("BMP180 Demo");
            Debug.Print("Driver Version Info - " + _bmp180.DriverVersion);
            Debug.Print("Is a BMP180 connected? " + _bmp180.IsConnected());
            Debug.Print("BMP180 Sensor OSS is - " + _bmp180.OverSamplingSetting + "\n");

            /* Use one of the following methods to read sensor */
            new Thread(PollingwithEventsThread).Start();
            //new Thread(DirectReadThread).Start();

            Thread.Sleep(Timeout.Infinite);
        }
Exemplo n.º 8
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");
        }
Exemplo n.º 9
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);
        }
Exemplo n.º 10
0
        public void ReadFromSlaveTest()
        {
            var machine = new Machine();
            var efm32ggi2ccontroller = new EFM32GGI2CController(machine);

            machine.SystemBus.Register(efm32ggi2ccontroller, new BusRangeRegistration(0x4000A000, 0x400));
            efm32ggi2ccontroller.Reset();
            var bmp180 = new BMP180();

            bmp180.Reset();
            efm32ggi2ccontroller.Register(bmp180, new NumberRegistrationPoint <int>(0xEE));
            // Enable I2C controller
            uint ctrl = 0x1;

            efm32ggi2ccontroller.WriteDoubleWord(0x0, ctrl);
            // Enable all interrupts
            uint interruptMask = 0x1FFFF;

            efm32ggi2ccontroller.WriteDoubleWord(0x34, interruptMask);
            // Clear all interrupts
            efm32ggi2ccontroller.WriteDoubleWord(0x30, interruptMask);
            // Check interrupt flags
            uint interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);

            Assert.AreEqual(interruptFlags, 0x0);
            // Write slave address byte to transmit buffer
            uint txData = 0xEE; // Write address for BMP180

            efm32ggi2ccontroller.WriteDoubleWord(0x24, txData);
            // Check that the transmit buffers are not overflowing
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreNotEqual((interruptFlags & 0x1000), 0x1000);
            // Send start command
            uint cmd = 0x1;

            efm32ggi2ccontroller.WriteDoubleWord(0x4, cmd);
            // Check slave ACK for address
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreEqual((interruptFlags & 0x40), 0x40);
            // Write slave BMP180 OutMSB Register Address
            txData = 0xF6;
            efm32ggi2ccontroller.WriteDoubleWord(0x24, txData);
            // Check that the transmit buffers are not overflowing
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreNotEqual((interruptFlags & 0x1000), 0x1000);
            // Initiate read with writing BMP180 address byte with read bit set
            // Send restart command
            cmd = 0x1;
            efm32ggi2ccontroller.WriteDoubleWord(0x4, cmd);
            txData = 0xEF;
            efm32ggi2ccontroller.WriteDoubleWord(0x24, txData);
            // Check that the transmit buffers are not overflowing
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreNotEqual((interruptFlags & 0xC), 0xC);
            // Wait and check if the receive buffer has data
            int loopCounter = 0;

            do
            {
                interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
                loopCounter++;
                Thread.Sleep(10);
            }while(((interruptFlags & 0x20) != 0x20) && (loopCounter < 1000));
            Assert.AreEqual((interruptFlags & 0x20), 0x20);
            Assert.AreNotEqual(loopCounter, 1000);
            // Read MSB byte and see that it is the reset value 0x80
            uint rxData = efm32ggi2ccontroller.ReadDoubleWord(0x1C);

            Assert.AreEqual(rxData, 0x80);
            // Send stop command
            cmd = 0x2;
            efm32ggi2ccontroller.WriteDoubleWord(0x4, cmd);
            // Check that MSTOP interrupt has been issued
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreEqual((interruptFlags & 0x100), 0x100);
        }
Exemplo n.º 11
0
        public void TemperatureMeasurementTest()
        {
            var machine = new Machine();
            var efm32ggi2ccontroller = new EFM32GGI2CController(machine);

            machine.SystemBus.Register(efm32ggi2ccontroller, new BusRangeRegistration(0x4000A000, 0x400));
            efm32ggi2ccontroller.Reset();
            var bmp180 = new BMP180();

            bmp180.Reset();
            efm32ggi2ccontroller.Register(bmp180, new NumberRegistrationPoint <int>(0xEE));
            // Enable I2C controller
            uint ctrl = 0x1;

            efm32ggi2ccontroller.WriteDoubleWord(0x0, ctrl);
            // Enable all interrupts
            uint interruptMask = 0x1FFFF;

            efm32ggi2ccontroller.WriteDoubleWord(0x34, interruptMask);
            // Send start command
            uint cmd = 0x1;

            efm32ggi2ccontroller.WriteDoubleWord(0x4, cmd);
            // Check that the START flag was set
            uint interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);

            Assert.AreEqual((interruptFlags & 0x1), 0x1);
            // Write slave address byte to transmit buffer
            uint txData = 0xEE; // Write address for BMP180

            efm32ggi2ccontroller.WriteDoubleWord(0x24, txData);
            // Check that the transmit buffers are not overflowing
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreNotEqual((interruptFlags & 0x1000), 0x1000);
            // Check slave ACK for address
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreEqual((interruptFlags & 0x40), 0x40);
            // Write more bytes for transmission, start temperature measurement
            txData = 0xF4; // CtrlMeasurment Register Address
            efm32ggi2ccontroller.WriteDoubleWord(0x24, txData);
            // Check that the transmit buffers are not overflowing
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreNotEqual((interruptFlags & 0x1000), 0x1000);
            txData = 0x2E; // Temperature measurement code
            efm32ggi2ccontroller.WriteDoubleWord(0x24, txData);
            // Check that the transmit buffers are not overflowing
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreNotEqual((interruptFlags & 0x1000), 0x1000);

            // Wait 5 milliseconds, (> 4.5 is ok - see Datasheet for BMP180)
            Thread.Sleep(5);

            // Start read by specifying OutMSB register
            // - this will return MSB and LSB for sequential reads
            // Send restart command
            cmd = 0x1;
            efm32ggi2ccontroller.WriteDoubleWord(0x4, cmd);
            // Write slave address byte to transmit buffer
            txData = 0xEE; // Write address for BMP180
            efm32ggi2ccontroller.WriteDoubleWord(0x24, txData);
            // Check that the transmit buffers are not overflowing
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreNotEqual((interruptFlags & 0x1000), 0x1000);
            // Check slave ACK for address
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreEqual((interruptFlags & 0x40), 0x40);
            // Write OutMSB Register Address
            txData = 0xF6;
            efm32ggi2ccontroller.WriteDoubleWord(0x24, txData);
            // Check that the transmit buffers are not overflowing
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreNotEqual((interruptFlags & 0x1000), 0x1000);

            // Send restart command
            cmd = 0x1;
            efm32ggi2ccontroller.WriteDoubleWord(0x4, cmd);
            // Tell BMP180 sensor we will read
            txData = 0xEF; // Write address for BMP180
            efm32ggi2ccontroller.WriteDoubleWord(0x24, txData);
            // Check that the transmit buffers are not overflowing
            interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
            Assert.AreNotEqual((interruptFlags & 0x1000), 0x1000);

            // Read byte from slave through controller rx buffer (register address 0x1C)
            // Check if read data is available - RXDATAV interrupt flag
            bool finishedRead = false;

            uint[] rxData = new uint[2] {
                0, 0
            };
            uint index       = 0;
            uint loopCounter = 0;

            while (!finishedRead)
            {
                interruptFlags = efm32ggi2ccontroller.ReadDoubleWord(0x28);
                if ((interruptFlags & 0x20) == 0x20)
                {
                    rxData[index++] = efm32ggi2ccontroller.ReadDoubleWord(0x1C);
                }
                if (index == 2 || loopCounter == 1000)
                {
                    finishedRead = true;
                }
                Thread.Sleep(10);
                loopCounter++;
            }
            Assert.AreNotEqual(loopCounter, 1000);
            uint temperature = ((rxData[0] << 8) & 0xFF00) + rxData[1];

            Assert.Greater(temperature, 0);
            // Send stop command
            cmd = 0x2;
            efm32ggi2ccontroller.WriteDoubleWord(0x4, cmd);
        }
Exemplo n.º 12
0
 private void STVarChanged(Topic snd, TopicChanged p) {
   if(p.Visited(_owner, true)) {
     return;
   }
   for(int i=_drivers.Count-1; i>=0; i--) {
     if(_drivers[i].VarChanged(snd, p.Art==TopicChanged.ChangeArt.Remove)) {
       if(p.Art==TopicChanged.ChangeArt.Remove) {
         lock(_drivers) {
           _drivers.RemoveAt(i);
         }
       }
       return;
     }
   }
   if(p.Art==TopicChanged.ChangeArt.Remove) {
     return;
   }
   TWICommon drv=null;
   switch(snd.name) {
   case "LM75_T0":
   case "LM75_T1":
   case "LM75_T2":
   case "LM75_T3":
     drv=new LM75(snd);
     break;
   case "CC2D_T":
   case "CC2D_H":
     drv=new CC2D(snd);
     break;
   case "HIH61_T":
   case "HIH61_H":
     drv=new HIH61xx(snd);
     break;
   case "SI7020_T":
   case "SI7020_H":
     drv=new SI7020(snd);
     break;
   case "BMP180_T":
   case "BMP180_P":
     drv=new BMP180(snd);
     break;
   case "BME280_T":
   case "BME280_P":
   case "BME280_H":
     drv=new BME280(snd);
     break;
   case "BLINKM_8":
   case "BLINKM_9":
   case "BLINKM_10":
     drv=new Blinky(snd);
     break;
   case "BH1750_0":
   case "BH1750_1":
     drv=new BH1750(snd);
     break;
   case "EXP_0":
   case "EXP_1":
   case "EXP_2":
   case "EXP_3":
   case "EXP_4":
   case "EXP_5":
   case "EXP_6":
   case "EXP_7":
     drv=new Expander(snd);
     break;
   //case "SI1143":
   //  drv=new SI1143(snd);
   //  break;
   default:
     if(snd.name.Length>2 && snd.name.Length<6 && (snd.name.StartsWith("Sa") || snd.name.StartsWith("Ra"))) {
       drv=new RawDevice(snd);
     }
     break;
   }
   if(drv!=null) {
     lock(_drivers) {
       for(int i=_drivers.Count-1; i>=0; i--) {
         if(_drivers[i].VarChanged(snd, false)) {
           drv=null;
           break;
         }
       }
       if(drv!=null) {
         _drivers.Add(drv);
       }
     }
   }
 }