# What is the data returned from this flow meter with I2C communication?

I am doing a market search looking for a flow meter and I encountered this Posifa PMF 2000 series that uses I2C communication.

Out of curiosity, I decided to write some code to read the measured values despite not owning the device yet. Then I started looking through the application notes.

Reading it, I could understand the first byte is used as an integrity check, but couldn't understand the other four bytes. I think the first two bytes would be the payload, but I am not sure, and I don't have any guesses regarding the high and low coefficient bytes.

What are these other bytes?

EDIT: Sorry, I used the wrong model and link, it's Posifa PLF 2000 series. The correct application notes' link is this one : correct applications note

To understand this, you need to refer to the PMF 2000 datasheet also.

The different sensors in the family have different maximum flow rates. That maximum flow rates is returned in the reading as Coefficient.

The measurement returned is then the numerator in a fraction, the fraction of the maximum flow rate for that sensor.

So the reading needs some simple processing to produce an absolute value of a flow rate.

The I2C app note shows the below reading packet format. The 'F' bit is detailed well in the app note. The 14-bit FlowRate and 16-bit Coefficient are shown.

The documents state that the FlowRate range is 256...16124. Consider this to be a FlowRate range of 0..15868 but with an offset of 256 added to FlowRate. So the 256 offset has to be removed, from both FlowRate and from the range.

The fraction of Coefficient that the reading represents is: (FlowRate - 256) / 15868

This must then be multiplied with Coefficient to get an absolute value in real units for that sensor. So the final calculation is:

((FlowRate - 256) x Coefficient) / 15868

Note that the app note states "Flow reading below 256 indicates possible reverse flow. Flow reading above 15868 indicates flow rate exceeding full scale. So your read software routine needs to check for these underflow and overflow readings and indicate an invalid measurement.

• Hi, thank you for the answer. Another question, how would I know if I am reading the right bytes to get the measurements? Would I just get x bytes from the address each time?
– GRS
Oct 17, 2022 at 19:46
• @GRS, you're welcome but that next question is asking about the basics of I2C itself. Your bus master must read the 5 bytes from that I2C address, following the I2C protocol. You'll find tons already written in detail about how to use I2C on the internet. Your software platform may/should have library routines to handle it. Oct 17, 2022 at 20:04
• Hi, since yesterday I have been reading materials about I²C, but I still have some specific doubts. Would you mind if I asked some follow up questions?
– GRS
Oct 18, 2022 at 14:47
• @GRS, we should go to a Chat for that but you don't have 100 reputation yet so you can't. Fire away with your question. Oct 18, 2022 at 14:57
• I understand this device has 7 bit address 0x50 (0b1010000) and an extra bit that can be set to either 1,Read, or 0,Write. But I having a hard time understanding the process of setting the value. Should I send a byte with last bit 1 to 0x50, send a empty byte to 0xA1, 0x50 with an extra bit set to 1, or send 0b1011001 to 0x50?
– GRS
Oct 18, 2022 at 15:09

The F bit tells you there is no new flow rate measurement since the last read.

To compute the flow rate, ignore the upper two bits, and combine the remaining bits into a 14-bit value:

flow_reading = ((byte2 & 0x3f) << 8) | byte3;


The coefficient is not described in that document, and can probably be ignored.