Many microcontroller projects involve the use of sensors like Accelerometers, Gyroscopes, Temperature, Compass, Barometric, Current, Proximity and others. Some sensors have I2C or SPI interfaces but there are still a great many which produce an analogue output voltage. These are measured with the use of the built-in Analogue to Digital Converters (ADC) included in microcontrollers. However, if you are using many sensors and don’t have enough ADC inputs, or have used those pins for other functions, you either have to upgrade to a larger microcontroller with more inputs or resort to using an external (and expensive) ADC chip.
With this in mind we have programmed our own microcontroller to provide you with 10 additional ADC inputs available via I2C as a slave device.
No additional components are required as it has its own built in oscillator clock circuit.
10 ADC input channels, each with 10 bit resolution (AN0 through AN9) I2C interface Configurable Slave Address between 40 and 47 allows up to 8 units to be added to your project 64MHz Clock Speed ADC values are measured 1000 times per second (1 kHz) Selectable Complementary Filter function Selectable 10-bit (2 bytes per ADC) or 8-bit (1 byte per ADC) output Heartbeat output to show unit is functioning 5V or 3.3V operation Each ADC input is read 3 times and the average value taken to reduce spurious values ADC to I2C Chip Pinout
Documents
Example Programs
For Arduino example code, check out the datasheet linked to above.
Here is an example reading the ADC chip using Python on a Raspberry Pi. It reads the 10 ADC channels at 8-bit (10 bytes returned), then at 10-bit (20 bytes returned), and prints the results.
import smbus import time
bus = smbus.SMBus(0)
results8 = [] results10 = []
bus.write_byte(0x28, 0x01) time.sleep(0.1) results8 = bus.read_i2c_block_data(0x28, 0x01, 0x0A) print results8
bus.write_byte(0x28, 0x00) time.sleep(0.1) results10 = bus.read_i2c_block_data(0x28, 0x00, 0x14) print results10
|