Source code for openlabctrl.io.analog

from enum import Enum
from .base import BaseIo

class AnalogOutCmd(Enum):
    DUTY_CYCLE = 0x0

[docs] class AnalogOut(BaseIo): """ Driver class for low speed analog IOs (PWM + Low Pass Filter). """ def __init__(self, addr, clk_freq): super().__init__(addr, clk_freq)
[docs] def duty_cycle(self, val: float): """ Define scale of underlying Sigma-Delta Modulator. :param val: Relative scale in range [0.0, 1.0]. """ DUTY_CYCLE_MIN = 0.0 DUTY_CYCLE_MAX = 1.0 MODULATION_DEPTH = 12 if (val < DUTY_CYCLE_MIN) or (val > DUTY_CYCLE_MAX): raise Exception(f"Duty cycle value {val} is out of range [{DUTY_CYCLE_MIN}, {DUTY_CYCLE_MAX}].") data = int(val * ((1 << MODULATION_DEPTH) - 1)) self._add_instruction(cmd=AnalogOutCmd.DUTY_CYCLE.value, data=data)