#Name: sigGen.pio #Date: 2022EMay30 #Author: Unknown #TranscribedBy: D@CC #Category: Projects/PIO/pico in 215 #Code: PIO_ statemachine #Purpose: sigGen.pio #Article: 177 #Used in signalGenerator_wo_Pot_pico #Remark: PIO is set up by Python code @asm_pio(sideset_init=PIO.OUT_LOW) def pwm_prog(): pull(noblock) .side(0) mov(x, osr) # Keep most recent pull data stashed in X, for recycling by noblock mov(y, isr) # ISR must be preloaded with PWM count max label("pwmloop") jmp(x_not_y, "skip") nop() .side(1) label("skip") jmp(y_dec, "pwmloop") class PIOPWM: def __init__(self, sm_id, pin, max_count, count_freq): self._sm = StateMachine(sm_id, pwm_prog, freq=2 * count_freq, sideset_base=Pin(pin)) # Use exec() to load max count into ISR self._sm.put(max_count) self._sm.exec("pull()") self._sm.exec("mov(isr, osr)") self._sm.active(1) self._max_count = max_count def set(self, value): # Minimum value is -1 (completely turn off), 0 actually still produces narrow pulse value = max(value, -1) value = min(value, self._max_count) self._sm.put(value) #DC end class PIOPWM copied from fadeLed_pico.py #/sigGen.pio