Тема: MCP342x
Библиотека не тестировалась!!!
Данный контент доступен только зарегистрированным пользователям.
test.ino
#include <Wire.h>
#include <MCP342x.h>
MCP342x mcp;
long dig0, dig1;
float u0,u1;
void setup(){
Serial.begin(9600);Wire.begin();
}
void loop(){
mcp.setConfig(0,3,0); // in0 - in3 - 0-3 // 12 14 16 18 bit - 0-3 // 1x 2x 4x 8x gain - 0-3
dig0 = mcp.readWire();
u0 = dig0 * 2.048 /131071;
Serial.print(dig0);
Serial.print(" ");
Serial.println(u0,6);
mcp.setConfig(1,3,0); // in0 - in1 - 0-3 // 12 14 16 18 bit - 0-3 // 1x 2x 4x 8x gain - 0-3
dig1 = mcp.readWire();
u1 = dig1 * 2.048 /131071;
Serial.print(dig1);
Serial.print(" ");
Serial.println(u1,6);
delay(1000);
}
/* 1x = 2.048V; 2x = 1.024V; 4x = 0.512V; 8x = 0.256V
18 bit = 17 bit (dec 131071) + 1 bit (полярность напряжения) */
MCP342x.h
#ifndef MCP342x_H
#define MCP342x_H
#define MCP342x_address 0x68
#include <Arduino.h>
class MCP342x
{
public:
MCP342x();
void setConfig(int in, int bit, int gain);
int32_t readWire(void);
private:
void writeWire(char a);
};
#endif //MCP342x_H
MCP342x.cpp
#include <Arduino.h>
#include <Wire.h>
#include "MCP342x.h"
MCP342x::MCP342x(){
Wire.begin();
}
void MCP342x::setConfig(int in,int bit, int gain){
switch (in){
case 0:in = 0b00000000;break;
case 1:in = 0b00100000;break;
case 2:in = 0b01000000;break;
case 3:in = 0b01100000;break;
}
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 + in + bit + gain;
writeWire(conf);
}
void MCP342x::writeWire(char a){
Wire.beginTransmission(MCP342x_address);
Wire.write (a);
Wire.endTransmission();
}
int32_t MCP342x::readWire(){
Wire.requestFrom(MCP342x_address,3); //запросить 3 байта данных
long value = ((Wire.read()<<8) | Wire.read());//упаковка в одну переменную.
value = ((value<<8)| Wire.read());
return (int32_t)value;
}