Skip to the content
PCBKitNew board
2 layers65.5 × 59.4 mm1wire-4switch, the printed circuit board in 3D

Software, Firmware & Documentation is licensed under GPLv3

Size
65.5 × 59.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
18
Nets
26
Pads
107
Tracks, vias
203, 9
Pours
4
Routed
Yes
KiCad
KiCad 4
Created
3 Jun 2017
Updated
10 Nov 2021

Overview

1wire-4switch is an open-source printed circuit board by InfernoEmbedded, from the InfernoEmbedded/onewire-softdevice repository on GitHub. It is a 2-layer board of 65.5 × 59.4 mm with 18 parts on 26 nets, routed with 203 tracks and 9 vias.

It is built around the 74HC04D, DS2408S and RJ45. Its parts include 6 ICs, 6 connectors, 2 switches and 1 capacitor.

Main components

3

README

README.md

About

This repository contains hardware designs and software for implementing slave devices using the Maxim 1-Wire® protocol on the STM32 microcontrollers.

Licensing

Hardware is licensed under the The TAPR Open Hardware License Version 1.0

Software, Firmware & Documentation is licensed under GPLv3

Prerequisites

Hardware Design

Firmware

Layout

The libs directory contains source code for the OneWireSlave library.

The devices directory contains schematics, PCBs & firmware for the client devices.

Devices

Template

A template schematic with the basics wired up.

Splitter

A passive Y splitter that allows short CAT5 runs to be broken off the main bus. A typical use would be to allow a short run to be dropped down a wall to a sensor or switch panel. Optionally includes a DS18B20 for temperature sensing.

DS2408 Emulator

A partial implementation of the DS2408 in software, used for initial testing of the 1-Wire® protocol, but is otherwise unmaintained and unsupported.

DS2408 4 Channel Switch

A device that accepts 4 switches, and provides 4 solid state relays. A jumper allows the relays to operate independently, or forced to operate in on/off pairs (for roller shutter/projector screen control). Somewhat obsoleted by SoManySwitches.

Fimware Updater

A sub-16KB bootloader which allows devices that implement the Inferno Embedded commands to update firmware over the bus. The included STM32F030X8.ld linker file stores the bootloader at the start of the flash region. Firmware that is designed to be flashed with this uses a modified linker file that stores the firmware with a 16kB offset.

Inferno Embedded commands allow the device to be rebooted into the bootloader so that they can be updated. The device can also be forced to remain in bootloader mode by shorting SWDAT on the SWD header to GND with a jumper.

SoManySwitches

A device with 8 RJ45 jacks, which each permit 6 toggle or momentary switches to be connected to the 1-Wire® network. The device will be alarmed when a switch is activated, and can then be polled to identify which switch was activated.

SoManySwitches Clientboard

A daughterboard for SoManySwitches, designed to be installed at the switch point. The RJ45 socket is broken out into pairs of Gnd/Switch, and pullup/pulldowns are provided to suppress spurious switch activations.

Aircon Zone Controller

A device that controls up to 8 24VAC air conditioning dampers, following the PolyAire pinout:

RJ45 PinSignal
1N/C
2Open
3Open
4Neutral
5Neutral
6Close
7Close
8N/C

By setting the transition time for each damper, the controller can partially open them, allowing balancing to be achieved via software control.

4 Channel RGBW LED Controller

A device to control up to 4 channels of common-anode RGBW LED strips, at up to 48V. Fading from the current colour to a new one is handled locally. An external relay can be driven via the Inline SSR board, allowing the LED power supply to be shut down when no strips require power.

Inline SSR

A small board with a solid state relay installed, designed to be mounted inline in a power cord. It connects to other boards via a headphone cable.

Hardware Design

Microcontroller

This software has been developed and tested on the STM32F030R8 microcontroller, an ARM Cortex-M0 with 64kB of flash & 8kB of RAM. We are running it at 48MHz using the internal RC oscillator. It may be possible to reduce the clock speed, but this is untested. They can be purchased for around AUD$1 each on Aliexpress.

Prototype testing can be performed on a Nucleo-F030R8.

Microcontroller Pin Usage

A single GPIO from the microcontroller is used to communicate over the 1-Wire® protocol. This is typically pin F0.

RJ45 Pinout

RJ45 PinSignal
1Gnd
2+5V
3Gnd
41W Data
5Gnd
6N/C
7+24V
8Gnd

Software Design

Runtime

The library sits on top of the Mbed runtime, altough it is more reliant on the lower level HAL APIs than the Mbed constructs. The bootloader uses a cut-down version of the runtime to allow it to fit within 16kB, however, the cost is that it cannot print to the serial port.

Low Level (OneWireSlave.cpp)

This file contains the base class for implementing 1-Wire® protocol devices. It provides methods to send and receive data on the bus, and handles device enumeration. It consumes Timer6 which it uses to maintain a 1 uS timer for signal timing. It uses the low level HAL APIs for catching state changes on the GPIO line, as the InterruptIn class added too much latency.

Protocol Level (SoftDevice.cpp)

This file defines how InfernoEmbedded devices communicate over 1wire. Each device reports a 64 bit type and 64 bit version, so only a single 1-Wire® family code is used (FE).

1wire commands are issued as follows: Master: Command Code (1 byte), Command data (up to 8 bytes), CRC8

Slave: Command good/bad (1 byte)

Slave: device response (chunks of up to 8 bytes)

Or...

Master: Streaming data

A 64 bit status register is provided, and the device will show up in alarm scans if any bits are set. On powerup, bit 0 is set (Power-on), allowing the devices to be reinitialised if they need state from the master. The status register is cleared automatically after each read.

Device Level (SwitchMaster.cpp & friends)

These files provide the device specific implementations. They define the 1-Wire® commands that are accepted, and interact with the user code via Listener classes. to allow designs to scale, the driver will report the number of implementations it supports (eg. switches), so that many physical variants can share the same code.

Getting Started

Development Environment

  • Install Eclipse for C/C++ development
  • Install System Workbench for STM32 Eclipse plugins
  • Clone the mbed sources git clone https://github.com/ARMmbed/mbed-os.git
  • Build the arm-nano-eabi toolchain by running build.sh in the toolchain directory
  • Fetch the ARM official toolchain by running build-arm.sh in the toolchain directory
  • use the scripts build.(bat|sh) and build-trace.(bat|sh) in the mbed directory to build the thin or trace-enabled builds of Mbed
  • Import the mbed Eclipse project
  • Import the Eclipse projects from this repository

Hardware Tools

These will be useful during development

Adding a new device

First, consider whether one of the existing device level drivers will do what you need, or can be expanded to achieve your goals (without straying too far from the intent of the driver). If you need to expand it, increment the version so that the client software (eg. OWFS) can identify what commands are available.

Next, create a frontend project that interacts with the device level driver. You may initially want to use a listener that uses the TRACE() macro rather than interacting with the hardware until you are happy with the protocol.

Finally, submit patches to OWFS that implement the new device driver. You can look at owfs/owlib/src/c/ow_ie_*.c to see how the existing drivers work. Important to note are the visibility functions, which allow a single family code to appear as many different devices.

Parts

18
QtyValueFootprintReferences
4G3MB_SSRG3MBU2, U3, U4, U5
3CONN_42EDCK-5.08-4PINP1, P2, P4
210K0603_Pack4RP1, RP2
2CONN_3PIN_ARRAY_3X1K1, K2
2RJ45RJ45-8-PlasticJ1, J2
1100nFc_0603C1
174HC04so-14U1
1CONN_5_V2EDCK-5.08-5PINP3
1DS2408S1wire-SO16IC1
1OSHW-logo_silkscreen-front_8mmOSHW-logo_silkscreen-front_8mmG***

Questions

How big is the 1wire-4switch PCB?

It measures 65.5 × 59.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the 1wire-4switch use?

18 parts, built around the 74HC04D, DS2408S and RJ45. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the 1wire-4switch KiCad files?

From the InfernoEmbedded/onewire-softdevice repository on GitHub, at the commit this page was made from: the board is devices/DS2408-4channel-Switch/1wire-4switch.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the 1wire-4switch design in my own project?

Its repository states no licence, so its author keeps all rights: ask InfernoEmbedded before reusing the design.

More from InfernoEmbedded/onewire-softdevice

11
  • 2 layers88.3 × 48.3 mmOutputBoard, the printed circuit board in 3D

    OutputBoard

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    71 parts11
  • 2 layers99.8 × 99.8 mm1Wire Blank, the printed circuit board in 3D

    1Wire Blank

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    40 parts11
  • 2 layers99.9 × 94.5 mm1Wire AC Zoning, the printed circuit board in 3D

    1Wire AC Zoning

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    39 parts11
  • 2 layers99.8 × 99.8 mm1Wire LEDController, the printed circuit board in 3D

    1Wire LEDController

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    35 parts11
  • 2 layers94.6 × 60.3 mmControlBoard, the printed circuit board in 3D

    ControlBoard

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    31 parts11
  • 2 layers46 × 91.3 mm4Channel SSR Switch, the printed circuit board in 3D

    4Channel SSR Switch

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    25 parts11
  • 2 layers192.9 × 41.3 mm1Wire SoManySwitches, the printed circuit board in 3D

    1Wire SoManySwitches

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    20 parts11
  • 2 layers45.1 × 44.7 mm16 Channel SSR Driver, the printed circuit board in 3D

    16 Channel SSR Driver

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    18 parts11
  • 2 layers19.9 × 27.4 mmSoManySwitches ClientBoard, the printed circuit board in 3D

    SoManySwitches ClientBoard

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    8 parts11
  • 2 layers59.4 × 31 mm1wire roof module, the printed circuit board in 3D

    1wire roof module

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    5 parts11
  • 2 layers17.1 × 30.5 mmInline SSR, the printed circuit board in 3D

    Inline SSR

    InfernoEmbedded/onewire-softdevice

    Software, Firmware & Documentation is licensed under GPLv3

    4 parts11

Similar boards

  • 2 layers82.6 × 95.3 mmHive access pcb, the printed circuit board in 3D

    Hive access pcb

    Hive13/hive13-access-pcb

    KiCad files for the circuit board that controls doors.

    47 partsBSD-3-Clause
  • 2 layers80.3 × 54.9 mmSmartDoor, the printed circuit board in 3D

    SmartDoor

    bgerp/ztm_doc

    This repository is made to hold all the schematics and sheets around the Zontromat project and BCVT. This includes: - Electrical schematics and sheets. - Electronic schematics and sheets.

    41 parts
  • 2 layers144.8 × 204.5 mmBetaBoard, the printed circuit board in 3D

    BetaBoard

    BetaWall/BetaBoard

    Multiplexed APA102 LED driver board talking RS485

    40 parts2AGPL-3.0
  • 2 layers80 × 85.7 mmGrouped, the printed circuit board in 3D

    Grouped

    DAlexis/gps-timestamper

    This will be a hardware project providing GPS timestamping.

    118 parts1GPL-3.0
  • 2 layers43.9 × 27.7 mmTcd1304-4v, the printed circuit board in 3D

    Tcd1304-4v

    OpnTec/open-spectrometer-hardware

    Open source VIS spectrometer

    19 parts1.5k
  • 2 layers191.8 × 121.3 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-UART-Computer-1-2

    Legacy: Version 1 and 2 of my TTL-only CPU featuring UART I/O, an expansion port, 512KB SSD at up to 10MHz clock speed

    109 parts184
  • 2 layers47 × 39 mmQrss clock tx, the printed circuit board in 3D

    Qrss clock tx

    swharden/AVR-projects

    A collection of standalone AVR projects written in C

    32 parts184MIT
  • 2 layers312 × 140 mmTsynth2 Rev1.3, the printed circuit board in 3D

    Tsynth2 Rev1.3

    Electrotechnique/TSynth-Teensy4.1

    TSynth for Teensy 4.1

    108 parts182