Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # Control AD5206 digital potentiometer using SPI
- # remind me to set geany from tabs to spaces
- import spidev
- import time
- import RPi.GPIO as GPIO
- # Setup the SPI connection
- spi = spidev.SpiDev()
- spi.open(0, 0) # Bus 0, device 0 (Chip Select 0)
- spi.max_speed_hz = 50000 # Set the SPI speed (adjust as needed)
- # IO Chip Select pins
- cs1 = 23
- cs2 = 24
- cs3 = 25
- # Constants
- MAX = 255
- MIN = 0
- MID = 127
- # Setup GPIO for Chip Select (CS)
- GPIO.setmode(GPIO.BCM)
- GPIO.setwarnings(False)
- GPIO.setup(cs1, GPIO.OUT) # Chip Select for AD5206 #1
- GPIO.setup(cs2, GPIO.OUT) # Chip Select for AD5206 #2
- GPIO.setup(cs3, GPIO.OUT) # Chip Select for AD5206 #3
- # Function to write data to a specific channel of an AD5206
- def set_pot(cs_pin, channel, value):
- if channel < 0 or channel > 5:
- raise ValueError("Channel must be between 0 and 5.")
- if value < 0 or value > 255:
- raise ValueError("Value must be between 0 and 255.")
- GPIO.output(cs_pin, GPIO.LOW) # Enable the chip by pulling CS low
- # Command byte: Bits 2:0 for channel (0-5), others 0
- command_byte = channel & 0x07 # Ensure only the last 3 bits are used
- data = [command_byte, value] # Command byte followed by value
- spi.xfer2(data) # Send the data to the AD5206
- GPIO.output(cs_pin, GPIO.HIGH) # Disable the chip by pulling CS high
- print("AD5206 control program running. Press Ctrl+C to exit.")
- print("I forget is 0 min brightness or max?")
- # Enable all the devices for write
- GPIO.output(cs1, GPIO.LOW) # Enable the chip by pulling CS low
- GPIO.output(cs2, GPIO.LOW) # Enable the chip by pulling CS low
- GPIO.output(cs3, GPIO.LOW) # Enable the chip by pulling CS low
- # Initialize all channels on all chips to minimum resistance
- for channel in range(6):
- set_pot(cs1, channel, MIN)
- set_pot(cs2, channel, MIN)
- set_pot(cs3, channel, MIN)
- # disable all the devices
- GPIO.output(cs1, GPIO.HIGH) # disable the chip by pulling CS high
- GPIO.output(cs2, GPIO.HIGH) # disable the chip by pulling CS high
- GPIO.output(cs3, GPIO.HIGH) # disable the chip by pulling CS high
- # Test: Set channel 3 on each chip to MID resistance
- #set_pot(cs1, 3, MID)
- #set_pot(cs2, 3, MID)
- #set_pot(cs3, 3, MID)
- # Cleanup GPIO on exit
- def cleanup():
- GPIO.cleanup()
- spi.close()
- # Ensure GPIO cleanup on exit
- try:
- while True:
- # Example: Gradually increase channel 0 resistance on cs1
- for value in range(MIN, MAX + 1, 10):
- for n in range(6):
- set_pot(cs1, n, value)
- # print(f{value})
- time.sleep(0.1)
- for value in range(MIN, MAX + 1, 10):
- for n in range(6):
- set_pot(cs2, n, value)
- #print(f{value})
- time.sleep(0.1)
- for value in range(MIN, MAX + 1, 10):
- for n in range(6):
- set_pot(cs3, n, value)
- #print(f{value})
- time.sleep(0.1)
- except KeyboardInterrupt:
- print("\nExiting program.")
- finally:
- cleanup()
Add Comment
Please, Sign In to add comment