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

Связь двух микроконтроллеров AVR ATmega8 через радиочастотные модули

Беспроводная связь может значительно расширить возможности микроконтроллеров по управлению какими либо процессами, поэтому изучение взаимодействия микроконтроллеров с радиочастотными модуля является весьма актуальной задачей для специалистов в этой области. В самом простом случае беспроводная связь на короткие расстояния организуется с помощью светодиодов, работающих в инфракрасном диапазоне, в более сложных случаях возможно использование ESP8266 для контроля по HTTP протоколу, но есть много и других возможностей по организации беспроводной связи. В данной статье мы рассмотрим вариант организации беспроводной связи между двумя микроконтроллерами ATmega8 (семейство AVR) с помощью радиочастотных модулей, работающих на частоте 433 МГц.

В этом проекте мы рассмотрим следующие вещи:

  1. Мы будем использовать микроконтроллеры ATmega8 для управления радиочастотными модулями на стороне передачи и на стороне приема.
  2. Для старта передачи данных мы будем нажимать кнопку на стороне передачи, а после успешного приема данных мы будем зажигать светодиод.
  3. Мы будем использовать кодер и декодер на интегральной схеме чтобы передавать 4 битные данные.
  4. Мы будем использовать дешевые радиочастотные модули, работающие на частоте 433 МГц, которые можно легко купить в магазине.

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

Аппаратное обеспечение

  1. Микроконтроллер ATmega8 (2 шт.) (купить на AliExpress).
  2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  3. 10-пиновый FRC кабель.
  4. Микросхемы HT12D и HT12E (купить на AliExpress).
  5. Макетная плата (2 шт.).
  6. Светодиод (2 шт.) (купить на AliExpress).
  7. Кнопка.
  8. Радиочастотный модуль (передающая и приемная часть) (купить на AliExpress).
  9. Резисторы 10 кОм, 47 кОм, 1 Мом (купить на AliExpress).
  10. Соединительные провода.
  11. Источник питания с напряжением 5 Вольт

Программное обеспечение

CodeVisionAVR (или другое подобное, например, Atmel Studio)
SinaProg – для загрузки программы в микроконтроллер ATmega8 с помощью программатора USBASP

Скачать CodeVisionAVR — http://www.hpinfotech.ro/cvavr_download.html.

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

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

В спецификации на эти модули указано, что передатчик работает при входном напряжении 3.5-12В и способен передавать данные на дистанцию 20-200 метров. Он использует амплитудную модуляцию (АМ) на частоте 433 МГц. С его помощью можно передавать данные со скоростью 4 Кбит/с с выходной мощностью 10 мВт.

На рисунке выше представлена распиновка контактов передающего модуля. Слева направо мы видим такие контакты как VCC (питание), DATA (данные) and GND (земля). Мы также можем добавить антенну и присоединить (припаять) ее к точке крепления, обозначенной на рисунке.

Приемный модуль работает при напряжении питания 5В и имеет ток покоя 4 мА. Частота приема — 433.92 МГц, чувствительность – минус 105 дБ.

На представленном рисунке можно увидеть распиновку контактов приемного модуля. Слева направо это такие контакты как VCC, DATA, DATA and GND. Средние два контакта (DATA) соединены внутри. Можно использовать только один из этих контактов или сразу два. Но лучше использовать сразу два чтобы уменьшить уровень шумов.

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

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

Работа схемы

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

В схеме необходимо сделать следующие соединения:

  • Pin D7 of atmega8 -> Pin13 HT12E.
  • Pin D6 of atmega8 -> Pin12 HT12E.
  • Pin D5 of atmega8 -> Pin11 HT12E.
  • Pin D4 of atmega8 -> Pin10 HT12E.
  • Кнопка to Pin B0 of Atmega.
  • Резистор 1 МОм между pin15 и 16 of HT12E.
  • Pin17 of HT12E к контакту данных передающего модуля.
  • Pin 18 of HT12E to 5V.
  • GND pin 1-9 and Pin 14 of HT12E and Pin 8 of Atmega.

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

В схеме необходимо сделать следующие соединения:

  • Pin D7 of atmega8 -> Pin13 HT12D.
  • Pin D6 of atmega8 -> Pin12 HT12D.
  • Pin D5 of atmega8 -> Pin11 HT12D.
  • Pin D4 of atmega8 -> Pin10 HT12d.
  • LED to Pin B0 of Atmega.
  • Pin14 of HT12D к контакту данных приемного модуля.
  • Резистор 47 кОм между pin15 и 16 of HT12D.
  • GND pin 1-9 of HT12D and Pin 8 of Atmega.
  • Светодиод к pin 17 of HT12D.
  • 5V to pin 7 of Atmega and pin 18 of HT12D.

Общий вид конструкции приведен на следующем рисунке:

Создание проекта для Atmega8 в программной среде CodeVision

Необходимо выполнить следующую последовательность действий.

Шаг 1. Создайте новый проект в CodeVision, выбрав пункт меню File -> New -> Project. В появившемся диалогом окне нажмите Yes.

Шаг 2. Откроется CodeWizard. Кликните в ней на первой опции, то есть AT90, затем нажмите OK.

Шаг 3. Выберите свой микроконтроллер, в нашем случае им будет Atmega8.

Шаг 4. Кликните на Ports (порты). В нашем проекте на передающей стороне мы будем подсоединять кнопку на вход и 4 линии будем использовать на выход. То есть мы должны сконфигурировать 4 контакта Atmega8 на выход. Кликните на Port D, сконфигурируйте в нем биты 7, 6, 5 и 4 на выход.

Шаг 5. Выберите Program -> Generate, Save and Exit. Теперь более половины вашей работы по программированию микроконтроллера Atmega8 можно считать выполненной.

Шаг 6. Создайте новую папку на рабочем столе чтобы записывать туда наши файлы.

У нас будет 3 диалоговых окна (будут появляться последовательно одно за другим) для сохранения наших файлов.

Сделайте то же самое (что и на представленном рисунке) с двумя другими диалоговыми окнами – то есть сохраните предлагаемые ими файлы.

После этого рабочая область программы будет выглядеть примерно следующим образом:

Теперь большая часть работы по программированию микроконтроллера Atmega8 нами выполнена с использованием такой удобной программной среды как CodeVision. Теперь нам необходимо только дописать несколько строк кода для передающей и приемной части чтобы закончить проект.

Для приемной стороны повторите рассмотренные шаги, отличие будет состоять только в том, чтобы сконфигурировать контакт B0 PortB на выход потому что мы будем подключать к нему светодиод.

Пояснение части кода программы

Мы напишем программу для включения/выключения светодиода удаленно, использую связь через радиочастотные модули. В этой части статьи мы рассмотрим лишь ключевые особенности кода программы, текст всей программы будет приведен в конце статьи.

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

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

#include <io.h>
#include <delay.h>
void main(void)
{

Теперь рассмотрим главный цикл в конце тела программы. В этом цикле While мы будем передавать 0x10 байт на PORTD когда кнопка нажата и байт 0x20 когда кнопка не нажата. Можно использовать любые другие значения – но их необходимо будет изменить и на приемном конце.

while (1)
{
if(PINB.0 == 1) {
PORTD = 0x10;
}
if(PINB.0 == 0) {
PORTD = 0x20;
}
}
}

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

Первым делом здесь необходимо объявить переменные, которые будут использоваться для хранения символов, принимаемых от приемного радиочастотного модуля.

#include <io.h>
#include <stdio.h>
#include <delay.h>
unsigned char byte = 0;
void main(void)
{

Теперь рассмотрим главный цикл в конце программы. В этом цикле мы будем хранить принимаемые байты в переменной символьного типа (char) и сравнивать их с теми, которые мы передавали на передающей стороне. Если результат сравнения положительный, то мы в соответствии с их значениями будем включать/выключать светодиод, подключенный к PORTB.0.

while (1)
{
byte = PIND;
if(PIND.7==0 && PIND.6==0 && PIND.5==0 && PIND.4==1)
{
PORTB.0 = ~PORTB.0;
delay_ms(1000);
}
}
}

Компоновка проекта

Наш код закончен. Теперь нам необходимо скомпоновать (Build) наш проект. Для этого нажмите на кнопке Build как показано на рисунке.

После компоновки проекта соответствующий HEX файл будет помещен в папку Debug-> Exe, которую можно найти в папке, которую вы создавали ранее для хранения проекта. Мы будем использовать этот HEX файл для загрузки в Atmega8 используя программу Sinaprog (можно использовать любую другую аналогичную программу, с которой вы привыкли работать).

Загрузка программы в Atmega8 с использованием Sinaprog

Подсоедините один конец FRC кабеля к программатору USBASP, а другой конец к контактам SPI микроконтроллера.

Необходимо сделать следующие соединения:
1. Pin1 of FRC female connector -> Pin 17, MOSI of Atmega8
2. Pin 2 connected to Vcc of atmega8 i.e. Pin 7
3. Pin 5 connected to Reset of atmega8 i.e. Pin 1
4. Pin 7 connected to SCK of atmega8 i.e. Pin 19
5. Pin 9 connected to MISO of atmega8 i.e. Pin 18
6. Pin 8 connected to GND of atmega8 i.e. Pin 8

Соедините оставшиеся компоненты как показано на вышеприведенном рисунке макетной платы.

Мы будем загружать в микроконтроллер ранее сгенерированный Hex файл используя программу Sinaprog, поэтому мы должны открыть ее и выбрать в ней Atmega8 в выпадающем меню устройства (Device). Выберите HEX файл из папки Debug->Exe как показано на рисунке.

Теперь кликните на Program.

Ваш микроконтроллер запрограммирован. Повторите эти же самые шаги и для приемной части.

Исходный код программы на языке С (Си)

Программа для передающей части

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

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

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

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