Реле Tianbo - ресурс 10 млн переключений
РадиоЛоцман - Все об электронике

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

Мастер Кит MP8037R MP8037ADC MP8037time

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

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

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

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

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

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

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

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

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

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

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

  • любой модуль MP8037;
  • плата Arduino;
  • макетная плата для установки на ней Adruino Nano и коммутации проводников;
  • самодельный кабель из 6-ти проводников для соединения Arduino с модулем MP8037;
  • USB кабель для подключения Arduino Nano к компьютеру;
  • компьютер с установленной программной оболочкой Arduino IDE.

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

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

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

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

Наименование линии Выводы Arduino   К разъему X2
на плате MP8037
+5В +5V <-> 6
RESET D10 <-> 5
SCK D13 <-> 4
MISO D12 <-> 3
MOSI D11 <-> 2
Общий (GND) GND <-> 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Название Обозначение
на схеме MP8037
Обозначение порта
(вывода) ATMega168PA
Обозначение
а плате Arduino
Обозначение
в программе
Разряд 1 LED_DIG1 PD4 D4 4
Разряд 2 LED_DIG2 PD3 D3 3
Разряд 3 LED_DIG3 PD2 D2 2
Разряд 4 LED_DIG4 PD1 D1 1
Сегмент a LED_A PD6 D6 6
Сегмент b LED_B PB4 D12 12
Сегмент c LED_C PB2 D10 10
Сегмент d LED_D PB0 D8 8
Сегмент e LED_E PD7 D7 7
Сегмент f LED_F PD5 D5 5
Сегмент g LED_G PB3 D11 11
Точка LED_H PB1 D9 9
Кнопка 1 S1 PC2 A2 A2 или 16
Кнопка 2 S2 PC1 A1 A1 или 15
Реле GP0 PC0 A0 A0 или 14

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

Не вдаваясь в подробности программирования на языке 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.

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

Мастер Кит

Цифровой термометр-термостат позволит получить простой и надежный термостат с возможностью измерения и контроля температуры в диапазоне -55°C до +125°C. Устройство будет...
MP8037R
Мастер Кит
1 068 ₽
Триема
Россия
MP8037R
Мастер Кит
1 996 ₽
Мастер Кит
Россия и страны ТС
Цифровой термометр-термостат до 4 кВт (20А) (MP8037R)
Мастер Кит
Владелец ТМ
2 790 ₽
T-electron
Россия и страны СНГ
MP8037R
161 807 ₽
Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя