- Модуль радіочастотного передавача та приймача 433 МГц:
- Потреба в кодері та декодерах:
- Необхідні компоненти:
- Кругова діаграма:
- Пояснення коду:
Привіт усім! Сьогодні в цьому проекті ми будемо взаємодіяти модуль радіочастотного приймача та передавача з мікроконтролером PIC та бездротово спілкуватися між двома різними мікроконтролерами pic.
У цьому проекті ми будемо робити наступні речі: -
- Ми використовуватимемо PIC16F877A для передавача та PIC18F4520 для розділу приймача.
- Клавіатуру та РК-дисплей ми з'єднаємо з мікроконтролером PIC.
- На стороні передавача ми будемо інтерфейсувати клавіатуру з PIC і передавати дані. На стороні приймача ми отримаємо дані бездротовим способом і покажемо, яка кнопка натиснута на РК-дисплеї.
- Ми будемо використовувати кодер і декодер IC для передачі 4-бітових даних.
- Частота прийому складе 433 МГц за допомогою дешевого RF TX-RX-модуля, доступного на ринку.
Перш ніж заглиблюватися в схеми та коди, давайте розберемося, як працює RF-модуль із мікросхемами Encoder-Decoder. Також ознайомтеся з двома статтями, щоб дізнатися, як поєднати РК-дисплей і клавіатуру з мікроконтролером PIC:
- РК-взаємодія з мікроконтролером PIC за допомогою MPLABX та XC8
- Матрична клавіатура 4x4 взаємодіє з мікроконтролером PIC
Модуль радіочастотного передавача та приймача 433 МГц:
Це модулі передавача та приймача, які ми використовуємо в проекті. Це найдешевший доступний модуль для 433 МГц. Ці модулі приймають послідовні дані в одному каналі.
Якщо ми бачимо технічні характеристики модулів, передавач розрахований на роботу 3,5-12 В як вхідна напруга, а відстань передачі становить 20-200 метрів. Він передає в протоколі AM (звукова модуляція) на частоті 433 МГц. Ми можемо передавати дані зі швидкістю 4 КБ / с з потужністю 10 мВт.
На верхньому зображенні ми бачимо висновок модуля передавача. Зліва направо штифти VCC, DATA та GND. Ми також можемо додати антену і припаяти її до точки, позначеної на зображенні вище.
Що стосується специфікації приймача, приймач має потужність 5 В постійного струму та струм спокою 4 МА як вхідний сигнал. Частота прийому становить 433,92 МГц з чутливістю -105 ДБ.
На зображенні вище ми бачимо висновок модуля приймача. Чотири штифти знаходяться зліва направо, VCC, DATA, DATA та GND. Ці два середні штирі з’єднані між собою. Ми можемо використовувати будь-який один або обидва. Але хорошою практикою є використання обох для зниження шумового зв’язку.
Крім того, одне не згадується в таблиці даних, змінний індуктор або POT в середині модуля використовується для калібрування частоти. Якщо ми не змогли отримати передані дані, існує можливість невідповідності передавальної та приймальної частот. Це радіочастотна схема, і нам потрібно налаштувати передавач на ідеальну передану частотну точку. Також, як і передавач, цей модуль також має антенний порт; ми можемо припаяти дріт у згорнутому вигляді для більш тривалого прийому.
Діапазон передачі залежить від напруги, що подається на передавач, і довжини антен з обох боків. Для цього конкретного проекту ми не використовували зовнішню антену і використовували 5 В на стороні передавача. Ми перевірили дистанцію в 5 метрів, і вона спрацювала чудово.
РЧ-модулі дуже корисні для бездротового зв'язку на великі відстані. Тут показана основна схема радіочастотного передавача та приймача. Ми зробили багато проектів за допомогою RF модуля:
- Побутова техніка, керована ВЧ
- Іграшковий автомобіль, керований Bluetooth, за допомогою Arduino
- Радіочастотні світлодіоди з дистанційним управлінням за допомогою Raspberry Pi
Потреба в кодері та декодерах:
Цей РЧ-датчик має кілька недоліків: -
- Одностороння комунікація.
- Тільки один канал
- Дуже шумові перешкоди.
Через цей недолік ми використовували мікросхеми кодера та декодера, HT12D та HT12E. D означає декодер, який буде використовуватися на стороні приймача, а E означає Encoder, який буде використовуватися на стороні передавача. Ці мікросхеми забезпечують 4 канали. Також через кодування та декодування рівень шуму дуже низький.
На зображенні вище лівий - декодер HT12D, а правий - HT12E, кодер. Обидві мікросхеми ідентичні. A0 - A7 використовується для спеціального кодування. Ми можемо використовувати виводи мікроконтролера для управління цими виводами та встановлення конфігурацій. Ті самі конфігурації повинні відповідати з іншого боку. Якщо обидві конфігурації точні та узгоджені, ми можемо отримувати дані. Ці 8 висновків можна підключити до Gnd або VCC або залишити відкритими. Незалежно від конфігурації, яку ми робимо в кодері, нам потрібно відповідати з'єднанню на декодері. У цьому проекті ми залишимо відкритими ці 8 контактів як для кодера, так і для декодера. 9 і 18-контактний - це VSS і VDD відповідно. Ми можемо використовувати штифт VT вHT12D як цілі сповіщення. Для цього проекту ми його не використовували. ТОЙ штифт для передачі включити або відключити контактний.
Важливою частиною є вивід OSC, де нам потрібно підключити резистори, щоб забезпечити коливання кодера та декодера. Декодер потребує вищих коливань, ніж декодер. Зазвичай значення резистора кодера дорівнює 1Meg, а значення декодера - 33k. Ми використаємо ці резистори для нашого проекту.
Штифт DOUT - це контактний датчик передавача радіочастот на HT12E, а DIN- штифт у HT12D використовується для підключення виводу даних RF-модуля.
У HT12E AD8 до AD11 - це чотириканальний вхід, який перетворюється і послідовно передається через РЧ-модуль, і саме зворотне відбувається в HT12D, послідовні дані отримуються та декодуються, і ми отримуємо 4-бітний паралельний вихід через 4 висновки D8 до D11.
Необхідні компоненти:
- 2 - Хлібна дошка
- 1 - РК-дисплей 16x2
- 1 - Клавіатура
- Пара HT12D і HT12E
- RF-модуль RX-TX
- 1- 10 000 попередньо встановлених
- 2 - 4.7k резистор
- 1- 1М резистор
- 1- 33k резистор
- Керамічні конденсатори 2- 33pF
- Кристал 1 - 20 МГц
- Бергстики
- Кілька одножильних проводів.
- MCU PIC16F877A
- MCU PIC18F4520
- Викрутку для управління частотним регулятором потрібно ізолювати від людського тіла.
Кругова діаграма:
Схема ланцюга на стороні передавача (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 РК-дисплея з мікроконтролером PIC тут.
Це сторона передавача -
І сторона приймача в окремій макетній дошці -
Пояснення коду:
Є дві частини коду, одна для передавача, а друга для приймача. Ви можете завантажити повний код звідси.
Код PIC16F877A для радіочастотного передавача:
Як завжди спочатку, нам потрібно встановити біти конфігурації в мікроконтролері pic, визначити деякі макроси, включаючи бібліотеки та частоту кристалів. AD8-AD11 порт кодировщик IC визначається як RF_TX на PORTD. Ви можете перевірити код для всіх, хто вказаний у повному коді, наведеному в кінці.
Ми використовували дві функції: void system_init (void) та void encode_rf_sender (char data).
System_init використовується для ініціалізації контактних і клавіатур ініціалізацій. Ініціалізація клавіатури викликається з бібліотеки клавіатури.
Порт клавіатури також визначений у keypad.h. Ми зробили PORTD як вихід, використовуючи TRISD = 0x00, а порт RF_TX - 0x00 як стан за замовчуванням.
void system_init (void) { TRISD = 0x00; RF_TX = 0x00; клавіатура_ініціалізація (); }
У encode_rf_sender ми змінили 4-контактний стан залежно від натиснутої кнопки. Ми створили 16 різних шістнадцяткових значень або станів PORTD в залежності від ( 4x4) 16 різних натиснутих кнопок.void encode_rf_sender (char char) { if (data == '1') RF_TX = 0x10; якщо (дані == '2') RF_TX = 0x20; якщо (дані == '3') …………... …...
В основній функції ми спочатку отримуємо натиснуті на клавіатурі дані за допомогою функції switch_press_scan () і зберігаємо дані у ключовій змінній. Після цього ми закодували дані за допомогою функції encode_rf_sender () та змінивши статус PORTD.
Код PIC18F4520 для радіочастотного приймача:
Як завжди, спочатку ми встановлюємо біти конфігурації в PIC18f4520. Він трохи відрізняється від PIC16F877A, ви можете перевірити код у вкладеному ZIP-файлі.
Ми включили файл заголовка РК-дисплея. Визначено підключення порту D8-D11 IC- коду декодера через PORTD за допомогою лінії #define RF_RX PORTD, з'єднання таке саме, як і в розділі Encoder. Декларація порту LCD також робиться у файлі lcd.c.
#включати
Як зазначалося раніше, ми використовували внутрішній генератор для 18F4520, ми використовували функцію system _ init, де ми налаштували регістр OSCON 18F4520 для встановлення внутрішнього генератора на 8 МГц. Ми також встановили біт TRIS для контактів РК-дисплея та контактів декодера. Оскільки HT - 12D забезпечує вихід на порти D8-D11, нам потрібно налаштувати PORTD як вхідний сигнал для отримання вихідних даних.
порожнеча system_init (порожнеча) { OSCCON = 0b01111110; // 8 МГц,, intosc // OSCTUNE = 0b01001111; // Увімкнення PLL, макс. Прескалер 8x4 = 32 МГц TRISB = 0x00; TRISD = 0xFF; // Останній 4 біт як вхідний біт. }
Ми налаштували регістр OSCON на частоті 8 МГц, також зробили порт B як вихідний і порт D як вхідний.
Нижче функція виконана з використанням точної зворотної логіки, використаної в попередньому розділі передавача. Тут ми отримуємо однакове шістнадцяткове значення з порту D, і за цим шістнадцятковим значенням ідентифікуємо, який перемикач було натиснуто в секції передавача. Ми можемо ідентифікувати кожне натискання клавіші та подати відповідний символ на РК-дисплей.
недійсний rf_analysis (непідписаний символ recived_byte) { if (recived_byte == 0x10) lcd_data ('1'); if (recived_byte == 0x20) lcd_data ('2'); якщо (отриманий_байт == 0x30) ……. ….. …… ………..
Дані lcd_data викликаються з файлу lcd.c.
В основній функції ми спочатку ініціалізуємо систему та РК-дисплей. Ми взяли змінні байти, і зберігати шістнадцяткове значення, отримане від порту D. Тоді за допомогою функції rf_analysis ми можемо надрукувати символ на РК-дисплеї.
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 постійно передається радіочастотним передавачем. Потім ми налаштовували схему приймача, поки на РК-дисплеї не з'явиться символ " D ". Іноді модуль налаштований належним чином від виробника, іноді це не так. Якщо все правильно підключено і на РК-дисплеї не натискається значення кнопки, тоді є ймовірність, що РЧ-приймач не налаштований. Ми використовували Ізольовану викрутку, щоб зменшити неправильні можливості налаштування завдяки індуктивності нашого корпусу.
Це те, як ви можете підключити РЧ-модуль до мікроконтролера PIC і обмінюватися даними між двома мікроконтролерами PIC бездротово за допомогою RF-датчика.
Ви можете завантажити повний код передавача та приймача звідси, також перевірте демонстраційне відео нижче.