Difference between pages "File:P971-cropped-720px.jpg" and "ESP32-VGA"
(Difference between pages)
Jump to navigation
Jump to search
Blwikiadmin (talk | contribs) |
Blwikiadmin (talk | contribs) |
||
Line 1: | Line 1: | ||
+ | [[File:tindie-mediums.png|link=https://www.tindie.com/products/land_boards/esp32-vga-keyboard-mouse-card-pcb-only/]] | ||
+ | <video type="youtube">RuGWCMFNtms</video> | ||
+ | |||
+ | [[File:P968-cropped-720pxV.jpg]] | ||
+ | |||
+ | == Features == | ||
+ | |||
+ | * [[ESP32]] Module | ||
+ | * 6-bit VGA color | ||
+ | ** 2:2:2 R:G:B | ||
+ | * 2 x PS-2 DIN connectors | ||
+ | ** 5V mouse/keyboard | ||
+ | ** 3.3V to 5V level shifters | ||
+ | *** Better than 5V keyboard with series resistors | ||
+ | ** 10K pull-ups on both sides | ||
+ | * 2 x FTDI connectors | ||
+ | * 5V DC Jack | ||
+ | * 3.3V regulator (optional) | ||
+ | * GVS pins for extra ESP32 pins | ||
+ | * 95x95mm form factor | ||
+ | * 6-32 mounting holes | ||
+ | |||
+ | === ESP-32 Module === | ||
+ | |||
+ | * Uses the [https://circuits4you.com/2018/12/31/esp32-devkit-esp32-wroom-gpio-pinout/ ESP32 DevKit ESP32-WROOM GPIO Pinout] | ||
+ | * On board Blue LED = Arduino Pin 2 | ||
+ | * There are various modules out there with different pinouts, but this card uses this one | ||
+ | |||
+ | [[File:ESP32_MODULE-720PX.jpg]] | ||
+ | |||
+ | === ESP-32 Module Pinout === | ||
+ | |||
+ | [[File:ESP32-Pinout.jpg]] | ||
+ | |||
+ | === "Chip" on the module === | ||
+ | |||
+ | [[File:esp32-pinout-chip-ESP-WROOM-32.png]] | ||
+ | |||
+ | ==== ESP32 Pin Usage - Rev 1 ==== | ||
+ | |||
+ | [[File:ESP-32_VGA_Pinout.PNG]] | ||
+ | |||
+ | ==== ESP32 Pin Usage - Rev 2 ==== | ||
+ | |||
+ | [[File:ESP-32_VGA_Pinout_Rev2.PNG]] | ||
+ | |||
+ | === Module Features === | ||
+ | |||
+ | * Architecture: Xtensa Dual-Core 32-bit LX6 | ||
+ | * CPU frequency: up to 240MHz | ||
+ | * Total RAM available: 528KB (part of it reserved for system) | ||
+ | * BootROM: 448KB | ||
+ | * Internal FlashROM: none | ||
+ | * External FlashROM: code and data, via SPI Flash; usual size 4MB | ||
+ | * GPIO: 34 (GPIOs are multiplexed with other functions, including external FlashROM, UART, etc.) | ||
+ | * UART: 3 RX/TX UART (no hardware handshaking), one TX-only UART | ||
+ | * SPI: 4 SPI interfaces (one used for FlashROM) | ||
+ | * I2C: 2 I2C (bitbang implementation available on any pins) | ||
+ | * I2S: 2 | ||
+ | * ADC: 12-bit SAR ADC up to 18 channels | ||
+ | * DAC: 2 8-bit DACs | ||
+ | * RMT: 8 channels allowing accurate pulse transmit/receive | ||
+ | * Programming: using BootROM bootloader from UART - due to external FlashROM and always-available BootROM bootloader, the ESP32 is not brickable | ||
+ | |||
+ | == Video DAC LTSpice Simulation == | ||
+ | |||
+ | * [https://github.com/land-boards/lb-boards/tree/master/ESP32/ESP32-VGA/Docs/Simulation Video DAC Simulation files] | ||
+ | * Video is 2:2:2 - R:G:B | ||
+ | |||
+ | === Summing Resistor DAC === | ||
+ | |||
+ | * 5% resistors are "good enough" | ||
+ | * 1V into 75 Ohm VGA load | ||
+ | * 3.3V drive | ||
+ | * ESP32 has [https://www.esp32.com/viewtopic.php?t=5840 40 mA drive] | ||
+ | ** Uses 10 mA (max) | ||
+ | ** R4 = 1.2 mA to -10 mA | ||
+ | ** R3 = 1.1 mA to -5.3 mA | ||
+ | * Output in 4 steps | ||
+ | ** 0V | ||
+ | ** 0.3V | ||
+ | ** 0.65V | ||
+ | ** 0.96V | ||
+ | |||
+ | [[File:VGA_Sim_2R.PNG]] | ||
+ | |||
+ | == Headers (Rev 1 board) == | ||
+ | |||
+ | === H1 - 3.3V SRC select === | ||
+ | |||
+ | [[File:H1_3p3V_Select.png]] | ||
+ | |||
+ | * 1-2 = Get 3.3V from ESP32 on-board regulator | ||
+ | * 2-3 = Get 3.3V from on-board regulator (Default) | ||
+ | |||
+ | === H2 - 5V SRC Select Jumper (Rev 1 Board) === | ||
+ | |||
+ | * 5V power options for the 5V to 3.3V regulator | ||
+ | |||
+ | [[File:H2_5V_Select.png]] | ||
+ | |||
+ | * 2x4 header | ||
+ | * Care must be taken to install the correct jumpers | ||
+ | * USB jumper sends out 5V when a USB cable is connected to the ESP32 module | ||
+ | |||
+ | ==== Power from DC Jack ==== | ||
+ | |||
+ | * '''Do not connect USB cable when the DC jack is used''' | ||
+ | * 1-2 = VUSB - Install - Power to ESP32 | ||
+ | * 3-4 = DCIN - Install - Power comes from DC jack | ||
+ | * 5-6 = FTDI5V_1 - Do not install | ||
+ | * 7-8 = FTDI5V_2 - Do not install | ||
+ | |||
+ | ==== Power from USB on ESP32 module ==== | ||
+ | |||
+ | * 1-2 = VUSB - Install - 5V comes from USB on ESP32 module | ||
+ | * 3-4 = DCIN - Do not install | ||
+ | * 5-6 = FTDI5V_1 - Do not install | ||
+ | * 7-8 = FTDI5V_2 - Do not install | ||
+ | |||
+ | ==== Power from FTDI #1 (Rev 1) ==== | ||
+ | |||
+ | * '''Do not use this position with "most" FTDI cards since they will drive 5V on the Rx/Tx pins when the FTDI jumper is set to 5V''' | ||
+ | |||
+ | ==== Power from FTDI #2 ==== | ||
+ | |||
+ | * '''Do not use this position with "most" FTDI cards since they will drive 5V on the Rx/Tx pins when the FTDI jumper is set to 5V''' | ||
+ | |||
+ | == Connectors (Rev 1 board) == | ||
+ | |||
+ | === P2/P4 = GVS - Rev 1 === | ||
+ | |||
+ | * Ground/Voltage/Signal lines | ||
+ | |||
+ | # GPIO13 | ||
+ | # GPIO14 | ||
+ | # GPIO16 | ||
+ | # GPIO17 | ||
+ | # GPIO35 | ||
+ | # GPIO34 | ||
+ | # VN | ||
+ | # VP | ||
+ | |||
+ | === P3 - VGA - Rev 1 === | ||
+ | |||
+ | * ESP32 pins | ||
+ | |||
+ | * This table is incorrect - it has the Lower/Higher bits swapped | ||
+ | <pre> | ||
+ | HSync => GPIO23 | ||
+ | VSync => GPIO15 | ||
+ | R0 => GPIO22 | ||
+ | R1 => GPIO21 | ||
+ | G0 => GPIO19 | ||
+ | G1 => GPIO18 | ||
+ | B0 => GPIO5 | ||
+ | B1 => GPIO4 | ||
+ | </pre> | ||
+ | |||
+ | === J2 - FTDI #1 - Rev 1 === | ||
+ | |||
+ | # GND | ||
+ | # RTS (Not used) | ||
+ | # 5V (Power in if [[ESP32-VGA#H2_-_5V_SRC_Select_Jumper|H2 is configured]]) | ||
+ | # RX (from card to External FTDI) | ||
+ | # TX (from External FTDI to card) | ||
+ | # CTS (Not used) | ||
+ | |||
+ | ==== Connect to FTDI card - Rev 1 ==== | ||
+ | |||
+ | * Set FTDI jumper to 3.3V (unlike picture below) | ||
+ | * Cross-over pins 4 and 5 when connecting to FTDI card (Rev 1 only) | ||
+ | |||
+ | [[File:FTDI_rot.jpg]] | ||
+ | |||
+ | === J6 - FTDI #2 - Rev 1 === | ||
+ | |||
+ | * Rev 1 board won't program or boot with FDTI #2 card attached | ||
+ | * This interface is in common with the USB-to-Serial interface on the ESP32 module | ||
+ | |||
+ | # GND | ||
+ | # RTS (Not used) | ||
+ | # 5V (Power in if [[ESP32-VGA#H2_-_5V_SRC_Select_Jumper|H2 is configured]]) | ||
+ | # TX2 (from card to External FTDI) | ||
+ | # RX2 (from External FTDI to card) | ||
+ | # CTS (Not used) | ||
+ | |||
+ | * Requires a cross-over of the Transmit and Receive pins if directly connecting to an FTDI part | ||
+ | * Earlier versions of the FabGL schematics used pin 12 for RX | ||
+ | * Most recent (2020-02) ANSI terminal uses pin 34 | ||
+ | * Board won't boot with an FTDI interface attached and USB cable attached | ||
+ | ** This is an issue for the ANSI Terminal sketch | ||
+ | * Original pins were (Rev 1 matches original) | ||
+ | |||
+ | <pre> | ||
+ | RX2 => 12 | ||
+ | TX2 => 2 | ||
+ | </pre> | ||
+ | |||
+ | Here's why using pin 12 is a bad idea: | ||
+ | <pre> | ||
+ | GPIO12 (MTDI) is used as a bootstrapping pin to select output voltage of an internal regulator which powers the flash chip (VDD_SDIO). This pin has an internal pulldown so if left unconnected it will read low at reset (selecting default 3.3V operation).</pre> | ||
+ | |||
+ | ==== UART2 Rework ==== | ||
+ | |||
+ | * The easiest way to do this is to wire the FTDI to GPIO34 pin instead of pin J6-5 | ||
+ | ** Not pretty, but it does work fine | ||
+ | * This is what is needed to permanently rework the board | ||
+ | * Rework is only needed to run "stock" FabGL code that uses the UART2 port on the ESP32 (like the ansi terminal) | ||
+ | * Cut trace/adding jumper to rev 1 board | ||
+ | ** Route to GPIO34 | ||
+ | * Cut as follows (cut in white) | ||
+ | |||
+ | [[File:GPIO12_Cut.PNG]] | ||
+ | |||
+ | * Add wire as follows (add wire in white) | ||
+ | |||
+ | [[File:GPIO34_Add.PNG]] | ||
+ | |||
+ | * [2020-01-20] Tested rework on card and it worked | ||
+ | |||
+ | ==== Connect to FTDI card - Rev 1 ==== | ||
+ | |||
+ | * Set FTDI jumper to 3.3V | ||
+ | * Cross-over pins 4 and 5 when connecting to FTDI card (Rev 1 only) | ||
+ | |||
+ | [[File:FTDI_rot.jpg]] | ||
+ | |||
+ | === J3 - PS/2 Keyboard - Rev 1 === | ||
+ | |||
+ | * Purple DIN 6 connector | ||
+ | * ESP32 pins | ||
+ | |||
+ | <pre> | ||
+ | DAT => 32 | ||
+ | CLK => 33 | ||
+ | </pre> | ||
+ | |||
+ | === J4 - PS/2 Mouse - Rev 1 === | ||
+ | |||
+ | * DIN 6 connector | ||
+ | * ESP32 pins | ||
+ | |||
+ | <pre> | ||
+ | DAT => 27 | ||
+ | CLK => 26 | ||
+ | </pre> | ||
+ | |||
+ | === J5 - Audio Out - RCA Jack - Rev 1 === | ||
+ | |||
+ | * ESP32 pins | ||
+ | |||
+ | <pre> | ||
+ | AUD => 25 | ||
+ | </pre> | ||
+ | |||
+ | === J15 - 5mm Terminal Block - Rev 1 === | ||
+ | |||
+ | * 5V | ||
+ | * Gnd | ||
+ | |||
+ | == Headers (Rev 2 board) == | ||
+ | |||
+ | * The Rev 2 board changes around headers and connectors | ||
+ | |||
+ | === H1 - 5V - Rev 2 === | ||
+ | |||
+ | * The ESP32-VGA can be powered from either the DC Jack or ESP32 USB power | ||
+ | * '''Warning: Do not power from 5V Power jack and connect USB cable to the ESP32 module at the same time''' | ||
+ | ** The ESP32 module has blocking diode to protect the module | ||
+ | *** If the 5V DC jack has a power supply attached with lower voltage it could result in the supplied being shorted between the USB 5V and the DC power jack | ||
+ | *** This is not an issue if the DC power jack is disconnected | ||
+ | * This could be used for an external power switch | ||
+ | |||
+ | === H2/H3 - GVS - Rev 2 === | ||
+ | |||
+ | * 3x4 header | ||
+ | * Ground/Voltage/Signal lines | ||
+ | |||
+ | # GPIO35 | ||
+ | # GPIO12 | ||
+ | # VN/I39 | ||
+ | # VP/I36 | ||
+ | |||
+ | == Connectors (Rev 2 board) == | ||
+ | |||
+ | === P1 - PS/2 Mouse - Rev 2 === | ||
+ | |||
+ | * DIN 6 connector | ||
+ | * ESP32 pins | ||
+ | |||
+ | <pre> | ||
+ | DAT => GPIO27 | ||
+ | CLK => GPIO26 | ||
+ | </pre> | ||
+ | |||
+ | === P2 - PS/2 Keyboard - Rev 2 === | ||
+ | |||
+ | * Purple DIN 6 connector | ||
+ | * ESP32 pins | ||
+ | |||
+ | <pre> | ||
+ | DAT => GPIO32 | ||
+ | CLK => GPIO33 | ||
+ | </pre> | ||
+ | |||
+ | === P3 - VGA - Rev 2 === | ||
+ | |||
+ | * ESP32 pins | ||
+ | * This table is incorrect - it has the video bits reversed | ||
+ | |||
+ | <pre> | ||
+ | HSync => GPIO23 | ||
+ | VSync => GPIO15 | ||
+ | R0 => GPIO22 | ||
+ | R1 => GPIO21 | ||
+ | G0 => GPIO19 | ||
+ | G1 => GPIO18 | ||
+ | B0 => GPIO5 | ||
+ | B1 => GPIO4 | ||
+ | </pre> | ||
+ | |||
+ | === P4 - Audio Out - RCA Jack - Rev 2 === | ||
+ | |||
+ | * ESP32 pins | ||
+ | |||
+ | <pre> | ||
+ | AUD => GPIO25 | ||
+ | </pre> | ||
+ | |||
+ | === J1 - 5V Power - Rev 2 === | ||
+ | |||
+ | * Center +5V | ||
+ | |||
+ | === J2 - FTDI #1 - Rev 2 === | ||
+ | |||
+ | * This interface is in common with the USB-to-Serial interface on the ESP32 module | ||
+ | * Pinout | ||
+ | |||
+ | # GND | ||
+ | # RTS (Not used) | ||
+ | # 5V (Not used) | ||
+ | # RX (from card to External FTDI) | ||
+ | # TX (from External FTDI to card) | ||
+ | # CTS (Not used) | ||
+ | |||
+ | <pre> | ||
+ | RX => GPIO3 | ||
+ | TX => GPIO1 | ||
+ | </pre> | ||
+ | |||
+ | ==== Connect to FTDI card - Rev 2 ==== | ||
+ | |||
+ | * Set FTDI jumper to 3.3V | ||
+ | |||
+ | [[File:FTDI_rot.jpg]] | ||
+ | |||
+ | === J3 - FTDI #2 - Rev 2 === | ||
+ | |||
+ | * Most recent (2020-02) ANSI terminal uses pin 34 for Rx | ||
+ | * Pinout | ||
+ | |||
+ | # GND | ||
+ | # RTS (Not used) | ||
+ | # 5V (Power in if [[ESP32-VGA#H2_-_5V_SRC_Select_Jumper|H2 is configured]]) | ||
+ | # RX (from External FTDI to ESP32 card) | ||
+ | # TX (from ESP32 card to External FTDI) | ||
+ | # CTS (Not used) | ||
+ | |||
+ | <pre> | ||
+ | RX2 => GPIO34 | ||
+ | TX2 => GPIO2 | ||
+ | </pre> | ||
+ | |||
+ | ==== Connect to FTDI card - Rev 2 ==== | ||
+ | |||
+ | * Set FTDI jumper to 3.3V (image below shows jumper set to 5V which is wrong) | ||
+ | |||
+ | [[File:FTDI_rot.jpg]] | ||
+ | |||
+ | === J4 - SD Card - Rev 2 === | ||
+ | |||
+ | * Brought to GVS header pins (Rev 1) | ||
+ | * Brought to SD Card (Rev 2) | ||
+ | |||
+ | <pre> | ||
+ | MOSI => GPIO17 | ||
+ | MISO => GPIO16 | ||
+ | CLK => GPIO14 | ||
+ | CS => GPIO13 | ||
+ | </pre> | ||
+ | |||
+ | == VGA - Resistor Selection == | ||
+ | |||
+ | * ESP32 has a 3.3V driver which can drive more than 10 mA | ||
+ | * Ideal case drive current | ||
+ | ** 0.7V (full scale VGA level) into 75 Ohms = 9.33 mA | ||
+ | ** 2/3 of the current or 6.16 mA comes from the lower value resistor (digital most significant bit) | ||
+ | ** 1/3 of the current or 3.08 mA comes from the higher value resistor (digital least significant bit) | ||
+ | * R-2R values | ||
+ | ** Ideal resistor values are 417.9 ohms and 835.7 ohms | ||
+ | ** [http://www.brannonelectronics.com/images/STANDARD%20VALUE.pdf Standard value 1% resistors] | ||
+ | ** 1% standard values are [https://www.mouser.com/ProductDetail/652-CR0805FX-4220ELF 422 (Mouser)], [https://www.mouser.com/ProductDetail/603-RC0805FR-07845RL 845 (Mouser)] Ohms | ||
+ | *** Get closest values | ||
+ | *** 0V, 0.228V, 0.460V, 0.693V | ||
+ | * Voltage steps are: | ||
+ | |||
+ | [[File:VGA_Sim_2R_Voltage.PNG]] | ||
+ | |||
+ | * Current steps are: | ||
+ | |||
+ | [[File:VGA_Sim_2R_Current.PNG]] | ||
+ | |||
+ | == FabGL GPIOs assignment summary - fabgl dev board rev2 == | ||
+ | |||
+ | [https://github.com/fdivitto/FabGL/blob/master/fabgl%20GPIOs%20assignment.txt From here] | ||
+ | |||
+ | |||
+ | === I2C (not usable with VGA) === | ||
+ | |||
+ | <pre> | ||
+ | SDA => GPIO4 (conflicts with VGA B1) | ||
+ | SCL => GPIO15 (conflicts with VGA VSync) | ||
+ | </pre> | ||
+ | |||
+ | === SPI Display - VSPI (not usable with VGA) === | ||
+ | |||
+ | <pre> | ||
+ | CLK => GPIO18 (conflicts with VGA G1) | ||
+ | MISO => GPIO19 (conflicts with VGA G0) | ||
+ | MOSI => GPIO23 (conflicts with VGA HSync) | ||
+ | CS => GPIO5 (conflicts with VGA B0) | ||
+ | D/C => GPIO22 (conflicts with VGA R0) | ||
+ | RESET => GPIO21 (conflicts with VGA R1) | ||
+ | </pre> | ||
+ | |||
+ | == Software == | ||
+ | |||
+ | === Arduino Programming === | ||
+ | |||
+ | * Board : "DOIT ESP32 DEVKIT V1" | ||
+ | |||
+ | [[File:Ardino_ESP32.png]] | ||
+ | === FabGL === | ||
+ | |||
+ | * Display Controller features/applications | ||
+ | ** VGA | ||
+ | ** SSD1306 | ||
+ | ** PS/2 Mouse and Keyboard Controller | ||
+ | ** Graphics Library | ||
+ | ** Sound Engine | ||
+ | ** Game Engine | ||
+ | ** ANSI/VT Terminal for the ESP32 | ||
+ | |||
+ | ==== FabGL Libraries ==== | ||
+ | |||
+ | * [http://www.fabglib.org FabGL] - ESP32 Display Controller and Graphics Library | ||
+ | * [https://github.com/fdivitto/fabgl FabGL Github repo] | ||
+ | |||
+ | ==== FabGL Arduino library ==== | ||
+ | |||
+ | Installing the released library | ||
+ | |||
+ | [[File:FabGL_Library.PNG]] | ||
+ | |||
+ | ==== Using Latest FabGL builds ==== | ||
+ | |||
+ | Here's how I did it | ||
+ | |||
+ | # Install drivers via Arduino from the Library Manager. These are not the latest files. Space Invaders should run but not have sound (as of now because it's the older version). | ||
+ | # Move the FabGL from the Arduino libraries file folder to the desktop. | ||
+ | # Copy the FabGL from the GitHub download to the Arduino files folder (where you removed the other folder). | ||
+ | # Examples will now be the latest. | ||
+ | # Compile/download/test the new files. You know it works if you now get sound from Space Invaders. | ||
+ | # Save as where you would normally save your Arduino sketches. | ||
+ | |||
+ | === MicroPython === | ||
+ | |||
+ | * [https://micropython.org MicroPython Homepage] | ||
+ | ** [http://docs.micropython.org/en/latest/esp32/quickref.html Quick reference for the ESP32] | ||
+ | ** [http://docs.micropython.org/en/latest/esp32/general.html General information about the ESP32 port] | ||
+ | ** [http://docs.micropython.org/en/latest/esp32/tutorial/intro.html Getting started with MicroPython on the ESP32] | ||
+ | * [https://github.com/land-boards/lb-Python-Code/tree/master/MicroPython/ESP32 GitHub repo] (MicroPython) | ||
+ | ** [https://github.com/land-boards/lb-Python-Code/tree/master/MicroPython/ESP32/examples Examples] (MicroPython) | ||
+ | ** [https://github.com/land-boards/lb-Python-Code/tree/master/MicroPython/ESP32/libraries Libraries] (MicroPython) | ||
+ | |||
+ | === ESP-IDF === | ||
+ | |||
+ | * [https://docs.espressif.com/projects/esp-idf/en/latest/index.html ESP-IDF Programming Guide] | ||
+ | |||
+ | === Operating Systems === | ||
+ | |||
+ | * [https://www.freertos.org FreeRTOS] | ||
+ | * [https://docs.zerynth.com/latest/official/board.zerynth.doit_esp32/docs/index.html ESP32 DevKit v1] | ||
+ | * [https://github.com/Nicholas3388/LuaNode LuaNode] | ||
+ | * [https://github.com/espressif/arduino-esp32/issues/544 ESP32 DEVKITV1 module schematics] (also helpful discussion) | ||
+ | |||
+ | == Schematic == | ||
+ | |||
+ | * [http://land-boards.com/ESP32-VGA/ESP-32_VGA_Rev1_Schematic.pdf ESP32 VGA Rev 1 Schematic] | ||
+ | * [http://land-boards.com/ESP32-VGA/ESP32-VGA_Rev2_Schematic.pdf ESP32 VGA Rev 2 Schematic] | ||
+ | * [https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_en.pdf ESP32-WROOM-32 Datasheet] | ||
+ | * [https://github.com/land-boards/lb-boards/blob/master/ESP32/ESP32-Hub/Parts_/SchematicsforESP32.pdf ESP32 Module schematic] | ||
+ | |||
+ | == Rev 2 Changes == | ||
+ | |||
+ | [[File:ESP32-VGA_CAD_REV2-bw.PNG]] | ||
+ | |||
+ | * '''Rev 1 board won't program or boot with FDTI #2 card attached''' | ||
+ | ** Earlier FabGL had GPIO12 instead of GPIO34 | ||
+ | ** Move FTDI Rx line (GPIO12 to GPIO34) | ||
+ | * Swap FTDI pins 4 and 5 (FTDI connectors) | ||
+ | ** Allow direct connect to FTDI card (no swap) | ||
+ | * Add SD Card connector | ||
+ | ** MISO => GPIO 16 | ||
+ | ** MOSI => GPIO 17 | ||
+ | ** CLK => GPIO 14 | ||
+ | ** CS => GPIO 13 | ||
+ | ** Remove I/O pins from GVS connector | ||
+ | * Replace H1/H2 with 1x2 to select/remove DC jack power\ | ||
+ | * Remove Polysilicone fuse | ||
+ | * Change ESP32 board name silkscreen | ||
+ | * Add SD card connector | ||
+ | |||
+ | == Prototype == | ||
+ | |||
+ | * [[ESP32-I2C-HUB]] | ||
+ | * [[VGAX49]] | ||
+ | * [[PS2X49]] | ||
+ | ** Purple = Keyboard | ||
+ | ** Green = Mouse | ||
+ | * [[CARRIER95TO49MM|95mm to 49mm Adapter card]] | ||
+ | * 6-32/4-40 Standoffs, screws, nuts | ||
+ | * Cabling | ||
+ | |||
+ | [[File:FabGL_P905-512pxV.jpg]] | ||
+ | |||
+ | == Assembly Sheet == | ||
+ | |||
+ | * [[ESP32-VGA Rev 2 Assembly Sheet]] | ||
+ | * [[ESP-32-VGA Rev 1 Assembly Sheet]] |
Revision as of 16:36, 11 April 2020
Contents
- 1 Features
- 2 Video DAC LTSpice Simulation
- 3 Headers (Rev 1 board)
- 4 Connectors (Rev 1 board)
- 5 Headers (Rev 2 board)
- 6 Connectors (Rev 2 board)
- 7 VGA - Resistor Selection
- 8 FabGL GPIOs assignment summary - fabgl dev board rev2
- 9 Software
- 10 Schematic
- 11 Rev 2 Changes
- 12 Prototype
- 13 Assembly Sheet
Features
- ESP32 Module
- 6-bit VGA color
- 2:2:2 R:G:B
- 2 x PS-2 DIN connectors
- 5V mouse/keyboard
- 3.3V to 5V level shifters
- Better than 5V keyboard with series resistors
- 10K pull-ups on both sides
- 2 x FTDI connectors
- 5V DC Jack
- 3.3V regulator (optional)
- GVS pins for extra ESP32 pins
- 95x95mm form factor
- 6-32 mounting holes
ESP-32 Module
- Uses the ESP32 DevKit ESP32-WROOM GPIO Pinout
- On board Blue LED = Arduino Pin 2
- There are various modules out there with different pinouts, but this card uses this one
ESP-32 Module Pinout
"Chip" on the module
ESP32 Pin Usage - Rev 1
ESP32 Pin Usage - Rev 2
Module Features
- Architecture: Xtensa Dual-Core 32-bit LX6
- CPU frequency: up to 240MHz
- Total RAM available: 528KB (part of it reserved for system)
- BootROM: 448KB
- Internal FlashROM: none
- External FlashROM: code and data, via SPI Flash; usual size 4MB
- GPIO: 34 (GPIOs are multiplexed with other functions, including external FlashROM, UART, etc.)
- UART: 3 RX/TX UART (no hardware handshaking), one TX-only UART
- SPI: 4 SPI interfaces (one used for FlashROM)
- I2C: 2 I2C (bitbang implementation available on any pins)
- I2S: 2
- ADC: 12-bit SAR ADC up to 18 channels
- DAC: 2 8-bit DACs
- RMT: 8 channels allowing accurate pulse transmit/receive
- Programming: using BootROM bootloader from UART - due to external FlashROM and always-available BootROM bootloader, the ESP32 is not brickable
Video DAC LTSpice Simulation
- Video DAC Simulation files
- Video is 2:2:2 - R:G:B
Summing Resistor DAC
- 5% resistors are "good enough"
- 1V into 75 Ohm VGA load
- 3.3V drive
- ESP32 has 40 mA drive
- Uses 10 mA (max)
- R4 = 1.2 mA to -10 mA
- R3 = 1.1 mA to -5.3 mA
- Output in 4 steps
- 0V
- 0.3V
- 0.65V
- 0.96V
Headers (Rev 1 board)
H1 - 3.3V SRC select
- 1-2 = Get 3.3V from ESP32 on-board regulator
- 2-3 = Get 3.3V from on-board regulator (Default)
H2 - 5V SRC Select Jumper (Rev 1 Board)
- 5V power options for the 5V to 3.3V regulator
- 2x4 header
- Care must be taken to install the correct jumpers
- USB jumper sends out 5V when a USB cable is connected to the ESP32 module
Power from DC Jack
- Do not connect USB cable when the DC jack is used
- 1-2 = VUSB - Install - Power to ESP32
- 3-4 = DCIN - Install - Power comes from DC jack
- 5-6 = FTDI5V_1 - Do not install
- 7-8 = FTDI5V_2 - Do not install
Power from USB on ESP32 module
- 1-2 = VUSB - Install - 5V comes from USB on ESP32 module
- 3-4 = DCIN - Do not install
- 5-6 = FTDI5V_1 - Do not install
- 7-8 = FTDI5V_2 - Do not install
Power from FTDI #1 (Rev 1)
- Do not use this position with "most" FTDI cards since they will drive 5V on the Rx/Tx pins when the FTDI jumper is set to 5V
Power from FTDI #2
- Do not use this position with "most" FTDI cards since they will drive 5V on the Rx/Tx pins when the FTDI jumper is set to 5V
Connectors (Rev 1 board)
P2/P4 = GVS - Rev 1
- Ground/Voltage/Signal lines
- GPIO13
- GPIO14
- GPIO16
- GPIO17
- GPIO35
- GPIO34
- VN
- VP
P3 - VGA - Rev 1
- ESP32 pins
- This table is incorrect - it has the Lower/Higher bits swapped
HSync => GPIO23 VSync => GPIO15 R0 => GPIO22 R1 => GPIO21 G0 => GPIO19 G1 => GPIO18 B0 => GPIO5 B1 => GPIO4
J2 - FTDI #1 - Rev 1
- GND
- RTS (Not used)
- 5V (Power in if H2 is configured)
- RX (from card to External FTDI)
- TX (from External FTDI to card)
- CTS (Not used)
Connect to FTDI card - Rev 1
- Set FTDI jumper to 3.3V (unlike picture below)
- Cross-over pins 4 and 5 when connecting to FTDI card (Rev 1 only)
J6 - FTDI #2 - Rev 1
- Rev 1 board won't program or boot with FDTI #2 card attached
- This interface is in common with the USB-to-Serial interface on the ESP32 module
- GND
- RTS (Not used)
- 5V (Power in if H2 is configured)
- TX2 (from card to External FTDI)
- RX2 (from External FTDI to card)
- CTS (Not used)
- Requires a cross-over of the Transmit and Receive pins if directly connecting to an FTDI part
- Earlier versions of the FabGL schematics used pin 12 for RX
- Most recent (2020-02) ANSI terminal uses pin 34
- Board won't boot with an FTDI interface attached and USB cable attached
- This is an issue for the ANSI Terminal sketch
- Original pins were (Rev 1 matches original)
RX2 => 12 TX2 => 2
Here's why using pin 12 is a bad idea:
GPIO12 (MTDI) is used as a bootstrapping pin to select output voltage of an internal regulator which powers the flash chip (VDD_SDIO). This pin has an internal pulldown so if left unconnected it will read low at reset (selecting default 3.3V operation).
UART2 Rework
- The easiest way to do this is to wire the FTDI to GPIO34 pin instead of pin J6-5
- Not pretty, but it does work fine
- This is what is needed to permanently rework the board
- Rework is only needed to run "stock" FabGL code that uses the UART2 port on the ESP32 (like the ansi terminal)
- Cut trace/adding jumper to rev 1 board
- Route to GPIO34
- Cut as follows (cut in white)
- Add wire as follows (add wire in white)
- [2020-01-20] Tested rework on card and it worked
Connect to FTDI card - Rev 1
- Set FTDI jumper to 3.3V
- Cross-over pins 4 and 5 when connecting to FTDI card (Rev 1 only)
J3 - PS/2 Keyboard - Rev 1
- Purple DIN 6 connector
- ESP32 pins
DAT => 32 CLK => 33
J4 - PS/2 Mouse - Rev 1
- DIN 6 connector
- ESP32 pins
DAT => 27 CLK => 26
J5 - Audio Out - RCA Jack - Rev 1
- ESP32 pins
AUD => 25
J15 - 5mm Terminal Block - Rev 1
- 5V
- Gnd
Headers (Rev 2 board)
- The Rev 2 board changes around headers and connectors
H1 - 5V - Rev 2
- The ESP32-VGA can be powered from either the DC Jack or ESP32 USB power
- Warning: Do not power from 5V Power jack and connect USB cable to the ESP32 module at the same time
- The ESP32 module has blocking diode to protect the module
- If the 5V DC jack has a power supply attached with lower voltage it could result in the supplied being shorted between the USB 5V and the DC power jack
- This is not an issue if the DC power jack is disconnected
- The ESP32 module has blocking diode to protect the module
- This could be used for an external power switch
H2/H3 - GVS - Rev 2
- 3x4 header
- Ground/Voltage/Signal lines
- GPIO35
- GPIO12
- VN/I39
- VP/I36
Connectors (Rev 2 board)
P1 - PS/2 Mouse - Rev 2
- DIN 6 connector
- ESP32 pins
DAT => GPIO27 CLK => GPIO26
P2 - PS/2 Keyboard - Rev 2
- Purple DIN 6 connector
- ESP32 pins
DAT => GPIO32 CLK => GPIO33
P3 - VGA - Rev 2
- ESP32 pins
- This table is incorrect - it has the video bits reversed
HSync => GPIO23 VSync => GPIO15 R0 => GPIO22 R1 => GPIO21 G0 => GPIO19 G1 => GPIO18 B0 => GPIO5 B1 => GPIO4
P4 - Audio Out - RCA Jack - Rev 2
- ESP32 pins
AUD => GPIO25
J1 - 5V Power - Rev 2
- Center +5V
J2 - FTDI #1 - Rev 2
- This interface is in common with the USB-to-Serial interface on the ESP32 module
- Pinout
- GND
- RTS (Not used)
- 5V (Not used)
- RX (from card to External FTDI)
- TX (from External FTDI to card)
- CTS (Not used)
RX => GPIO3 TX => GPIO1
Connect to FTDI card - Rev 2
- Set FTDI jumper to 3.3V
J3 - FTDI #2 - Rev 2
- Most recent (2020-02) ANSI terminal uses pin 34 for Rx
- Pinout
- GND
- RTS (Not used)
- 5V (Power in if H2 is configured)
- RX (from External FTDI to ESP32 card)
- TX (from ESP32 card to External FTDI)
- CTS (Not used)
RX2 => GPIO34 TX2 => GPIO2
Connect to FTDI card - Rev 2
- Set FTDI jumper to 3.3V (image below shows jumper set to 5V which is wrong)
J4 - SD Card - Rev 2
- Brought to GVS header pins (Rev 1)
- Brought to SD Card (Rev 2)
MOSI => GPIO17 MISO => GPIO16 CLK => GPIO14 CS => GPIO13
VGA - Resistor Selection
- ESP32 has a 3.3V driver which can drive more than 10 mA
- Ideal case drive current
- 0.7V (full scale VGA level) into 75 Ohms = 9.33 mA
- 2/3 of the current or 6.16 mA comes from the lower value resistor (digital most significant bit)
- 1/3 of the current or 3.08 mA comes from the higher value resistor (digital least significant bit)
- R-2R values
- Ideal resistor values are 417.9 ohms and 835.7 ohms
- Standard value 1% resistors
- 1% standard values are 422 (Mouser), 845 (Mouser) Ohms
- Get closest values
- 0V, 0.228V, 0.460V, 0.693V
- Voltage steps are:
- Current steps are:
FabGL GPIOs assignment summary - fabgl dev board rev2
I2C (not usable with VGA)
SDA => GPIO4 (conflicts with VGA B1) SCL => GPIO15 (conflicts with VGA VSync)
SPI Display - VSPI (not usable with VGA)
CLK => GPIO18 (conflicts with VGA G1) MISO => GPIO19 (conflicts with VGA G0) MOSI => GPIO23 (conflicts with VGA HSync) CS => GPIO5 (conflicts with VGA B0) D/C => GPIO22 (conflicts with VGA R0) RESET => GPIO21 (conflicts with VGA R1)
Software
Arduino Programming
- Board : "DOIT ESP32 DEVKIT V1"
FabGL
- Display Controller features/applications
- VGA
- SSD1306
- PS/2 Mouse and Keyboard Controller
- Graphics Library
- Sound Engine
- Game Engine
- ANSI/VT Terminal for the ESP32
FabGL Libraries
- FabGL - ESP32 Display Controller and Graphics Library
- FabGL Github repo
FabGL Arduino library
Installing the released library
Using Latest FabGL builds
Here's how I did it
- Install drivers via Arduino from the Library Manager. These are not the latest files. Space Invaders should run but not have sound (as of now because it's the older version).
- Move the FabGL from the Arduino libraries file folder to the desktop.
- Copy the FabGL from the GitHub download to the Arduino files folder (where you removed the other folder).
- Examples will now be the latest.
- Compile/download/test the new files. You know it works if you now get sound from Space Invaders.
- Save as where you would normally save your Arduino sketches.
MicroPython
- MicroPython Homepage
- GitHub repo (MicroPython)
ESP-IDF
Operating Systems
- FreeRTOS
- ESP32 DevKit v1
- LuaNode
- ESP32 DEVKITV1 module schematics (also helpful discussion)
Schematic
Rev 2 Changes
- Rev 1 board won't program or boot with FDTI #2 card attached
- Earlier FabGL had GPIO12 instead of GPIO34
- Move FTDI Rx line (GPIO12 to GPIO34)
- Swap FTDI pins 4 and 5 (FTDI connectors)
- Allow direct connect to FTDI card (no swap)
- Add SD Card connector
- MISO => GPIO 16
- MOSI => GPIO 17
- CLK => GPIO 14
- CS => GPIO 13
- Remove I/O pins from GVS connector
- Replace H1/H2 with 1x2 to select/remove DC jack power\
- Remove Polysilicone fuse
- Change ESP32 board name silkscreen
- Add SD card connector
Prototype
- ESP32-I2C-HUB
- VGAX49
- PS2X49
- Purple = Keyboard
- Green = Mouse
- 95mm to 49mm Adapter card
- 6-32/4-40 Standoffs, screws, nuts
- Cabling
Assembly Sheet
File history
Click on a date/time to view the file as it appeared at that time.
Date/Time | Thumbnail | Dimensions | User | Comment | |
---|---|---|---|---|---|
current | 16:27, 11 April 2020 | 720 × 628 (219 KB) | Blwikiadmin (talk | contribs) |
You cannot overwrite this file.
File usage
There are no pages that use this file.