- PVSM.RU - https://www.pvsm.ru -

Радиоуправляемый выключатель своими руками. Часть 2 — Тестирование и подготовка

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

Радиоуправляемый выключатель своими руками. Часть 2 — Тестирование и подготовка

В первой части [1] была описана «железячная» составляющая: особенности ее проектирования и производства.

Сегодняшний пост описывает шаги по подготовке среды разработки Arduino и полное тестирование изготовленного модуля.

Для работы с изготовленным модулем потребуется любой ISP-программатор. Я буду использовать имеющийся USBtinyISP [2], вы можете использовать такой же или любой другой (например, сделать ArduinoISP из имеющейся платы ардуино).

Напомню, что по финалу предыдущего поста мы получили полностью собранное устройство — все компоненты находятся на своих местах.

Теперь необходимо проверить ее работоспособность.

Проверка МК

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

Поскольку пост ориентирован на новичков, то буду использовать наглядные инструменты и покажу, как это сделать максимально просто: будем использовать графическую оболочку Avrdude-GUI.

  1. Скачиваем пакет Avrdude-GUI по ссылке [3].
  2. Распаковываем полученный архив в какую-нибудь папку.
  3. Запускаем avrdude-GUI.

После этих нехитрых действий появится окно типа:

Радиоуправляемый выключатель своими руками. Часть 2 — Тестирование и подготовка

Теперь необходимо сделать минимальные настройки: выбрать используемый программатор (поле Programmer), используемый порт (Port), указать используемый МК (Device).

Теперь подключаем программатор к компьютеру, а сам программатор — к нашей плате.

В секции «Fuse» нажимаем кнопку «Read». Если все сделано правильно — в соответствующих полях появятся значения фьюзов:

Радиоуправляемый выключатель своими руками. Часть 2 — Тестирование и подготовка

Если что-то пошло не так

Наиболее вероятны следующие ошибки:

1. Где-то непропай (или наоборот, «сопля»). Тогда в результате попытки считать фьюзы появится сообщение о такой ошибке:

Радиоуправляемый выключатель своими руками. Часть 2 — Тестирование и подготовка

Для исправления ситуации отключайте плату от программатора и очень придирчиво проверяйте качество пайки:

  • тонкой иглой проверяйте, насколько хорошо припаяны все ноги МК,
  • через увеличительное стекло отсматривайте подозрительные места,
  • прозванивайте тестером цепи от разъема ISP до МК,
  • проверяйте цепи питания.

2. Неверно выбран тип МК. Сообщение об ошибке будет выглядеть примерно так:

Радиоуправляемый выключатель своими руками. Часть 2 — Тестирование и подготовка

В моем случае как раз такая ошибка и возникла. Произошло это из-за того, что я использовал ATmega168p, а в программе выбрал ATmega168.
Чипы эти максимально близки, но у них разная сигнатура, о чем система заботливо сообщила. При этом программа подсказывает и решение проблемы — проверить правильно выбранный чип или отключить проверку сигнатуры (добавив ключ "-F" в поле «Command Line Option»).

Я воспользовался именно вторым решением (в данном случае это абсолютно нормально).

Правильнее было бы, конечно, открыть файл avdude.conf и добавить там информацию о ATmega168p, но оставим это на моей совести.

С помощью этой же оболочки можно и записать необходимые фьюзы.

В нашем случае требуется обеспечить работу МК от внутреннего осциллятора на частоте 8МГц. Для этого можете использовать для ATmega168p те значения, что приведены выше на скриншоте.

Фьюзы «объясняют» МК, в каком режиме он должен работать. О том, какие значения необоходимо прописывать (или понять значения приведенных выше) можно с помощью «калькулятора фьюзов AVR», который доступен, например, по этой ссылке [4].

Теперь можно приступать к следующему этапу: проверка возможности программирования МК и тестирование остальной «периферии» на плате.

Подготовка среды разработки

Для этого следует сделать еще один подготовительный шаг: необходимо для среды Arduino создать соответствующую «плату». Делается это следующим образом: нужно открыть текстовым редактором файл boards.txt, который находится внутри папки ARDUINOhardwarearduino, где «ARDUINO» — корневая папка, в которой находится среда разработки.

В этот файл необходимо добавить следующие строчки:

##############################################################

s168po8.name=Sensor168p (int8MHz, 1.8V)

s168po8.upload.protocol=arduino
s168po8.upload.maximum_size=14336
s168po8.upload.speed=19200

s168po8.bootloader.low_fuses=0xe2
s168po8.bootloader.high_fuses=0xde
s168po8.bootloader.extended_fuses=0x00
s168po8.bootloader.path=atmega
s168po8.bootloader.file=ATmegaBOOT_168_pro_8MHz.hex
s168po8.bootloader.unlock_bits=0x3F
s168po8.bootloader.lock_bits=0x0F

s168po8.build.mcu=atmega168p
s168po8.build.f_cpu=8000000L
s168po8.build.core=arduino
s168po8.build.variant=standard

##############################################################

В первой строке указывается «имя платы», которое вы потом будете выбирать в среде программирования (можете указать любое, какое вам нравится).
Особенное внимание обратите на параметры, которые описывают фьюзы, тип МК и частоту, на которой будет работать устройство.

После этих несложных манипуляций можно запускать среду Arduino и убедиться в том, что «новая плата» появилась в списке доступных (в меню «Сервис — Плата» надо выбрать нашу: Sensor168p (int8MHz, 1.8V)).

Тест кнопок и реле

Напомню, что по схемотехнике ключи для управления реле подключены к цифровым пинам D3 и D4, а кнопки — к аналоговым A1 и A0.

Сделаем простейший тест для проверки нормального функционирования кнопок и реле:

// реле
int r1 = 3;  // D3
int r2 = 4;  // D4

// кнопки 
int b1 = 15;  // A1
int b2 = 14;  // A0

void setup() { 
  // реле
  pinMode(r1, OUTPUT);     
  pinMode(r2, OUTPUT);
  // кнопки
  pinMode(b1, INPUT);     
  pinMode(b2, INPUT);  
  // включим подтягивающие резисторы для кнопок
  digitalWrite(b1, HIGH);  
  digitalWrite(b2, HIGH);    
}

void loop() {
  // если нажали кнопку b1 - включим реле r1
  if (digitalRead(b1) == LOW) {
    digitalWrite(r1, HIGH);
  }
  else {
    digitalWrite(r1, LOW);
  }
  
  // если нажали кнопку b2 - включим реле r2
  if (digitalRead(b2) == LOW) {
    digitalWrite(r2, HIGH);
  }
  else {
    digitalWrite(r2, LOW);
  }
}

Загружаем этот тест в наше устройство.

Перед загрузкой не забываем выбрать используемый программатор в меню «Сервис» — «Программатор».

Поскольку используется программатор, то процедура чуть иная — надо в меню «Файл» выбирать пункт «Загрузить с помощью программатора» (или просто нажать комбинацию клавиш Ctrl+Shift+U).

Если все сделано правильно, то при замыкании кнопок будут щелкать соответствующие реле.

Вышеприведенный тестовый скетч не отрабатывает «дребезг» и нужен исключительно для быстрой проверки функционирования платы.

Если что-то пошло не так

Типичных проблем две:

  1. Что-то неправильно сделано в среде Arduino (тогда появляются сообщения о проблемах с загрузкой в МК).
  2. Проблемы в аппаратной части (при этом загрузка проходит успешно, но реле не щелкает).

В первом случае нужно проверить все шаги, что описаны раньше (работа с файлом boards.txt, правильно выбранная результирующая плата и программатор).

Во втором случае лучшими помощниками снова станут принципиальная схема, лупа, острая иголка и тестер.

После этого остается только проверить все ли в порядке с разъемом для подключения nRF24L01+.

Тест интерфейса для nRF24L01+

На этом этапе мы не будем писать код, а просто проверим электрические цепи: при подключенном программаторе (или источнике питания 5В) измеряем напряжение между 1 и 2 контактом разъема RF24 — должно быть 3.3В.

Теперь отключаем программатор (или источник питания) и прозваниваем все цепи разъема на предмет отсутствия замыкания между соседними и наличие соединения с соответствующими пинами МК (см.схему из предыдущего поста [1]).

Проверка высоковольтной части

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

  1. Очень придирчиво осмотрите плату (ту часть, где расположены реле и клеммники для подключения нагрузки), устраните все подозрительные места, пайка должна быть очень надежной. Не должно быть никаких «лишних» соединений.
  2. Прозвоните тестером все цепи, заодно определите, на каких контактах клеммника у вас нормально замкнутые (НЗ) и нормально разомкнутые (НР) контакты.

Результат

После всех проверок у вас на руках — полнофункциональный и полностью готовый к последующему программированию модуль. Ваша среда программирования так же подготовлена для дальнейших шагов.

Продолжение следует...

Полезные ссылки:

Автор: avstepanov

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/svoimi-rukami/55133

Ссылки в тексте:

[1] первой части: http://habrahabr.ru/post/211126/

[2] USBtinyISP: http://learn.adafruit.com/usbtinyisp

[3] ссылке: http://yuki-lab.jp/hw/avrdude-GUI/

[4] этой ссылке: http://payalo.at.ua/c_fuse/calc.html

[5] Arduino ISP: http://arduino.cc/en/Tutorial/ArduinoISP

[6] Использование Arduino UNO в качестве программатора: http://habrahabr.ru/post/144620/

[7] AVR. Учебный Курс. Конфигурация FUSE бит: http://easyelectronics.ru/avr-uchebnyj-kurs-konfiguraciya-fuse-bit.html

[8] Источник: http://habrahabr.ru/post/212785/