mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
0.1.9 MCP_ADC
This commit is contained in:
parent
a3e2c91f94
commit
531c273094
@ -1,3 +1,18 @@
|
|||||||
|
platforms:
|
||||||
|
rpipico:
|
||||||
|
board: rp2040:rp2040:rpipico
|
||||||
|
package: rp2040:rp2040
|
||||||
|
gcc:
|
||||||
|
features:
|
||||||
|
defines:
|
||||||
|
- ARDUINO_ARCH_RP2040
|
||||||
|
warnings:
|
||||||
|
flags:
|
||||||
|
|
||||||
|
packages:
|
||||||
|
rp2040:rp2040:
|
||||||
|
url: https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
|
||||||
|
|
||||||
compile:
|
compile:
|
||||||
# Choosing to run compilation tests on 2 different Arduino platforms
|
# Choosing to run compilation tests on 2 different Arduino platforms
|
||||||
platforms:
|
platforms:
|
||||||
@ -9,3 +24,4 @@ compile:
|
|||||||
- esp32
|
- esp32
|
||||||
# - esp8266
|
# - esp8266
|
||||||
# - mega2560
|
# - mega2560
|
||||||
|
- rpipico
|
||||||
|
39
libraries/MCP_ADC/CHANGELOG.md
Normal file
39
libraries/MCP_ADC/CHANGELOG.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Change Log MCP_ADC
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
||||||
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
|
||||||
|
## [0.1.9] - 2022-11-16
|
||||||
|
- add RP2040 in build-CI
|
||||||
|
- add changelog.md
|
||||||
|
- minor edit readme.md
|
||||||
|
- clean up unit test
|
||||||
|
|
||||||
|
|
||||||
|
## [0.1.8] - 2021-12-21
|
||||||
|
- update library.json
|
||||||
|
- update license
|
||||||
|
- minor edits
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
## [0.1.7] - 2021-11-07
|
||||||
|
|
||||||
|
## [0.1.6] - 2021-08-01
|
||||||
|
|
||||||
|
## [0.1.5] - 2021-07-31
|
||||||
|
|
||||||
|
## [0.1.4] - 2021-03-31
|
||||||
|
|
||||||
|
## [0.1.3] - 2021-02-04
|
||||||
|
|
||||||
|
## [0.1.2] - 2021-01-01
|
||||||
|
|
||||||
|
## [0.1.1] - 2020-08-14
|
||||||
|
|
||||||
|
## [0.1.0] - 2019-10-24
|
||||||
|
- initial version.
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// FILE: MCP_ADC.cpp
|
// FILE: MCP_ADC.cpp
|
||||||
// AUTHOR: Rob Tillaart
|
// AUTHOR: Rob Tillaart
|
||||||
// VERSION: 0.1.8
|
// VERSION: 0.1.9
|
||||||
// DATE: 2019-10-24
|
// DATE: 2019-10-24
|
||||||
// PURPOSE: Arduino library for MCP3002, MCP3004, MCP3008, MCP3202, MCP3204, MCP3208
|
// PURPOSE: Arduino library for MCP3002, MCP3004, MCP3008, MCP3202, MCP3204, MCP3208
|
||||||
// URL: https://github.com/RobTillaart/MCP_ADC
|
// URL: https://github.com/RobTillaart/MCP_ADC
|
||||||
@ -274,7 +274,7 @@ uint8_t MCP3204::buildRequest(uint8_t channel, bool single, uint8_t * data)
|
|||||||
// P21 fig 6.1 MCP3204/3208
|
// P21 fig 6.1 MCP3204/3208
|
||||||
data[0] = 0x04; // start bit
|
data[0] = 0x04; // start bit
|
||||||
if (single) data[0] |= 0x02; // single read | differential
|
if (single) data[0] |= 0x02; // single read | differential
|
||||||
if (channel > 3) data[0] |= 0x01; // msb channel (D2)
|
if (channel > 3) data[0] |= 0x01; // MSB channel (D2)
|
||||||
if (channel) data[1] |= (channel << 6); // other 2 bits (D1 D0)
|
if (channel) data[1] |= (channel << 6); // other 2 bits (D1 D0)
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
@ -296,7 +296,7 @@ uint8_t MCP3208::buildRequest(uint8_t channel, bool single, uint8_t * data)
|
|||||||
// P21 fig 6.1 MCP3204/3208
|
// P21 fig 6.1 MCP3204/3208
|
||||||
data[0] = 0x04; // start bit
|
data[0] = 0x04; // start bit
|
||||||
if (single) data[0] |= 0x02; // single read | differential
|
if (single) data[0] |= 0x02; // single read | differential
|
||||||
if (channel > 3) data[0] |= 0x01; // msb channel (D2)
|
if (channel > 3) data[0] |= 0x01; // MSB channel (D2)
|
||||||
if (channel) data[1] |= (channel << 6); // other 2 bits (D1 D0)
|
if (channel) data[1] |= (channel << 6); // other 2 bits (D1 D0)
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
//
|
//
|
||||||
// FILE: MCP_ADC.h
|
// FILE: MCP_ADC.h
|
||||||
// AUTHOR: Rob Tillaart
|
// AUTHOR: Rob Tillaart
|
||||||
// VERSION: 0.1.8
|
// VERSION: 0.1.9
|
||||||
// DATE: 2019-10-24
|
// DATE: 2019-10-24
|
||||||
// PURPOSE: Arduino library for MCP_ADC
|
// PURPOSE: Arduino library for MCP_ADC
|
||||||
// URL: https://github.com/RobTillaart/MCP_ADC
|
// URL: https://github.com/RobTillaart/MCP_ADC
|
||||||
@ -13,7 +13,7 @@
|
|||||||
#include "SPI.h"
|
#include "SPI.h"
|
||||||
|
|
||||||
|
|
||||||
#define MCP_ADC_LIB_VERSION (F("0.1.8"))
|
#define MCP_ADC_LIB_VERSION (F("0.1.9"))
|
||||||
|
|
||||||
|
|
||||||
class MCP_ADC
|
class MCP_ADC
|
||||||
@ -59,7 +59,7 @@ protected:
|
|||||||
int16_t _maxValue;
|
int16_t _maxValue;
|
||||||
uint32_t _SPIspeed = 1000000; // 1 MHz is a safe value (datasheet); in a test 4 MHz worked.
|
uint32_t _SPIspeed = 1000000; // 1 MHz is a safe value (datasheet); in a test 4 MHz worked.
|
||||||
|
|
||||||
// derived classes must implement this one
|
// derived classes must implement buildRequest() function.
|
||||||
virtual uint8_t buildRequest(uint8_t channel, bool single, uint8_t * data) = 0;
|
virtual uint8_t buildRequest(uint8_t channel, bool single, uint8_t * data) = 0;
|
||||||
|
|
||||||
int16_t readADC(uint8_t channel, bool single);
|
int16_t readADC(uint8_t channel, bool single);
|
||||||
@ -75,9 +75,11 @@ protected:
|
|||||||
uint32_t _count;
|
uint32_t _count;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// DERIVED CLASSES
|
||||||
|
//
|
||||||
class MCP3002 : public MCP_ADC
|
class MCP3002 : public MCP_ADC
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -85,6 +87,7 @@ public:
|
|||||||
uint8_t buildRequest(uint8_t channel, bool single, uint8_t * data);
|
uint8_t buildRequest(uint8_t channel, bool single, uint8_t * data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class MCP3004 : public MCP_ADC
|
class MCP3004 : public MCP_ADC
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -92,6 +95,7 @@ public:
|
|||||||
uint8_t buildRequest(uint8_t channel, bool single, uint8_t * data);
|
uint8_t buildRequest(uint8_t channel, bool single, uint8_t * data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class MCP3008 : public MCP_ADC
|
class MCP3008 : public MCP_ADC
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -134,10 +134,22 @@ which indicates that the last 2 bits got lost due to signal deformation.
|
|||||||
For hardware SPI the ESP32 uses the VSPI pins. (see ESP examples).
|
For hardware SPI the ESP32 uses the VSPI pins. (see ESP examples).
|
||||||
|
|
||||||
|
|
||||||
|
## Operations
|
||||||
|
|
||||||
|
See examples.
|
||||||
|
|
||||||
|
|
||||||
## Future
|
## Future
|
||||||
|
|
||||||
|
#### must
|
||||||
- documentation
|
- documentation
|
||||||
- testing, a lot ...
|
- testing, a lot ...
|
||||||
|
|
||||||
|
|
||||||
|
#### should
|
||||||
|
|
||||||
|
|
||||||
|
#### could
|
||||||
- analogRead (mask, int array\[8\] ) read ports (set in mask) in an array in one call.
|
- analogRead (mask, int array\[8\] ) read ports (set in mask) in an array in one call.
|
||||||
would this save time?
|
would this save time?
|
||||||
|
|
||||||
@ -146,9 +158,5 @@ For hardware SPI the ESP32 uses the VSPI pins. (see ESP examples).
|
|||||||
|
|
||||||
- get / setF(float A, float B) => float readF(channel) output = A\*value + B;
|
- get / setF(float A, float B) => float readF(channel) output = A\*value + B;
|
||||||
it actually does float mapping. As it implies the same mapping for all it might
|
it actually does float mapping. As it implies the same mapping for all it might
|
||||||
not be that useful => multmap
|
not be that useful => multimap
|
||||||
|
|
||||||
|
|
||||||
## Operations
|
|
||||||
|
|
||||||
See examples.
|
|
||||||
|
@ -81,6 +81,24 @@ void setup()
|
|||||||
test_3();
|
test_3();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// on UNO there is no difference above 8MHz (half CPU clock)
|
||||||
|
Serial.println("***************************************\n");
|
||||||
|
for (int s = 1; s <= 16; s *= 2)
|
||||||
|
{
|
||||||
|
Serial.println(s * 1000000UL);
|
||||||
|
mcp22.setSPIspeed(s * 1000000UL);
|
||||||
|
test_4();
|
||||||
|
}
|
||||||
|
|
||||||
|
// on UNO there is no difference above 8MHz (half CPU clock)
|
||||||
|
Serial.println("***************************************\n");
|
||||||
|
for (int s = 1; s <= 16; s *= 2)
|
||||||
|
{
|
||||||
|
Serial.println(s * 1000000UL);
|
||||||
|
mcp24.setSPIspeed(s * 1000000UL);
|
||||||
|
test_5();
|
||||||
|
}
|
||||||
|
|
||||||
// on UNO there is no difference above 8MHz (half CPU clock)
|
// on UNO there is no difference above 8MHz (half CPU clock)
|
||||||
Serial.println("***************************************\n");
|
Serial.println("***************************************\n");
|
||||||
for (int s = 1; s <= 16; s *= 2)
|
for (int s = 1; s <= 16; s *= 2)
|
||||||
@ -210,6 +228,80 @@ void test_3()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void test_4()
|
||||||
|
{
|
||||||
|
uint32_t val = 0;
|
||||||
|
|
||||||
|
start = micros();
|
||||||
|
for (int channel = 0; channel < mcp22.channels(); channel++)
|
||||||
|
{
|
||||||
|
val += mcp22.analogRead(channel);
|
||||||
|
}
|
||||||
|
stop = micros();
|
||||||
|
Serial.print("mcp22.analogRead()\t2x: \t");
|
||||||
|
Serial.println(stop - start);
|
||||||
|
delay(10);
|
||||||
|
|
||||||
|
start = micros();
|
||||||
|
for (int channel = 0; channel < mcp22.channels(); channel++)
|
||||||
|
{
|
||||||
|
val += mcp22.differentialRead(channel);
|
||||||
|
}
|
||||||
|
stop = micros();
|
||||||
|
Serial.print("mcp22.differentialRead() 2x: \t");
|
||||||
|
Serial.println(stop - start);
|
||||||
|
delay(10);
|
||||||
|
|
||||||
|
start = micros();
|
||||||
|
for (int channel = 0; channel < mcp22.channels(); channel++)
|
||||||
|
{
|
||||||
|
val += mcp22.deltaRead(channel);
|
||||||
|
}
|
||||||
|
stop = micros();
|
||||||
|
Serial.print("mcp22.deltaRead()\t2x: \t");
|
||||||
|
Serial.println(stop - start);
|
||||||
|
Serial.println();
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void test_5()
|
||||||
|
{
|
||||||
|
uint32_t val = 0;
|
||||||
|
|
||||||
|
start = micros();
|
||||||
|
for (int channel = 0; channel < mcp24.channels(); channel++)
|
||||||
|
{
|
||||||
|
val += mcp24.analogRead(channel);
|
||||||
|
}
|
||||||
|
stop = micros();
|
||||||
|
Serial.print("mcp24.analogRead()\t4x: \t");
|
||||||
|
Serial.println(stop - start);
|
||||||
|
delay(10);
|
||||||
|
|
||||||
|
start = micros();
|
||||||
|
for (int channel = 0; channel < mcp24.channels(); channel++)
|
||||||
|
{
|
||||||
|
val += mcp24.differentialRead(channel);
|
||||||
|
}
|
||||||
|
stop = micros();
|
||||||
|
Serial.print("mcp24.differentialRead() 4x: \t");
|
||||||
|
Serial.println(stop - start);
|
||||||
|
delay(10);
|
||||||
|
|
||||||
|
start = micros();
|
||||||
|
for (int channel = 0; channel < mcp24.channels(); channel++)
|
||||||
|
{
|
||||||
|
val += mcp24.deltaRead(channel);
|
||||||
|
}
|
||||||
|
stop = micros();
|
||||||
|
Serial.print("mcp24.deltaRead()\t4x: \t");
|
||||||
|
Serial.println(stop - start);
|
||||||
|
Serial.println();
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void test_6()
|
void test_6()
|
||||||
{
|
{
|
||||||
uint32_t val = 0;
|
uint32_t val = 0;
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/RobTillaart/MCP_ADC.git"
|
"url": "https://github.com/RobTillaart/MCP_ADC.git"
|
||||||
},
|
},
|
||||||
"version": "0.1.8",
|
"version": "0.1.9",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"frameworks": "*",
|
"frameworks": "*",
|
||||||
"platforms": "*",
|
"platforms": "*",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
name=MCP_ADC
|
name=MCP_ADC
|
||||||
version=0.1.8
|
version=0.1.9
|
||||||
author=Rob Tillaart <rob.tillaart@gmail.com>
|
author=Rob Tillaart <rob.tillaart@gmail.com>
|
||||||
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
||||||
sentence=Arduino library for MCP3002, MCP3004, MCP3008, MCP3202, MCP3204, MCP3208
|
sentence=Arduino library for MCP3002, MCP3004, MCP3008, MCP3202, MCP3204, MCP3208
|
||||||
|
@ -47,19 +47,6 @@ unittest_teardown()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
unittest(test_new_operator)
|
|
||||||
{
|
|
||||||
assertEqualINF(exp(800));
|
|
||||||
assertEqualINF(0.0/0.0);
|
|
||||||
assertEqualINF(42);
|
|
||||||
|
|
||||||
assertEqualNAN(INFINITY - INFINITY);
|
|
||||||
assertEqualNAN(0.0/0.0);
|
|
||||||
assertEqualNAN(42);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
unittest(test_constructor)
|
unittest(test_constructor)
|
||||||
{
|
{
|
||||||
MCP3002 ADC2;
|
MCP3002 ADC2;
|
||||||
|
Loading…
Reference in New Issue
Block a user