안녕하세요, 오늘이 프로젝트에서는 RF 수신기 및 송신기 모듈을 PIC 마이크로 컨트롤러와 인터페이스하고 두 개의 서로 다른 pic 마이크로 컨트롤러간에 무선으로 통신 합니다.
이 프로젝트에서는 다음과 같은 작업을 수행합니다.
- 송신기 에는 PIC16F877A 를, 수신기 섹션에는 PIC18F4520 을 사용합니다.
- 키패드와 LCD를 PIC 마이크로 컨트롤러와 연결합니다.
- 송신기 측에서는 키패드를 PIC와 인터페이스하고 데이터를 전송합니다. 수신기 측에서는 데이터를 무선으로 수신하고 LCD에서 어떤 키를 눌렀는지 보여줍니다.
- 인코더 및 디코더 IC를 사용하여 4 비트 데이터를 전송합니다.
- 수신 주파수는 시중에서 구할 수있는 저렴한 RF TX-RX 모듈을 사용하여 433Mhz가 될 것입니다.
회로도와 코드로 들어가기 전에 인코더-디코더 IC를 사용하는 RF 모듈의 작동을 이해합시다. 또한 PIC 마이크로 컨트롤러와 LCD 및 키패드를 인터페이스하는 방법을 배우려면 아래의 두 문서를 참조하십시오.
- MPLABX 및 XC8을 사용하여 PIC 마이크로 컨트롤러와 LCD 인터페이스
- PIC 마이크로 컨트롤러와 인터페이싱하는 4x4 매트릭스 키패드
433MHz RF 송신기 및 수신기 모듈:
그것들은 우리가 프로젝트에서 사용하는 송신기 및 수신기 모듈입니다. 433MHz에서 사용할 수있는 가장 저렴한 모듈입니다. 이 모듈은 하나의 채널에서 직렬 데이터를 수신합니다.
우리는 모듈의 사양을 참조하면, 송신기의 정격 3.5-12V 입력 전압으로서 동작 하고, 전송 거리는 20-200 떨어져. 433MHz 주파수 에서 AM (Audio Modulation) 프로토콜로 전송 합니다. 10mW 전력 으로 4KB / S 의 속도로 데이터를 전송할 수 있습니다.
상단 이미지에서 송신기 모듈의 핀아웃을 볼 수 있습니다. 왼쪽에서 오른쪽으로 핀은 VCC, DATA 및 GND 입니다. 안테나를 추가하고 위의 이미지에 표시된 지점에 납땜 할 수도 있습니다.
들어 수신기 사양, 수신기는 점 보유 전류 5V DC 및 무부하 4mA의 입력으로한다. 수신 주파수는 433.92 MHz의 A의 -105DB의 감도.
위 이미지에서 수신기 모듈의 핀아웃을 볼 수 있습니다. 4 개의 핀은 왼쪽에서 오른쪽, VCC, DATA, DATA 및 GND 입니다. 중간 두 개의 핀은 내부적으로 연결되어 있습니다. 하나 또는 둘 다를 사용할 수 있습니다. 그러나 노이즈 커플 링을 낮추기 위해 둘 다 사용하는 것이 좋습니다.
또한 데이터 시트에 언급되지 않은 한 가지는 모듈 중간의 가변 인덕터 또는 POT 가 주파수 교정에 사용됩니다. 전송 된 데이터를 수신 할 수없는 경우 송수신 주파수가 일치하지 않을 가능성이 있습니다. 이것은 RF 회로이며 완벽한 전송 주파수 지점에서 송신기를 조정해야합니다. 또한 송신기와 마찬가지로이 모듈에는 안테나 포트도 있습니다. 더 긴 수신을 위해 와이어를 코일 형태로 납땜 할 수 있습니다.
전송 범위는 송신기에 공급되는 전압과 양쪽 안테나의 길이에 따라 달라집니다. 이 특정 프로젝트에서는 외부 안테나를 사용하지 않았고 송신기 측에서 5V를 사용했습니다. 우리는 5 미터 거리로 확인했고 완벽하게 작동했습니다.
RF 모듈은 장거리 무선 통신에 매우 유용합니다. 기본 RF 송신기 및 수신기 회로가 여기에 표시됩니다. RF 모듈을 사용하여 많은 프로젝트를 만들었습니다.
- RF 제어 가전
- Arduino를 사용한 Bluetooth 제어 장난감 자동차
- Raspberry Pi를 사용하는 RF 원격 제어 LED
인코더 및 디코더의 필요성:
이 RF 센서에는 몇 가지 단점이 있습니다.
- 단방향 커뮤니케이션.
- 하나의 채널 만
- 매우 소음 간섭.
이러한 단점으로 인해 인코더 및 디코더 IC, HT12D 및 HT12E를 사용했습니다. D 는 Receiver 측에서 사용될 디코더 를, E 는 Transmitter 측에서 사용될 Encoder 를 의미합니다. 이 IC는 4 개의 채널을 제공합니다. 또한 인코딩 및 디코딩으로 인해 노이즈 레벨이 매우 낮습니다.
위 이미지에서 왼쪽 은 디코더 인 HT12D 이고 오른쪽 은 인코더 인 HT12E 입니다. 두 IC는 동일합니다. A0 ~ A7 은 특수 인코딩에 사용됩니다. 마이크로 컨트롤러 핀을 사용하여 해당 핀을 제어하고 구성을 설정할 수 있습니다. 다른 쪽에서도 동일한 구성이 일치해야합니다. 두 구성이 정확하고 일치하면 데이터를받을 수 있습니다. 이 8 개의 핀은 Gnd 또는 VCC에 연결 하거나 열린 상태로 둘 수 있습니다. 인코더에서 수행하는 구성이 무엇이든 디코더의 연결을 일치시켜야합니다. 이 프로젝트에서는 인코더와 디코더 모두에 대해 8 개의 핀을 열어 두겠습니다. 9 핀과 18 핀은 각각 VSS와 VDD입니다. VT 핀을 사용할 수 있습니다.알림 목적으로 HT12D. 이 프로젝트에서는 사용하지 않았습니다. TE의 핀은 송신 인 에이블 또는 디스 에이블 핀이다.
중요한 부분은 저항을 연결해야하는 OSC 핀은 인코더와 디코더에 발진을 제공하는 것입니다. 디코더는 디코더보다 더 높은 진동을 필요로합니다. 일반적으로 인코더 저항 값은 1Meg 이고 디코더 값은 33k 입니다. 이 저항을 프로젝트에 사용할 것입니다.
DOUT의 핀의 RF 송신기 데이터 핀이다 HT12E 및 DIN을 에 핀 HT12D는 RF 모듈 데이터 핀을 연결하는 데 사용된다.
에서는 HT12E, AD8 에 AD11은 변환과 직렬 RF 모듈 투과 정반대 일이 일어나는 얻는다 네 채널 입력 HT12D, 수신 및 디코딩 직렬 데이터, 우리는 얻을 D11의 4 핀 D8 걸쳐 4 비트 병렬 출력.
필요한 구성 요소:
- 2-브레드 보드
- 1-LCD 16x2
- 1 – 키패드
- HT12D 및 HT12E 쌍
- RX-TX RF 모듈
- 1- 10K 사전 설정
- 2 – 4.7k 저항
- 1- 1M 저항기
- 1- 33k 저항
- 2-33pF 세라믹 커패시터
- 1 – 20Mhz 크리스탈
- Bergsticks
- 단일 가닥 와이어가 거의 없습니다.
- PIC16F877A MCU
- PIC18F4520 MCU
- 주파수 포트를 제어하는 스크류 드라이버는 인체로부터 절연되어야합니다.
회로도:
송신기 측 회로도 (PIC16F877A):
우리는 전송 목적으로 PIC16F877A 를 사용했습니다. 육각 키패드 어 크로스 접속 PORTB 및 4 개 채널 의 마지막 4 개 비트를 통해 접속 PORTD. 여기에서 4x4 매트릭스 키패드 연결에 대해 자세히 알아보십시오.
다음과 같이 핀
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
수신기 측 회로도 (PIC18F4520):
위의 이미지에서 수신기 회로가 표시됩니다. LCD를 통해 연결되어 PORTB. 이 프로젝트 에는 PIC18F4520의 내부 발진기 를 사용 했습니다. 4 개 채널은 우리가 송신기 회로에서 이전과 같은 방식으로 연결되어 있습니다. 여기에서 16x2 LCD와 PIC 마이크로 컨트롤러를 연결하는 방법에 대해 자세히 알아보십시오.
이것은 송신기 쪽입니다.
그리고 수신 측 별도의 브레드 보드에서 -
코드 설명:
코드에는 두 부분이 있습니다. 하나는 송신기 용이고 다른 하나는 수신기 용입니다. 여기에서 전체 코드를 다운로드 할 수 있습니다.
RF 송신기 용 PIC16F877A 코드:
항상 먼저 pic 마이크로 컨트롤러에서 구성 비트를 설정하고 라이브러리 및 크리스탈 주파수를 포함한 일부 매크로를 정의해야합니다. Encoder ic 의 AD8-AD11 포트는 PORTD 에서 RF_TX 로 정의됩니다. 마지막에 주어진 전체 코드에서 모든 코드를 확인할 수 있습니다.
void system_init (void) 와 void encode_rf_sender (char data)라는 두 가지 함수를 사용했습니다 .
system_init는 핀 초기화 및 키보드 초기화하는 데 사용됩니다. 키보드 초기화는 키패드 라이브러리 에서 호출됩니다.
키패드 포트는 또한 키패드에서 정의됩니다 .h. 우리는 만들어 PORTD를 사용하여 출력으로 TRISD = × 00을 하고 만든 RF_TX의 포트로 0x00으로 기본 상태로.
무효 system_init (무효) { TRISD = 0x00; RF_TX = 0x00; keyboard_initialization (); }
에서 encode_rf_sender 우리는 누른 버튼에 따라 4 핀 상태를 변경했습니다. (4x4) 16 개의 다른 버튼을 눌렀 는지 에 따라 16 개의 다른 16 진수 값 또는 PORTD 상태를 만들었습니다 .void encode_rf_sender (char data) { if (data == '1') RF_TX = 0x10; if (데이터 == '2') RF_TX = 0x20; if (data == '3') …………... …. ….
에서 주요 기능 먼저 키보드 버튼을 이용하여 데이터를 수신 가압 switch_press_scan () 함수와의 데이터를 저장하는 주요 변수. 그 후 encode_rf_sender () 함수를 사용하여 데이터를 인코딩 하고 PORTD 상태를 변경했습니다.
RF 수신기 용 PIC18F4520 코드:
항상 그렇듯이 먼저 PIC18f4520 에서 구성 비트를 설정합니다 . PIC16F877A와는 조금 다르기 때문에 첨부 된 zip 파일에서 코드를 확인할 수 있습니다.
LCD 헤더 파일을 포함했습니다. #define RF_RX PORTD 라인을 사용하여 PORTD 에서 Decoder IC 의 D8-D11 포트 연결을 정의했으며 연결은 Encoder 섹션에서 사용한 것과 동일합니다. LCD 포트 선언은 lcd.c 파일 에서도 수행 됩니다.
#포함
우리는 내부 발진기를 사용하기 전에 바와 같이 18F4520, 우리가 사용한 시스템 _ 초기화 저희 구성된 기능 OSCON에 설정된 할 18F4520의 레지스터 내부 발진기를 위한 8 메가 헤르츠. 또한 LCD 핀과 디코더 핀 모두에 대해 TRIS 비트를 설정했습니다. 마찬가지로 HT는 - 12D는 에 출력을 제공 D8-D11의 포트, 우리는 구성해야 PORTD를 출력을 수신하는 입력으로.
무효 system_init (무효) { OSCCON = 0b01111110; // 8Mhz,, intosc // OSCTUNE = 0b01001111; // PLL 활성화, 최대 프리스케일러 8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; // 입력 비트로 마지막 4 비트. }
우리 구성된 OSCON의 에 등록을 8 MHz의 도 이루어 포트 B 로서 출력 및 포트 D 로서 입력.
아래 기능은 이전 송신기 섹션에서 사용 된 정확한 역 논리를 사용하여 만들어집니다. 여기서 우리는 포트 D 에서 동일한 16 진수 값을 얻고 해당 16 진수 값으로 송신기 섹션에서 눌린 스위치를 식별 합니다. 각 키 누름을 식별하고 해당 문자를 LCD에 제출할 수 있습니다.
void rf_analysis (unsigned char recived_byte) { if (recived_byte == 0x10) lcd_data ('1'); if (수신 _ 바이트 == 0x20) lcd_data ('2'); if (recived_byte == 0x30) ……. …..…… ………..
lcd_data는 으로부터 호출 lcd.c의 파일입니다.
에서 주요 기능을 우리는 먼저 시스템과 LCD를 초기화합니다. 가변 바이트를 가져와 포트 D 에서받은 16 진수 값을 저장했습니다. 그런 다음 rf_analysis 함수 로 LCD에 문자를 인쇄 할 수 있습니다.
void main (void) { unsigned char byte = 0; system_init (); lcd_init (); while (1) { lcd_com (0x80); lcd_puts ("CircuitDigest"); lcd_com (0xC0); 바이트 = RF_RX; rf_analysis (바이트); lcd_com (0xC0); } 반환; }
그것을 실행하기 전에 우리는 회로를 조정했습니다. 먼저 키패드 의 ' D '버튼을 눌렀습니다. 따라서 0xF0 은 RF 송신기에 의해 지속적으로 전송됩니다. 그런 다음 LCD에 문자 ' D '가 표시 될 때까지 수신기 회로를 조정했습니다. 모듈이 제조업체에서 적절하게 조정되는 경우도 있고 그렇지 않은 경우도 있습니다. 모든 것이 제대로 연결되어 있고 LCD에서 버튼 누름 값 을 얻지 못하면 RF 수신기가 조정되지 않았을 가능성이 있습니다. 우리는 신체 인덕턴스로 인한 잘못된 튜닝 가능성을 줄이기 위해 절연 드라이버를 사용했습니다.
이것은 RF 모듈을 PIC 마이크로 컨트롤러에 인터페이스하고 RF 센서를 사용하여 무선으로 두 PIC 마이크로 컨트롤러간에 통신 할 수있는 방법 입니다.
여기에서 송신기 및 수신기에 대한 전체 코드를 다운로드 할 수 있으며 아래 데모 비디오 도 확인하십시오.