마하전자기술연구소 LOGO

제품검색 고객센터053-604-2355
기술자료실

Home > 기술자료실 기술자료실

제 목 30. 범용 8자리수 주파수 카운터
첨부파일

 

                  PIC를 사용한 세그먼트(segment) 발광 다이오드 표시의 8자리수의 주파수
                  카운터입니다. PIC16F84A과 PIC16F873의 2개의 PIC를 사용해 있습니다.

 


범용 8자리수 주파수 카운터

PIC를 2개 사용해 세그먼트(segment) 발광 다이오드 표시의
8자리수 범용 주파수 카운터를 만들어 보았습니다.
여러가지 주파수 표시용으로 응용을 할 수 있습니다.





【개요】

  이 PIC로 주파수 카운터를 만들면(자) 최대 20 MHz 정도까지의 카운터의 제작이
가능하므로 용도는 상당히 많다고 생각합니다.
프리스케이라로 불리는 고속의 카운터를 추가해 주면, 수GHz까지의
주파수 카운터로 하는 일도 가능합니다.
 이번, 제작한 카운터의 외관은 사진과 같이 기판인 채입니다. 이것을 무엇인가
다른 것에 짜넣어 주파수 표시용으로 사용한다고 하는 전제로 만듭니다.
 표시부분에는 세그먼트(segment) 발광 다이오드를 사용했습니다만, 여기는 기호로 색이나
크기를 선택해 제작해 주세요.


【전체의 구성】

(2001/1/19)

 전체의 구성은 밑그림과 같이, 크게 제어 기판과 표시 기판의 2개로 구성해,
제어 기판내는, 입력 앰프, 카운터부, 표시 제어부의 3개의 부분으로부터 구성합니다.
 제어 기판내의 카운터부는, PIC에 전부를 맡겨 버리기로 해, 입력 앰프로
증폭되고 정형된 신호를 RA4 단자로부터 입력해 프로그램으로 상시 3바이트 데이터
(으)로서 카운트업합니다.
그리고 매회 카운트 결과의 3바이트 데이터를 표시 제어부에 시리얼 신호로 송신합니다.
 표시 제어부도 다른 PIC로 구성해, 카운트부로부터의 송신을 상시 감시해, 수신했다
3바이트의 바이너리 데이터를 8자리수의 BCD 데이터로 변환하고 나서, 한층 더 그것을 세그먼트(segment)
데이터로 변환해 표시부에 출력합니다.
 이 데이터 수신과 병행해 세그먼트(segment) 발광 다이오드의 다이나믹점등 제어를 실행
합니다. 이 때의 표시 자리수는 설정 스윗치에 의해 4자리수, 6자리수, 8자리수의 3 종류의 지정이
할 수 있도록(듯이) 합니다.








【카운터부의 구성】

카운터부의 동작 타이밍은 밑그림과 같이 합니다. 우선 PIC를 주파수 카운터로서 동작
시키기 위해서(때문에)는, 고정밀도의 게이트 신호를 필요로 합니다. 이 단위 신호가 되는 게이트 신호를
1초와 0. 1초의 펄스로 해, 이 펄스 그 자체도 PIC의 프로그램으로 생성해 RA4에
출력합니다. RA4는 와이어드 AND를 구성할 수 있게 되어 있기 때문에, RA4의 신호가
High의 사이만 RA4의 내부 회로를 통해 타이머 0에의 입력 신호가 되어, RA4가 Low때는,
RA4의 내부에서 타이머 0에의 입력은 강제적으로 0 레벨인 채되기 때문에, 카운트 입력
신호는 들어가지 않게 됩니다.





 여기서 게이트 신호(RA4 Gate)는, 그림과 같이 게이트 신호가 High의 사이에 입력된 펄스만을
카운트 하게 되기 때문에, 정확한 단위시간만 High로 하는 것이 필요하게 됩니다.
이 단위시간에는 표시가 주파수로 직독 할 수 있도록(듯이) 하기 위한(해), 1초와 0. 1초의 2 종류를
준비하기로 하겠습니다. 그리고 이 시간 펄스를 프로그램의 명령 실행을 반복하는 것으로
생성하기 위해(때문에), 명령 실행 시간을 고정밀도로 할 필요가 있습니다.
 거기서, 이 명령 실행 시간의 토대가 되고 있는 PIC의 클록 신호로서 고정밀도의 크리스탈
발진기인 12.8 MHz의 TCXO를 사용합니다.
 이 고정밀도의 TCXO를 PIC의 클락으로 하면, PIC의 명령 실행 시간의 1 사이클은 정확하게
4/12.8 MHz=312.5 nsec가 되기 때문에, 명령의 실행 사이클수를 3,200,000 사이클과
하면 합계 명령 실행 시간은 정확하게 1초가 됩니다. 320,000 사이클로 0.1초입니다.
이 펄스 작성 부분의 명령군의 최초와 최후로 RA4의 High/Low의 제어를 하면 고정밀도의
1초, 0. 1초의 게이트 시간으로 할 수가 있습니다.

 입력된 신호의 주파수를 카운트 하는 카운터로서는, 밑그림과 같이 PIC 내부의 타이머 0의
하드웨어 카운터 1바이트와 프로그램 변수 2바이트를 연속한 3바이트의 카운터로서
프로그램으로 카운트업합니다.
이 타이머 0을 사용하는 것으로 고속의 카운트를 하는 것이 가능해집니다. 그러나 타이머 0의 카운터는
1바이트분 밖에 없기 때문에, 프로그램으로 2바이트째, 3바이트째의 카운터를 동작시킵니다.
따라서, 이 카운트 프로그램은 상시 동작 하게 할 필요가 있으니까, 게이트 시간 작성의
명령군안에 포함하지 않으면 안 되게 됩니다. 그 때문에 프로그램의 흐름이 어느 루트를
실행해도 같은 실행 시간이 되도록(듯이) 카운트업 프로그램을 작성할 필요가 있습니다.







【데이터 전송】

 카운터부와 표시 제어부의 PIC간의 데이터 전송 방법을 설명합니다.
카운터부에서 카운트 한 3바이트의 데이터를 표시 제어부에 보냅니다만, 이 전송을 위해서(때문에)
사용하는 PIC의 핀수를 줄이기 (위해)때문에 시리얼 통신으로 보내기로 하겠습니다.
시리얼 통신의 방식은 조보동기식이라고 하는 방식을 모델로 하는 것으로 해, 데이터 포맷
(을)를 밑그림과 같이 합니다.
이것으로 PIC간을 서로 입출력 핀을 1 핀씩만으로 통신을 할 수가 있습니다.



 송신측이 되는 카운터부의 PIC는, 우선 시작 비트를 송출 후, 상위 아르바이트의 상위 비트로부터
순서에 1비트씩 출력해, 마지막에 stop bit를 송출해 완료합니다.
1비트의 시간폭은, 프로그램으로 작성하기 때문에 충분히의 시간폭을 확보하기 위해(때문에) 100μsec로 해
전체가 3 msec 정도로 보낼 수 있는 것처럼 합니다.
이렇게 하면(자) 상시는 항상 High 상태가 되고 있어, 송신이 개시되면(자) 반드시 처음은 Low가 됩니다
(으)로부터 수신측은 이 타이밍을 검출하도록(듯이) 합니다.
 수신측이 되는 표시 제어부의 PIC에서는, 상시, 다이내믹스 왈가닥 표시 제어를 하면서, 그 사이
그리고 시작 비트의 수신을 감시해, 만약 시작 비트를 검출하면(자) 일단 표시 제어를 쉬어
데이터 수신을 실행해 내부의 표시 데이터를 갱신합니다. 데이터 수신이 완료하면(자) 3바이트의
바이너리 데이터를 8자리수의 BCD 데이터로 변환해 격납해 둡니다.


【전체 회로 구성】

이번은 표시의 보기 쉬움을 생각해, 표시 소자로서 세그먼트(segment) 발광 다이오드를 사용하는 것
(으)로 했습니다. 거기서 표시에 음극 코먼의 세그먼트(segment) 발광 다이오드를 사용했다고 하면(자),
PIC로부터의 제어 신호는, 세그먼트(segment) 드라이브용의 7개와 각 형드라이브용의 8개의 제어 신호가
필요합니다.
 이 필요한 핀수로부터 PIC16F873를 사용하기로 했습니다. 출력의 방법으로서는, 우선
세그먼트(segment)의 표시 드라이브입니다만, 이것은 20 mA정도의 전류의 드라이브이므로, PIC의
입출력 핀으로 25 mA까지는 직접 제어가 가능한 범위이기 때문에, 포토 B로부터 전류 제한 저항을
경유해 직접 세그먼트(segment) 드라이브를 실시하는 것으로 합니다.
 이것에 대해 각 형의 코먼의 드라이브는, 전류가 각 세그먼트(segment)의 화가 흐르기 때문에,
최대 160 mA로도 되어 버리기 때문에, 트랜지스터에 의한 드라이브의 강화가 필요합니다.
 이러한 드라이브용 트랜지스터를 몇개인가 정리한 IC가 나와 있기 때문에 이것을 이용해
실장을 간단화합니다. 이번 이용한 IC는 MOS FET 모듈로 수A까지 제어 가능한 것
그렇지만, 이렇게 큰 부하는 아닙니다만 소지의 관계로 사용했습니다.
결국 표시 제어의 부분은, 이것들을 조합하면(자), 밑그림과 같이 접속하면, 최대 8자리수의
세그먼트(segment) 발광 다이오드를 프로그램으로 다이나믹 드라이브 해 수치를 표시할 수 있게 됩니다

이것들과 입력 앰프부, 전원부를 더해 전체의 회로는 밑그림과 같이 되었습니다. 밑그림은 확대
표시를 할 수 있습니다.






WinDraft, WinBoard용의 회로도와 패턴도는 아래와 같이로부터 다운로드할 수 있습니다.

  ★ 범용 8자리수 주파수 카운터 회로도
  ★ 범용 8자리수 주파수 카운터 패턴도



【카운터부의 프로그램】

 카운터부에는 PIC16F84A를 사용해, 프로그램의 전체의 흐름은 밑그림의 플로차트(flow chart)인 듯
(으)로 합니다.
 우선 전체의 흐름은 0.1초나 1초에 주파수 카운트를 해, 그 결과를 표시 제어부에 시리얼 전송
해 또 원래대로 돌아간다고 하는 큰 흐름이 됩니다.
 이 주파수 카운트 하기 직전으로, 포토 A의 설정 스윗치의 내용을 입력해, 게이트가 0.1초인가
1초인가의 판정과 타이머의 프리스케이라를 사용하는, 사용하지 않는 것 판정도 합니다. 그리고 그 결과로
분기 합니다.
 각각의 카운트 루틴 중(안)에서는, 타이머 0의 오버플로우를 상시 감시해, 오버
플로우 하면(자) BYTE1, BYTE2를 카운트업하는 것을 게이트 시간동안만 반복합니다.
 게이트 시간이 종료하면(자), 카운트 결과를 게이트 시간, 프리스케이라의 유무에 의해 보정해
(으)로부터, 시리얼 전송으로 출력합니다.



 ★ 카운터부의 프로그램 원시 파일


【표시부의 프로그램】

 표시 제어부는 PIC16F873라고 하는 조금 큰 PIC를 사용하고 있습니다. 이 PIC는 단지
입출력 핀이 많을 뿐만 아니라, A/D변환 모듈이나 펄스폭변조 모듈 등
수많은 기능이 내장되고 있습니다.
 그러나, 이번은, 이것들은 사용하지 않고, 단지 디지탈 입출력만을 사용하고 있습니다.
 우선 해야 하는 것은, 최대 8자리수의 세그먼트(segment) 발광 다이오드의 다이나믹
점등 제어이기 때문에, 1자리수당 약 2 msec에서의 표시 제어를 멈추는 일 없이 반복할 필요가
있습니다. 따라서 다른 처리는 모두 이 표시 제어의 반복 루프 중(안)에서 처리한다
필요가 있습니다.
 이 반복 루프에서는, 표시를 위해서(때문에), 우선 지정된 자리수의 상위자리수로부터 순서에
BCD 데이터를 세그먼트(segment) 데이터로 변환해 포토 B에 출력해, 해당하는 자리수의 1비트를
포토 C에 출력해 약 2 msec의 사이만 점 켜게 합니다. 그리고 일단 포토 C를 클리어 해
전형OFF로 하면(자), 다음의 자리수의 제어로 옮깁니다. 이것을 전형반복가, 스윗치의
지정에 의해, 자리수를 4자리수 표시, 6자리수 표시, 8자리수 표시와 설정할 수 있도록(듯이) 했으므로,
도중에 스윗치 상태를 확인해 불필요한 자리수의 제어를 스킵 합니다.
 표시를 약 2 msec의 사이점 켜게 하기 위해서(때문에) 타이머로 기다립니다만, 이전에 상시 카운터부
(으)로부터의 데이터 송신을 체크합니다. 즉 시작 비트가 왔는지 어떠했는지를 포토 RB0를
입력해 확인해, 만약 시작 비트의 수신을 확인할 수 있으면(자), 즉 Low가 되고 있으면(자),
계속되는 데이터 3바이트를 각 비트 100μsec마다 입력해 수신하는 처리를 실행합니다.
이전 약 3 msec 정도 표시 시간이 연장되어 버립니다만, 실제의 표시상은, 그저
순간 조금씩 날릴 뿐입니다로부터 문제는 없을 것입니다.
 수신이 완료하면(자), 거기서 곧 바이너리로부터 BCD8자리수에의 변환을 실행해 표시 데이터를
갱신해 버립니다. 따라서 다음의 자리수 표시로부터 새로운 데이터로 표시하게 됩니다.
 이 통상의 표시 제어 이외에, 전형을 정상적으로 표시할 수 있는지 어떤지를 확인하기 위한
테스트 모드를 준비했습니다. DIP 스윗치의 4를 ON로 하면 테스트 모드로 해,
이것으로 테스트 표시를 개시합니다. 테스트 내용은 단순하게 0에서 9까지의 전형 같은 숫자의 표시를
약 1초간 반복한다고 하는 것을 실행합니다. 테스트동안은 카운터부로부터의 데이터 수신도
실행하지 않게 합니다.



  ★ 표시부의 소스 프로그램




【표시 기판】

 세그먼트(segment) 발광 다이오드를 사용한 표시 기판을 조립합니다.
이번 사용하는 세그먼트(segment) 발광 다이오드는 음극 코먼 타입입니다.
표시부 분의 회로도는 밑그림과 같이 됩니다. 간단한 회로이므로 문제는 없을 것입니다.
소수점도 표시할 수 있도록(듯이) 점퍼로 접속할 수 있도록(듯이) 연결기에 단자를 내 둡니다.
밑그림은 확대할 수 있습니다.





【제작】

조립에는 전용의 프린트 기판 제작으로부터 시작합니다. 패턴도는 아래와 같이이므로
다운로드해 WinBoard로 사용해 주세요.
 조립에는, IC는 모두 IC소켓을 사용합니다. 이러한 부품을 실장하기 전에,
점프선을 저항등의 리드 선의 잘라 쓰레기를 사용해 실장합니다.
그리고는, 특별히 실장이 어려운 부품은 없기 때문에, 조립은 간단하게 할 수 있으면(자)
생각합니다. 아래와 같이 사진이 기판의 조립 완료 후 상태입니다.







전원의 레귤레이터에게는 방열기를 붙였습니다.

접속 케이블은 기판에 직접은 다 붙이고 했습니다.
소수점은 적당한 자리수에 점프선으로 배선합니다.


목록보기

www.1chip.com, www.1chip.co.kr
www.micom114.com
자료실바로가기

대구광역시 북구 산격2동 1629 산업용재관 10동 13호 (2층) / Tel. 053-604-2355 / Fax. 053-383-2354 / E-mail. maha@paran.com