parent
01e4e0293c
commit
a89fae5dbe
|
|
@ -0,0 +1,46 @@
|
||||||
|
import smbus
|
||||||
|
import time
|
||||||
|
|
||||||
|
# PCF8591의 I2C 주소 (일반적으로 0x48)
|
||||||
|
PCF8591_ADDRESS = 0x48
|
||||||
|
|
||||||
|
# I2C 버스 번호 (라즈베리 파이 2, 3, 4는 1, 초기 모델은 0일 수 있음)
|
||||||
|
I2C_BUS = 1
|
||||||
|
|
||||||
|
# smbus 객체 생성
|
||||||
|
bus = smbus.SMBus(I2C_BUS)
|
||||||
|
|
||||||
|
# PCF8591 DAC 제어 바이트 설정
|
||||||
|
# DAC 출력을 활성화하려면 비트 6을 1로 설정해야 합니다. (0100 0000 = 0x40)
|
||||||
|
# AIN 입력 모드 (비트 3-2)도 함께 설정될 수 있지만, DAC 출력에 직접적인 영향은 없습니다.
|
||||||
|
# 여기서는 DAC 활성화만 중요합니다.
|
||||||
|
DAC_CONTROL_BYTE = 0x40
|
||||||
|
|
||||||
|
print(f"PCF8591 DAC LED 제어 테스트 시작 (주소: 0x{PCF8591_ADDRESS:X})")
|
||||||
|
print("LED 밝기가 서서히 변합니다. Ctrl+C로 종료.")
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
# 0부터 255까지 값을 증가시키며 LED 밝기 조절
|
||||||
|
for value in range(256):
|
||||||
|
# write_byte_data(주소, 제어_바이트, 데이터_바이트)
|
||||||
|
# 제어_바이트: DAC 활성화를 위한 설정 (0x40)
|
||||||
|
# 데이터_바이트: DAC로 출력할 0-255 사이의 값
|
||||||
|
bus.write_byte_data(PCF8591_ADDRESS, DAC_CONTROL_BYTE, value)
|
||||||
|
print(f"DAC 출력 값: {value}")
|
||||||
|
time.sleep(0.01) # 0.01초 대기 (밝기 변화 속도 조절)
|
||||||
|
|
||||||
|
time.sleep(0.5) # 잠시 멈춤
|
||||||
|
|
||||||
|
# 255부터 0까지 값을 감소시키며 LED 밝기 조절
|
||||||
|
for value in range(255, -1, -1): # 255부터 0까지 역순으로
|
||||||
|
bus.write_byte_data(PCF8591_ADDRESS, DAC_CONTROL_BYTE, value)
|
||||||
|
print(f"DAC 출력 값: {value}")
|
||||||
|
time.sleep(0.01) # 0.01초 대기
|
||||||
|
|
||||||
|
time.sleep(0.5) # 잠시 멈춤
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
# 프로그램 종료 시 LED 끄기
|
||||||
|
bus.write_byte_data(PCF8591_ADDRESS, DAC_CONTROL_BYTE, 0)
|
||||||
|
print("\n프로그램 종료. LED를 끕니다.")
|
||||||
Loading…
Reference in New Issue