주파수는 초당 사이클 수로 정의됩니다. 총 시간 'T'의 역수로 정의 할 수도 있습니다. 이 프로젝트에서는 8051 마이크로 컨트롤러의 포트 3.5에 들어가는 펄스 수 를 세어 16 * 2 LCD 디스플레이에 표시합니다. 따라서 기본적으로 8051의 포트 3.5에서 신호 의 주파수 를 측정했습니다. 여기서는 AT89S52 8051 칩을 사용했으며 555 IC는 데모 용 샘플 펄스를 생성하기 위해 불안정 모드에서 사용됩니다. 이전에 Arduino를 사용하여 주파수 카운터를 구축했습니다.
필요한 구성 요소:
- 8051 마이크로 컨트롤러 (AT89S52)
- 16 * 2 LCD 디스플레이
- 주파수 소스 (555 타이머)
- 전위차계
- 전선 연결
회로도:
주파수 측정에 8051의 TIMER 사용:
8051 마이크로 컨트롤러는 128 바이트 온칩 RAM, 4K 바이트 온칩 ROM, 2 개의 타이머, 1 개의 직렬 포트 및 4 개의 8 비트 포트가있는 8 비트 마이크로 컨트롤러입니다. 8052 마이크로 컨트롤러는 마이크로 컨트롤러의 확장입니다. 포트 3.5를 카운터로 구성하려면 TMOD 레지스터 값을 0x51로 설정합니다. 아래 그림은 TMOD 레지스터를 보여줍니다.
문 | C / T | M1 | M0 | 문 | C / T | M1 | M2 |
타이머 1 | 타이머 0 |
GATE- GATE가 설정되면 INTx 핀이 HIGH이고 TRx 제어 핀이 설정된 경우에만 타이머 또는 카운터가 활성화됩니다. GATE가 해제되면 TRx 제어 비트가 SET 될 때마다 타이머가 활성화됩니다.
C / T – C / T = 0 일 때 타이머로 작동합니다. C / T = 1이면 Counter 역할을합니다.
M1 및 M0 은 작동 모드를 나타냅니다.
TMOD = 0x51 인 경우 timer1은 카운터 역할을 하며 mode1 (16bit)에서 동작합니다.
16 * 2 LCD 는 신호의 주파수를 헤르츠 (Hz)로 표시하는 데 사용됩니다. 16x2 LCD를 처음 사용하는 경우 여기에서 16x2 LCD의 핀과 해당 명령에 대한 자세한 내용을 확인하십시오. LCD와 8051을 연결하는 방법도 확인하십시오.
주파수 소스로 555 타이머:
주파수 소스는 사각 파를 생성해야하며 최대 진폭은 5V 로 제한됩니다. 8051 마이크로 컨트롤러의 포트는 5V보다 큰 전압을 처리 할 수 없기 때문입니다. 측정 할 수 있는 최대 주파수 는 TH1 및 TL1 레지스터 (각각 8 비트)의 메모리 제한으로 인해 655.35KHz 입니다. 100 밀리 초 안에 TH1 및 TL1은 최대 65535 카운트를 저장할 수 있습니다. 따라서 측정 할 수있는 최대 주파수는 65535 * 10 = 655.35 KHz 입니다.
이 8051 주파수 측정기 프로젝트 에서는 가변 주파수 사각 파를 생성하기 위해 불안정 모드에서 555 타이머를 사용하고 있습니다. 555 IC에 의해 생성 된 신호의 주파수는 이 프로젝트의 마지막 부분에 제공된 비디오 에서 설명 된 것처럼 전위차계를 조정하여 변경할 수 있습니다.
이 프로젝트에서 Timer1 (T1)은 100 밀리 초 동안 8051 마이크로 컨트롤러의 포트 3.5에 들어오는 펄스 수를 계산합니다. 카운트 값은 각각 TH1 및 TL1 레지스터에 저장됩니다. TH1과 TL1 레지스터의 값을 결합하기 위해 다음 공식이 사용됩니다.
펄스 = TH1 * (0x100) + TL1
이제 '펄스'는 100 밀리 초 단위의 사이클 수를 갖게됩니다. 그러나 신호의 주파수는 초당 사이클 수로 정의됩니다. 주파수로 변환하기 위해 다음 공식이 사용됩니다.
펄스 = 펄스 * 10
작업 및 코드 설명:
완전한 C 프로그램은 이 주파수에 대한 미터는이 프로젝트의 끝에 제공됩니다. 코드는 의미있는 작은 청크로 분할되어 아래에 설명되어 있습니다.
8051 마이크로 컨트롤러와 인터페이스하는 16 * 2 LCD의 경우 16 * 2 LCD가 8051 마이크로 컨트롤러에 연결되는 핀을 정의해야합니다. 16 * 2 lcd의 RS 핀은 P2.7에 연결되고 16 * 2 lcd의 RW 핀은 P2.6에 연결되고 16 * 2 lcd의 E 핀은 P2.5에 연결됩니다. 데이터 핀은 8051 마이크로 컨트롤러의 포트 0에 연결됩니다.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
다음으로 프로그램에서 사용되는 몇 가지 기능 을 정의 해야합니다. 지연 기능은 지정된 시간 지연을 생성하는 데 사용됩니다. Cmdwrt 기능은 16 * 2 LCD 디스플레이에 명령을 보내는 데 사용됩니다. datawrt 기능은 16 * 2 LCD 디스플레이로 데이터를 보내는 데 사용됩니다.
무효 지연 (unsigned int); void cmdwrt (부호없는 문자); void datawrt (unsigned char);
이 코드 부분에서는 16 * 2 lcd로 명령을 보냅니다. 디스플레이 지우기, 커서 증가, 커서를 첫 번째 줄의 시작으로 강제와 같은 명령 은 지정된 시간 지연 후 하나씩 16 * 2 LCD 디스플레이로 전송됩니다.
for (i = 0; i <5; i ++) {cmdwrt (cmd); 지연 (1); }
코드의이 부분에서 timer1은 카운터로 구성되고 작동 모드는 모드 1로 설정됩니다.
Timer0은 타이머로 구성되고 작동 모드는 모드 1로 설정됩니다. 타이머 1은 펄스 수를 계산하는 데 사용되고 타이머 0은 시간 지연을 생성하는 데 사용됩니다. TH1 및 TL1 값은 0으로 설정되어 계산이 0부터 시작되도록합니다.
TMOD = 0x51; TL1 = 0; TH1 = 0;
코드의이 부분에서 타이머는 100 밀리 초 동안 실행됩니다. 지연 기능을 사용하여 100 밀리 초의 지연이 생성 됩니다. TR1 = 1은 타이머 시작을위한 것이고 TR1 = 0은 100 밀리 초 후에 타이머를 중지하기위한 것입니다.
TR1 = 1; 지연 (100); TR1 = 0;
코드의이 부분에서는 TH1 및 TL1 레지스터에있는 카운트 값을 결합한 다음 10을 곱하여 1 초에 총 사이클 수 를 얻습니다.
펄스 = TH1 * (0x100) + TL1; 펄스 = 펄스 * 10;
코드의이 부분에서 주파수 값은 16 * 2 LCD 디스플레이에 쉽게 표시 할 수 있도록 단일 바이트 로 변환 됩니다.
d1 = 펄스 % 10; s1 = 펄스 % 100; s2 = 펄스 % 1000; s3 = 펄스 % 10000; s4 = 펄스 % 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (펄스 -s4) / 100000;
이 부분에서 주파수 값 의 개별 자릿수는 ASCII 형식으로 변환되어 16 * 2 LCD 디스플레이에 표시됩니다.
If (pulses> = 100000) datawrt (0x30 + d6); if (펄스> = 10000) datawrt (0x30 + d5); if (펄스> = 1000) datawrt (0x30 + d4); if (펄스> = 100) datawrt (0x30 + d3); if (펄스> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
이 코드 부분에서는 16 * 2 LCD 디스플레이에 명령을 보냅니다. 이 명령은 8051 마이크로 컨트롤러의 포트 0에 복사됩니다. RS는 명령 쓰기를 위해 낮게 설정됩니다. 쓰기 작업을 위해 RW가 낮게 설정됩니다. 명령 쓰기 작업을 시작하기 위해 활성화 (E) 핀에 하이에서 로우 펄스가 적용됩니다.
void cmdwrt (unsigned char x) {P0 = x; rs = 0; rw = 0; en = 1; 지연 (1); en = 0; }
이 코드 부분에서는 16 * 2 LCD 디스플레이로 데이터를 전송합니다. 데이터는 8051 마이크로 컨트롤러의 포트 0에 복사됩니다. RS는 명령 쓰기를 위해 높게 설정됩니다. 쓰기 작업을 위해 RW가 낮게 설정됩니다. 활성화 (E) 핀에 하이에서 로우 펄스가 적용되어 데이터 쓰기 작업을 시작합니다.
void datawrt (unsigned char y) {P0 = y; rs = 1; rw = 0; en = 1; 지연 (1); en = 0; }
이것이 8051 마이크로 컨트롤러를 사용하여 신호의 주파수를 측정하는 방법 입니다. 아래의 전체 코드와 데모 비디오를 확인하십시오.