From 5b1e60fb5f4d65d14e5dd2a5a4e8ac4a95d3b8cf Mon Sep 17 00:00:00 2001 From: Eddy Pedroni Date: Sun, 24 Aug 2025 22:01:32 +0200 Subject: Initial commit, Raspberry pi pico software implementation --- architecture.drawio | 161 ++++++++++++++++++++++++++++++ power-seq-software/CMakeLists.txt | 51 ++++++++++ power-seq-software/flash.sh | 6 ++ power-seq-software/power-seq-software.cpp | 47 +++++++++ relay-driver.txt | 17 ++++ 5 files changed, 282 insertions(+) create mode 100644 architecture.drawio create mode 100644 power-seq-software/CMakeLists.txt create mode 100755 power-seq-software/flash.sh create mode 100644 power-seq-software/power-seq-software.cpp create mode 100644 relay-driver.txt diff --git a/architecture.drawio b/architecture.drawio new file mode 100644 index 0000000..1738f3b --- /dev/null +++ b/architecture.drawio @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/power-seq-software/CMakeLists.txt b/power-seq-software/CMakeLists.txt new file mode 100644 index 0000000..002f651 --- /dev/null +++ b/power-seq-software/CMakeLists.txt @@ -0,0 +1,51 @@ +# Generated Cmake Pico project file + +cmake_minimum_required(VERSION 3.13) + +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) + +# Initialise pico_sdk from installed location +# (note this can come from environment, CMake cache etc) +set(PICO_SDK_PATH "/usr/share/pico-sdk") + +set(PICO_BOARD pico CACHE STRING "Board type") + +# Pull in Raspberry Pi Pico SDK (must be before project) +include(pico_sdk_import.cmake) + +# We also need PICO EXTRAS +include($ENV{PICO_EXTRAS_PATH}/external/pico_extras_import.cmake) + +if (PICO_SDK_VERSION_STRING VERSION_LESS "1.4.0") + message(FATAL_ERROR "Raspberry Pi Pico SDK version 1.4.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}") +endif() + +project(power-seq-software C CXX ASM) + +# Initialise the Raspberry Pi Pico SDK +pico_sdk_init() + +# Add executable. Default name is the project name, version 0.1 + +add_executable(power-seq-software power-seq-software.cpp ) + +pico_set_program_name(power-seq-software "power-seq-software") +pico_set_program_version(power-seq-software "0.1") + +pico_enable_stdio_uart(power-seq-software 0) +pico_enable_stdio_usb(power-seq-software 1) + +# Add the standard library to the build +target_link_libraries(power-seq-software + pico_stdlib + hardware_sleep) + +# Add the standard include files to the build +target_include_directories(power-seq-software PRIVATE + ${CMAKE_CURRENT_LIST_DIR} + ${CMAKE_CURRENT_LIST_DIR}/.. # for our common lwipopts or any other standard includes, if required +) + +pico_add_extra_outputs(power-seq-software) + diff --git a/power-seq-software/flash.sh b/power-seq-software/flash.sh new file mode 100755 index 0000000..058349d --- /dev/null +++ b/power-seq-software/flash.sh @@ -0,0 +1,6 @@ +#/usr/bin/zsh + +sudo mount $1 /mnt +sudo cp power-seq-software.uf2 /mnt +sudo umount /mnt + diff --git a/power-seq-software/power-seq-software.cpp b/power-seq-software/power-seq-software.cpp new file mode 100644 index 0000000..cb10215 --- /dev/null +++ b/power-seq-software/power-seq-software.cpp @@ -0,0 +1,47 @@ +#include +#include +#include +#include "pico/stdlib.h" +#include "pico/sleep.h" +#include "hardware/gpio.h" + +static constexpr std::size_t button_gpio = 6; +static constexpr std::size_t led_gpio = 2; +static constexpr std::array gpio_on_sequence { 3, 4, 5 }; +static constexpr std::array gpio_off_sequence { 5, 4, 3 }; +static constexpr std::size_t delay_ms = 100; + +int main() +{ + bool state = false; + + // init LED + gpio_init(led_gpio); + gpio_set_dir(led_gpio, GPIO_OUT); + gpio_put(led_gpio, state); + + // init relay GPIOs + for (auto const & relay : gpio_off_sequence) + { + gpio_init(relay); + gpio_set_dir(relay, GPIO_OUT); + gpio_put(relay, state); + } + + while (true) + { + sleep_run_from_xosc(); + sleep_goto_dormant_until_edge_high(button_gpio); + sleep_power_up(); + + state = !state; + gpio_put(led_gpio, state); + + auto const & sequence = state ? gpio_on_sequence : gpio_off_sequence; + for (auto const & relay : sequence) + { + gpio_put(relay, state); + sleep_ms(delay_ms); + } + } +} diff --git a/relay-driver.txt b/relay-driver.txt new file mode 100644 index 0000000..6ee9bac --- /dev/null +++ b/relay-driver.txt @@ -0,0 +1,17 @@ +$ 1 0.000005 10.20027730826997 50 5 50 5e-11 +R 352 304 304 304 0 0 40 5 0 0 0.5 +s 352 368 416 368 0 1 false +r 416 368 496 368 0 1000 +r 496 368 496 448 0 10000 +g 496 448 496 464 0 0 +f 496 368 560 368 32 1.5 0.02 +w 560 384 560 448 0 +w 560 448 496 448 0 +178 448 272 560 272 6 1 0.2 2.2143523761996582e-7 0.05 1000000 0.02 20 0.015 0.005 0 +w 560 352 560 304 0 +R 448 272 384 272 0 1 50 230 0 0 0.5 +r 560 288 656 288 0 100000 +g 656 288 656 320 0 0 +w 352 304 448 304 0 +R 352 368 304 368 0 0 40 3.3 0 0 0.5 +o 11 2 0 4099 80 0.00078125 0 2 11 3 -- cgit v1.2.3