MCP9600

CircuitPython on hardware including Adafruit's boards, and CircuitPython libraries using Blinka on host computers.

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
User avatar
TWPL52
 
Posts: 9
Joined: Tue Dec 14, 2021 1:11 am

MCP9600

Post by TWPL52 »

photo of setup
photo of setup
MCP9600-03.jpg (922.07 KiB) Viewed 181 times
6 January 2022

1) MCP9600 i2c Thermocouple Amplifier Order # 2740374-1169074072 purchased 14 December 2021

2) see attached

3) Code being run:

Code: Select all

import board
import busio
import adafruit_mcp9600

i2c = busio.I2C(board.SCL, board.SDA, frequency=10000)
#mcp = adafruit_mcp9600.MCP9600(i2C)
print("step1")
mcp = adafruit_mcp9600.MCP9600
print("step2")
print(mcp.temperature)
print("end")
Code output:
>>> %Run MCP_test-01.py
step1
step2
<property object at 0x75b312d0>
end

4) no trouble
5) started following MCP9600 “Beginner” project
After first attempt re-flashed SD card on my Raspberry Pi 3B v1.2 and re-started MCP9600 project from scratch using latest Pi OS and fresh installs of Python 3 code and Adafruit. Checked and rechecked wiring 3.3 to Vin, Gnd to Gnd, SCL to SCL, SDA to SDA.

I will admit I am new to Python programming and learning slowly.
“blinkatest.py” runs correctly both under terminal operation and when running Thonny IDE.
Any help or suggestions are welcome.

terry

User avatar
danhalbert
 
Posts: 4650
Joined: Tue Aug 08, 2017 12:37 pm

Re: MCP9600

Post by danhalbert »

This doesn't do anything interesting: it doesn't create an mcp object on which you can query the temperature:

Code: Select all

mcp = adafruit_mcp9600.MCP9600
This should work:

Code: Select all

mcp = adafruit_mcp9600.MCP9600(board.I2C())
print(mcp.temperature)
If it does not, please show the errors.

User avatar
TWPL52
 
Posts: 9
Joined: Tue Dec 14, 2021 1:11 am

Re: MCP9600

Post by TWPL52 »

Thank-you for the help.
the output:
Python 3.9.2 (/usr/bin/python3)
>>> %Run MCP_test-01.py
step1
Traceback (most recent call last):
File "/home/pi/MCP_test-01.py", line 9, in <module>
mcp = adafruit_mcp9600.MCP9600(board.I2C())
File "/home/pi/.local/lib/python3.9/site-packages/adafruit_mcp9600.py", line 220, in __init__
tci2c.write(self.buf, end=2)
File "/home/pi/.local/lib/python3.9/site-packages/adafruit_bus_device/i2c_device.py", line 84, in write
self.i2c.writeto(self.device_address, buf, start=start, end=end)
File "/usr/local/lib/python3.9/dist-packages/busio.py", line 165, in writeto
return self._i2c.writeto(address, memoryview(buffer)[start:end], stop=stop)
File "/usr/local/lib/python3.9/dist-packages/adafruit_blinka/microcontroller/generic_linux/i2c.py", line 49, in writeto
self._i2c_bus.write_bytes(address, buffer[start:end])
File "/usr/local/lib/python3.9/dist-packages/Adafruit_PureIO/smbus.py", line 314, in write_bytes
self._device.write(buf)
OSError: [Errno 121] Remote I/O error
>>>
any more clues

User avatar
danhalbert
 
Posts: 4650
Joined: Tue Aug 08, 2017 12:37 pm

Re: MCP9600

Post by danhalbert »

Please show your whole most recent test program. Thanks. You can paste it in, select it, and press the [ CODE ] button to have it formatted as code.

User avatar
TWPL52
 
Posts: 9
Joined: Tue Dec 14, 2021 1:11 am

Re: MCP9600

Post by TWPL52 »

Code: Select all

import board
import busio
import adafruit_mcp9600

i2c = busio.I2C(board.SCL, board.SDA, frequency=10000)
#mcp = adafruit_mcp9600.MCP9600(i2C)
print("step1")
#mcp = adafruit_mcp9600.MCP9600
mcp = adafruit_mcp9600.MCP9600(board.I2C())
print("step2")
print(mcp.temperature)
print("end")

User avatar
danhalbert
 
Posts: 4650
Joined: Tue Aug 08, 2017 12:37 pm

Re: MCP9600

Post by danhalbert »

Try this:

Code: Select all

import board
import busio
import adafruit_mcp9600

print("step1")
mcp = adafruit_mcp9600.MCP9600(board.I2C())
print("step2")
print(mcp.temperature)
print("end")

User avatar
TWPL52
 
Posts: 9
Joined: Tue Dec 14, 2021 1:11 am

Re: MCP9600

Post by TWPL52 »

output:
Python 3.9.2 (/usr/bin/python3)

Code: Select all

>>> %Run MCP_test-01_adafruit-01.py
step1
Traceback (most recent call last):
  File "/home/pi/MCP_test-01_adafruit-01.py", line 9, in <module>
    mcp = adafruit_mcp9600.MCP9600(board.I2C())
  File "/home/pi/.local/lib/python3.9/site-packages/adafruit_mcp9600.py", line 220, in __init__
    tci2c.write(self.buf, end=2)
  File "/home/pi/.local/lib/python3.9/site-packages/adafruit_bus_device/i2c_device.py", line 84, in write
    self.i2c.writeto(self.device_address, buf, start=start, end=end)
  File "/usr/local/lib/python3.9/dist-packages/busio.py", line 165, in writeto
    return self._i2c.writeto(address, memoryview(buffer)[start:end], stop=stop)
  File "/usr/local/lib/python3.9/dist-packages/adafruit_blinka/microcontroller/generic_linux/i2c.py", line 49, in writeto
    self._i2c_bus.write_bytes(address, buffer[start:end])
  File "/usr/local/lib/python3.9/dist-packages/Adafruit_PureIO/smbus.py", line 314, in write_bytes
    self._device.write(buf)
OSError: [Errno 121] Remote I/O error
>>>

User avatar
TWPL52
 
Posts: 9
Joined: Tue Dec 14, 2021 1:11 am

Re: MCP9600

Post by TWPL52 »

12 January 2022
have spent today reloading and configuring a raspberry Pi Model 2 B v1.1 with the latest code "bullseye", loading circuit-python and the MCP9600 add ons.
the attached image shows the output when attempting to run the MCP9600-simpletest.py.
Blinkatest.py responds as expected.
Please if possible What am i doing wrong?
thank-you
Attachments
2022-01-12-RasPi2Bv1-scrot.png
2022-01-12-RasPi2Bv1-scrot.png (171.13 KiB) Viewed 138 times

User avatar
danhalbert
 
Posts: 4650
Joined: Tue Aug 08, 2017 12:37 pm

Re: MCP9600

Post by danhalbert »

Did you enable I2C with raspi-config, as described here? You need to redo this when you redo the operating system.
https://learn.adafruit.com/circuitpytho ... nd-devices

User avatar
TWPL52
 
Posts: 9
Joined: Tue Dec 14, 2021 1:11 am

Re: MCP9600

Post by TWPL52 »

Yes enabled I2C and SPI

User avatar
TWPL52
 
Posts: 9
Joined: Tue Dec 14, 2021 1:11 am

Re: MCP9600

Post by TWPL52 »

17 January 2022 16:33 MST

See the attached document.
Raspberry Pi 2 model B v1.1
fresh code I2C enabled
Python 3.7
following the tutorial for MCP9600

Please can you tell me what I'm doing wrong

17 January 2022 15:52 MST

MCP9600 programming in Python

<*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*>
Using original code from Adafruit tutorial:

import board
import busio
from adafruit_bus_device.i2c_device import I2CDevice
from adafruit_mcp9600 import MCP9600

i2c = busio.I2C(board.SCL, board.SDA,frequency=200000)
try:
# using default I2C register and "K" thermocouple
device = MCP9600(i2c)
print("temperature(C):",device.temperature)
except ValueError:
print("MCP9600 sensor not detected")


PRODUCES:

Python 3.7.3 (/usr/bin/python3)
>>> %Run board-detect-01.py
Traceback (most recent call last):
File "/home/pi/Desktop/relay-board/board-detect-01.py", line 9, in <module>
device = MCP9600(i2c)
File "/usr/local/lib/python3.7/dist-packages/adafruit_mcp9600.py", line 220, in __init__
tci2c.write(self.buf, end=2)
File "/usr/local/lib/python3.7/dist-packages/adafruit_bus_device/i2c_device.py", line 84, in write
self.i2c.writeto(self.device_address, buf, start=start, end=end)
File "/usr/local/lib/python3.7/dist-packages/busio.py", line 165, in writeto
return self._i2c.writeto(address, memoryview(buffer)[start:end], stop=stop)
File "/usr/local/lib/python3.7/dist-packages/adafruit_blinka/microcontroller/generic_linux/i2c.py", line 49, in writeto
self._i2c_bus.write_bytes(address, buffer[start:end])
File "/usr/local/lib/python3.7/dist-packages/Adafruit_PureIO/smbus.py", line 314, in write_bytes
self._device.write(buf)
OSError: [Errno 121] Remote I/O error
>>>

<*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*>
EDIT code:

import board
import busio
from adafruit_bus_device.i2c_device import I2CDevice
from adafruit_mcp9600 import MCP9600

i2c = busio.I2C(board.SCL, board.SDA,frequency=200000)
try:
# using default I2C register and "K" thermocouple
#device = MCP9600(i2c)
device = MCP9600
#print("temperature(C):",device.temperature)
print("temperature(C):",MCP9600)
except ValueError:
print("MCP9600 sensor not detected")

PRODUCES:

Python 3.7.3 (/usr/bin/python3)
>>> %Run board-detect-01.py
temperature(C): <class 'adafruit_mcp9600.MCP9600'>
>>>

<*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*>
EDIT code:

import board
import busio
from adafruit_bus_device.i2c_device import I2CDevice
from adafruit_mcp9600 import MCP9600

i2c = busio.I2C(board.SCL, board.SDA,frequency=200000)
try:
# using default I2C register and "K" thermocouple
#device = MCP9600(i2c)
device = MCP9600
print("temperature(C):",device.temperature)
#print("temperature(C):",MCP9600)
except ValueError:
print("MCP9600 sensor not detected")

PRODUCES:

Python 3.7.3 (/usr/bin/python3)
>>> %Run board-detect-01.py
temperature(C): <property object at 0x75ae1090>
>>>


next attempt:

again from Adafruit tutorial:

import board
import busio
import time
from adafruit_bus_device.i2c_device import I2CDevice
from adafruit_mcp9600 import MCP9600

i2c = busio.I2C(board.SCL, board.SDA, frequency=200000)

try:
device = MCP9600(i2c)
print("version:", device.version)
while True:
print((
device.ambient_temperature,
device.temperature
))
time.sleep(1)
except ValueError:
print("MCP9600 sensor not detected")

PRODUCES:

Python 3.7.3 (/usr/bin/python3)
>>> %Run board-detect-02.py
Traceback (most recent call last):
File "/home/pi/Desktop/relay-board/board-detect-02.py", line 10, in <module>
device = MCP9600(i2c)
File "/usr/local/lib/python3.7/dist-packages/adafruit_mcp9600.py", line 220, in __init__
tci2c.write(self.buf, end=2)
File "/usr/local/lib/python3.7/dist-packages/adafruit_bus_device/i2c_device.py", line 84, in write
self.i2c.writeto(self.device_address, buf, start=start, end=end)
File "/usr/local/lib/python3.7/dist-packages/busio.py", line 165, in writeto
return self._i2c.writeto(address, memoryview(buffer)[start:end], stop=stop)
File "/usr/local/lib/python3.7/dist-packages/adafruit_blinka/microcontroller/generic_linux/i2c.py", line 49, in writeto
self._i2c_bus.write_bytes(address, buffer[start:end])
File "/usr/local/lib/python3.7/dist-packages/Adafruit_PureIO/smbus.py", line 314, in write_bytes
self._device.write(buf)
OSError: [Errno 121] Remote I/O error
>>>


<*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*>
EDIT code:

import board
import busio
import time
from adafruit_bus_device.i2c_device import I2CDevice
from adafruit_mcp9600 import MCP9600

i2c = busio.I2C(board.SCL, board.SDA, frequency=200000)

try:
#device = MCP9600(i2c)
device = MCP9600
print("version:", device.version)
while True:
print((
device.ambient_temperature,
device.temperature
))
time.sleep(1)
except ValueError:
print("MCP9600 sensor not detected")

PRODUCES:

Python 3.7.3 (/usr/bin/python3)
>>> %Run board-detect-02.py
version: <property object at 0x75a514b0>
(<property object at 0x75a514e0>, <property object at 0x75a51510>)
(<property object at 0x75a514e0>, <property object at 0x75a51510>)
(<property object at 0x75a514e0>, <property object at 0x75a51510>)
(<property object at 0x75a514e0>, <property object at 0x75a51510>)
(<property object at 0x75a514e0>, <property object at 0x75a51510>)

User avatar
adafruit_support_carter
 
Posts: 29153
Joined: Tue Nov 29, 2016 2:45 pm

Re: MCP9600

Post by adafruit_support_carter »

This seems like some kind of connection issue. Soldering looks generally OK on breakout headers. Connections look OK in terms of pins.

Are the jumpers wires being used female-male?

Does the MCP at least show up OK in an I2C scan?
https://learn.adafruit.com/scanning-i2c ... spberry-pi

User avatar
TWPL52
 
Posts: 9
Joined: Tue Dec 14, 2021 1:11 am

Re: MCP9600

Post by TWPL52 »

28 January 2022 14:02 MST
MCP module shows up on first "i2cdetect -y 1" after powering the module, after that first detection request nothing.
jumpers are female to male jumpers female on Pi male on breakout board
using "T" thermocouple

User avatar
adafruit_support_carter
 
Posts: 29153
Joined: Tue Nov 29, 2016 2:45 pm

Re: MCP9600

Post by adafruit_support_carter »

This is probably related to the known clock stretching issue with the MCP9600, and the Pi's poor ability to deal with that. The MCP9600 is a known bad behavior:
https://learn.adafruit.com/i2c-addresse ... some-chips

Try this fix:
https://learn.adafruit.com/circuitpytho ... stretching

This has to be done manually on a Pi by editing /boot/config.txt and rebooting. The frequency parameter is ignored on Pi, like here:

Code: Select all

i2c = busio.I2C(board.SCL, board.SDA, frequency=200000)
since it can't dynamically change the I2C frequency after boot. So trying to slow down I2C via that approach does not work.

User avatar
TWPL52
 
Posts: 9
Joined: Tue Dec 14, 2021 1:11 am

Re: MCP9600

Post by TWPL52 »

28 January 2022 15:54 MST

THANK-YOU
resetting the I2C parameters in /boot/config did the trick

THANK-YOU

Locked
Please be positive and constructive with your questions and comments.

Return to “Adafruit CircuitPython”