Difference between revisions of "OptoOut8-I2C"
Jump to navigation
Jump to search
Blwikiadmin (talk | contribs) |
Blwikiadmin (talk | contribs) |
||
Line 605: | Line 605: | ||
== Assembly Sheet == | == Assembly Sheet == | ||
− | [[OPTO8-OUT-I2C REV X2 Assembly Sheet]] | + | * [[OPTO8-OUT-I2C REV 4 Assembly Sheet]] |
+ | * [[OPTO8-OUT-I2C REV X2 Assembly Sheet]] |
Revision as of 20:57, 17 November 2022
Contents
Features
- Eight optically-isolated output channels on card
- (8) 4N25 optoisolators
- MCP23008 I2C Parallel I/O
- I2C (Two Wire interface)
- 100/400 KHZ operation
- Jumper selectable 2.2K Ohm terminators
- 3-bit address (Jumper selectable) - Up to 8 boards
- Single 4-pin host interface connector (Ground, Power, Clock, Data)
- 24LC024 ODAS Personality EEPROM
- pid = 5
- Write protect jumper
- 5V operation
- Compatible with Arduino, Raspberry Pi, BeagleBone Black
- DB-25F connector for rugged applications
- 95x95mm form factor
- (4) 6-32 mounting holes - one on each corner
MCP23008 Block Diagram
Optocoupler Performance
- 4N25 Optocoupler
- DC Current Transfer Ratio
- Current Transfer ratio curve
- 25mA sink/source capability per I/O
- Maximum current out of VSS pin = 150 mA
- Maximum current into VDD pin = 125 mA
- 25mA sink/source capability per I/O
- LED Current vs voltage
- Output transistor capacitance
- Switching Time
- Opto Characteristics
Vcc | 5.000 | V | 3.300 | V |
---|---|---|---|---|
Vf LED | 1.200 | V | 1.200 | V |
Res ser | 330.000 | Ohms | 330.000 | Ohms |
If LED | 11.515 | mA | 6.364 | mA |
CTR (min) | 0.500 | A/A | 0.500 | A/A |
Iout | 5.758 | mA | 3.182 | mA |
All pins Low | 8 | 8 | ||
I(Vss pin) | 92.121 | mA | 50.909 | mA |
I Max (Vss) | 150.000 | 150.000 | ||
Loading | 61.41% | 33.94% |
Output Stage
Connectors
J1 - Power
J2-J3 - I2C
J4 - I2C Address Select Jumpers
J5 - I2C Termination Jumpers
J6 - Card Present/Interrupt
- GND
- INT
- CP - Card present (pulled low)
J7 - I/O connector
DB-25 Female
OptoOut | OptoOut | DB25RIB | DIGIO32 | DB37RIB | OptoOut | OptoOut | DB25RIB | DIGIO32 | DB37RIB | |
---|---|---|---|---|---|---|---|---|---|---|
Pin | Descr | Pin_26 | Descr | Pin_40 | Pin | Descr | Pin_26 | Descr | Pin_40 | |
1 | S7 | 1 | C1PA7 | 18 | 14 | V7 | 2 | C0PB7 | 20 | |
2 | G7 | 3 | C0PA7 | 35 | 15 | S6 | 4 | C1PA6 | 16 | |
3 | V6 | 5 | C0PB6 | 22 | 16 | G6 | 6 | C0PA6 | 33 | |
4 | S5 | 7 | C1PA5 | 14 | 17 | V5 | 8 | C0PB5 | 24 | |
5 | G5 | 9 | C0PA5 | 31 | 18 | S4 | 10 | C1PA4 | 12 | |
6 | V4 | 11 | C0PB4 | 26 | 19 | G4 | 12 | C0PA4 | 29 | |
7 | S3 | 13 | C1PA3 | 10 | 20 | V3 | 14 | C0PB3 | 28 | |
8 | G3 | 15 | C0PA3 | 27 | 21 | S2 | 16 | C1PA2 | 8 | |
9 | V2 | 17 | C0PB2 | 30 | 22 | G2 | 18 | C0PA2 | 25 | |
10 | S1 | 19 | C1PA1 | 6 | 23 | V1 | 20 | C0PB1 | 32 | |
11 | G1 | 21 | C0PA1 | 23 | 24 | S0 | 22 | C1PA0 | 4 | |
12 | V0 | 23 | C0PB0 | 34 | 25 | G0 | 24 | C0PA0 | 21 | |
13 | N/C | 25 | 26 |
Design Validation/First Article Test
- Test Code
Pass Count = 17977, Fail Count = 0
- Runs ODAS Card Test Software on Arduino Nano
- Loopback cables
- Cable connects to DB-25 and NANO-BKOUT pins
- USB running puTTY
- 9600 baud
- Menu driven
- Auto-detect card if test has been run before
Checking EEPROM for board type...Detected OptoIn8-I2C board R=Read EEPROM, W=Write EEPROM, T=Test DIGIOs, L=Loop Test, B=Bounce LEDs
- Presents card type list for un-programmed EEPROMs
Checking EEPROM for board type...Company Mismatch Select the board type 1 - DIGIO16-I2C board 2 - DIGIO-128 board 3 - OptoIn8-I2C board 4 - OptoOut8-I2C board 5 - DIGIO32-I2C board 6 - PROTO16-I2C board 7 - ODAS-PSOC5 board 8 - TBD board 9 - TBD board Select board >
- Select board
Select board > 3 Writing EEPROM Initializing eep buffer len of buffer=96 reading block Family=ODAS Company=land.boards.com
- Test 'T'
- Fail (no cable)
OptoIn8-I2C failed HIGH on bit 1 Read back on 1 OptoIn8-I2C failed HIGH on bit 2 Read back on 2 OptoIn8-I2C failed HIGH on bit 4 Read back on 4 OptoIn8-I2C failed HIGH on bit 8 Read back on 8 OptoIn8-I2C failed HIGH on bit 16 Read back on 16 OptoIn8-I2C failed HIGH on bit 32 Read back on 32 OptoIn8-I2C failed HIGH on bit 64 Read back on 64 OptoIn8-I2C failed HIGH on bit 128 Read back on 128 Loopback Test PASS = 0, FAIL = 1
- Pass Checking EEPROM for board type...Detected OptoIn8-I2C board
R=Read EEPROM, W=Write EEPROM, T=Test DIGIOs, L=Loop Test, B=Bounce LEDs Loopback Test PASS = 1, FAIL = 0
Production Tests
Test OptoOut8-I2C card using this procedure.
Test Station Theory of Operations
- Test Station controls/read the Opto outputs via the DIGIO32 card in the Test Station
- Puts out 8 bits on OptoOut8-I2C card
- Reads the 8 bits on DIGIO32 card
- There are three lines per Channel that need to be connected:
- Ground (Gx), Power (Vx), Open Collector Output (Sx)
- If the LED is not being driven, the Open Collector output will be pulled up
- Wire Grounds to Digio32 channels 0-7
- Wire Powers to Digio32 channels 8-15
- Wire Signals to Digio32 channels 16-23
- Resistors can be checked by setting the Power line high and checking the OC outputs
- OptoOut8-I2C card is stimulated by writing to its I2C interface
- Verifies that the Optos work
Test Station Set-up
- Uses ODAS Test Station V2
- DB37RIBBON (w/ male connector) - Connects to DB-37 on DIGIO32-I2C Test Station
- DB25RIBBON (w/ male connector) - Connects to DB-25 on UUT
- Ribbon cable set to connect DB25RIBBON to DB37RIBBON pin Dupont headers
- Unit Under Test (UUT)
- Install 6x jumpers (A0-A2, SDA/SCL I2C terminators, and WEN jumpers)
- ODASTESTER Tester GitHub Repo
- Attach Host Computer USB to the Arduino NANO on the Test Station
- Run puTTY on the Host Computer
- 9600 baud
EEPROM Programming
- First time the UUT card is tested, the Test Station auto-detects that the card has an unprogrammed EEPROM
- Test Station also determines that the card has (1) MCP23008 and presents menu
- If the wrong cards are listed, verify jumpers (as above) are installed on UUT
Checking if EEPROM is present on UUT...EEPROM is present on UUT Checking EEPROM for board type...Board signature error in EEPROM on UUT Count of I2C devices in range 0x20-0x27 on UUT = 1 No external I2C mux card Detected MCP23008 Select the board type (EEPROM) 3 - OptoIn8-I2C board 4 - OptoOut8-I2C board 9 - TBD board X - Boards without EEPROMs Select board >
- Enter 4
- Test Station will program EEPROM and print
Writing EEPROM Initializing eep buffer len of buffer=96 reading block Family=ODAS Company=land-boards.com Product=OptoOut8-I2C C=Card Tests, D=Direct, E=EEPROM, I=access Internal DIGIO32
- After first time card is powered up, menu will show
Checking if EEPROM is present on UUT...EEPROM is present on UUT Checking EEPROM for board type...Detected OptoOut8-I2C board Count of I2C devices in range 0x20-0x27 on UUT = 1 No external I2C mux card C=Card Tests, D=Direct, E=EEPROM, I=access Internal DIGIO32
Running card Test
- Select Card Tests = "C"
- Select Run Tests = "T"
- Observe test results
Testing UUT = OptoOut8-I2C Test PASS = 1, FAIL = 0
Card Debugging
- Need to set power and ground to power the OptoCoupler outputs
- Outputs via writing out the MCP23008 on the UUT
- Read back on the DIGIO32-I2C card
Setup Power and Ground
- Drive Grounds to Digio32 channels 0-7 (dec)
- I from top menu accesses the DIGIO32-I2C Internal to Test Station
- L command sets pins to low
- L 0x00 through L 0x07 sets the Ground pins to Low
- L command sets pins to low
- I from top menu accesses the DIGIO32-I2C Internal to Test Station
C=Card Tests, D=Direct, E=EEPROM, I=access Internal DIGIO32 Direct Access Test Station DIGIO32 Hardware H=Write High, L=Write Low, R=Read a bit, X=eXit Bit to clear Low (HEX): 0x00 Bit to clear Low (HEX): 0x01 Bit to clear Low (HEX): 0x02 Bit to clear Low (HEX): 0x03 Bit to clear Low (HEX): 0x04 Bit to clear Low (HEX): 0x05 Bit to clear Low (HEX): 0x06 Bit to clear Low (HEX): 0x07
- Drive Powers to Digio32 channels 8-15 (dec)
- I from top menu accesses the DIGIO32-I2C Internal to Test Station
- H command sets pins to low
- H 0x08 through H 0x0F sets the Ground pins to Low
- H command sets pins to low
- I from top menu accesses the DIGIO32-I2C Internal to Test Station
Bit to set High (HEX): 0x08 Bit to set High (HEX): 0x09 Bit to set High (HEX): 0x0a Bit to set High (HEX): 0x0b Bit to set High (HEX): 0x0c Bit to set High (HEX): 0x0d Bit to set High (HEX): 0x0e Bit to set High (HEX): 0x0f
Write through UUT, Read via Internal DIGIO32-I2C
- Wire Signals to Digio32 channels 16-23
- D command accesses the UUT
- H or L 0x00 through H or L ox07 sets the pins high or low
- D command accesses the UUT
- Measure signal at pullup resistor on output
- Signal should toggle
- X to exit menu
Bit to clear Low (HEX): 0x00 Bit to set High (HEX): 0x00
- I from top menu accesses the DIGIO32-I2C
- R 0x10 through 0x17 reads the output back
Drivers
- Arduino Example Code
- LandBoards MCP23008 Arduino Library
- MicroPython Library
- Raspberry Adafruit Python library - See Adafruit for latest version
- Cypress PSoC5
- Raspberry Pi Clone - Cypress PSOC5
Revision History
Revision 4 (2022-9)
- Move to KiCad 6
- Move DB-25 to board edge
- Fix DB-25 mounting hole locations
- Add filled power layer pour on top
- Improve legends
- Order new batch of boards
- Tested first board, passed all tests
Revision X3
- Move DB-25 left
Revision X2
- Added I2C terminators and jumpers
- Added Write enable jumper
Layout Rev x2
Revision X1
- J5 pin 1 indicator needs to be moved