Pulse Generator for testing PLB2 RL RF switch

XIAO-RP2040 Wiki

MCU Datasheet

Schematic

Used MicroPython FW (RP Pico)

import machine
import time
# Configure the output pins (change the pin number as needed)
led_B = machine.Pin(25, machine.Pin.OUT)
led_G = machine.Pin(16, machine.Pin.OUT)
led_R = machine.Pin(17, machine.Pin.OUT)
sw = machine.Pin(3, machine.Pin.OUT)
sw.off()
gnd = machine.Pin(4, machine.Pin.OUT)
gnd.off()
# Configure the input pins for buttons (GPIO 1 and 2)
btn_minus = machine.Pin(1, machine.Pin.IN, machine.Pin.PULL_UP) # Button to decrease T_ON
btn_plus = machine.Pin(2, machine.Pin.IN, machine.Pin.PULL_UP) # Button to increase T_ON
# Initialize LED states
led_B.on()
led_G.on()
led_R.on()
# Timing variables
T_OFF = 10 # Default OFF time
T_ON = 1 # Default ON time
T_STP = 0.1 # Step increment
T_ON_MAX = 30
T_ON_MIN = 1
T_OFF_MAX = 30
T_OFF_MIN = 1
T_STP_MAX = 2.5
T_STP_MIN = 0.1
# Function to display current settings and get new values
def get_new_value(param_name, current_value, min_value, max_value):
while True:
try:
new_value = float(input(f"Set {param_name} (current: {current_value:.1f}, range: {min_value}-{max_value}): "))
# Ensure new_value is within the specified range and in 0.1 steps
if min_value <= new_value <= max_value and (new_value * 10) % 1 == 0:
return new_value
else:
print(f"Please enter a value between {min_value} and {max_value} in 0.1 steps.")
except ValueError:
print("Invalid input. Please enter a number.")
# Button handler to sort actions
def button_handler(pin):
global T_ON, T_OFF, T_STP
# Check if both buttons are pressed
if not btn_plus.value() and not btn_minus.value():
print("Both buttons pressed. Entering configuration mode...")
led_B.off()
led_G.on()
led_R.on()
# Enter configuration mode
T_ON = get_new_value("T_ON", T_ON, T_ON_MIN, T_ON_MAX)
T_OFF = get_new_value("T_OFF", T_OFF, T_OFF_MIN, T_OFF_MAX)
T_STP = get_new_value("T_STP", T_STP, T_STP_MIN, T_STP_MAX)
print("Exiting configuration mode...")
else:
# Check which button is pressed
if not btn_plus.value(): # Button to increase T_ON
if T_ON < T_ON_MAX:
T_ON += T_STP
if T_ON > T_ON_MAX: # Cap at T_ON_MAX
T_ON = T_ON_MAX
print(f"T_ON increased to {T_ON:.1f} seconds")
elif not btn_minus.value(): # Button to decrease T_ON
if T_ON > T_ON_MIN:
T_ON -= T_STP
if T_ON < T_ON_MIN: # Cap at T_ON_MIN
T_ON = T_ON_MIN
print(f"T_ON decreased to {T_ON:.1f} seconds")
# Attach interrupts for the buttons
btn_plus.irq(trigger=machine.Pin.IRQ_FALLING, handler=button_handler)
btn_minus.irq(trigger=machine.Pin.IRQ_FALLING, handler=button_handler)
# Main loop to blink the LED
while True:
led_B.on()
led_G.off()
led_R.on()
sw.on()
print(f"LED ON for {T_ON:.1f} seconds (1..30 secs)")
time.sleep(T_ON) # Keep it on for the specified time
led_G.on()
led_R.off()
sw.off()
print(f"LED OFF for {T_OFF} seconds")
time.sleep(T_OFF) # Keep it off for the specified time