Skip to the content
2 layers205.5 × 64.2 mmKeyboard, the printed circuit board in 3D

Keyboard

lprib/sbc3

single board computer thingy

Size
205.5 × 64.2 mm
Copper layers
2
Thickness
1.6 mm
Parts
110
Nets
94
Pads
388
Tracks, vias
892, 132
Pours
3
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
12 Nov 2023
Updated
2 May 2024

Overview

Keyboard is an open-source printed circuit board by lprib, from the lprib/sbc3 repository on GitHub. It is a 2-layer board of 205.5 × 64.2 mm with 110 parts on 94 nets, routed with 892 tracks and 132 vias.

It is built around the RS485, 74HC595 and SP3485EN-Y, with the LL4148 and X322516MLB4SI among its other parts. Its parts include 40 diodes, 31 switches, 17 capacitors, 15 resistors and 3 ICs. It belongs with the computers and single-board computers and keyboards and input boards and the STM32 boards of this library.

Main components

5

README

README.md

sbc3: small computing environment

Self contained board that can be easily programmed on target for fun little games or GUIs. Inspired by the environment presented by TI calculators and TI-BASIC.

Directory structure

text
sbc3
|_ art: various images for putting on PCB and for on-screen graphics
|_ cubemx: STM32 CubeMX projects for pinmapping
|_ docs: datasheets etc
|  |_ cpu_hardware: hardware support and layout for STM32s
|  |_ hardware: various datasheets for parts used
|  \_ sofware: CPU ref manuals etc
|_ img: images for docs
|_ keyboard_v1: kicad project for keyboard
|_ main_board_v1: kicad project for main board
|_ rust_firmware: Firmware and screen driver in Rust (abandoned for now)
\_ software: (mostly c++) software and firmware
   |_ cmake: cmake scripts
   |_ firmware: firmware for main_board_v1
   |  |_ app: main application sources
   |  \_ (other dirs): supporting libraries unchanged from CubeMX/FreeRTOS upstream
   \_ vm: virtual machine
      |_ analysis: jupyter notebook for vm stat calculations
      |_ engine: main vm sources (portable)
      |_ pc_port: raylib port of VM for desktop
      |_ programs: sbc3 assembly programs
      |_ tests: vm unit tests (lol)
      |_ vscode-extension-sbcs-syntax: syntax support in VSCode for SBC3 assembly
      \_ as2.py: sbc3 vm bytecode assembler

Components

main_board_v1

System diagram

System diagram

PCB

PCB

Manufactured

PCB photo

  • PCB and assembly done by JLCPCB
  • Extended parts used:
    • TLV320DAC3101IRHBR Audio DAC
    • 475900001 Micro-USB connector
    • LD1117S33TR 3V3 Linear Regulator
      • Honestly can't remember why I went for this one instead of the JLC preferred part AMS1117-3.3. Maybe max current
    • LD1117S18TR 1V8 Linear Regulator (for DAC)
    • STM32F405VGT6 MCU
Changes and ideas for v2
  • Ability to disconnect 3v3 from rs485 connectors
  • Isolation transformers on rs485 for long connections
  • External flash or eeprom or FRAM for filesystem
  • "Cartridges" with flash
  • Label all the headers pin for pin to avoid looking on the schematic every time you're connecting the SWD
  • Fix BOOT0/BOOT1? Or just 0ohm unpopulated for de-bricking?
  • Proper enclosure
  • ESD diode protection on all inputs
  • External qspi flash (w25q128jv)
  • Wire OE on LED shift registers to a PWMable pin! So you can easily pwm the brightness
  • 18650 batteries + holder?
  • smaller form factor with parts hidden underscreen and less rs485 or more compact layout (look for resistor/cap sizing for 0402 wattage)
  • ACTUALLY WIRE UP THE BUTTONS AND ENCODER THIS TIME!
    • Of all the things to screw up on the first PCB run, I didn't expect to completely forget to connect the button and rotary nets
  • Tiny JST connectors really are shit! Hot pluggable trs circuit? Enable/disabable power chip? Need to get this right before making a bunch of peripheral boards.

keyboard_v1

System diagram

System diagram

PCB

PCB

Not yet manufactured, since still thinking about re-doing the comms (definitely not going to use the current JST connectors as theyre much too finicky).

virtual machine

Also included is a stack based virtual bytecode machine (see software/vm). The bytecode can call out to pre-defined system modules, including graphics routines. Below is an example of the main board STM32 and a Linux desktop running the same bytecode program.

STM32

target

Linux desktop

pc

As the bytecode is stack based, a thin forth layer has been built for it, which is currently assembled by a python script. See the source program for the above gifs here.

Parts

110
QtyValueFootprintReferences
30LL4148Diode_SMD:D_1206_3216MetricD1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +14
30SW_PushButton_Switch_Keyboard:SW_Cherry_MX_1.00u_PCBSW1, SW2, SW10, SW11, SW12, SW13, SW14, SW15, SW16, SW17, SW18, SW19, SW20, SW21, SW22, SW23 +14
1068RResistor_SMD:R_0603_1608MetricR2, R3, R4, R5, R7, R8, R9, R10, R14, R15
8100nCapacitor_SMD:C_0402_1005MetricC1, C3, C5, C7, C11, C13, C15, C16
8DDiode_SMD:D_0603_1608MetricD31, D32, D33, D34, D35, D36, D37, D38
710uCapacitor_SMD:C_0603_1608MetricC2, C4, C6, C8, C12, C14, C17
210pCapacitor_SMD:C_0402_1005MetricC9, C10
24k7Resistor_SMD:R_1206_3216MetricR12, R16
110kResistor_SMD:R_0402_1005MetricR6
1120Resistor_SMD:R_1206_3216MetricR13
11kResistor_SMD:R_0402_1005MetricR1
174HC595Package_SO:SOIC-16_3.9x9.9mm_P1.27mmU2
1DIAGDiode_SMD:D_0603_1608MetricD39
1PWRDiode_SMD:D_0603_1608MetricD40
1SP3485ENPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU3
1STM32F030C8TxPackage_QFP:LQFP-48_7x7mm_P0.5mmU1
1SWDConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ2
1SW_PushButton_Switch_SMD:SW_Push_1P1T_XKB_TS-1187ASW31
1UARTConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ3
1X322516MLB4SICrystal:Crystal_SMD_SeikoEpson_TSX3225-4Pin_3.2x2.5mmY1
1rs485Connector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_HorizontalJ4

More from lprib/sbc3

1
  • 2 layers120 × 93 mmSbc3 pcb, the printed circuit board in 3D

    Sbc3 pcb

    lprib/sbc3

    single board computer thingy

    181 parts

Similar boards

  • 4 layers120 × 100 mmBsc, the printed circuit board in 3D

    Bsc

    shining-man/bsc_hw

    Hardware battery safety controller (BSC)

    286 parts31MIT
  • 2 layers65 × 35 mmJuksautin, the printed circuit board in 3D

    Juksautin

    zouppen/pumpunjuksautin

    Tricking NTC thermistor on a heat pump

    27 parts7GPL-3.0
  • 4 layers50 × 50 mmProbe, the printed circuit board in 3D

    Probe

    Carciax/EEE4022S_Salinity_JCP24-03

    This project focused on the design of a salinity sensor for measuring the salinity of the sea water beneath the Antarctica ice caps which had a unique habitat and salinity range due to the ice caps expelling large…

    83 parts
  • 4 layers54.6 × 86.4 mmCom4bbb, the printed circuit board in 3D

    Com4bbb

    eurovibes/com4bbb

    RS485 / WiFi cape for Beaglebone black

    72 partsCERN-OHL-S-2.0
  • 2 layers87 × 72 mmEasyprb, the printed circuit board in 3D

    Easyprb

    KrogeChen/easyprintf

    easy printf debug box for small mcu

    104 partsGPL-3.0
  • 2 layers146 × 118.2 mmControl board, the printed circuit board in 3D

    Control board

    MahmoudNasser9/Smartmeter

    123 parts
  • 6 layers42.3 × 42.3 mmStepper Motor Controller, the printed circuit board in 3D

    Stepper Motor Controller

    Ricsi1231/Stepper-Motor-Controller

    EmbedCore Stepper Controller is a compact, high-performance stepper motor driver designed to mount directly onto the back of a NEMA 17 motor with the appropriate enclosure.

    91 partsMIT
  • 2 layers75 × 35 mmUSB, the printed circuit board in 3D

    USB

    davidholmes1066/LPM_Production_TT

    tool for testing transus instrument test tool

    43 parts

Questions

How big is the Keyboard PCB?

It measures 205.5 × 64.2 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Keyboard use?

110 parts, built around the RS485, 74HC595, SP3485EN-Y and LL4148. 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 Keyboard KiCad files?

From the lprib/sbc3 repository on GitHub, at the commit this page was made from: the board is keyboard_v1/keyboard.kicad_pcb and its schematic keyboard_v1/keyboard.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Keyboard design in my own project?

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