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