Тема: MCP3421 — АЦП 18 bit
Микросхема MCP3421 компании Microchip представляет собой 18-битный одно канальный сигма-дельта АЦП, выпускаемый в миниатюрном 6-выводном корпусе SOT23-6 . АЦП имеет свой внутренний источник опорного напряжения и программируемый усилитель. Связь с микросхемой осуществляется по интерфейсу I2C.
Максимальное напряжение измеряемое АЦП находится в пределах ± 2,048 В при множители усилителя 1, при множителях 2, 4 и 8 диапазон измерения равен ± 1,024 В, ± 0,512 В и ± 0,256 В соответственно. АЦП может работать в режиме измерения 18, 16, 14 и 12 бит, при скорости измерения 3.75 SPS, 15 SPS, 60 SPS и 240 SPS соответственно, при этом один бит отводится под знак результата. Напряжение питания микросхемы MCP3421 должно находится в пределах от 2,7 до 5,5 В.
MCP3421.h
#ifndef MCP3421_H
#define MCP3421_H
#define MCP3421_address 0x68
#include <Arduino.h>
class MCP3421
{
public:
MCP3421();
void setConfig(int bit, int gain);
int32_t readWire(void);
private:
void writeWire(char a);
};
#endif //MCP3421_H
MCP3421.cpp
#include <Arduino.h>
#include <Wire.h>
#include "MCP3421.h"
MCP3421::MCP3421(){
Wire.begin();
}
void MCP3421::setConfig(int bit, int gain){
switch (bit){
case 0:bit = 0b00000000;break;
case 1:bit = 0b00000100;break;
case 2:bit = 0b00001000;break;
case 3:bit = 0b00001100;break;
}
switch (gain){
case 0:gain = 0b00000000;break;
case 1:gain = 0b00000001;break;
case 2:gain = 0b00000010;break;
case 3:gain = 0b00000011;break;
}
int conf = 0b00010000 + bit + gain;
writeWire(conf);
}
void MCP3421::writeWire(char a){
Wire.beginTransmission(MCP3421_address);
Wire.write (a);
Wire.endTransmission();
}
int32_t MCP3421::readWire(){
Wire.requestFrom(MCP3421_address,3); //запросить 3 байта данных
long value = ((Wire.read()<<8) | Wire.read());//упаковка в одну переменную.
value = ((value<<8)| Wire.read());
return (int32_t)value;
}