# servo2350 Custom PCB with RP2350. Mainly used for hexapods and driving 18x servo motors with 18x ADC feedback through multiplexer. ![image](datasheets/board.jpg) ## Specs * **CPU:** RP2350B with debug pins * **FLASH:** W25Q16JVUXIQ_TR 16Mbit NOR quad SPI memory * **OUTPUT:** 18x PWM, 6x digital output (3 pin header), 2x LEDs, extra pins in header * **INPUT:** 18x ADC though a CD74HC4067 multiplexer * **SENSORS:** ICM-45686 IMU * **SERIAL:** SPI, I2C, USB, UART ## Test code commands > [!WARNING] > The zephyr sdk has bug in the [rp2350 pinctrl](https://github.com/zephyrproject-rtos/zephyr/blob/main/include/zephyr/dt-bindings/pinctrl/rpi-pico-rp2350-pinctrl-common.h) file. The `RP2_PINCTRL_GPIO_FUNC_UART_AUX` macro is defind, but `RP2_PINCTRL_GPIO_FUNC_UART_ALT` macro is used. > [!NOTE] > While shell is over USB, the `adc scan_for` command uses uart. The UART uses spi1 pins, so the spi1 needs to be disabled and `extra_uart.overlay` needs to be used. | Command | Parameters | Description | | --------------------------- | ---------------------------- | --------------------------------------------------- | | `led set ` | `id`: `0-1` | Set LED state | | `led allon` | - | Turn all LEDs ON | | `led alloff` | - | Turn all LEDs OFF | | `servo set ` | Servo ID, angle in degrees | Set servo angle | | `adc read ` | ADC channel ID | Read a single ADC channel | | `adc read_for ` | ADC channel ID, sample count | Read one ADC channel repeatedly | | `adc scan` | - | Read all ADC channels once | | `adc scan_for ` | `count ≤ 1024` | Read all ADC channels repeatedly and log timestamps | ### UART Output Formats | Command | Output Format | | -------------- | --------------------------------------------------- | | `adc scan` | `ADC,,` | | `adc scan_for` | `,ADC,,,` |