Author Topic: solved:MCP2221 USB to I2C bridge with MCP9808 sensor conversion problem, Python.  (Read 1735 times)

0 Members and 1 Guest are viewing this topic.

Offline lkTopic starter

  • Regular Contributor
  • *
  • Posts: 152
  • Country: dk
Greetings,
just for the fun of it i wanted to see if i could make a small usb temperature sensor, using the MCP2221A Usb to I2C bridge and a MCP9808 temperature sensor. I think i have the hardware working, i can read the data for the temperature. However I have trouble with the conversion of the temperature, i have included my code and the schematic, and the output. The temperature output contains two bytes, a high and a low. The high byte contains alerts[b15-b13] and sign[b12] and the top part of the temperature is in [b11-b8], as far i can see, that is only used at temperatures over 30C. The lower byte is all temperature, and it should be set at 0.0625C per bit. But this seems odd, when i calculate, i get a value of 6.375 for a temperature of ~23C.

Anyone that can see what im doing wrong?

I have attached the schematic for the sensor board, and the datasheet for the MCP9808 sensor. Not for the MCP2221a as communication seems to work

br
Lasse

Code: [Select]
#############################################################
#    MIT License                                            #
#    Copyright (c) 2017 Yuta KItagami                       #
#############################################################
from PyMCP2221A import PyMCP2221A

import time
print('-'*50)
print('MCP2221(A) with MCP9808 ')
print('-'*50)
mcp2221 = PyMCP2221A.PyMCP2221A()
mcp2221.Reset()
mcp2221 = PyMCP2221A.PyMCP2221A()

usbdata=[0] * 2
usbdata[0] = 0x05
#usbdata[1] = 0x05
addressdata=[0] * 2

mcp2221.I2C_Init()

print()

#Point to resolution register
#usbdata[0] = 0x08
#usbdata[0] = 0x03
#mcp2221.I2C_Write(0x18,usbdata)

#Setting resolution at 0.625 as per the datasheet page 29
usbdata[0] = 0x08
usbdata[1] = 0x03
mcp2221.I2C_Write(0x18,usbdata)
resolution = mcp2221.I2C_Read(0x18,1)
print("Resolution Data: " + str(resolution))

#check that the chip has the right Manfucaturer data, MCP9804 should be 0x54 or 84 in DEC
addressdata[0] = 0x06
mcp2221.I2C_Write(0x18,addressdata)
mfgdata = mcp2221.I2C_Read(0x18,3)
print("MFG Data: " + str(mfgdata))

# Point to temperature register and read temperature data

addressdata[0] = 0x05
mcp2221.I2C_Write(0x18,addressdata)

rdata = mcp2221.I2C_Read(0x18,3)

#Below is the dataconversion datasheet looks like C but i have "ported" it to Python

print("Read Data: " + str(rdata))
uppertempbyte = rdata[0]
#Zeroing Alert Bits.
print("Read Data Upper pre mask " + str(uppertempbyte))
uppertempbyte = uppertempbyte & 0x1f
print("Read Data Upper post mask: " + str(uppertempbyte))
lowertempbyte = rdata[1]

if ((uppertempbyte & 0x10) == 0x10):
   uppertempbyte = uppertempbyte & 0x0f
   tempperatureminus = 256 - ( uppertempbyte * 16 + lowertempbyte /16)
   print("Negative Temperature: " + str(tempperatureminus))
else:
   tempperatureplus = ( uppertempbyte * 16 + lowertempbyte /16)
   print("Positive Temperature: " + str(tempperatureplus))

# At ~23c i get a positive temp of 6.375



print("Read Data Upper: " + str(uppertempbyte))
print("Read Data Lower: " + str(lowertempbyte))

Quote
--------------------------------------------------
MCP2221(A) with MCP9808
--------------------------------------------------
Reset

Resolution Data: [3]
MFG Data: [0, 84, 1]
Read Data: [192, 102, 1]
Read Data Upper pre mask 192
Read Data Upper post mask: 0
Positive Temperature: 6.375
Read Data Upper: 0
Read Data Lower: 102

Process finished with exit code 0

link to mcp9908 datasheet
http://ww1.microchip.com/downloads/en/DeviceDoc/25095A.pdf
« Last Edit: March 18, 2019, 01:34:55 pm by lk »
 
The following users thanked this post: mrpackethead

Offline lkTopic starter

  • Regular Contributor
  • *
  • Posts: 152
  • Country: dk
I assembled 2 more boards, and now it works, looks like the sensor on the first board was defective.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf