문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
cublocapp:an31004:index [2017/10/16 01:03] Comfile Technology 만듦 |
cublocapp:an31004:index [2017/10/16 01:14] (현재) Comfile Technology [주의할 사항] |
||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | ====== AN31004 - 포트입력 인터럽트 확장 ====== | ||
+ | |||
+ | 큐블록에서 INT 입력 핀은 4 개밖에 없기 때문에 불편한 경우가 있습니다. MSB시리즈는 아예 INT입력 기능이 없습니다. | ||
+ | |||
+ | 외부로부터 갑자기 어떤 처리를 요구하는 입력을 처리하기 위해 INT 인터럽트 기능을 반드시 사용해야 하는 경우에, 본 어플리케이션 노트에서 소개하는 방법을 이용하면 INT 기능을 확장 (INT가 없는 경우에는 추가)하여 사용할 수 있습니다. | ||
+ | |||
+ | 바로 LADDER 인터럽트를 이용하는 것입니다. 레더는 10mS 마다 루프를 돌기 때문에 어떤 입력 핀의 변화를 감지할 수 있습니다. 입력 핀이 LOW 에서 HIGH 로 바뀌었을 때 ON LADDERINT 가 발생되도록 하는 것입니다. | ||
+ | |||
+ | ===== 결선 방법 ===== | ||
+ | |||
+ | 포트0,1에 PUSH스위치를 연결하세요. | ||
+ | |||
+ | {{ :cublocapp:an31004:onint.png?nolink |}} | ||
+ | |||
+ | ===== 소스 프로그램 ===== | ||
+ | |||
+ | 레더 쪽에는 아래와 같은 레더로직을 입력하세요. | ||
+ | |||
+ | {{ :cublocapp:an31004:an31004.zip |}} | ||
+ | |||
+ | {{ :cublocapp:an31004:an31004.png?nolink |}} | ||
+ | |||
+ | 베이직 소스는 다음과 같습니다. | ||
+ | |||
+ | <code xbasic> | ||
+ | Const Device = CB280 | ||
+ | Usepin 0,In | ||
+ | Usepin 1,In | ||
+ | On Ladderint Gosub OCCURINT | ||
+ | Set Ladder On | ||
+ | |||
+ | Do | ||
+ | Loop | ||
+ | |||
+ | OCCURINT: | ||
+ | If _D(0) = 1 Then | ||
+ | Debug "Input P0 Rising Edge",Cr | ||
+ | Elseif _D(0) = 2 Then | ||
+ | Debug "Input P1 Rising Edge ==!",Cr | ||
+ | End If | ||
+ | Return | ||
+ | </code> | ||
+ | |||
+ | ===== 동작 확인 ===== | ||
+ | |||
+ | 소스를 입력하고, 다운로드 및 실행시켜 보세요. P0, P1 포트에는 풀다운 저항이 있는 스위치입력을 연결한 뒤 스위치를 눌러보면, 디버그 터미널에 다음과 같은 멧세지가 표시됩니다. | ||
+ | |||
+ | {{ :cublocapp:an31004:onint_debug.png?nolink |}} | ||
+ | |||
+ | 스위치가 LOW 에서 HIGH 로 바뀌었을 때, ON LADDERINT 가 발생되어 처리된 것입니다. | ||
+ | |||
+ | ===== 주의할 사항 ===== | ||
+ | |||
+ | 이 방법을 사용할 때 유의할 점은 LADDER LOGIC 의 스캔타임이 10mS 라는 점입니다. 즉, 10mS 보다 짧은 펄스가 발생되는 신호라면 이 방법을 사용할 수 없습니다. 적어도 30mS 이상 되는 신호에 사용하는 것이 좋습니다. | ||
+ | |||
+ | 또한 이 방법으로, 동시에 여러 개의 입력신호를 받아들이지 못합니다. 만약 동시에 입력이 들어온다면, 레더로직상의 가장 아래쪽에 위치한 신호만 검출됩니다. 이 프로그램의 경우 P0 과 P1 이 동시에 LOW 에서 HIGH 가 되었다면 P1 인터럽트만 처리됩니다. (가능한한 꼭 필요한 1개만 사용하시를 권합니다.) 이런 점을 감안하고 사용하시기 바랍니다. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== 폴링에지에서 인터럽트 발생 ===== | ||
+ | |||
+ | 폴링에지 (HIGH 에서 LOW 로) 신호를 받아들이고 싶다면, 레더로직에서 A 접점을 B 접점으로 바꾸면 됩니다. | ||
+ | |||
+ | {{ :cublocapp:an31004:onint2.png?nolink |}} | ||
+ | |||
+ | [[cublocapp:index|큐블록 어플리케이션 노트]] | ||