Подключение GSM модуля к микроконтроллеру AVR ATmega16


Интерес к GSM модулям возникает когда появляется потребность в удаленном управлении каким либо устройством. GSM модуль может выполнять все те же действия, какие может производить сотовый телефон: совершение и прием звонков, передача/прием SMS, соединение с интернетом при помощи технологии GPRS и т.п. Также к данному модулю можно подсоединить микрофон и громкоговоритель и совершать с его помощью мобильные звонки (на сотовые телефоны). Это открывает возможность к множеству интересных проектов, которые можно осуществить с помощью микроконтроллеров. В этой статье мы рассмотрим подключение и взаимодействие GSM модуля (SIM900A) с микроконтроллером ATmega16 (семейство AVR). На собранной конструкции будет продемонстрирована прием и передача сообщений с помощью GSM модуля.

Подключение GSM модуля к микроконтроллеру AVR ATmega16: внешний вид

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

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

  1. Микроконтроллер ATmega16 (купить на AliExpress).
  2. GSM модуль (SIM900 или любой другой) (купить на AliExpress).
  3. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  4. Адаптер на 12В.
  5. JHD_162ALCD (ЖК дисплей 16x2) (купить на AliExpress).
  6. Кнопки.
  7. Резисторы 10 кОм (купить на AliExpress).
  8. Потенциометр (купить на AliExpress).
  9. 10 пиновый FRC кабель.
  10. Источник питания с напряжением 5 Вольт.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

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

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

Общие принципы работы GSM модуля

GSM модуль можно использовать даже без микроконтроллера, используя для управления им набор команд управления модемом (AT commands). Как показано на приведенном рисунке GSM модуль имеет в своем составе адаптер последовательного синхронного/асинхронного порта (USART), поэтому он может быть напрямую соединен с компьютером при помощи модуля MAX232. А с использованием контактов Tx (передача) и Rx (прием) его можно подсоединить к микроконтроллеру. Также на плате GSM модуля вы можете видеть другие контакты, такие как MIC+, MIC-, SP+, SP- которые используются для подключения микрофона или громокоговорителя. GSM модуль можно запитать с помощью адаптера на 12В используя разъем для постоянного тока.

Внешний вид GSM модуля

Вставьте вашу SIM карту в соответствующий слот модуля и подайте питание, при этом на плате должен загореться светодиод, свидетельствующий о подаче питания. Потом подождите минуту или чуть больше, вы увидите как красный (может использоваться и другой цвет) светодиод будет мигать каждые 3 секунды. Это будет означать что ваш модуль готов к установлению соединения используя вашу SIM карту. После этого вы можете подсоединить к нему сотовый телефон или микроконтроллер.

Управление GSM модулем с использованием набора команд управления модемом (AT commands)

Управлять GSM модулем можно единственным способом – используя набор команд управления модемом (AT commands). К примеру, если вы хотите узнать активен ли ваш GSM модуль вы передаете на него команду “AT” и модуль должен ответить на нее “OK”.

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

AT В ответ на эту команду передается OK для подтверждения того что модуль готов к работе
AT+CPIN? Проверить качество сигнала
AT+COPS? Найти имя провайдера услуг
ATD96XXXXXXXX; Звонок на определенный номер
ATA Ответить на входящий звонок
ATH Завершить текущий входящий звонок
AT+COLP Показать номер входящего звонка
AT+VTS=(number) Передать DTMF код. Вы можете использовать любое число на вашей мобильной клавиатуре (кейпаде)
AT+CMGR AT+CMGR=1 Прочесть сообщение на первой позиции
AT+CMGD=1 Удалить сообщение на первой позиции
AT+CMGDA=”DEL ALL” Удалить все сообщения с SIM карты
AT+CMGL=”ALL” Прочесть все сообщения с SIM карты
AT+CMGF=1 Установить SMS конфигурацию. “1” для установки текстового режима.
AT+CMGS = “+91 968837XXXX”
>Any Text<Ctrl+z>
Передает SMS на определенный номер - 968837XXXX. Когда увидите “>” начинайте набирать текст. Нажмите Ctrl+Z чтобы передать текст
AT+CGATT? Проверить интернет соединение на SIM карте
AT+CIPSHUT Закрыть TCP соединение, то есть отключиться от интернета
AT+CSTT = “APN”,”username”,”Pass” Соединиться по GPRS используя ваш APN и пароль (Pass key). Их можно получить от вашего сотового оператора.
AT+CIICR Проверить имеется ли на вашей SIM карте пакет данных
AT+CIFSR Получить IP адрес сети вашей SIM карты
AT+CIPSTART = “TCP”,”SERVER IP”,”PORT” Установить соединение TCP IP
AT+CIPSEND Эта команда используется чтобы передать данные на сервер

Для нашей схемы мы будем использовать команды AT+CMGF и AT+CMGS чтобы передавать сообщения.

Работа схемы

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

Подключение GSM модуля к микроконтроллеру AVR ATmega16: схема соединений

В схеме необходимо сделать следующие соединения:
1. Tx и Rx GSM модуля to Rx (Pin14) и Tx (Pin15) микроконтроллера Atmega16 соответственно.
2. Кнопки to PD5 (Pin19) and PD6 (Pin20).
3. Соединения с ЖК дисплеем:
• RS - PA 0
• R/W - PA1
• EN - PA2
• D4 - PA4
• D5 - PA5
• D6 - PA6
• D7 - PA7

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

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

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

Создание нового проекта в CodeVision

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

Выбор первой опции в CodeVision

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

Выбор типа микроконтроллера в CodeVision

Шаг 4. Кликните на USART. Выберите передатчик и приемник кликнув по ним как показано на рисунке.

Выбор параметров USART в CodeVision

Шаг 5: Кликните на "Alphanumeric LCD" и выберите "Enable Alphanumeric LCD support" как показано на рисунке.

Выбор параметров ЖК дисплея в CodeVision

Шаг 6: Выберите пункт меню Program -> Generate, Save and Exit. На этом этапе можно сказать, что половина работы уже выполнена. Но если кто не хочет использовать CodeVision то, разумеется, всю эту часть кода можно запрограммировать и вручную.

Сохранение проекта в CodeVision

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

Создание новой папки на рабочем столе

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

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

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

Рабочая область программы в CodeVision

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

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

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

Запрограммируем функцию, которая будет принимать данные из регистра UDR. Эта функция будет возвращать принятые данные.

Используем цикл while в котором создадим два условных выражения, используя оператор if, одно для передачи сообщения, а другое – для приема. Кнопка передачи подсоединена к контакту PIND6 микроконтроллера, а кнопка приема – к контакту PIND5.

Когда кнопка передачи нажата (PIND6) будет выполняться первый оператор if и все команды, необходимые для передачи сообщения, будут выполняться последовательно.

Если кнопка приема нажата, в цикле while (b!='+') будет осуществляться проверка присутствует ли команда CMT или нет. Если присутствует, то будет выполняться последовательность команд начинающаяся со второй строчки цикла while, в результате выполнения этой серии команд на ЖК дисплее будет напечатано принятое сообщение.

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

Следующий цикл for служит для отображения сообщения на ЖК дисплее.

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

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

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

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

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

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

Распиновка FRC кабеля

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

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

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

Теперь кликните на Program и ваш код будет загружен в микроконтроллер ATmega16.

Ваш микроконтроллер запрограммирован. Теперь можете попробовать нажимать кнопки для передачи и приема сообщений от микроконтроллера к GSM модулю.

Полный код программы

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

(1 голосов, оценка: 5,00 из 5)
Загрузка...
4 561 просмотров

Комментарии

Подключение GSM модуля к микроконтроллеру AVR ATmega16 — 4 комментария

  1. В описании к статье указаны инициализация кнопок "2. Кнопки to PD5 (Pin19) and PD6 (Pin20)." Однако ни в кодевизарде ни в самом коде инициализации данных кнопок не видно ...Понятно что автор настроил кнопки на вход и подтянул их внешними резисторами но желательно чтобы этот момент был отображен в статье .

    • Да, спасибо за замечание. Эта статья по стилю изложения немного отличается от других статей на нашем сайте по микроконтроллерам AVR. Здесь в коде программы отдельно не инициализировались контакты для этих кнопок, здесь просто сразу значения контактов почти всех портов микроконтроллера сконфигурированы для работы на ввод данных - посмотрите строки программы с 20 по 37. Насколько я понимаю, эта часть программы была автоматически сформирована средой CodeVision

      • Было бы очень неплохо если бы в код была добавлена функция получения команд от модема в ответ на присланные микроконтроллером... Модемы есть разные инициализации а под час и команды различаются - А так непонятно обработал ли модем команду прислал ОК или ERROR.

        • Спасибо за полезный совет, но, к сожалению, я пока не могу этого сделать - переключился на статьи по другим технологиям. Может быть позже, когда я буду снова возвращаться к AVR

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

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