Skip to content

PickledDog/rc-fabgl

Repository files navigation

rc-fabgl

FabGL terminal board for RC2014 Assembled PD104

Overview

This is my take on the FabGL dev kit, designed into the form factor of a RC2014 card with the intention of implementing a serial terminal.

FabGL

FabGL is an excellent graphics/UI/Human Interface library for the Espressif ESP32. It provides VGA display generation, PS2 keyboard/mouse support, audio, and terminal emulation abilities. This gives us everything we need to build a serial terminal (and even provides examples to do just this). In addition, the ESP32 is first and foremost a WiFi module, opening up the possibility of "dial" in/out cabibilities.

The ESP32

The common ESP32-WROOM module starts to run a bit short on memory when implementing a terminal, so the ESP32-WROVER is used instead - this adds an extra 8MB of RAM for us to use. The module is hooked up as described in Espressif's datasheet, with RC reset circuit and appropriate bypass caps.

Functions provided

The standard dev kit schematic provides VGA, PS/2 keyboard, PS/2 mouse and line-level audio. The mouse port is removed, audio is sent directly into a piezo buzzer, and level-shifted serial ports are added to connect to the 5V serial ports of RC2014 systems. In addition, improvements have been made to the other peripheral connections.

VGA

120Ω resistors are added to terminate the VGA connection (and limit the HSync and VSync pins). The design is similar to the Parallax Propeller VGA breakout. The resistor values were picked to stay within the drive capabilities of the ESP32 (which is why the correct 75Ω resistors weren't an option).

PS/2 keyboard

The resistor PS/2 level-shifters are replaced with MOSFET shifters.

Audio

Audio won't be used for much more than a terminal bell - as such, it's just connected to a buzzer. Make sure a piezo buzzer is used - the ESP32 can't drive a dynamic one without help.

Serial ports

Serial ports are connected to the remaining pins on the ESP32. There are enough pins to implement two serial ports, with RTS/CTS flow control on the second port. Incoming 5V signals are shifted down to 3.3V with a 74LV125.

Programming port

The standard RX/TX pins of the ESP32 are broken out to a standard "FTDI-style" header for programming. RESET and BOOT are connected to buttons on the top of the card.

Bus connection

The terminal board uses the RC2014 bus for little more than power and to connect to the bus serial ports. Jumpers are provided to disconnect the ports from the bus as needed. The Ser1 interface is provided to the bus only, while Ser2 is available on both the (Enhanced) bus and an FTDI-style header. Only the header provides the RTS & CTS pins. Since Ser2 is the only thing on the Enhanced bus, consider the wider connector optional - a cheaper 1x40 header can be used in place of the 2x40 one (you'll need a 6-pin Dupont cable to hook up Ser2).

Initial setup

The ESP32 module will need to be programmed before use - this is done using an FTDI adapter on the assembled board, via the Prog port. If you don't have an FTDI adapter, they can be found on eBay. I don't have a firmware bundle made up for this yet, so for now consider this a dev kit for hacking (as opposed to a plug-and-play terminal board). To get started with FabGL, check out Fabrizio Di Vittorio's YouTube channel and the FabGL reference. Compiling FabGL and its examples requires the Arduino IDE. Once Arduino is up and running, follow the instructions in Fabrizio's video to add the ESP32 board package and FabGL library. Be sure to select ESP32 Wrover Module from ToolsBoardESP32 Arduino. Examples are found in FileExamplesFabGLVGA.

Part selection

Bill Of Materials and part references are below. If you want the 60-pin RC2014 Enhanced bus connector, you'll need to make it from a 2x40-pin right-angle header and pull out half of the pins from the top row (needle-nose pliers work well). I recommend using gold-plated header for this - I use these ones from Pololu or Sparkfun. The jumper headers can be snapped from regular (or double-row) breakaway header, for which eBay is substantially cheaper; the Mouser listings are provided for convenience.

The specified parts are just the ones I used, and can be substituted as needed - Mouser links provided for convenience and reference.

Reference Value Qty Mouser link
BZ1 Piezo buzzer 1 TDK PS1240P02BT
C1 4.7μF ceramic 1 TDK FG18X5R1E475KRT06
C2 1μF ceramic 1 TDK FG18X5R1H105KRT06
C3 22μF electrolytic 1 KEMET ESS226M016AC2AA
C4 10μF ceramic 1 TDK FG18X5R1E106MRT06
C5-C7 100nF ceramic 3 KEMET C315C104M5U5TA
J1/2 2x40 right-angle header 1 3M 2380-5121TG
J3 2x6 right-angle header 1 Amphenol 10129382-912002BLF
J4 6-pin Mini-DIN socket 1 Kycon KMDGX-6S-BS
J5 D-Sub HD-15 Female 1 TE 2311763-1
JP1/2 2x2 header 1 Amphenol 10129381-904002BLF
JP3/4/5/6 2x4 header 1 Amphenol 10129381-908002BLF
Q1, Q2 2N7000 enh N-MOSFET 2 ON Semi 2N7000
R1 10kΩ resistor 1 Yageo CFR-25JT-52-10K
R2-R5 100kΩ resistor 4 Yageo CFR-25JT-52-100K
R6-R9 4k7Ω resistor 4 Yageo CFR-25JT-52-4K7
R10-R14 120Ω resistor 5 Yageo MFR-25FTF52-120R
R15-R17 261Ω resistor 3 Yageo MFR-25FRF52-261R
R18-R20 510Ω resistor 3 Yageo MFR-25FTE52-510R
SW1, SW2 Right-angle tact sw 3.9mm 2 C&K PTS645VL392LFS
U1 MCP1825S-330 1 Microchip MCP1825ST-3302E/DB
U2 ESP32-WROVER-E 1 Espressif ESP32-WROVER-E(M213EH3264PH3Q0)
U3 74LV125 1 TI SN74LV125AN

Releases

No releases published

Packages

No packages published