From 4dadc0d9e15a4b351af5b319e7afee059b19808a Mon Sep 17 00:00:00 2001 From: Ray Morris Date: Sat, 26 Apr 2025 10:03:07 -0500 Subject: [PATCH] docs: LED pin PWM as PINIO --- docs/LED pin PWM.md | 8 +++++++- docs/Programming Framework.md | 2 +- docs/assets/images/led-as-pinio.png | Bin 0 -> 24626 bytes 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 docs/assets/images/led-as-pinio.png diff --git a/docs/LED pin PWM.md b/docs/LED pin PWM.md index 2aead4cd7a0..f972eb654e4 100644 --- a/docs/LED pin PWM.md +++ b/docs/LED pin PWM.md @@ -7,12 +7,15 @@ Normally LED pin is used to drive WS2812 led strip. LED pin is held low, and eve As alternative function, it is possible to generate PWM signal with specified duty ratio on the LED pin. -Feature can be used to drive external devices. It is also used to simulate [OSD joystick](OSD%20Joystick.md) to control cameras. +Feature can be used to drive external devices such as a VTX power switch. Setting the PWM duty cycle to 100% or 0% can +provide an extra PINIO pin. It is also used to simulate [OSD joystick](OSD%20Joystick.md) to control cameras. PWM frequency is fixed to 24kHz with duty ratio between 0 and 100%: ![alt text](/docs/assets/images/led_pin_pwm.png "led pin pwm") +Note that the LED feature needs to be enabled when using the PIN in this mode (feature LED_STRIP). + There are four modes of operation: - low - high @@ -88,3 +91,6 @@ To drive power LED with brightness control, Mosfet should be used: ![alt text](/docs/assets/images/ledpinpwmpowerled.png "led pin pwm power_led") +# Programming tab example for using the LED pin as a PINIO, such as for turning a VTX or camera on and off +!(/docs/assets/images/led-as-pinio.png "led pin as pinio") + diff --git a/docs/Programming Framework.md b/docs/Programming Framework.md index a0f69b0c99b..e1843acb9b0 100644 --- a/docs/Programming Framework.md +++ b/docs/Programming Framework.md @@ -98,7 +98,7 @@ IPF can be edited using INAV Configurator user interface, or via CLI. To use COn | 49 | Timer | A simple on - off timer. `true` for the duration of `Operand A` [ms]. Then `false` for the duration of `Operand B` [ms]. | | 50 | Delta | This returns `true` when the value of `Operand A` has changed by the value of `Operand B` or greater within 100ms. ( \|ΔA\| >= B ) | | 51 | Approx Equals (A ~ B) | `true` if `Operand B` is within 1% of `Operand A`. | -| 52 | LED Pin PWM | Value `Operand A` from [`0` : `100`] starts PWM generation on LED Pin. See [LED pin PWM](LED%20pin%20PWM.md). Any other value stops PWM generation (stop to allow ws2812 LEDs updates in shared modes). | +| 52 | LED Pin PWM | Value `Operand A` from [`0` : `100`] PWM / PINIO generation on LED Pin. See [LED pin PWM](LED%20pin%20PWM.md). Any other value stops PWM generation (stop to allow ws2812 LEDs updates in shared modes). | | 53 | Disable GPS Sensor Fix | Disables the GNSS sensor fix. For testing GNSS failure. | | 54 | Mag calibration | Trigger a magnetometer calibration. | | 55 | Set Gimbal Sensitivity | Scales `Operand A` from [`-16` : `15`] diff --git a/docs/assets/images/led-as-pinio.png b/docs/assets/images/led-as-pinio.png new file mode 100644 index 0000000000000000000000000000000000000000..31be121ffd36dc3b23021e8838a0f41acee545da GIT binary patch literal 24626 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 literal 0 HcmV?d00001