Open Data Acquisition System
Block Diagram
The Open Data Acquisition System consists of a Data Acquisition Processor (DAP) and up to 8 I/O cards.
The block diagram is:
Features
The Open Data Acquisition System features a powerful combination of Open Hardware and Open Software to access low level hardware interfaces from a Host Computer.
Open Hardware
- Support for standard microprocessors such as Arduino, Raspberry Pi, BeagleBone Black
- STM32F103 "Blue Pill" CPU
- STMF4XX "Black Pill" CPU"
- Raspberry Pi Pico CPU
- Arduino UNO CPU
- ATMEGA32U4 Arduino Leonardo compatible Processor
- PSOC5 CPU
- Industry-Standard USB Host Interface
- Industry-Standard I2C Bus Interface to cards
- ODAS card design specification
- ODAS form factor is an open form factor which provides an inexpensive and small card size (approx 4" square)
- Mix and match card types
Open Software
- USB Interface runs industry standard Firmata
- Processor card runs Arduino Leonardo compatible software
- Arduino "Wire" Standard I2C bit driver
- Community supported Python, C++, Ruby, LabView, VxWorks drivers
Personality EEPROM
- Useful when there are a lot of cards to test
- Configure the card once, autodetect later
- EEPROM I2C base address = 0x50
- I2C address offset (0x50-0x57) set by jumpers for MCP23008/MCP23017 I2C port expanders
- 24LC024 EEPROM
- 256x8
- 2.5-5.5 V
- Maximum Clock Frequency: 400 kHz
- Supply Current - Max: 3 mA
- Based on Raspberry Pi Hat Spec
- Programming from Arduino
- Programming from Raspberry Pi Pico - MMBASIC
struct eep_vals { char signature[4]; // 0-3 - "ODAS" in ASCII byte fmt_version; // 4 - EEPROM data format version (0x00 reserved, 0x01 = first version) byte rsvd; // 5 - set to 0 short numatoms; // 6-7 - set to 2 long eeplen; // 8-11 - set to 96 dec byte uuid[16]; // 12-27 - "0000000000000000" in ASCII short pid; // 28-29 - See PID table byte vslen; // 30 - set to 32 dec byte pslen; // 31 - set to 32 dec byte vstr[32]; // 32-63 - Vendor Null terminated String byte pstr[32]; // 64-95 - Product Null terminated String };
Product ID Table
Signature=ODAS Vendor=land.boards.com
ProductID (in hex) Product (string) 1 DigIO16-I2C 2 DIGIO-128 3 DIGIO-128/64 4 OptoIn8-I2C 5 OptoOut8-I2C 6 DIGIO32-I2C 7 PROTO16-I2C 8 ODAS-PSOC5 9 ODAS-RELAY16 127 NEW CARD
Drivers
Arduino
Host Software - Firmata
Firmata is a generic protocol for communicating with microcontrollers from software on a host computer. It is intended to work with any host computer software package. Right now there is a matching object in a number of languages. It is easy to add objects for other software to use this protocol. Basically, this firmware establishes a protocol for talking to the Arduino from the host software. The aim is to allow people to completely control the Arduino from software on the host computer.
Firmata has an attractive Test Program User Interface which could be easily extended
Raspberry Pi
- Enabling The I2C Interface On The Raspberry Pi
- MCP230xx GPIO Expander on the Raspberry Pi
- Adafruit library code for Raspberry Pi
lsmod dump with DIGIO-128 card attached
pi@raspi3 ~ $ lsmod | grep i2c_ i2c_dev 5557 0 i2c_bcm2708 3997 0 pi@raspi3 ~ $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: 20 21 22 23 24 25 26 27 -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Raspberry Pi Performance with DIGIO-128 card attached
- sudo python Adafruit_MCP230xx.py
- Clock runs at 100 KHz
- Overall timing - 1 cycle
- Overall timing - 2 cycle (Read-modify-write)
ESP32 MicroPython Drivers
PyBoard MicroPython Drivers
Cards
Opto-Isolated Cards
Optically Isolated cards are necessary to connect together different electrical system without concerns for ground loops, voltage dropes or electrical noise. ODAS offers two optically isolated cards; one for input and one for output.
- OptoIn8-I2C - 8-Channel Optically Isolated Input Card
- OptoOut8-I2C - 8-Channel Optically Isolated Output Card
Digital I/O Cards
Card | Function | Interface type |
---|---|---|
CARRIER95TO49MM | Adapt ODAS 49mm to 95mm cards | N/A |
DCE | RS-232/TTL Converter | TTL |
DTE | RS-232/TTL Converter | TTL |
DIGIO-128 | 128-bit Digital I/O Card | I2C |
DIGIO32-I2C | 32-bit Digital I/O Card | I2C |
DigIO16-I2C | 16-bit Digital I/O Card | I2C |
Front Panel For 8 Bit Computers | Front Panel for 8-bit Microprocessors with I2C interfaces (SMT) | I2C |
Front Panel for 8 Bit Computers V2 | Front Panel for 8-bit Microprocessors with I2C interfaces (Thru-hole) | I2C |
I2CIO16-DB25 | 16-bit I2C I/O based on the MCP23017 | I2C |
I2CIO-8X | 8-bit I2C I/O based on the MCP23008 | I2C |
I2CIO-8 | 8-bit I2C I/O based on the MCP23008 | I2C |
I2C-TEMP | I2C Temperature Sensor | I2C |
I2C-RPT | 4-Channel I2C Multiplexer/Repeater | I2C |
I2C-RPT-08 | 8-channel I2C Multiplexer/Repeater | I2C |
ODAS-PSOC5 | Programmable System On a Chip | I2C, SPI, TTL |
ODAS-RELAY-16 | 16 Channel Relay Card | I2C |
PROTO16-I2C | 16-bit I/O with prototyping area | I2C |
PS2X49 | PS/2 keyboard/mouse interface | TTL |
SWLEDX8 | 8 Switches and 8 LEDs | I2C |
SWLEDX8-I2C | 16 bit I2C connection to SWLEDX8 card | I2C |
TinyPS2 | PS/2 keyboard or mouse to TTL Level Serial converter | TTL |
VGAX49 | VGA Digital Connection (2:2:2 or 5:6:5) | TTL/Analog |
SD_CARD_X49 | SD Card Adapter | TTL |
ODAS Processor Cards
No Data Acquistion System is complete without a Processor Card.
- BLUE-PILL-HUB - STM32 "Blue-Pill Board" based system processor
- ODAS-PSOC5 - Cypress Semiconductor Programmable System on a Chip
- NANO-BKOUT - Arduino NANO GVS Breakout card
- GVSDuino - Arduino UNO compatible GVS Processor card
- UNO-DB25 - Arduino Uno with a DB-25 connector
- DAS-32U4 - Data Acquisition System Processor DAS-32U4
ODAS Card Test Station
- ODAS Test Station
- ODAS Tester - Test Software in GitHub repository
- Arduino Nano
- Cables or loopback connector
- Auto-detect card if test has been run before
- Presents card type list for un-programmed EEPROMs
Checking EEPROM for board type...Detected DIGIO-128 board R=Read EEPROM, W=Write EEPROM, T=Test DIGIOs, L=Loop Test, B=Bounce LEDs