사용자 도구

사이트 도구

English

cublocapp:an31009:index

AN31009 - 레더 타이머를 이용한 키입력 채터링 제거

큐블록 베이직 언어 프로그래밍시 키입력 체터링 제거를 위한 keyin 명령어가 있습니다.

Const Device = CB280
Do
If Keyin(24,1000) = 0 Then
 High 16
Else
 Low 16
Endif
Loop

이런식으로 사용하며, 24번 포트가 1초동안 입력이 안정되었을때, 비로소 입력을 받아들이는 구조입니다.

실제로 keyin 은 아래와 같이 번역됩니다.

Function Keyin(__pt As Byte, __dl As Integer) As Byte
   Dim __dl1 As Integer
   For __dl1 = 0 To __dl
      If In(__pt) = 1 Then
         Keyin = 1
         Exit Function
      End If
   Next
   Keyin = 0
End Function

즉 for..next 문을 돌면서 입력이 안정될 때 까지 기다리는 것입니다. 이 방법은 프로그램의 흐름을 방해합니다. 키 하나를 입력받기 위해서 한곳에 오래 머물러야 한다는 단점이 있습니다.

한 10개의 키를 입력받는 상황이라고 생각해보세요. 그러면 각각 1초씩 10초가 걸립니다. 도저히 쓸 수가 없는 상황이 되고 맙니다.

채터링을 하드웨어적으로 제거하려면 각각의 키마다 콘덴서와 저항을 붙어주어야 합니다. 이 방법은 회로가 복잡해지고, 추가비용이 들어가기 때문에 별로 권하고 싶지 않습니다.

그럼 하드웨어적으로 저항/콘덴서를 붙이지 않고, 흐름도 방해하지 않으면서 채터링을 제거할 수는 없을까요?

레더로직과의 협동

레더로직의 타이머기능을 이용하면 됩니다.

레더로직의 on타이머는 입력이 일정시간 유지되었을때만 출력이 붙는 기능인데, 채터링제거용으로 많이 사용합니다.

다음과 같이 프로그래밍하세요.

Const Device = CB280
Usepin 24,In
Set Ladder On
Do
 If _M(0) = 1 Then
  High 16
 Else
  Low 16
 Endif
Loop

베이직에서는 M0 만 검사하기 때문에, 흐름을 방해하지 않습니다.

레더에서 P24 입력이 1초동안 유지 되었을때 T0 를 ON 해줍니다. 그걸 M0로 옮겨주기만 하는 것입니다.

눈으로 효과를 확인하기위해서 1초간 채터링을 제거하는걸로 했지만, 실제로는 100밀리초 정도이면 충분합니다.

그러면 TON 명령어 부분을 TON T0,10 으로 사용하시면 됩니다.

다음은 위 프로그램을 실행한 동영상입니다. 키를 여러번 짧게 누르는 것은 일부러 채터링을 재현해 본 것입니다. 이렇게 짧게 누르는 것은 입력으로 인식되지 않습니다. 길게 1초이상 누르고 있어야 비로소 입력으로 인식됩니다.

한단계 뒤로가기

cublocapp/an31009/index.txt · 마지막으로 수정됨: 2017/10/16 00:05 저자 Comfile Technology