element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Personal Blogs
  • Community Hub
  • More
Personal Blogs
Frank Milburn's Blog Testing the Microchip MCP3421 18-bit ADC
  • Blog
  • Documents
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
  • Share
  • More
  • Cancel
Group Actions
  • Group RSS
  • More
  • Cancel
Engagement
  • Author Author: fmilburn
  • Date Created: 22 Feb 2021 4:06 AM Date Created
  • Views 5722 views
  • Likes 10 likes
  • Comments 14 comments
  • mkr1010
  • mcp3421
  • adc
  • arduino
Related
Recommended

Testing the Microchip MCP3421 18-bit ADC

fmilburn
fmilburn
22 Feb 2021

I have what seems to be a continuously ongoing project to measure low resistances with milliohm precision.  The latest version had an inexpensive voltmeter that used the Microchip MCP3421MCP3421 in the display.  The chip costs $2.39 in small quantities from Newark and several were ordered with the idea of installing it directly on the milliohm meter PCB.  One was soldered to a SOT-23-6 DIP adapter for testing with an Arduino MKR1000.

image

The MCP3421 is an 18-bit delta-sigma ADC in a SOT-23-6 package with differential inputs.  It self calibrates internally for offset and gain on each conversion.  The internal voltage reference has a 2.048V accuracy of +/- 0.05% with drift of 15 ppm / degree C.  The input range is -2.048V to +2.048V.  It uses an I2C serial interface for communication with a microcontroller and operates with a supply voltage of 2.7V to 5.5V.  Data rate options include 12-bit (240 samples / second), 14-bit (60 samples / second), 16-bit (15 samples / second), and 18-bit (3.75 samples / second).  Here I'll be connecting it to an Arduino MKR1000 and using the 3.3V supply from the microcontroller.  Sampling will be done at 18-bits.

 

Test Setup

 

An easy to use library named MCP342X for Arduino was found and modified slightly.  A bench power supply was gradually increased from 0 to 2.05V and the measurements from the MCP3421 were recorded along with measurements from a Tenma 72-102072-1020 bench multimeter.  The test equipment was allowed to warm up for 20 minutes and the ambient temperature during the test was 21 degrees C.

image

 

Results

 

The results are tabulated below.

image

 

As shown in plot below, the difference between the MCP3421 and the bench multimeter never exceeded 1.1 mV.

image

The percent of full scale difference did not exceed 0.055 %.

image

The test results as compared to the datasheet are within the accuracy of the instrument that I am using for comparison.

 

Summary

 

I really like this chip.  The SOT-23-6 is a bit of a pain for me to hand solder but doable.  It is easy to use and has the resolution and accuracy that I need for my particular application. 

 

 

 

 

 

 

  • Sign in to reply

Top Comments

  • Andrew J
    Andrew J over 4 years ago +3
    I'm waiting for the delivery of a PCB to use a MC3428 - 16-bit delta-sigma ADC. It will be interesting to see how well that turns out. The good thing about the ADC, compared to the DMM, is that you could…
  • Andrew J
    Andrew J over 4 years ago in reply to jc2048 +3
    Dammit. I missed that - thanks Jon.
  • genebren
    genebren over 4 years ago +2
    It will interesting to see how the MCP3421 works in your milliohm meter. Good luck!
  • Andrew J
    Andrew J over 4 years ago in reply to fmilburn

    If you figure out what the normalise() method does I'd be interested to know as well.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • fmilburn
    fmilburn over 4 years ago in reply to Andrew J

    Thanks for posting this though - I plan to write my own code for a non-Arduino but haven't gotten too deep into it yet.

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • Andrew J
    Andrew J over 4 years ago in reply to jc2048

    Dammit.  I missed that - thanks Jon.

    • Cancel
    • Vote Up +3 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • jc2048
    jc2048 over 4 years ago in reply to Andrew J

    Section 5.4 (page 24) of the datasheet explains how the General Call aspect works.

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • Andrew J
    Andrew J over 4 years ago

    Thanks Frank - actually, I wanted to pick your brains if you were using the same one - which you are!  I was trying to understand how these three methods worked:

     

    uint8_t MCP342x::generalCallReset(void)

    {

    Wire.beginTransmission(0x00);

    Wire.write(0x06);

    return Wire.endTransmission();

    }


    uint8_t MCP342x::generalCallLatch(void)

    {

    Wire.beginTransmission(0x00);

    Wire.write(0x04);

    return Wire.endTransmission();

    }


    uint8_t MCP342x::generalCallConversion(void)

    {

    Wire.beginTransmission(0x00);

    Wire.write(0x08);

    return Wire.endTransmission();

    }

     

    Transmitting to address 0 is a broadcast: i.e. to all devices on the bus.  I would assume this code is written on the basis that there is nothing but one or more MCP342X devices on the bus.  In each case it follows with a byte which sets the configuration register for the device:

    Page 18 of the datasheet

     

    image

    So, taking generalCallReset() as an example, it writes 0x06 or 00000110 so sets S0 and G1 (60SPS/14-bits and x2 Gain).  S1/S0 are the Sample Rate Selection bits and G1 and G0 are the Gain Selection bits. I'm not sure that makes sense unless the 'default' configuration is meant to be that - all the examples call this method at the start.  That doesn't really make sense and neither do the bytes used in the other two methods. 

    generalCallLatch() sends byte 00000100 (Sets S0 so 60SPS)

    generalCallConversion() sends byte 00001000 (Sets S1 so 15SPS)

     

    There's no documentation/comments for these methods so I was wondering what I was misunderstanding.   I have no need or intention of broadcasting but I'd still like to understand these methods.

     

    Any ideas?

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • More
    • Cancel
>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube