From a89fae5dbe03d9a6468cd242ae0bd2b5badcaaae Mon Sep 17 00:00:00 2001 From: westnife3 Date: Wed, 27 Aug 2025 17:34:40 +0900 Subject: [PATCH] =?UTF-8?q?refs=20#4=20LED=20DAC=20=EC=A0=9C=EC=96=B4,=20P?= =?UTF-8?q?CF8591=20DAC=20=EC=B6=9C=EB=A0=A5=EC=86=8C=EC=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tutorial/4.led_pcf8591_dac.py | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 tutorial/4.led_pcf8591_dac.py diff --git a/tutorial/4.led_pcf8591_dac.py b/tutorial/4.led_pcf8591_dac.py new file mode 100644 index 0000000..d33210c --- /dev/null +++ b/tutorial/4.led_pcf8591_dac.py @@ -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를 끕니다.")