Найти в Дзене
Мастер Кит DIY

Создаем собственные модули Мастер Кит - как подружить MP8037 и Arduino IDE

Ставь лайк! Делись с друзьями, потому что дальше будет интереснее! Понравилась статья? Ставь палец вверх и будешь видеть наши новости чаще! В широком ассортименте компании Мастер Кит есть три очень похожих внешне модуля: MP8037R, MP8037ADC и MP8037time. Соответственно, «цифровой термометр/термостат», «цифровой модуль защиты и управления», «многорежимный таймер». При внимательном рассмотрении конструкции и принципиальной схемы, становится ясно, что физически это одно и то же устройство на основе микроконтроллера ATMega168! Разница в функционале достигается всего лишь заменой прошивки микроконтроллера, так называемого firmware – встроенного микропрограммного обеспечения. Для модулей MP8037 прошивки разрабатываются и компилируются в бинарный код (файл с расширением .hex) с помощью  профессиональной среды программирования на языке С. Готовым бинарным кодом микроконтроллер прошивается на производстве посредством промышленного быстродействующего программатора. Но если у вас ес

Ставь лайк! Делись с друзьями, потому что дальше будет интереснее! Понравилась статья? Ставь палец вверх и будешь видеть наши новости чаще!

В широком ассортименте компании Мастер Кит есть три очень похожих внешне модуля: MP8037R, MP8037ADC и MP8037time. Соответственно, «цифровой термометр/термостат», «цифровой модуль защиты и управления», «многорежимный таймер».

При внимательном рассмотрении конструкции и принципиальной схемы, становится ясно, что физически это одно и то же устройство на основе микроконтроллера ATMega168! Разница в функционале достигается всего лишь заменой прошивки микроконтроллера, так называемого firmware – встроенного микропрограммного обеспечения.

Для модулей MP8037 прошивки разрабатываются и компилируются в бинарный код (файл с расширением .hex) с помощью  профессиональной среды программирования на языке С. Готовым бинарным кодом микроконтроллер прошивается на производстве посредством промышленного быстродействующего программатора.

Но если у вас есть какая-либо плата популярного контроллера Arduino, то вы можете самостоятельно написать прошивку и «залить» ее в микроконтроллер модуля MP8037, получив, таким образом, свое собственное уникальное устройство с нужным вам функционалом.

Идея состоит в том, чтобы использовать среду Arduino IDE для написания программы,  а плату Arduino в качестве программатора для микроконтроллера ATMega168, установленного на модуле MP8037.

Язык программирования для Ардуино прост в освоении; также не вызывает затруднений применение этого языка для управления микроконтроллером.

Поскольку на плате любого модуля MP8037 есть четырехразрядный семисегментный светодиодный индикатор, а также две кнопки, напишем программу, которая при нажатии на правую кнопку будет отсчитывать время в секундах (с десятыми долями), пока эта кнопка нажата. При отпускании правой кнопки отсчет прекращается, при повторном нажатии – продолжается. При нажатии на левую кнопку результат сбрасывается в 0.

В этом материале мы подробно объясним, как это сделать.

Для экспериментов нам понадобятся:

- любой модуль MP8037;

- плата Arduino;

- макетная плата для установки на ней Adruino Nano и коммутации проводников;

- самодельный кабель из 6-ти проводников для соединения Ардуино с модулем MP8037;

- USB кабель для подключения Arduino Nano к компьютеру;

- компьютер с установленной программной оболочкой Arduino IDE.

В качестве модуля мы взяли готовый прошитый MP8037R, в качестве платы Arduino – плату MB NANO из ассортимента Мастер Кит. Аналогичная плата входит в комплект набора для знакомства и изучения Ардуино «Цифровая лаборатория» NR05 из серии Азбука электронщика.

Макетные платы входят в составы наборов этой же серии «Основы схемотехники» NR03 и «Классика схемотехники» NR04. Наборы серии «Азбука электронщика» будут, несомненно, интересны детям, подросткам и всем, кто интересуется электроникой.

Кабель для подключения платы Arduino к модулю можно спаять из планки DK0176 (штыревой соединитель PLS-40) и любых подходящих проводников. Это стандартный кабель для интерфейса SPI, который используется для прошивки микроконтроллеров фирмы Atmel.

Схема кабеля .

Выглядит он вот так:

Кабель USB должен иметь разъем микро-USB и стандартный разъем для подключения к компьютеру.

Оболочку Arduino IDE можно скачать на сайте www.arduino.cc на страничке https://www.arduino.cc/en/Main/Software. На момент написания этого материала последней версией оболочки была версия 1.8.5. C этой версией мы и проводили все описываемые действия. Кстати, если вы будете продолжать эксперименты с программированием в среде Arduino IDE, рекомендуем установить несколько версий оболочки, в том числе и старые, поскольку не все библиотеки, особенно сторонние, работают с последними версиями оболочки. Варианты установки среды программирования и ее настройки на компьютере неоднократно описаны в сети, например, здесь.

Для начала сделаем из платы Arduino программатор. Для этого необходимо залить на плату скетч (так называются программы для Ардуино) из стандартных примеров оболочки программирования.

Подключим плату Ардуино к компьютеру.

Выберем нужную плату и порт (у нас COM3, у вас может быть другой):

Выберем скетч программатора:

-4

Нажатием на значок со стрелкой, направленной вправо, скомпилируем скетч и загрузим его в Arduino Nano. В случае успешной загрузки в нижней части окна оболочки программирования появится сообщение о завершении загрузки и использовании памяти микроконтроллера. Наш софтверный программатор готов!

-5

Но есть одно «но»…В стандартном наборе плат среды программирования нет отдельно взятых микроконтроллеров, только платы Arduino и другие, а нам необходим конкретно ATMega168PA, работающий на частоте 8 МГц, поскольку именно на эту частоту настроен микроконтроллер на плате MP8037.

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

В главном окне оболочки откроем пункт меню «Файл» -> «Настройки» и в пункте «Дополнительные ссылки для Менеджера плат» занесем следующую ссылку:

https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json

-6

Закроем настройки и зайдем в пункт меню «Инструменты» -> «Плата» -> «Менеджер плат». В «Менеджере плат» находим библиотеку MiniCore by MCUdude и нажимаем кнопку «Установить». После этого рекомендуется перезапустить Arduino IDE.

-7

Теперь в пункте «Плата» появилась необходимая нам ATMega168 с параметрами. Выберем необходимые:

-8

В некоторых версиях модулей MP8037 могут быть установлены микроконтроллеры ATMega328PA с большей памятью, в остальном аналогичные ATMega168PA. Соответственно, в этом случае при указании платы следует выбирать ATMega328PA и частоту 8 МГц.

Установим Arduino Nano на макетную плату и соединим ее с модулем MP8037 по следующей схеме. Тем самым мы реализовали возможность программировать микроконтроллер модуля MP8037 по интерфейсу SPI, который обеспечивается программным обеспечением, прошитым в плате Ардуино.

Для того чтобы правильно описать в программе выводы микроконтроллера модуля MP8036, и их соответствие названиям выводов, принятых в среде программирования Arduino IDE, сравним принципиальные схемы  модуля MP8037R и  платы Arduino Nano, на которой также могут быть установлены микроконтроллеры ATMega168 или ATMega328. Напомним, что за исключением объема памяти, они идентичны.

Результаты сведем в таблицу.

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

Не вдаваясь в подробности программирования на языке Wiring, который используется в Arduino IDE, приведем листинг скетча.

// список выводов Arduino для подключения к разрядам a-g

// семисегментного индикатора

int pins[8]={6,12,10,8,7,5,11,9};

// сегменты для вывода цифр 0-9

byte numbers[10] = { B11111100, B01100000, B11011010,

B11110010, B01100110, B10110110,

B10111110, B11100000, B11111110,

B11110110};

// переменные для хранения и обработки отображаемого числа

int number=0;

int number1=0;

int number2=0;

// выводы для подключения разрядов семисегментного индикатора

int pindigits[4]={1,2,3,4};

// переменная для хранения текущего разряда

int digit=0;

// переменная для отмеривания 100 мс интервала

unsigned long millis1=0;

const int BUTTON=A1; // Контакт A1 для подключения кнопки 1

const int RESET=A2; // Контакт A2 для подключения кнопки 2

void setup()

{

// Сконфигурировать контакты кнопок как входы

pinMode (BUTTON, INPUT_PULLUP);

pinMode (RESET, INPUT_PULLUP);

// Сконфигурировать контакты как выходы

// и установить на них низкий логический уровень

for(int i=0;i<8;i++)

{

pinMode(pins[i],OUTPUT);

digitalWrite(pins[i],LOW);

}

for(int i=0;i<4;i++)

{

pinMode(pindigits[i],OUTPUT);

digitalWrite(pindigits[i],LOW);

}

delay(1000);

}

void loop()

{

// если левая кнопка нажата - сброс

if (digitalRead(RESET) == LOW){

  millis1 = millis();

  number = 0; 

}

// если правая кнопка нажата - счет

if (digitalRead(BUTTON) == LOW){ 

 if(millis()-millis1 > 100)

  {millis1=millis1+100;

  number=number+1;

  if(number==10000)

  number=0;

}

}

else millis1 = millis(); number1=number;

// цикл перебора разрядов

for(int i=0;i<4;i++)

{

 number2=number1%10;

 number1=number1/10;

 showNumber(number2,i);

for(int j=0;j<4;j++) digitalWrite(pindigits[j],HIGH);

 digitalWrite(pindigits[i],LOW);

 delay(3);

}

}

// функция вывода цифры и точки

void showNumber(int num,int dig)

{

 for(int i=0;i<8;i++)

 {

   if(bitRead(numbers[num],7-i)==HIGH) // зажечь сегмент

   digitalWrite(pins[i],LOW);

   else // потушить сегмент

   digitalWrite(pins[i],HIGH);

 }

if(dig==1)

digitalWrite(pins[7],LOW);

}

Он снабжен комментариями, которые помогут разобраться, как работает программа. Описание языка можно найти по адресу https://www.arduino.cc/reference/en/

Скопируйте текст скетча в новое окно среды программирования.

Поскольку ранее мы уже установили в среде программирования необходимую плату и ее параметры, осталось нажать кнопку «Загрузка», чтобы запрограммировать микроконтроллер модуля MP8037R.

Поскольку на плате модуля MP8037R разъем X2 не распаян, вставьте цельную шестиконтактную вилку нашего самодельного кабеля в соответствующие отверстия на плате модуля и придержите пальцем, обеспечивая хороший контакт, пока микроконтроллер прошивается.

После прошивки можно отключить разъем кабеля SPI и подать 12В постоянного тока на модуль. На одну секунду после подачи напряжения во всех четырех разрядах загорятся все сегменты для проверки индикатора, после чего устройство готово к работе. Нажимаем и удерживаем правую кнопку – идет счет секунд с десятыми долями, отпускаем – счет прекращается. Нажатие левой кнопки сбрасывает результат. Как запрограммировали – так и работает!

Видео:

Конечно, на первый раз процедура может показаться не слишком простой, но, поверьте,  потратив немного времени, вы сможете создавать свои варианты устройств на базе модуля MP8037; сможете задействовать установленное на нем реле, подключите датчик температуры, научитесь отображать поданное на модуль напряжение и многое другое.

Желаем  успехов в освоении и применении электроники для проектов DIY.

Ваш Мастер Кит.