Blood Pressure Measurement 24h

I like to make a 24h Blood Pressure Measurement on my own. Unfortunatly the price of such an equipment is about 10 times that of a usual measurment device (with PC readout). Mainly the only difference is a timer to start the measurement automatically, with the following scheme:

So, how to build such a timer? The ideal electronics for that task is a micro processor. I selected a Microchip PIC12F629 (8 pin SOT), which can be programmed in C with the free Integrated Development Environment (IDE) MPLAB X (actual Version 3.26, C-compiler XC8).



As a proven Digital Automatic Blood Pressure Monitor an OMRON M10-IT with USB port was selected. It can store 84 measurements in a rolling buffer, which is enough for the 24h operation. Another benefit is, that a free software under Linux exists for reading out the measurement data.

The price was about 82 EUR (AC adapter included).

Product Features:

The housing can be opened by removing 2 srews. Then with a plastic card try to separate the two half shells from the bottom right side. On the picture on the right you can see where the plastic locks are located.

/!\ Be careful with the flat film cable of the LCD. You are doing the modification on your own risk, and you will loose the manufators warranty.


Timer Hardware

For the hardware, please see the schematic on the right (click to expand). ICSP = In Circuit Serial Programming

A LED was added to quick check the function of the micro processor, it flashes about every 2 seconds.

The 24h measurement is started with a switch on the backside of the housing, just below the AC adapter jack. The switch was mounted with double sided sticky tape. In order to not modifying the housing, two thin wire wrap wires are fed through the opening. Please see the picture below in the center for the details.

/!\ Switching ON of the timer with the VDD supply does not work, instead the switching must be done with the GND supply. The reason is a current flow in the diode, which supplies enough power to the CPU to act. That causes a periodic (about 2 minutes) Power On Reset (all LCD segments are displayed) of the M10-IT.

A printed circuit board was developed with the program Eagle. The Eagle 7 development file can be downloaded:

The left picture below shows the board with the PICkit3 USB programmer. The right picture shows the wire connection.





Trigger Timing

It was not so easy to figure out what to do to trigger a measurement, because there is some kind of multiplexing, see the lower trace of the timing diagram on right.

It was not sufficient to use a microprocessor port to pull down that start switch signal. For a good function it needs a diode to pull down the start switch signal, see the upper trace of the timing diagram on right. When the microprocessor in the M10 sees that signal, it will stop the multiplexing for some time.

Timer Software

In order to keep the power consumtion low, the Sleep command of the CPU is used. The timing itself is made by the integrated Watchdog timer (about 2.4 seconds).

The 24h interval program must be started at 9 o'clock in the morning, in order to keep the programming simple.

Unfortunately the integrated RC clock (for low cost) is dependent from the supply voltage (M10-IT has 3.8 V). On the other hand, the Flash ROM programming needs about +5 V. So, the time adjustment must be made at 3.8 V.

For timing measurement measure the time from flipping the switch to ON to the first M10-IT start, it should be 60 seconds.

The coarse timing adjustment is made in function pauseMinutes() with the for loop count (steps = 2.4 s).

The fine timing adjustment is made in function wdtSleep() with the delay statements (steps = delay * 21).

A 24h measurement shows a deviation of 847s in 36,000s (10h) = + 2,35%.

/!\ Because the watchdog timer is not very acurate, a crystal is now used, see MCU Clock.

The 'C' program can be downloaded:

Application Software

The software BI-Link version 1.6 for Windows.

The software libomron at github for Linux, please see the Link #7 and the example use:

# plugin USB cable of M10-IT

# assign USB port name for the program
$ lsusb | grep Omron
Bus 002 Device 003: ID 0590:0028 Omron Corp. HJ-720IT / HEM-7080IT-E / HEM-790IT
# adjust Bus and Device number in the next command: e.g. /002/003
$ export OMRON_DEV=/dev/bus/usb/002/003

# check USB port name
$ ls -l $OMRON_DEV
crw-rw-r-- 1 root root 189, 130 Apr  1 14:32 /dev/bus/usb/002/003

# compile the source package, as described in the link.

# read out measurement values
$ cd libomron-master/bin/bin/
$ sudo ./omron_790IT_test 
[sudo] password for rudi: 
Found 1 omron 790ITs
Opened omron 790IT
Device serial: M7080IT 207J
Device version: 0310100000J
AJR data count: 7
31/03/2016 19:38:46 SYS: 126 DIA:  84 PULSE:  64
31/03/2016 19:40:10 SYS: 116 DIA:  70 PULSE:  67
31/03/2016 19:41:15 SYS: 121 DIA:  79 PULSE:  66
01/04/2016 07:12:41 SYS: 112 DIA:  76 PULSE:  61
01/04/2016 07:13:55 SYS: 113 DIA:  71 PULSE:  58
01/04/2016 12:30:43 SYS: 122 DIA:  78 PULSE:  63
01/04/2016 12:32:09 SYS: 118 DIA:  72 PULSE:  64
Weekly info:
Morning[0 27/03/2016] = sys:113 dia:74 pulse:60.
Evening[0 27/03/2016] = sys:121 dia:78 pulse:66.


Measurement example

A 24h period was measured for test, and the results exported with the Omron software BI-Link in CSV format.

Those data were imported into LibreOffice Calc, some calculations are done and a diagram generated, please see the picture on the right.

attachment:BPM_LED-2000ms#3-2016-04-19 19_00_37.png

MCU Clock

The first try with the MCU clock was the internal RC oscillator with 4 MHz. Unfortunately the timing of the example program I used first, was made with the command sleep and the watchdog timer, which has its own RC clock, which is not very stable concerning supply voltage and temperature. The deviation in 24h was about 30 minutes.

The best solution for low power consumption, the stability over supply voltage range and temperature stability is a 32768 Hz crystal, which is usually used for watches. The timing diagram on the right shows the timing measurement with the small logic analyzer USBee (9 EUR), used under Linux.

The program was Pulseview from the free sigrok project. This program you can find under Ubuntu 14.04 in package sigrok. The shown timing analysis was for the 2000 ms timing with LED flashing for 196 ms. To compensate for the program run time, 4 ms were substracted from the 2000 ms timing. The following calculations shows a good accuracy for the 24h measurement.

  1. Product description OMRON M10-IT

  2. Manual for OMRON M10-IT

  3. Timer software example

  4. Sleep and Watchdog for PIC explained

  5. Getting Started with MPLAB XC8 Compiler – LED Blinking

  6. How to program PIC 12F629 internal oscilator in C?

  7. Linux software for M10-IT

List of pages in this category:

-- RudolfReuter 2016-04-03 14:17:50

Go back to CategoryHaushalt oder StartSeite ; KontaktEmail (ContactEmail)

BloodPressureMonitor24h (last edited 2016-07-04 09:38:51 by RudolfReuter)