This is the first successful PCB I've designed. I made it as part of TeachMePCB's PCB Layout 101 class.
Everyone in the course made a macrokeypad of some sort. The core "requirements" were:
- 10 MX-style key switches
- 2 Rotary Encoders with RGB leds
- VEML7700 Ambient Light Sensor (I2C)
- NLSF595 LED Driver (SPI)
- 10 NeoPixel lights (1-wire)
- Don't make a rectangular PCB
- Raspberry Pi Pico microcontroller
I made a couple of changes:
- Swapped PCA9745B for NLSF595
- Added ePaper display (because why not make my first project harder)
- Standard CircuitPython
- Adafruit CircuitPython Library
- adafruit_hid
- adafruit_led_animation
- adafruit_debouncer
- adafruit_veml7700
- adafruit_display_text
- adafruit_button
- fergcorp_pca9745b
- fergcorp_pdispectra
Last updated: 2 Feb 2022
U401 (PI4ULS5V201TAEX), Pin 6:
- IS: Connected to ground.
- SHOULD BE: Connected to 5V+ via a 4.7K ohm resistor
Note: All annotations on the PCB were also reset and reassigned. However, the original annotation designations are used in this document.
R2404, Pin 03 (SPI_MISO) of U2701 (PCA9745BTWJ)
- IS: Connected to SPI_MISO via R2704 (1k ohm)
- SHOULD BE: No resistor
Pin 27 (SPI_MOSI) of U2701 (PCA9745BTWJ)
- IS: Connected to SPI_MOSI via R2706 (1k ohm)
- SHOULD BE: No resistor
R2707, Pin 26 (SPI_SCLK) of U2701 (PCA9745BTWJ)
- IS: Connected to SPI_SCLK via R2707 (1k ohm)
- SHOULD BE: No resistor
S3001 (Rotary Encoder)
- IS: Pin 01 (red LED) and Pin 04 (blue LED) are swapped
- S3001 Pin 01 (red LED) goes to U2701 Pin 13 (blue LED)
- S3001 Pin 04 (blue LED) goes to U2701 Pin 11 (red LED)
SHOULD BE:
- S3001 Pin 01 (red LED) connects to 2701 Pin 11 (red LED)
- S3001 Pin 04 (blue LED) to U2701 Pin 13 (blue LED)
Note: This has been fixed in software for this version of the PCB
J2901 (Connector for epaper) Pin 11 (Data/Command) and Pin 09 (Busy)
IS:
- U2801 Pin 15 labeled as GPIO12 and connects to J2901 Pin 11
- U2801 Pin 16 is labeled as GPIO11 and connects to J2901 Pin 09
SHOULD BE:
- U2801 Pin 15 labeled as GPIO11 and connects to Pin 09
- U2801 Pin 16 labeled as GPIO12 and connects to Pin 11
Note: This has been fixed in software for this version of the PCB
- IS: R2901 is 470 ohms
- SHOULD BE: R2901 is 0.47 ohms
- |ss|IS: J2901 (Connector for epaper) Pin 10 (Reset) connected to +3.3V via R2902 (100k ohm)|se|
- |ss|SHOULD BE: J2901 Pin 10 connected to U2801 Pin 14 (GPIO10)|se|
Note: This results in SWITCH 4 and ePaper Reset sharing a pin because there are no other pins available. The primary result is that careful context switching needs to managed in software to:
- Deinitialize GPIO10 as an input for SWITCH 4
- Setup the ePaper display interface (which uses GPIO10 as an output)
- Perform whatever ePaper update is needed
- Deinitialze the ePaper interface (which deinitializes GPIO10 as an output)
- Re-initialize GPIO10 as an input for SWITCH 4
Also, while the ePaper is not enabled (i.e. not initialized/reinitialized), GPIO17 (ePaper CS) needs to be set HIGH to prevent the ePaper controller from thinking that data on the SPI line is intended for it.
- IS: J2901 is Molex P/N 5052782433
- SHOULD BE: J2901 is Amphenol P/N F31L-1A7H1-11024
- IS: Component S201 and S3001 is SparkFun P/N COM-15141
- SHOULD BE: Bournes P/N PEL12T-4225S-S1024
Note: COM-15141 was originally sourced as an alternate since the Bournes parts weren’t avaible. However, COM-15141 has quality control issues, including the Red LED not working well and the rotary action not registering correctly. SparkFun is aware of these issues.
- IS: J2901 (Connector for epaper) Pin 10 (Reset) connected to +3.3V via R2902 (100k ohm)
- SHOULD BE: J2901 Pin 10 connected to U2801 Pin 48 (GPIO25_LED aka TP5)
Note: This replaces R6 in its entirety.