FlashMyPico.com
log in about discover docs scratchpad
This website requires a Chrome-based browser in order to access the WebUSB API. Without it, you may not be able to flash your device.

pwm_led_fade
for Raspberry Pi Picoβ„’ 2 W, submitted by flashmypico

Loading...

/** * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // Fade an LED between low and high brightness. An interrupt handler updates // the PWM slice's output level each time the counter wraps. #include "pico/stdlib.h" #include <stdio.h> #include "pico/time.h" #include "hardware/irq.h" #include "hardware/pwm.h" #ifdef PICO_DEFAULT_LED_PIN void on_pwm_wrap() { static int fade = 0; static bool going_up = true; // Clear the interrupt flag that brought us here pwm_clear_irq(pwm_gpio_to_slice_num(PICO_DEFAULT_LED_PIN)); if (going_up) { ++fade; if (fade > 255) { fade = 255; going_up = false; } } else { --fade; if (fade < 0) { fade = 0; going_up = true; } } // Square the fade value to make the LED's brightness appear more linear // Note this range matches with the wrap value pwm_set_gpio_level(PICO_DEFAULT_LED_PIN, fade * fade); } #endif int main() { #ifndef PICO_DEFAULT_LED_PIN #warning pwm/led_fade example requires a board with a regular LED #else // Tell the LED pin that the PWM is in charge of its value. gpio_set_function(PICO_DEFAULT_LED_PIN, GPIO_FUNC_PWM); // Figure out which slice we just connected to the LED pin uint slice_num = pwm_gpio_to_slice_num(PICO_DEFAULT_LED_PIN); // Mask our slice's IRQ output into the PWM block's single interrupt line, // and register our interrupt handler pwm_clear_irq(slice_num); pwm_set_irq_enabled(slice_num, true); irq_set_exclusive_handler(PWM_DEFAULT_IRQ_NUM(), on_pwm_wrap); irq_set_enabled(PWM_DEFAULT_IRQ_NUM(), true); // Get some sensible defaults for the slice configuration. By default, the // counter is allowed to wrap over its maximum range (0 to 2**16-1) pwm_config config = pwm_get_default_config(); // Set divider, reduces counter clock to sysclock/this value pwm_config_set_clkdiv(&config, 4.f); // Load the configuration into our PWM slice, and set it running. pwm_init(slice_num, &config, true); // Everything after this point happens in the PWM interrupt handler, so we // can twiddle our thumbs while (1) tight_loop_contents(); #endif }
This firmware image was imported from the pico-examples repository. 


Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
   disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
   disclaimer in the documentation and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
   derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Homepage: https://github.com/raspberrypi/pico-examples
Repository: https://github.com/raspberrypi/pico-examples/tree/master/pwm/led_fade

β“˜ Tips