Разработка мидлетов для управления аналого-цифровым преобразователем АЦП GSM/GPRS модема G24-J компании Motorola
Использование механизма потоков
Вычислительное ядро GSM/GPRS модема G24-J представляет собой микроконтроллер ARM7. Наличие одного ядра означает, что в процессе вычислений возможно только последовательное выполнение инструкций процессора. Однако наличие виртуальной машины JavaME позволяет организовать псевдопараллельное выполнение задач, когда временной ресурс разбивается на кванты процессорного времени и распределяется между потоками для выполнения различных задач. В предыдущей статье [1] были рассмотрены программные средства для разработки мидлетов и пример Java-приложения, демонстрирующий использование функций для управления цифровыми линиями ввода/вывода GSM/GPRS модема G24-J компании Motorola без использования потоков.
В реальных разработках различные функции приложения могут быть реализованы в разных потоках. Это позволяет организовать одновременное выполнение задач и эффективное управление вычислительными ресурсами процессора. Такой подход существенно расширяет функциональные возможности мидлета и упрощает разработку. В данной статье все примеры реализованы с использованием механизма потоков. Каждый проект состоит из двух файлов: UserMIDlet.java и IO_Thread.java. Первый файл содержит класс UserMIDlet, переменную класса-потока iopin и вызов функции завершения потока iopin.killThread:
Второй файл отвечает за функциональность приложения, например, содержит класс потока IO_Thread и 3 функции — конструктор, функцию run и функцию завершения потока killThread.
Таким образом, достигается локализация функций управления мидлетом от других функций:
В данном случае, в отличие от мидлета в [1], код опроса линии Gpio1 и формирования инвертированного сигнала на линии Gpio2 должен быть помещен в функцию run, которая является стандартной и запускается при создании потока. Выход из функции происходит после завершения цикла while(running). Время выполнения цикла контролируется из основного класса мидлета с помощью переменной-флага running.
Работу программы удобно проверять с помощью симулятора MOTO2MOTO Wireless Toolkit, доступного для скачивания на сайте компании Motorola. Для установки симулятора в среде программирования NetBeans следует открыть свойства “Properties ? Platform ? Emulator Platform” и выбрать “MOTO2MOTO Wireless Toolkit 1.2…”. Запуск программы на выполнение — команда “Run Main Project”. В результате на экране появляется окно симулятора OEMDevice (рис. 1), в котором отображается группа состояний линий ввода/вывода Gpio. Зеленым цветом обозначено состояние логической единицы, красным — нуля.
В главном окне также расположена тестовая информация о сети (группа Network), внешних каналах аналого-цифрового преобразователя (группа A2D), состоянии телефона (группа Call), SIM-карте (группа SIM) и системные свойства — режим работы, сторожевой таймер, время/дата, будильник, уровень заряда батареи, температура модуля, присутствие антенны (группа System). Для симуляции внешних воздействий, например, на входе цифровой линии Gpio1 предусмотрено диалоговое окно, вызываемое при нажатии на пункт меню “External Events ? Gpio” (рис. 2). В данном случае уровень сигнала на линии Gpio1 установлен равным 0, при этом согласно программе сигнал на линии Gpio2 инвертировался и стал равен 1.
Аналого-цифровой преобразователь в составе GSM/GPRS модема G24-J
Аналого-цифровой преобразователь (АЦП) GSM/GPRS модема G24-J содержит 3 внешних канала и 2 дополнительных (внутренних), которые предназначены для измерения напряжения питания и температуры GSM/GPRS модема [2]. Внешние каналы предназначены для измерения постоянного напряжения в диапазоне от 0 до 2,3 В. Разрядность АЦП составляет 10 бит, однако цифровой код внешних каналов содержит только 8 значащих разрядов. Диапазон цифровых целочисленных значений для измеряемых сигналов на внешних входах АЦП — от 0 (0 В) до 255 (2,3 В), для напряжения питания — от 300 до 450 (разрешающая способность 10 мВ), для температуры — от 17 (70 °С) до 229 (–30 °С).
Каждый из пяти каналов АЦП может работать в одном из трех режимов:
- Однократное измерение: преобразование выполняется по запросу.
- Автоматическое периодическое измерение: АЦП производит измерения с частотой, установленной в специальном регистре. Уведомление о результате выполнения каждого измерения реализовано с помощью механизма сообщений.
- Автоматическое периодическое измерение с предустановленным пределом: АЦП производит измерения с заданной частотой, пользователь определяет верхнее и нижнее пороговые значения. Измеренное значение сравнивается с пороговыми значениями, и сообщение генерируется только в том случае, если пороговые значения превышены.
В GSM/GPRS модеме G24-J управление внешними и внутренними каналами реализовано по-разному. Рассмотрим вариант управления переключением состояния цифрового выхода в зависимости от состояния цифрового входа (вкл/выкл) и результата измерения на первом канале АЦП.
Для использования внешних каналов АЦП необходимо получить доступ к функциям классов A2dManager, A2dChannel и разрешить обработку исключений при работе с АЦП — A2dException. Первый класс необходим для получения доступа к выбранному каналу, второй — для считывания результатов аналого-цифрового преобразования.
Существенное отличие использования внешних аналоговых линий АЦП от цифровых линий состоит в том, что для создания объекта класса A2dManager следует применять функцию getInstance. Функция возвращает ссылку на объект A2DChannel исходя из номера канала (от 1 до 3). Класс A2DChannel содержит методы для конфигурации и получения уведомлений от внешних аналоговых каналов. В частности, метод getValue возвращает результат аналого-цифрового преобразования. Данная функция блокирует выполнение потока, из которого она была вызвана, до тех пор, пока не завершится ее выполнение. Такой эффект легко заметить и при работе с симулятором.
Модифицируем алгоритм инвертирования цифровых входов следующим образом. Если значение АЦП на первом канале меньше 1,13 В, то выход Gpio2 равен инвертированному значению Gpio1. В противном случае, выход Gpio2 повторяет значение на входе Gpio1:
Результат работы данного мидлета показан на рис. 3. С помощью диалогового окна A2D устанавливается желаемое значение входной измеряемой величины на первом канале АЦП. При значении, равном 0,5 В, индикаторы цифровых линий Gpio1 и Gpio2 в окне OEMDevice имеют разные цвета (красный и зеленый), при значении 1,13 В — цвет индикаторов одинаковый. Данную программу также удобно проверять на отладочном комплекте [3]. Для этого необходимо задействовать управляющие переключатели из группы Gpio и ADC, расположенные слева и справа от разъема SIM-карты.
Внутренние каналы аналого-цифрового преобразователя GSM/GPRS-модема G24-J
Внутренние каналы АЦП предназначены для анализа напряжения питания GSM/GPRS модема G24-J и слежения за его температурой. Функции слежения за питанием и температурой расположены в пакете OSC. Этот пакет включает также будильник, дату и время, антенну (наличие подключения), сторожевой таймер и др. В программу можно добавить возможность приема уведомлений при изменении напряжения питания, либо осуществлять регулярный опрос с помощью функции OSC.getBatteryLevel.
Рассмотрим вариант с автоматическим уведомлением на примере индикации уровня заряда батареи. Определим несколько дискретных уровней заряда и будем использовать цифровые выходы для включения/выключения светодиодов. Данный подход не является наилучшим решением с точки зрения энергопотребления, однако позволяет наглядно продемонстрировать результаты работы.
В определение класса потока добавляется спецификатор OSCBatteryListener. В инициализирующей части функции run указывается механизм уведомлений OSC.setBatteryListener (this), размещается код для его включения OSC.batteryLevelChangeReportEnable(true), а также настраиваются цифровые выходы. Функция, отвечающая за обработку уведомлений, называется onBatteryLevelChanged. В ней реализуется обработка уведомления об изменении напряжения питания. В данном случае определяется уровень, к которому следует отнести текущее значение напряжения, и устанавливаются соответствующие сигналы на цифровых выходах.
Управляющий элемент симулятора позволяет задать значения напряжения в диапазоне от 3,2 до 4,2 В. Определим минимальный уровень напряжения, при котором отображается уровень заряда, равный 3400 (3,4 В), максимальный — от 4000 (4,0 В).
Анализ функции контроля напряжения питания удобнее выполнять в симуляторе, поскольку имеется возможность регулировки в режиме on-line. На рис. 4 показан процесс изменения напряжения питания с индикацией. При значении заряда батареи, равном 3,3 В, светодиодные индикаторы, подключенные к линиям ввода/вывода Gpio3/4/5/6, имеют красный цвет, то есть значение равно 0. По мере нарастания напряжения сначала срабатывает индикатор Gpio6 (меняет цвет с красного на зеленый), затем добавляются Gpio5 и Gpio4. Согласно программе, при достижении уровня 4 В на всех линиях Gpio3/4/5/6 установится значение 1. Таким образом, реализован альтернативный вариант демонстрации степени заряда батареи по сравнению со встроенным в симуляторе индикатором Battery Level.
Заключение
В статье рассмотрены примеры мидлетов для работы с аналого-цифровым преобразователем GSM/GPRS модема G24-J компании Motorola. Рассмотрен механизм организации потоков для считывания результатов измерения с внешних каналов аналого-цифрового преобразователя, а также механизм уведомлений для анализа изменений напряжения питания.
Приведенные примеры наглядно демонстрируют удобство использования средств JavaME для работы с периферией GSM/GPRS модема G24-J. Наличие такого мощного средства управления наряду с возможностью обеспечения беспроводной сотовой связи позволяет реализовывать компактные системы сбора и передачи данных. В ряде случаев наличие 3 аналоговых и 15 цифровых линий позволяет создавать беспроводные системы без использования внешнего микроконтроллера. Таким образом, GSM/GPRS модем G24-J — одно из перспективных решений в области современных встраиваемых средств сотовой связи.
- Каулио В. В. Методы и средства разработки мидлетов для GSM-модемов G24-J компании Motorola // Беспроводные технологии. 2008. № 3.
- Motorola G24 Developer’s Guide. Module Hardware Description. Technical information. December 31, 2007.
- Motorola G24 Developer’s Guide. Developer’s Kit. Technical information. May, 2008.