Skip to content

Commit

Permalink
initial publish
Browse files Browse the repository at this point in the history
  • Loading branch information
justind000 committed Mar 1, 2024
1 parent 4428b93 commit df31dc3
Show file tree
Hide file tree
Showing 10 changed files with 859 additions and 1,688 deletions.
28 changes: 9 additions & 19 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,21 +1,11 @@
MIT License
Copyright Microfire LLC 2024.

Copyright (c) 2024 Justin Decker
This source describes Open Hardware and is licensed under the CERN-OHL-P
v2.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
You may redistribute and modify this documentation and make products
using it under the terms of the CERN-OHL-P v2 (https:/cern.ch/cern-ohl).
This documentation is distributed WITHOUT ANY EXPRESS OR IMPLIED
WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY
AND FITNESS FOR A PARTICULAR PURPOSE. Please see the CERN-OHL-P v2
for applicable conditions.
83 changes: 81 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,82 @@
# pca9615
# PCA9615

Wooohooo a new package!
📒 [Datasheet](https://www.nxp.com/docs/en/data-sheet/PCA9615.pdf)

This repository is an [atopile](https://atopile.io/) module for the PCA9615, 2-channel multipoint Fast-mode differential I2C-bus. In other words, it lets
you use I2C like you might use MODBUS, ie. over long wires and through noisy environments.

## 🏁 Get started
### Installation
From inside a project directory terminal: `ato install pac9615-ato`

### Code
```Go
from "pca9615/elec/src/pca9615.ato" import PCA9615
from "generics/interfaces.ato" import DiffPair, Power, I2C, GPIO

module Test:
# define virtual buses, connect these to physical components/pins
power = new Power
d_sda = new DiffPair
d_scl = new DiffPair
i2c = new I2C
power_a_2v3_5v5 = new Power
power_b_3v0_5v5 = new Power
differential_side_power = new Power
en = new GPIO

# define the PCA9615
pca9615 = new PCA9615

# PCA9615 enable pin is driven high be an internal pullup
# to disable chip, drive low
en ~ pca9615.en

# connect power to normal I2C side
power_a_2v3_5v5 ~ pca9615.power_a_2v3_5v5

# differential power can be seperate or the same as the I2C side
pca9615.power_b_3v0_5v5 ~ power_a_2v3_5v5
# - or -
pca9615.power_b_3v0_5v5 ~ differential_side_power

# normal I2C connection
i2c ~ pca9615.i2c

# differential pairs
d_sda ~ pca9615.d_sda
d_scl ~ pca9615.d_scl
```

## 🤔 Design Considerations
- d_sda and d_scl must be routed as differential pairs (`6` in KiCAD PCB Editor)
- power on the I2C side can be seperate from the differential side, common grounds are not required
- the I2C side can accept between 2.3 - 5.5 volts
- the differential side can accept 3.0 - 5.5 volts
- an RJ45 connector and CAT6 cable work well for making the connections

## 🔌 Connections

|MCU | | MCU PCA9615 | |Sensor PCA9615 | | Sensor |
|-------: |-: |---: |:-: |:--- |:-: | :-|
| | | MCU PCA9615.d_SDA 🟩|~ |🟩 Sensor PCA9615.d_SDA|~ |
| | | MCU PCA9615.d_SCL 🟪|~ |🟪 Sensor PCA9615.d_SCL|~
| MCU.SDA 🟨 |~ | 🟨 MCU PCA9615.SDA 🟨| |🟨 Sensor PCA9615.SDA|~ |🟨 Sensor.SDA
| MCU.SCL 🟦 |~ | 🟦 MCU PCA9615.SCL 🟦| |🟦 Sensor PCA9615.SCL|~ |🟦 Sensor.SCL
| *MCU.VCC* 🟥 | ~| 🟥 *MCU PCA9615.VCC* 🟥 |*(optional)*|🟥 *Sensor.VCC*|~ | 🟥 *Sensor.VCC*
|**MCU.GND**⬛ |~ | ⬛ **MCU.GND** ⬛|*(optional)*|⬛ **Sensor.GND**|~|⬛ **Sensor.GND**


## ⚡ Programming
Once connected, the sensor (or just the other side) appear as a normal I2C device to the host. Nothing special needs to be done.

## 🙏 Contributing
This design is intended to be a community best-effort at a minimal circuit combining:
- datasheet reference design
- readily available components
- modular and reusable layout

You are greatly encouraged to contribute or discuss any improvements here so that everyone may benefit.

## License
[CERN-OHL-P v2](https:/cern.ch/cern-ohl)
2 changes: 1 addition & 1 deletion ato.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
ato-version: ^0.2.0
builds:
default:
entry: elec/src/pca9615.ato:Pca9615
entry: elec/src/pca9615.ato:PCA9615
dependencies:
- generics

Large diffs are not rendered by default.

106 changes: 106 additions & 0 deletions elec/footprints/footprints.kicad_sym
Original file line number Diff line number Diff line change
@@ -1,2 +1,108 @@
(kicad_symbol_lib
(symbol "PCA9615DPJ"
(in_bom yes)
(on_board yes)
(property
"Reference"
"U"
(id 0)
(at 0 10.16 0)
(effects (font (size 1.27 1.27) ) )
)
(property
"Value"
"PCA9615DPJ"
(id 1)
(at 0 -10.16 0)
(effects (font (size 1.27 1.27) ) )
)
(property
"Footprint"
"footprints:TSSOP-10_L3.0-W3.0-P0.50-LS4.9-BL"
(id 2)
(at 0 -12.70 0)
(effects (font (size 1.27 1.27) ) hide)
)
(property
"LCSC Part"
"C2652385"
(id 5)
(at 0 -15.24 0)
(effects (font (size 1.27 1.27) ) hide)
)
(symbol "PCA9615DPJ_0_1"
(rectangle
(start -11.43 7.62)
(end 11.43 -7.62)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type background))
)
(circle
(center -10.16 6.35)
(radius 0.38)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(pin unspecified line
(at -13.97 5.08 0)
(length 2.54)
(name "VDD(A)" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -13.97 2.54 0)
(length 2.54)
(name "SDA" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -13.97 -0.00 0)
(length 2.54)
(name "EN" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -13.97 -2.54 0)
(length 2.54)
(name "SCL" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -13.97 -5.08 0)
(length 2.54)
(name "VSS" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 13.97 -5.08 180)
(length 2.54)
(name "DSCLM" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 13.97 -2.54 180)
(length 2.54)
(name "DSCLP" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 13.97 -0.00 180)
(length 2.54)
(name "DSDAP" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 13.97 2.54 180)
(length 2.54)
(name "DSDAM" (effects (font (size 1.27 1.27))))
(number "9" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 13.97 5.08 180)
(length 2.54)
(name "VDD(B)" (effects (font (size 1.27 1.27))))
(number "10" (effects (font (size 1.27 1.27))))
)
)
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
(module easyeda2kicad:TSSOP-10_L3.0-W3.0-P0.50-LS4.9-BL (layer F.Cu) (tedit 5DC5F6A4)
(attr smd)
(fp_text reference REF** (at 0 -6.3) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value TSSOP-10_L3.0-W3.0-P0.50-LS4.9-BL (at 0 6.3) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.50 -1.50) (end 1.50 -1.50) (layer F.SilkS) (width 0.25))
(fp_line (start 1.50 1.50) (end 1.50 -1.50) (layer F.SilkS) (width 0.25))
(fp_line (start -1.50 1.50) (end 1.50 1.50) (layer F.SilkS) (width 0.25))
(fp_line (start -1.50 -1.50) (end -1.50 -0.53) (layer F.SilkS) (width 0.25))
(fp_line (start -1.50 1.50) (end -1.50 0.49) (layer F.SilkS) (width 0.25))
(pad 1 smd rect (at -1.00 2.30 90.00) (size 1.00 0.30) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -0.50 2.30 90.00) (size 1.00 0.30) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at 0.00 2.30 90.00) (size 1.00 0.30) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at 0.50 2.30 90.00) (size 1.00 0.30) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at 1.00 2.30 90.00) (size 1.00 0.30) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at 1.00 -2.30 -90.00) (size 1.00 0.30) (layers F.Cu F.Paste F.Mask))
(pad 7 smd rect (at 0.50 -2.30 90.00) (size 1.00 0.30) (layers F.Cu F.Paste F.Mask))
(pad 8 smd rect (at 0.00 -2.30 90.00) (size 1.00 0.30) (layers F.Cu F.Paste F.Mask))
(pad 9 smd rect (at -0.50 -2.30 90.00) (size 1.00 0.30) (layers F.Cu F.Paste F.Mask))
(pad 10 smd rect (at -1.00 -2.30 90.00) (size 1.00 0.30) (layers F.Cu F.Paste F.Mask))
(fp_circle (center -1.45 2.40) (end -1.40 2.40) (layer F.Fab) (width 0.10))
(fp_circle (center -1.04 2.29) (end -0.91 2.29) (layer Cmts.User) (width 0.25))
(fp_circle (center -1.55 2.26) (end -1.42 2.26) (layer F.SilkS) (width 0.25))
(fp_arc (start -1.50 -0.02) (end -1.50 0.49) (angle -180.00) (layer F.SilkS) (width 0.25))
(model "C:/Users/justi/Documents/ato/test/.ato/modules/pca9615/elec/footprints/footprints.3dshapes/TSSOP-10_L3.0-W3.0-H1.0-LS4.9-P0.5.wrl"
(offset (xyz 0.000 -0.000 -0.000))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
Loading

0 comments on commit df31dc3

Please sign in to comment.