Рубрики
Схемы на PIC

Связь между микроконтроллерами PIC с помощью радиочастотных модулей

В данной статье мы рассмотрим подключение к микроконтроллерам PIC радиочастотных модулей и осуществим передачу данных между ними используя радиосвязь.

В данном проекте мы будем осуществлять следующие основные операции:

  1. Мы будем подключать к микроконтроллеру PIC16F877A модуль передатчика, а к микроконтроллеру PIC18F4520 – модуль приемника.
  2. Мы будем подключать к микроконтроллеру PIC ЖК дисплей и клавиатуру 4х4.
  3. На передающей стороне мы будем передавать по радиоканалу данные, водимые на клавиатуре, а на приемной стороне мы будем принимать их и отображать на экране ЖК дисплея.
  4. Мы будем использовать микросхемы кодера и декодера для передачи 4 битных данных.
  5. Радиосвязь будет осуществляться на частоте 433 МГц с помощью дешевых радиочастотных модулей.

Для лучшего понимания материала данной статьи рекомендуем ознакомиться с проектами подключения к микроконтроллеру PIC ЖК дисплея и матричной клавиатуры 4×4.

Также на нашем сайте мы рассматривали использование радиочастотных модулей в следующих проектах:

Необходимые компоненты

  1. Микроконтроллер PIC16F877A (купить на AliExpress).
  2. Микроконтроллер PIC18F4520 (купить на AliExpress).
  3. Программатор PICkit 3 (купить на AliExpress).
  4. ЖК дисплей 16х2 (купить на AliExpress).
  5. Матричная клавиатура 4х4 (купить на AliExpress).
  6. Радиочастотный модуль (передающая и приемная часть) (купить на AliExpress).
  7. Микросхемы HT12D и HT12E (купить на AliExpress).
  8. Кварцевый генератор 20 МГц (купить на AliExpress).
  9. Конденсаторы 33 пФ (2шт.) (купить на AliExpress).
  10. Резисторы 4,7 кОм, 33 кОм, 1 МОм (купить на AliExpress).
  11. Потенциометр 10 кОм (купить на AliExpress).
  12. Макетная плата (2 шт.) и соединительные провода.

Передающий и приемный радиочастотный модули 433 МГц

Это одни из самых дешевых радиомодулей, работающих на частоте 433 МГц. Они позволяют осуществлять передачу последовательных данных по одному каналу, используя амплитудную модуляцию. Данные передаются со скоростью 4 кбит/с.

В спецификациях на данные модули указано, что модуль передатчика может запитываться от напряжения 3.5-12V и может осуществлять передачу данных на расстояния 20-200 метров. Излучаемая в эфир мощность сигнала составляет 10 мВт.

Распиновка модуля передатчика 433 МГц приведена на следующем рисунке.

Как мы видим, у модуля всего три контакта – VCC, DATA и GND. Также к модулю можно самостоятельно припаять антенну в специально отведенном для этого месте.

Приемный модуль работает от напряжения 5V dc и осуществляет прием сигнала на частоте 433,92 МГц. Его чувствительность составляет -105 дБ.

Распиновка приемного модуля приведена на следующем рисунке.

Как мы видим, он имеет 4 контакта – VCC, DATA, DATA и GND. Средние 2 контакта соединены вместе внутри модуля. Можно использовать или один контакт данных, или два, но лучше использовать два для лучшей борьбы с помехами.

Потенциометр в центре приемного модуля используется для калибровки частоты. Если связи нет, то одной из причин этого может быть несовпадение частот передающего и приемного модуля, помочь с решением этой проблемы как раз может регулировка частоты настройки приемного модуля. На приемном модуле также имеет специальное место куда можно припаять антенну.

Дальность связи зависит от величины питающего напряжения, подаваемого на передающий модуль, и от характеристик антенн обоих модулей. Для нашего проекта мы не использовали внешних антенн и запитывали передающий модуль от напряжения 5V. На дистанции 5 метров радиосвязь в нашем проекте работала отлично.

Необходимость использования кодера и декодера

Используемые нами радиочастотные модули имеют следующие недостатки:

  1. Один способ связи.
  2. Только один канал.
  3. Сильная подверженность помехам.

В связи с этими недостатками вместе с радиочастотными модулями целесообразно использование микросхем кодера и декодера, HT12D и HT12E. Буква D обозначает декодер, который будет использоваться на приемной стороне, а буква E – кодер, который будет использоваться на передающей стороне. Эти микросхемы кодера и декодера обеспечивают 4 канала для связи. Также связи с кодированием и декодированием информации уменьшается уровень шумов (помех).

Внешний вид и распиновка микросхем HT12D и HT12E приведена на следующем рисунке.

Обе микросхемы идентичны. Их контакты с A0 по A7 используются для кодирования информации. Мы можем использовать микроконтроллер для управления этими контактами и установки конфигурации микросхемы. Такая же самая конфигурация должна быть установлена и на другой стороне.

Эти 8 контактов можно подключить к Gnd или VCC или оставить не подключенными. Какую бы конфигурацию вы не выбрали в кодере, точно такую же конфигурацию необходимо использовать и в декодере. В нашем проекте мы эти 8 контактов оставили не подключенными.

Важной частью микросхем кодера и декодера являются контакты OSC, к которым подключаются резисторы для обеспечения их колебаний. Обычно для микросхемы кодера требуется резистор большего номинала (в нашем случае 1 МОм) чем для микросхемы декодера (в нашем случае 33 кОм).

Контактом данных в модуле, подключаемом к передатчику, является контакт DOUT, а подключаемым к модулю приемника – DIN.

В микросхеме HT12E контакты с AD8 по AD11 являются 4-мя входными каналами, которые после преобразования последовательно передаются с помощью радиочастотного модуля. В микросхеме декодера происходят обратные процессы – последовательные данные принимаются и декодируются и на его выходе мы получаем 4 параллельных выходных канала на контактах с D8 по D11.

Схема проекта

Схема передающей части проекта представлена на следующем рисунке.

В передающей части проекта мы использовали микроконтроллер PIC16F877A, к PORTB которого подключена матричная клавиатура, а 4 канала микросхемы кодера HT12E подключены к его последним 4 битам его PORTD.

Внешний вид собранной конструкции передающей части проекта показан на следующем рисунке.

Схема приемной части проекта представлена на следующем рисунке.

В приемной части проекта мы использовали микроконтроллер PIC18F4520, ЖК дисплей подключен к его PORTB. В данном проекте мы использовали внутренний генератор микроконтроллера PIC18F4520.

Внешний вид собранной конструкции приемной части проекта показан на следующем рисунке.

Объяснение программы для микроконтроллеров PIC

Полный код программ передающей и приемной частей проекта приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Код для передающей части

Первым делом в программе мы должны установить биты конфигурации микроконтроллера, определить ряд макросов, подключить необходимые библиотеки и задать тактовую частоту работы микроконтроллера. Контакты AD8-AD11 микросхемы кодера будут у нас обозначены как RF_TX на PORTD.

Мы будем использовать две функции, void system_init(void) и void encode_rf_sender (char data). Функция system_init используется для инициализации контактов микроконтроллера и инициализации клавиатуры, которая осуществляется из библиотеки для работы с клавиатурой (keypad library).

Порт, к которому подключена клавиатура, также настраивается в keypad.h. Мы задали режим работы его контактов на вывод данных с помощью команды TRISD = 0x00 и установили RF_TX в 0x00 по умолчанию.

В функции encode_rf_sender мы будем изменять состояние 4-х контактов микросхемы кодера в зависимости от нажатой клавиши на клавиатуре. Всего у нас будет 16 различных шестнадцатеричных значений, соответствующих 16 кнопкам клавиатуры.

В функции main мы сначала будем определять нажатую на клавиатуре клавишу с помощью switch_press_scan() и сохранять ее в соответствующей переменной. После этого мы будем кодировать данные с помощью функции encode_rf_sender() и изменять состояние контактов PORTD.

Код для приемной части

Первым делом мы установим биты конфигурации в микроконтроллере PIC18f4520, их установка будет немного отличаться от установки битов конфигурации для микроконтроллера PIC16F877A.

Также мы подключим заголовочный файл библиотеки для работы с ЖК дисплеем. Настроим соединение с D8-D11 микросхемы декодера через PORTD с помощью команды #define RF_RX PORTD. Настройка работы порта, к которому подключен ЖК дисплей, осуществляется в файле lcd.c.

Поскольку мы будем использовать внутренний генератор микроконтроллера PIC18f4520, то мы запрограммируем функцию system_init, в которой мы сконфигурируем регистр OSCON микроконтроллера чтобы настроить его внутренний генератор на частоту 8 MHz. Также мы настроим биты TRIS для контактов, к которым подключен ЖК дисплей, и микросхема декодера. Поскольку выходные контакты D8-D11 микросхемы декодера HT-12D подключены к PORTD микроконтроллера, то мы должны настроить его контакты в режим работы на ввод данных.

Итого, мы настроим регистр OSCON на частоту 8 MHz, port B сконфигурируем для работы на вывод данных, а port D – на ввод данных.

Далее в функции void rf_analysis мы будем декодировать принятое шестнадцатеричное значение, определять по нему нажатую на передающей части клавишу и отображать ее на ЖК дисплее.

Функция lcd_data вызывается из файла.

В функции main мы сначала будем инициализировать систему и ЖК дисплей. Затем мы будем принимать байт, переданный по радиоканалу с передающей части, определять по нему нажатую клавишу и выводить ее на экран ЖК дисплея.

Перед тестированием работы проекта необходимо настроить схему. Первым делом нам необходимо нажать клавишу ‘D’ на клавиатуре. Через радиоканал при этом должно передаться значение 0xF0, на ЖК дисплее должен отобразиться символ ‘D’. Иногда модули правильно настроены уже на заводе-изготовителе, но это не всегда так. Если при нажатии клавиши в нашем проекте ничего не происходит это может свидетельствовать о том, что не настроен модуль приемника. В этом случае с помощью соответствующего регулятора на модуле приемника необходимо настроить частоту его работы. После этого схема должна начать работать должным образом.

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы

Код для передающей части

Код для приемной части

Все необходимые файлы для этого проекта вы можете скачать по этой ссылке.

Видео, демонстрирующее работу проекта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *