본문 바로가기

분류 전체보기106

PWM LED 제어하기 이번 포스팅에서는 라즈베리파이에서 PWM을 통해 LED를 제어하는 방법에 대해 알아보겠습니다. PWM(Pulse Width Modulation)은 주기적으로 반복되는 ON/OFF 신호를 통해서 모터나 팬의 속도, LED의 밝기를 소프트웨어적으로 제어할 수 있습니다. 반복되는 Pulse 신호의 주기(0~3.3V 파형)에서 ON 신호가 지속되는 시간의 비율을 Duty Cycle이라고 하며 Duty Cycle이 클수록 속도나 밝기가 커집니다. PWM을 사용하기 위해서는 RPi.GPIO 모듈이 제공하는 PWM 클래스를 이용하여 PWM 객체를 먼저 생성해야 합니다. pwm = GPIO.PWM(channel, frequency) pwm 객체를 생성한 후에는 아래와 같이 pwm을 시작하여 사용할 준비를 해 줍니다. .. 2020. 12. 25.
[C#]네트워크 프로토콜 비트 연산 이번 포스팅에서는 네트워크 프로토콜에서 경보나 Fault 정보를 비트 연산을 통해 비트 별 알람 정보로 담아 송수신하는 방법에 대해 정리해 보겠습니다. 아래 이미지는 ESS 안전정보시스템에서 배터리와 관련하여 Warning과 Fault 정보에 대한 프로토콜 정의 일부입니다. Warning과 Fault의 데이터 Type은 INT형으로 비트연산을 통해 경보나 고장 발생 여부를 송수신하도록 요구하고 있습니다. 실제 LG Chem에서 제공하는 배터리 프로토콜에서 관련 정보를 찾아보면 아래와 같습니다. 실제 Warning과 Fault에 대한 부분은 uint16으로 각 비트별(b0~b15) 경보 및 고장 정보를 담을 수 있도록 제공해 주고 있습니다. 안전정보시스템에서 요구하는 Warning과 Fault 정보를 아래.. 2020. 12. 24.
바운싱(Bouncing) 현상 방지 이번 포스팅에서는 버튼 동작시 발생하는 바운싱(Bouncing) 현상과 이를 방지하는 방법에 대해 정리해 보겠습니다. 바운싱(Bouncing)이란 기계적인 접점을 갖는 스위치들은 접점이 붙거나 떨어지는 시점에 접점이 여러 번 On/Off 되는 현상이 발생합니다. 이러한 현상은 약 100ms 정도 되는 순간에 여러 번 반복하기 때문에 의도하지 않는 인터럽트가 발생할 수 있습니다. 이러한 바운싱 현상을 제거해야 정상 동작을 할 수 있는데 이를 디바운싱(Debouncing)이라고 합니다. 이를 그림으로 나타내면 아래와 같습니다. 디바운싱을 하는 방법에는 하드웨어적인 방법과 소프트웨어적인 방법이 있는데 여기서는 소프트웨어적으로 디바운싱 하는 방법에 대해 알아보겠습니다. 소프트웨어적으로 디바운싱을 하기 위해서 b.. 2020. 12. 23.
[C#] ushort를 상위 바이트와 하위 바이트로 추출하기 이번 포스팅에서는 네트워크 통신 프로토콜에서 ushort를 상위 Byte와 하위 Byte로 나누어 값을 송수신할 경우 사용하는 방법에 대해 정리해 보도록 하겠습니다. 아래의 이미지는 LG Chem에서 생산한 Battery의 프로토콜 예시 입니다. Modbus address 40068 번지를 보면 uint16 Type으로 하나의 Value에서 상위 Byte와 하위 Byte로 나누어 Max Module Number와 Min Module Number의 값을 참조할 수 있도록 명기하고 있습니다. 따라서 우리는 Modbus에서 받은 uint16을 Byte 배열로 나누어서 상위 Byte와 하위 Byte를 추출해 Data를 사용해야 합니다. 이러한 경우에는 가장 손쉽게 BitConverter 클래스를 사용하는 방법이.. 2020. 12. 22.