이 모드는 하나 또는 여러개의 직사각형 펄스를 출력하는데 사용합니다. 이 모드에서 각 직사각형 펄스의 모양은 모두 동일합니다.
ST의 출력파형은 다음에 따라 달라집니다:
다음은 ST 펄스출력모드의 블록다이어그램 입니다.
명령어 | 하위 명령어 | 설명 | |||
---|---|---|---|---|---|
set | mode | output | pulse | 모드 설정: 펄스출력모드 | |
div | sec | 단위 설정: 초 | |||
ms | 단위 설정: 밀리 초 | ||||
us | 단위 설정: 마이크로 초 | ||||
output | od | 오픈 드레인(Open-Drain) | |||
pp | 푸쉬 풀(Push-Pull) | ||||
low | LOW 출력 | ||||
high | HIGH 출력 | ||||
dev | uio0 | #pin | 출력 핀 설정: uio0의 #pin | ||
invert | 0 | 정상(비 반전)출력 | |||
1 | 반전 출력 | ||||
count | [T1] [T2] | 출력 타이밍 설정 | |||
delay | [D] | 출력 지연시간 설정 | |||
repc | [N] | 출력 횟수 설정 | |||
trigger | from | st# | 트리거 대상 설정: st0 ~ st7 | ||
php | 트리거 대상 설정: 없음 | ||||
reset | - | 초기화 | |||
get | state | 상태 읽기 | |||
repc | 남은 출력 횟수 읽기 | ||||
start | - | 시작 | |||
stop | - | 정지 |
펄스출력모드에서는 출력 전 지연시간을 줄 수 있습니다. 지연시간 설정 단위는 "set div"명령에 의한 단위가 사용됩니다. 지연시간 설정 방법은 다음과 같습니다.
구분 | 문법 |
---|---|
지연시간 | pid_ioctl($pid, "set delay D"); |
펄스출력모드에서는 출력 신호의 반복횟수를 설정할 수 있습니다.
명령어 | 문법 | N의 범위 |
---|---|---|
set repc | pid_ioctl($pid, "set repc N"); | 0 ~ 10억(1,000,000,000) |
반복횟수의 기본값은 0입니다.
이 값이 0이면 반복횟수는 최대 반복횟수(10억)로 설정됩니다.
(카운트 값 설정의 예제 파형 참조)
하나의 직사각형 펄스는 high-level 신호와 low-level 신호로 구성됩니다. 펄스출력모드에서는 이 명령어에 의해 직사각형 펄스의 low-level 및 high-level 유지시간을 설정할 수 있습니다. 카운트 값의 설정 단위는 "set div"명령에 의한 단위가 사용됩니다.
명령어 | 문법 |
---|---|
set count | pid_ioctl($pid, "set count T1 T2"); |
펄스출력모드에서 설정 가능한 카운트 값 T1과 T2의 범위는 다음과 같습니다.
단위 | T1, T2 설정 가능 범위(10㎲ ~ 30분) |
---|---|
마이크로 초 | 10 ~ 1,800,000,000 |
밀리 초 | 1 ~ 1,800,000 |
초 | 1 ~ 1,800 |
이 명령은 타이머 시작 전에 설정되어야 합니다. 그렇지 않은경우 에러가 발생합니다. 아래 그림은 다음 조건하에서의 출력 파형을 보여줍니다.
명령어 | 문법 |
---|---|
set output dev D N | pid_ioctl($pid, "set output dev uio0 0"); |
ST의 출력모드를 사용하기 전에 이 명령을 이용하여 출력핀을 지정해야 합니다. 디바이스 이름(예: uio0)과 핀 번호를 D와 N에 각각 지정합니다.
이 명령은 ST 출력핀에 즉시 LOW 또는 HIGH를 출력합니다.
명령어 | 문법 | 설명 |
---|---|---|
set output low | pid_ioctl($pid, "set output low"); | ST 출력핀에 LOW출력 |
set output high | pid_ioctl($pid, "set output high"); | ST 출력핀에 HIGH출력 |
반전출력이 활성화되어 있으면 이 명령에 의한 출력 또한 반전되어 출력됩니다.
이 명령은 ST 출력핀의 출력타입을 설정합니다.
명령어 | 문법 | 설명 |
---|---|---|
set output pp | pid_ioctl($pid, "set output pp"); | 출력타입을 푸쉬-풀로 설정 |
set output od | pid_ioctl($pid, "set output od"); | 출력타입을 오픈-드레인으로 설정 |
출력타입의 기본값은 푸쉬-풀입니다.
이 명령은 반전출력의 활성화/비활성화를 설정합니다.
명령어 | 문법 | 설명 |
---|---|---|
set output invert 0 | pid_ioctl($pid, "set output invert 0"); | 반전출력 비활성화 |
set output invert 1 | pid_ioctl($pid, "set output invert 1"); | 반전출력 활성화 |
반전출력이 활성화되어 있으면:
반전출력 활성상태가 바뀌면(반전출력 활성화 또는 비활성화) ST 출력핀의 상태는 즉시 토글됩니다. 즉, 이 명령어에 의해 펄스의 형태가 결정됩니다. 펄스는 다음 두가지의 형태가 있습니다.
반전 출력 비활성화
반전출력의 기본상태는 비활성화상태 입니다.
트리거는 ST를 출력모드로 사용할 때 시작 시점을 동기화 하기 위해 사용합니다. 이 때 ST의 시작 시점은 트리거 대상과 동기화 되며 트리거 대상은 또 다른 ST만 설정이 가능합니다. ST의 트리거 설정 방법은 다음과 같습니다.
구분 | 문법 |
---|---|
ST(st0/1…) | pid_ioctl($pid, "set trigger from st0"); |
php | pid_ioctl($pid, "set trigger from php"); |
ST의 트리거 설정 기본 값은 "대상 없음(php)" 입니다.
"get repc"명령어는 ST의 남은 출력 횟수를 확인하는 명령어 입니다.
구분 | 문법 |
---|---|
남은 출력 횟수 | pid_ioctl($pid, "get repc"); |
<?php
$pid = pid_open("/mmap/st0"); // 0번 ST 열기
pid_ioctl($pid, "set div sec"); // 단위 설정: 초
pid_ioctl($pid, "set mode output pulse"); // 펄스출력모드 설정
pid_ioctl($pid, "set output dev uio0 0"); // 출력 핀 설정: uio0의 0번
pid_ioctl($pid, "set count 1 2"); // 카운트 값 설정: 1, 2
pid_ioctl($pid, "set repc 1"); // 출력 횟수 설정: 1
pid_ioctl($pid, "start"); // ST 시작
while(pid_ioctl($pid, "get state"));
pid_close($pid);
?>
펄스출력모드의 출력은 기본적으로 low 신호에서 high신호로 변화됩니다. 각 상태의 유지시간은 설정 단위와 "set count"로 설정하는 T1과 T2에 의해 결정됩니다. 위 예제를 실행했을 때 ST출력 결과는 다음과 같습니다.
<?php
$pid = pid_open("/mmap/st0"); // 0번 ST 열기
pid_ioctl($pid, "set div sec"); // 단위 설정: 초
pid_ioctl($pid, "set mode output pulse"); // 펄스출력모드 설정
pid_ioctl($pid, "set output dev uio0 0"); // 출력 핀 설정: uio0의 0번
pid_ioctl($pid, "set count 1 2"); // 카운트 값 설정: 1, 2
pid_ioctl($pid, "set output invert 1"); // 출력 반전
pid_ioctl($pid, "set repc 1"); // 출력 횟수 설정: 1
pid_ioctl($pid, "start"); // ST 시작
while(pid_ioctl($pid, "get state"));
pid_close($pid);
?>
"set output invert 1"명령을 수행하면 이후의 출력이 반전됩니다. 펄스출력도 반전이 되므로 위 예제를 실행했을 때 ST의 출력 결과는 다음과 같습니다.