]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/rp2040_u2if/pwmio.py
Merge pull request #561 from makermelissa/main
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / rp2040_u2if / pwmio.py
1 # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
2 #
3 # SPDX-License-Identifier: MIT
4 """PWMOut Class for RP2040s with u2if"""
5 from .rp2040_u2if import rp2040_u2if
6
7
8 class PWMOut:
9     """Base Pulse Width Modulation Output Class"""
10
11     def __init__(self, pin, *, frequency=500, duty_cycle=0, variable_frequency=False):
12         rp2040_u2if.pwm_configure(
13             pin,
14             frequency=frequency,
15             duty_cycle=duty_cycle,
16             variable_frequency=variable_frequency,
17         )
18
19         self._pin = pin
20
21     def __del__(self):
22         self.deinit()
23
24     def __enter__(self):
25         return self
26
27     def __exit__(self, t, value, traceback):
28         self.deinit()
29
30     def deinit(self):
31         """Deinit PWM."""
32         rp2040_u2if.pwm_deinit(self._pin)
33
34     @property
35     def duty_cycle(self):
36         """The PWM's output duty cycle, 16-bit."""
37         return rp2040_u2if.pwm_get_duty_cycle(self._pin)
38
39     @duty_cycle.setter
40     def duty_cycle(self, duty_cycle):
41         rp2040_u2if.pwm_set_duty_cycle(self._pin, duty_cycle)
42
43     @property
44     def frequency(self):
45         """The PWM's output frequency in Hertz."""
46         return rp2040_u2if.pwm_get_frequency(self._pin)
47
48     @frequency.setter
49     def frequency(self, frequency):
50         rp2040_u2if.pwm_set_frequency(self._pin, frequency)