- 433MHz RF трансмитер и приемник модул:
- Нужда от енкодер и декодери:
- Необходими компоненти:
- Електрическа схема:
- Обяснение на кода:
Здравейте на всички, Днес в този проект ние ще свържем модула RF приемник и предавател с микроконтролера PIC и ще комуникираме между два различни микроконтролера pic.
В този проект ще направим следните неща: -
- Ще използваме PIC16F877A за предавателя и PIC18F4520 за секцията приемник.
- Ще свържем клавиатурата и LCD с PIC микроконтролер.
- От страна на предавателя ще свържем клавиатурата с PIC и ще предадем данните. От страна на приемника ще получим данните безжично и ще покажем кой бутон е натиснат на LCD дисплея.
- Ще използваме IC кодер и декодер за предаване на 4 битови данни.
- Честотата на приемане ще бъде 433Mhz, като се използва евтин RF TX-RX модул, наличен на пазара.
Преди да влезем в схемите и кодовете, нека разберем работата на RF модула с интегрални схеми за кодиране-декодиране. Прегледайте също две статии, за да научите как да свързвате LCD и клавиатурата с PIC микроконтролер:
- LCD взаимодействие с PIC микроконтролер с помощта на MPLABX и XC8
- 4x4 матрична клавиатурна връзка с PIC микроконтролер
433MHz RF трансмитер и приемник модул:
Това са модулите на предавателя и приемника, които използваме в проекта. Това е най-евтиният модул на разположение за 433 MHz Тези модули приемат серийни данни в един канал.
Ако видим спецификациите на модулите, предавателят е предназначен за работа от 3,5 до 12V като входно напрежение и разстоянието на предаване е 20-200 метра. Той предава в AM (Audio Modulation) протокол с честота 433 MHz. Можем да прехвърляме данни със скорост 4KB / S с мощност 10mW.
В горното изображение можем да видим извода на модула на предавателя. Отляво надясно щифтовете са VCC, DATA и GND. Можем също да добавим антената и да я запоим в точката, обозначена на горното изображение.
За спецификацията на приемника, приемникът има мощност от 5V dc и 4MA ток на покой като вход. Приемащата честота е 433,92 MHz с чувствителност -105DB.
На горното изображение можем да видим извода на модула на приемника. Четирите щифта са отляво надясно, VCC, DATA, DATA и GND. Тези средни два щифта са вътрешно свързани. Можем да използваме всяка една или и двете. Но е добра практика да се използват и двете за намаляване на шумовото съединение.
Също така, едно нещо не е споменато в листа с данни, променливият индуктор или POT в средата на модула се използват за калибриране на честотата. Ако не успяхме да получим предадените данни, има вероятност честотите на предаване и приемане да не съвпадат. Това е RF схема и ние трябва да настроим предавателя в перфектната предавана честотна точка. Също както този на предавателя, този модул има и антенен порт; можем да запоим тел в навита форма за по-дълго приемане.
Обхватът на предаване зависи от напрежението, подавано към предавателя и дължината на антените от двете страни. За този конкретен проект не използвахме външна антена и използвахме 5V от страната на предавателя. Проверихме с 5 метра разстояние и се получи перфектно.
RF модулите са много полезни за безжична комуникация на дълги разстояния. Тук е показана основна верига на предавателя и приемника. Направихме много проекти, използвайки RF модул:
- RF контролирани домакински уреди
- Кола с играчки, контролирана от Bluetooth, използваща Arduino
- RF дистанционно управлявани светодиоди, използващи Raspberry Pi
Нужда от енкодер и декодери:
Този RF сензор има няколко недостатъка: -
- Еднопосочна комуникация.
- Само един канал
- Много шумова намеса.
Поради този недостатък използвахме интегрални схеми за кодиране и декодиране, HT12D и HT12E. D означава декодер, който ще се използва от страната на приемника, а E означава енкодер, който ще се използва от страната на предавателя. Тези IC осигуряват 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 е четириканален вход, който се преобразува и сериално се предава чрез RF модул и точно обратното се случва в HT12D, получените и декодирани серийни данни и ние получаваме 4 битов паралелен изход през 4-пиновите D8 до D11.
Необходими компоненти:
- 2 - Дъска за хляб
- 1 - LCD 16x2
- 1 - Клавиатура
- Двойка HT12D и HT12E
- RX-TX RF модул
- 1- 10K предварително зададени
- 2 - 4.7k резистор
- 1- 1М резистор
- 1- 33k резистор
- 2- 33pF керамични кондензатори
- 1 - 20Mhz кристал
- Bergsticks
- Малко единични жици.
- PIC16F877A MCU
- PIC18F4520 MCU
- Отвертка за управление на честотния пот, трябва да бъде изолирана от човешкото тяло.
Електрическа схема:
Електрическа схема за страната на предавателя (PIC16F877A):
Използвахме PIC16F877A за предаване. На клавиатурата Hex свързана през PORTB и 4 канали, свързани през последните 4 бита на PORTD. Научете повече за свързването на 4x4 Matrix клавиатура тук.
Разкачете както следва -
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
Схема на веригата за страната на приемника (PIC18F4520):
На горното изображение е показана схемата на приемника. На дисплея е свързан през PORTB. За този проект използвахме вътрешен генератор на PIC18F4520. На 4 канали са свързани по същия начин както направихме преди в предавател верига. Научете повече за свързването на 16x2 LCD с 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 data) { if (data == '1') RF_TX = 0x10; ако (данни == '2') RF_TX = 0x20; ако (данни == '3') …………... …...
В основната функция първо получаваме натиснати данни от бутона на клавиатурата с помощта на функцията switch_press_scan () и съхраняваме данните в ключова променлива. След това кодирахме данните с помощта на функцията encode_rf_sender () и променяме състоянието на PORTD.
PIC18F4520 код за RF приемник:
Както винаги, първо задаваме конфигурационните битове в PIC18f4520. Малко по-различно от PIC16F877A, можете да проверите кода в прикачения zip файл.
Включихме заглавния файл на LCD. Дефинирана е връзката на порта D8-D11 на IC на Decoder през PORTD, използвайки #define RF_RX PORTD линия, връзката е същата, както се използва в раздела Encoder. Декларацията за LCD порта също се извършва във файла lcd.c.
#include
Както беше посочено преди да използваме вътрешен генератор за 18F4520, ние използвахме функцията system _ init, където конфигурирахме регистъра OSCON на 18F4520, за да настроим вътрешния осцилатор за 8 MHz. Също така зададохме TRIS бита както за LCD щифтове, така и за щифтове Decoder. Тъй като HT - 12D осигурява изход на портове D8-D11, трябва да конфигурираме PORTD като вход за получаване на изхода.
void system_init (void) { OSCCON = 0b01111110; // 8Mhz,, intosc // OSCTUNE = 0b01001111; // Активиране на PLL, макс. Прескалиране 8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; // Последни 4 бита като входен бит. }
Конфигурирахме регистъра OSCON на 8 MHz, също направихме порт B като изход и порт D като вход.
Функцията по-долу е направена, използвайки точната обратна логика, използвана в предишния раздел на предавателя. Тук получаваме същата шестнадесетична стойност от порта D и по тази шестнадесетична стойност идентифицираме кой ключ е бил натиснат в секцията на предавателя. Можем да идентифицираме всяко натискане на клавиш и да изпратим съответния знак на LCD дисплея.
void rf_analysis (неподписан знак recived_byte) { if (recived_byte == 0x10) lcd_data ('1'); if (recived_byte == 0x20) lcd_data ('2'); ако (recived_byte == 0x30) ……. ….. …… ………..
В lcd_data се нарича от lcd.c файла.
В основната функция първо инициализираме системата и LCD. Взехме променлива байт, и се съхранява стойността на шестнадесетичен, получена от порт D. След това чрез функцията rf_analysis можем да отпечатаме символа на LCD.
void main (void) { неподписан char байт = 0; system_init (); lcd_init (); докато (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 и да комуникирате безжично между два микроконтролера PIC, използвайки RF сензор.
Можете да изтеглите пълния код за предавател и приемник от тук, също така проверете демонстрационното видео по-долу.