В первой части мы рассмотрели схему контроллера и декодера DTMF команд, структурный состав устройства, познакомились с назначением основных элементов и узлов.
Исходный код программы микроконтроллера ATmega16 написан на языке Си и скомпилирован с использованием компилятора CodeVisionAVR. Исходный код снабжен подробными комментариями и очень прост.
Изначально в программе мы определяем имена регистров для микроконтроллера Atmega16, определяем имена переменных. Линии порта А микроконтроллера необходимо настроить на вход, а линии порта В – на выход (см. принципиальную схему в первой части статьи). Основной код программы размещается в цикле while(), таким образом в цикле постоянно считываются данные присутствующие на линиях порта А, которые проверяются при помощи оператора switch. Соответствующие принятым данным команды отправляются в порт D.
Для управления моделью пользователю необходимо позвонить на телефон-приемник, установленный на модели, с головного телефона (телефон-передатчик) с поддержкой тонального набора. Установленный на модели телефон должен иметь функцию автоответа, либо должен быть переведен в режим “Hands-Free”. Сигнал с телефона поступает на собранную схему дешифратора команд посредством разъема для подключения наушников на мобильном телефоне. После автоматического ответа пользователь может посылать DTMF команды для управления моделью в соответствии с таблицей, представленной ниже.
Соответствие команд
Цифра нажатая пользователем |
Выходные данные с DTMF детектора |
Входные данные (порт A) микроконтроллера |
Выходные данные (порт D) микроконтроллера |
Команда |
2 | 0x02 00000010 |
0xFD 11111101 |
0x89 10001001 |
Движение вперед |
4 | 0x04 00000100 |
0xFB 11111011 |
0x85 10000101 |
Поворот влево (правый двигатель - вперед, левый двигатель - назад) |
6 | 0x06 00000110 |
0xF9 11111001 |
0x8A 10001010 |
Поворот вправо (правый двигатель - назад, левый двигатель - вперед) |
8 | 0x08 00001000 |
0xF7 11110111 |
0x86 10000110 |
Движение назад |
5 | 0x05 00000101 |
0xFA 11111010 |
0x00 00000000 |
Стоп |
Если пользователь нажал на телефоне-передатчике цифру «2» (двоичный эквивалент 00000010), то получим выходные данные с микроконтроллера в двоичном эквиваленте - 10001001, что соответствует высокому уровню на линиях PD0, PD3 и PD7. Высокий уровень на линии PD7 разрешает работу драйвера двигателя L293D, высокие уровни на PD0 и PD3 указывают на прямое направление вращения двигателей.
Внешний модели автомобиля
Возможно использование четырех двигателей для реализации четырех ведущих колес, в этом случае двигатели на одной стороне подключаются параллельно, и, в таком случае, возможно использование одного драйвера двигателей L293D.