ФОРУМ КУПИТЬ

Последние статьи

ВСЕ СТАТЬИ

Многофункциональный Ethernet-контроллер Умного Дома на AVR своими руками

25/05/2011 23:19:59

С июня 2016 года начато производство нового контроллера MegaD-2561, который базируется на принципах MegaD-328 и тестового образца, описанного в данной статье, но имеет ряд расширенных возможностей и интересных особенностей.
Более подробно о контроллере читайте в статье:
MegaD-2561 - новая ступень в развитии проекта MegaD

 

В статье "Универсальное Ethernet-устройство для управления домом" я сделал небольшой обзор относительно недорого решения, позволяющего опрашивать различные датчики и кнопки, а также управлять различными нагрузками (лампы, электроприборы, нагреватели). В этом материале я хотел бы продолжить разговор об использовании сети Ethernet в Умном Доме.

Всевозможные готовые IP-менеджеры типа IP Power или NetPing при всех преимуществах имеют и свои недостатки. Во-первых, это, конечно же, цена. Во-вторых, отсутствие по понятным причинам исходных кодов прошивки и невозможность в полной мере изменять логику работы устройства. Если с ценой все более-менее понятно, (хочется сделать устройство своими руками как минимум в 5-7 раз дешевле), то насчет логики следует пояснить.

Итак, я хотел сделать устройство, которое бы имело умело:

  • Опрашивать кнопки (выключатели света)
  • Опрашивать датчики (в том числе делать преобразование аналогового сигнала в цифровой, АЦП)
  • Включать/выключать подключенные нагрузки (выходы)
  • Управляться, настраиваться пользователем по сети Ethernet с использованием протокола TCP/IP и Web-интерфейса
  • Сообщать по заранее определенному IP-адресу о всех срабатываниях входов (кнопок) и сразу же получать команды на включение/выключение нагрузки
  • Иметь возможность в случае отсутствия или неисправности сервера самостоятельно переключать выходы по заранее настроенному пользователем сценарию
  • Иметь возможность в случае отсутствия или неисправности сервера давать заранее описанные пользователем команды по сети такому же устройству или другому серверу

Очевидно, что описанный выше базовый функционал не существует в доступных на рынке готовых продуктах.

Для создания такого устройства я применил микроконтроллер Atmega168 (а позже Atmega328) от компании Atmel, который имеет на борту 16Кб Flash для программного кода и микросхему ENC28J60 от Microchip, которая занимается поддержкой сети Ethernet и соединена с МК посредством интерфейса SPI.

AVR Ethernet Схема
Схема устройства от Guido Socher (tuxgraphics)

Почему были выбраны эти микросхемы. Во-первых, достаточно простая принципиальная схема устройства. Во-вторых, низкая стоимость компонентов. В-третьих, Atmega168 и ENC28J60 доступны в DIP-корпусах и имеют по 28 ног. Это означает, что собрать такое устройство можно самостоятельно дома без специальных навыков и оборудования. Чтобы еще упростить схему устройства, применяется RJ-45 разъем MAG-Jack со встроенным трансформатором. Фактически все, что нужно для сборки устройства - это МК, интерфейсный чип, разъем, кварцевый генератор и пара резисторов.

В результате получилось вот такое миниатюрное устройство c размерами 75х40 мм. Но фактически это Web-сервер с мощными функциональными возможностями.

Ethernet на AVR. Умный Дом
Что бы вы думали это такое? Это Web-сервер.

Для программирования устройства можно использовать простейший программатор типа USBasp.

Программируем AVR. Программатор USBasp

Слева программатор (нужен только для загрузки микропрограммы, справа - модуль

Собрав девайс мы можем залить в него оригинальную прошивку от автора схемы с поддержкой протокола TCP/IP для AVR, чтобы получить в результате устройство, работающее как Web-сервер! Теперь можно с любого компьютера управлять заранее запрограммированным входом.


Тестовая прошивка. Управление выходом через Web

Но авторская прошивка с одной стороны не решает поставленные выше задачи, а с другой стороны делает такое устройство привязанным к разработчику, требующим программатор и знаний основ программирования для МК в тех случаях, когда нам нужно всего-лишь поменять IP-адрес или набор выходов. Поэтому я решил написать для данного устройства свою прошивку, которая делает устройство полностью универсальным, выполняет все задуманные функции и по сути является трансформером, подстраивающимся под любые требования проектировщика Умного Дома.

Главная идея заключается в том, чтобы иметь возможность каждый порт микроконтроллера настраивать индивидуально, используя Web-интерфейс. Таким образом, любой порт из доступных можно настроить как вход (кнопки, датчики), как выход (лампы, приборы) или как АЦП (всевозможные сенсоры, в случае, если порт МК имеет встроенный АЦП). Тем самым я как бы разделяю готовый прибор на две части - ядро и модуль расширения с клеммами, к которому подключаются конечные устройства и датчики. Например, до сегодняшнего дня мне нужно было 10 входов для кнопок и 3 выхода для управления лампами. Но появилась новая задача и теперь нужно 9 входов и 4 выхода. Все, что необходимо, это изменить подключение к модулю расширения и выполнить перенастройку девайса с помощью любого браузера, но никаких изменений в программном коде ядра, перепрошивки, программатора это не потребует.  С другой стороны в доме может функционировать несколько устройств, имеющих разную конфигурацию входов и выходов, но совершенно одинаковую прошивку. В этом смысле индивидуально настраиваемая по Etnernet в визуальном режиме функция каждого порта по сути заменяет традиционное программирование и прошивание, которые требуют дополнительных знаний, оборудования и главное - времени.

В описываемом мною устройстве доступно 13 свободных портов. В данный момент все порты имеют названия, ассоциированные с портами МК (D0, D1 и т.д.), это было удобно для разработки, но в дальнейшем можно отказаться от такой нумерации в пользу какой-нибудь более традиционной.


Перечень доступных для управления и настройки портов контроллера

Кликнув на название порта мы попадаем в режим настройки. Как я уже говорил, каждый порт можно сконфигурировать как IN (вход), OUT (выход) и ADC (АЦП).
Замечу, что все настройки сохраняются в EEPROM (энергонезависимую память), то есть после выключения устройства сохраняются.

Если мы сконфигурируем порт как OUT (выход), то в Web-интерфейсе появится возможность увидеть текущее состояние выхода State, которое может принимать значение OFF (выключено) или ON (включено), а также возможность здесь же включить или выключить подключенную нагрузку.

В случае, если мы настроем порт как ADC (АЦП), мы можем увидеть значение от 0 до 255, которое характеризует состояние датчика.

Однако самые интересные настройки у порта в режиме IN (вход).

Значение State очевидно - текущее положение входа. Остальное требует отдельного пояснения.
Основная проблема многих устройство Умного Дома заключается в том, что они не могут сами сообщать мастеру/серверу/контроллеру о срабатывании какого-либо входа. Обычно мастер, в роли которого в моем случае выступает сервер (ПК), сам с некоторой периодичностью опрашивает устройства. Во многих случаях частота опроса не имеет решающей роли, но только не в случае с выключателями света. Представьте себе ситуацию, когда после нажатия на выключатель, свет включается с задержкой (при использовании механизмов, подобных latch в 1-wire) или вовсе не включается (мы попали в момент между опросами). Таким образом, чтобы полноценно работать с выключателями света, необходимо в цикле несколько раз в секунду опрашивать каждый выключатель. Это создаст приличный трафик в любого рода сети.
В этом смысле логичным видится другой подход. Устройство само определяет факт нажатия кнопки, сообщает об этом серверу и спрашивает его что ему делать. Именно такая логика и заложена в прошивку нашего Ethernet-устройства.

Но, прежде чем показать, как это работает, хочу обратить внимание на ссылку Conf, присутствующую на первом скриншоте. По ссылке находится сетевые настройки устройства, а именно IP-адрес и адрес сервера. Именно на этот сервер будет отправляться информация об изменении состоянии входов. Естественно и в данном случае настройки хранятся в EEPROM.

Итак, кнопка, сработала, МК зафиксировал нажатие (кстати, в прошивке реализован эффективный программный алгоритм защиты от дребезга контактов - Debouncing) и по протоколу HTTP связывается с сервером, сообщая ему нужную информацию. Протокол HTTP выбран не случайно. С одной стороны это в некоторой степени гарантирует доставку пакета, ведь HTTP работает поверх TCP, с другой стороны, что более важно, значительно облегчает, как мне кажется, программирование на стороне сервера. Ведь у нас уже работает домашний Web-сервер, работающий на Apache!


Лог Apache. Устройство сообщает серверу об изменении состояния входа 0 (D0)

Нам необходимо только написать простейший PHP-скрипт, отвечающий на запрос устройства.

<?
if ( $_GET['pt'] == "0" )
echo "6:2";
?>

Если сработал вход "0", сообщить устройству в ответ "6:2". Но что это означает эта команда?

Команда устройству состоит из двух полей, разделенных двоеточием.
Первое поле (6) - номер порта от 0 до 12 (у нас 13 входов/выходов)
Второе поле (2) - действие. Возможные варианты (0 - выключить, 1 - включить, 2 - переключить с вкл на выкл или наоборот)

Важно заметить, что сервер может послать устройству сразу несколько команд.
Например, "6:2;5:1", разделенных точкой с запятой, что будет означать "Выход 6 переключить, выход 5 включить". В одном ответе сервера может содержаться до 13 подобных команд. Просто, не правда ли?

Но что если в нашей домашней вообще сети вовсе нет сервера или же он по каким-то причинам недоступен или неисправен? Не проблема! Вернемся к настройке входа.

Здесь в поле Cmd в том же самом формате, например "6:2" прописывается команда, которую выполнит устройство если:
1) Сервер не прописан в конфигурации устройства
2) Сервер прописан, но не отвечает в течение 3 секунд

Таким образом, если говорить, к примеру, об управлении светом, мы можем использовать это устройство как само по себе, без всяких серверов, так и в паре с сервером, где команды, описанные в Cmd выступают в роли сценария по умолчанию. Мы в любом случае не останемся без света. То же самое можно сказать и относительно более критичных вариантов применения, связанных с безопасностью и системами защиты. Есть сервер - спрашиваем, нет сервера - решает вопрос самостоятельно.

Но что делать, если у нас в сети два таких устройства, а по сценарию при срабатывании входа на первом устройстве, должен переключится выход на другом? Например, датчик протечки в одном месте, а кран с приводом в другом? Для этого существует последнее поле Eth:

Здесь мы можем прописать IP-адрес устройства с командой для выполнения (параметр cmd). Таким образом, устройства могут управлять друг другом, но только в том случае, если неисправен или не указан основной сервер. Поле Eth можно использовать не только для передачи команд другим устройствам, но и для передачи какой-либо информации на резервный сервер, записав в это поле нужный URL.

Управлять устройством можно не только через Web-браузер или посредством скриптов, но и через любые программы типа wget, curl, ведь для передачи информации используется URL строка и GET-запросы типа

192.168.0.14/sec/pt=5&cmd=6:2

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

Нисколько не сложнее получить текущее состояние порта.

192.168.0.14/sec/pt=7&cmd=get

По данному запросу Ethernet-устройство выдаст только состояние (ON, OFF или значение АЦП) без какой-либо лишней информации. Команду "get" удобно использовать в программах на сервере. Так, например, чтобы считать состояние АЦП устройства, достаточно всего одной строчки на PHP!

<?
$adc = file_get_contents('http://192.168.0.14/sec/?pt=7&cmd=get');
?>

Для компиляции и заливки прошивки в Linux требуется всего три пакета: собственно сам компилятор gcc-avr, библиотеки для работы с AVR и программа, работающая с программатором, широко известная "дудка" avrdude

apt-get install gcc-avr avr-libс avrdude

Чтобы скомпилировать прошивку, нужно распаковать архив (внизу статьи) и выполнить команду make.
Прошивка программатором USBasp осуществляется с помощью команды

avrdude -c usbasp -p m168 -e -U flash:w:eth_rem_dev_tcp.hex

На текущий момент все, о чем написано в статье, занимает в памяти микроконтроллера всего 15252 байт.

AVR Memory Usage
----------------
Device: atmega168

Program:   15252 bytes (93.1% Full)
(.text + .data + .bootloader)

Data:        862 bytes (84.2% Full)
(.data + .bss + .noinit)

EEPROM:      489 bytes (95.5% Full)
(.eeprom)

Еще одно фото устройства в момент разработки. Стенд для отладки и экспериментов.


Отладочный стенд. Ethernet-устройство, программатор
Кнопки, переменный резистор для отладки АЦП
Диоды и симисторы (кстати, от ключа 1-wire) для тестирования выходов

Хочу заметить, что это мое первое знакомство с языком C и первая программа для МК. Поэтому приветствуются любые комментарии, указания на ошибки.
Тема в форуме, где идет обсуждение данного решения и подхода.
В данный момент устройство находится в стадии "боевого" тестирования, работая на реальной задаче.

Прошивка для Atmega168
ip_manager.zip (Исходники тестовой прошивки, о которой рассказывается в статье)
ip_manager.hex (Бинарный скомпилированный файл прошивки)
Последнее изменение исходных кодов: 22.07.2011 (разработка новых версий для МК atmega168 прекращено, так как в проекте в текущий момент используется Atmega328)

Прошивка для Atmega328

C 2011 года была проделана громадная работа по развитию предложенной идеологии в рамках более оснащенного микроконтроллера Atmega328.
Все новые прошивки для atmega328
Полное описание всех возможностей новых прошивок для atmega328 и готовых модулей.

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:

(необязательно, не отображается на сайте)


Сортировка комментариев: Последние сверху | Первые сверху

2011-05-30 23:37:03 | arsic
Андрей, поясните, почему не взяли за основу что-нибудь готовое из arduino?

П.С. Спасибо за статьи! Всегда с удовольствием захожу на ваш сайт.


2011-05-31 10:28:26 | Andrey_B
arsic, вы говорите об аппаратной части?
Фактически Arduino + Ethernet Shield - это тоже самое, что описывается в статье, но... Во-первых, готовый набор Arduino будет стоить около 2000 руб, тогда как это решение можно собрать рублей за 300-500. Во-вторых, я хотел всячески минимизировать зависимость от производителей и платформ. В моем случае зависимость только от Atmel и Microchip. В случае с Arduino - еще и от платформы, языка программирования, среды разработки. А по большому счету разницы никакой нет.


2011-09-02 12:16:11 | DMG
Интересно, а можно применить к этим компонентам технологию PoE?


2011-09-02 13:08:46 | Andrey_B
DMG, с текущей версией модуля использовать технологию PoE нельзя. Теоретически можно доработать модуль, но проблема в другом. PoE предполагает использование инжекторов, коммутаторов с поддержкой PoE. Это оборудование значительно дороже. Учитывая, что планируемое место для размещения таких модулей - серверные, распределительные шкафы, где всегда можно обеспечить питание устройства, использование PoE пока всерьез не рассматривалось.


2011-10-07 00:17:16 | Иван
А сколько ватт можно подключать в качестве нагрузки?


2011-10-07 12:39:50 | Andrey_B
Иван, у описываемого в статье устройства есть набор входов и выходов. Непосредственно к логическому выходу нагрузку подключить нельзя. Предполагается некая плата расширения, на которой могут быть установлены реле, симисторы или другие коммутирующие нагрузку компоненты. Максимальная мощность нагрузки в этом случае зависит от конкретной реализации этой платы. Например, на фото в статье я подключил двухканальный симисторный блок от модуля 1-wire. Его номинальная мощность около 300Вт на канал. Но ничто не мешает использовать другие решения, реле, мощные симисторы с радиаторами, которые могут коммутировать несколько киловатт.


2011-10-08 17:19:31 | Иван
Андрей, а вы можете еще выложить фото обратной стороны платы в статью?


2011-10-09 10:58:15 | Andrey_B
Вот здесь я выкладывал фото обратной стороны и комментарий к фото.


2011-10-12 23:13:25 | Александр
Очень понравился ваш сайт и статьи. Грамотно, и вместе с тем, "для людей". Меня на ваш сайт привела такая специфическая задача - хочу (формат "для себя", поэтому ни одно из готовых решений не подходит из-за дороговизны) сделать устройство, которое может коммутировать SATA интерфейс. Т.е. соединять один физический порт контроллера (на материнской плате, например) с любым из X портов, подключенных к данному устройству. Т.е. чтобы можно было включить любой из винчестеров. С коммутированием питания еще как-то можно повоевать, но вот с коммутацией SATA я ничего не нашел даже и близко.

Может ваш взгляд со стороны поможет? Спасибо!


2011-10-22 13:25:17 | Eugene
Плагиат? Ссылка скрыта.


2011-10-22 21:57:11 | Andrey_B
Eugene, ну есть люди, которые своей головой думать не умеют. Что уж тут поделать. Я отношусь к таким деятелям с искренним сочувствием. ;)


2011-11-28 15:22:53 | Юрий
Андрей, скажите, если я хочу настроить устройство так чтобы оно при прописанном сервере не ждало три секунды, а сразу реагировало и только отправляло отчет о своем состоянии на сервер, как это сделать?


2011-11-28 16:31:03 | Andrey_B
Юрий, я ждал, когда кто-нибудь задаст этот вопрос.
В текущей версии прошивки такая схема работы не заложена.
Эту задачу можно решить разными способами.
Способ №1. Мы в конфигурации устройства указываем, что сервер используется только для отчета. Команды, идущие от него игнорируются.
Способ №2. Эту опцию переносим в настройки конкретного входа. Это даст возможность с разными выходами работать по-разному.
Способ №3. Мне он кажется пока наиболее логичным. Отправляем сообщение серверу, а если сервер ничего не ответил, тогда выполняем сценарий по умолчанию.
Как вы считаете?


2011-11-29 09:19:11 | Юрий
Честно говоря я не понимаю в чем выгода от применения третьего способа. Если рашьше "исполнитель" ждал три секунды что скажет "сервер" то сколько он будет ждать сейчас и как это отразится на работе системы? Не получится ли что после самостоятельного исполнения заложенного действия придет запоздавший ответ от сервера, в котором будет (например) прописано какое-либо другое действие?


2011-11-29 18:11:44 | Andrey_B
Юрий, согласен. Не лучший вариант.
Давайте перенесем обсуждение на форум. Там есть ветка по поводу этого устройства.
Я сейчас планирую переходить на atmega328. Можно запланировать эту фичу в новой версии прошивки для 328.


2011-12-14 09:30:34 | Виталий
Добрый день, Andrey_B
какой программой нужно открывать avr-eth.lay,какие нашел (SL4RUS,rulay) перепробовал не идет.


2011-12-14 12:12:30 | Andrey_B
Виталий, например, Sprint Layout


2011-12-18 13:18:09 | Андрей
Андрей, подскажите пожалуйста, какой номинал индуктивности L1 на схеме? Спасибо.


2011-12-18 17:49:46 | Николай
Виталий Sprint Layout 5.0 , версия 4.ХХ не всегда корректно открывает многие печатки.


2011-12-19 06:45:41 | Rolff
Андрей, а подскажите плиз, куда должны идти две точки TP1 и TP2 соответственно


2011-12-19 11:15:29 | Andrey_B
Андрей, 10 мкГн


2011-12-19 11:20:37 | Andrey_B
Rolf, TP1 не используется (см. Datasheet на ENC28J60)
TP2 можно использовать как полноценный IO. В будущих версиях прошивки будет задействован и он.


2011-12-21 01:46:56 | DMG
Andrey_B, какую IDE используете для разработки прошивки? Или просто Блокнот?


2011-12-21 10:55:14 | Andrey_B
DMG, просто блокнот


2012-01-03 12:40:51 | T1
Андрей, а напишите пожалуйста, как вы выставляли FUSE байты и в какой совтине шили мк.


2012-01-03 13:59:23 | Andrey_B
T1, фьюзы:
для Atmega168: L:0x60, H:0xDF
для Atmega328: L:0x60, H:0xD9
Для программирования МК использую avrdude


2012-01-03 17:59:07 | Т1
Андрей, спасибо, но все равно немного не понятно. в списке контроллеров в дудке я не нашел 168 меги, какой ставили вы?


2012-01-03 21:33:57 | Andrey_B
T1, опция -p m168
Все поддерживаемые микроконтроллеры прописываются в конфигурационном файле avrdude.conf
В моем есть и 168 и 328


2012-01-22 18:04:33 | Серега
Андрей, подскажите пожалуйста! Схему спаял. Прошивку зашил через avrdude (под виндой). НО когда подключаю к компу через ethernet кабель, то диоды на разъеме RJ-45 не горят, комп устройство не видит.

Схему перепроверял несколько раз, вроде все ок. Подскажите в чем может быть проблема? Есть подозрение на нерабочий разїем или микросхему ENC. Как можно диагностировать устройство еще?


2012-01-22 23:22:27 | Andrey_B
Сергей, диоды на разъеме RJ45 должны гореть даже с отсутствующим МК. Где-то ошибка в плате. Опишите свою проблему на нашем форуме - там есть люди, которые должны помочь. К тому же аналогичная проблема там обсуждалась.


2012-02-02 20:48:26 | Миша
Привет!
я делаю девайс с эзернетом, который будет работать как www-клиент (отправлять GET запрос).
Вопрос: зачем устройству знать IP сайта и IP роутера, когда известен веб-адрес?
Спасибо!


2012-02-02 22:36:30 | Andrey_B
Ваш вопрос я не понял. Сформулируйте ваш вопрос более развернуто. Желательно это сделать на форуме, где об Ethernet-устройстве существует отдельная ветка.


2012-02-11 21:23:19 | Андрей
Всем привет! Интересная штука получилась - спаял схему, прошил мегу (удачно - проверено), при включении питания и подключении сетевого кабеля зеленый светодиод горел, но не пинговался. Проверял схему много раз, а потом СЛУЧАЙНО отпаял от разьема RJ-45 вывод номер 1 (который идет на катушку ... ) и схема сразу заработала!!! Пингуется, заходит через браузер, можно поменять что-то на выводах. Не могу понять что произошло??!! Может катушка индуктивности (10 мкГн как-то влияет??) Спасибо!


2012-02-12 11:51:24 | Andrey_B
Задайте ваш вопрос на нашем форуме. Там есть люди, которые могут дать более квалифицированную консультацию.


2012-03-01 00:02:46 | Юра
Очень понравилось, а где взять фото печатной платы, если можно выложите или подскажите.


2012-03-01 20:53:39 | Andrey_B
Кое-что есть на нашем форуме, где есть по этому поводу очень большая и содержательная ветка.


2012-04-02 15:36:54 | Виталий Б
Я новичек в этом деле. Андрей не могли бы вы опубликовать печатную плату.буду очень признателен


2012-04-10 09:52:27 | Макар
Андрей не могли бы вы полностью указать маркировку разъема rj45


2012-04-10 12:19:45 | Денис
А не подскажете можно ли видео с веб камеры например передавать через устройство...ил же скажем подключить к АЦП аналоговую камеру?


2012-04-10 12:47:31 | Andrey_B
Макар, разъемы в данном устройстве можно применять разные. Я лично использовал MagJack и PulseJack. Последний использую в последних версиях устройства. Его можно заказать у меня на сайте. Его обозначение J00-0063NL
Но это далеко не единственный вариант. На нашем форуме в соответствующей ветке писали и о других вариантов разъемов. Однако стоит учесть, что не все они абсолютно совместимы по выводам (особенно это касается размеров).


2012-04-10 12:54:52 | Andrey_B
Денис, конкретно в данном устройстве такой возможности конечно нет. Чисто теоретически, оцифровывать сигнал с камеры с помощью atmega можно, но, боюсь встроенных ресурсов МК (скорость, память) может не хватить, чтобы давать качественную картинку с полным разрешением. Да и не специфичная для МК задача. Намного дешевле и проще применять дешевые китайские IP-камеры. Со всеми их недостатками качество изображения будет выше, а возможностей больше.


2012-04-18 09:00:53 | макар
Как вы писали программу для контроллера?мне не совсем понятно как в программном коде прописать IP адрес. я навичек в этом деле,зарание спасибо за помощь


2012-04-18 17:55:48 | Andrey_B
Макар, IP-адрес по умолчанию задается в исходника прошивки в файле main.c
Скачайте архив с прошивкой и скомпилируйте ее с нужным вам адресом.


2012-04-20 13:48:41 | Макар
Andrey_B,скажите,как вы исходники компилировали в файл прошивки и получили файл с расширением .hex


2012-04-20 16:21:14 | Andrey_B
Макар, для этого нужен компилятор.
В Linux использую avr-gcc, в Windows используют, например, AVR Studio


2012-04-20 16:50:29 | Макар
Andrey_B,а как проделать это в AVR Studio


2012-04-20 18:47:50 | edka
Макар, в Avr studio жмете build. Файлы компилируются в папку debug вашего проекта.


2012-04-20 19:04:30 | Макар
Ребята.в архиве несколько файлов, и мне не совсем понятно.в какой последовательности их компеллировать.или их не все компилировать.это первый мой проект,обьясните самыми простыми словами


2012-12-29 15:03:10 | Алексей
А как прошивку эту скомпилировать, взял посмотрел на архив, там несколько фалов с раширение с и , а компилировать какой файл? В этой АВР..Я раньше не встречался с авр студией, если может кто объясните....


2013-01-14 13:51:12 | Алексей
Чтото вапще непонятное...я так понимаю в исходниках не дан сам проект, надо просто заново его написать по возможности используя код, так как у всех проектов есть файл sln, в данном пакете его нет. А жаль думал будет возможно просто его скомпилировать, и если у когото компилится данный проект, то хз чем вы их компилите.


2013-01-14 19:21:44 | Andrey_B
Алексей, в архиве есть все для компиляции HEX-файла для микроконтроллера. Если у вас будут вопросы, вы всегда можете задать их на нашем форуме.


2013-02-08 14:54:56 | Александр
Хотелось бы уточнить, что такое выключатель типа "сухой контакт". И каким образом заставить включаться выход при нажатии на кнопку к примеру. При конфигурировании входа как in ничего не происходит.


2013-02-11 10:39:29 | Andrey_B
Ссылка на форум
"Сухой контакт". Это могут быть механические контакты - два замыкаемых друг с другом провода, контакты реле, кнопки, микропереключателя, геркона, и т.д. То есть, любые две соприкасающиеся друг с другом, когда это нужно, железяки.


2013-02-14 10:36:13 | Алексеевский Юрий
Здравствуйте! Давно интересуюсь технологиями для умного дома. Сам юзаю контроллер, похожий на ваш, который Ethernet. Только покупал в московской конторе KernelChip. По вашей статье и по своему опыту, видно, что пользоваться им очень легко и удобно (я работаю из флешевой оболочки). Всё портят провода )) Есть ли перспектива создания аналогичного модуля, только беспроводного? На мой взгляд это была бы идеальная база для построения своего, уникального дома.


2013-02-14 22:35:02 | Andrey_B
Юрий, в целом я не против беспроводных технологий. В идеале вместо Ethernet Wi-Fi. Но все же считаю, что по ряду причин пока провода предпочтительнее. Однако я допускаю любое развитие событий. Поживем - увидим.


2013-02-18 13:39:08 | Василий
Здравствуйте. Имеется ipad в App Store есть много программ для системы умный дом(i2control, My home) и тд. Можно ли эти программы приспособить для данного девайса?


2013-02-19 18:59:20 | Василий
Здравствуйте. Нашел в инете ENC28J60-H, Ethernet-модуль можно ли использовать этот модуль вместо ENC28J60 и RJ45


2013-02-20 10:47:52 | Andrey_B
Василий, можно, конечно.


2013-03-12 12:40:19 | Дмитрий
Доброго времени суток
вопрос а можно запрограммировать...> по действию из вне т.е.(например по нажатию кнопки)
Микроконтроллер(/192.168.0.213) посылал запрос GET или POST на другой IP... (/192.168.0.213/sec/?pt=7777777)


2013-03-13 22:27:52 | Andrey_B
Дмитрий, поле NetAction как раз и используется для вызова прописанного в него произвольного URL по срабатыванию входа.
Кроме того, такой вызов может делать сервер в соответствии с заложенным алгоритмом.


2013-05-15 15:34:41 | Виктор
Здравствуйте. встретил в интернете AVRVI Ethernet - в целом ничего нового кроме возможности подключения вэбкамеры и транслирования видео через eth. оченя меня это заинтересовало.. У вас случаем нет наработок в данном направлении?


2013-05-15 16:22:28 | Andrey_B
Виктор, с моей точки зрения обработка и передача видео по сети не дело микроконтроллеров, учитывая рост разрешения и внедрение высокоэффективных кодеков. С помощью микроконтроллеров нужно решать целевые задачи, подобные той, которая обсуждается в данном разделе.


2013-06-28 01:21:36 | sim31
Правильней было бы назвать устройство модулем ввода-вывода, только с интерфейсом Ethernet и простой логикой. Обычно чтобы обеспечить логику локальную, ставят простые контроллеры рядом, с которыми связь никогда не пропадает. Из дешевых тот же Овен и Сегнетикс, около 100$.
А так ваш проект очень хорош! Работающие исходники на Ethernet модуль могут очень даже пригодится.


2013-06-28 10:44:52 | Andrey_B
sim31, это не просто модуль ввода-вывода, так как в устройстве заложена некоторая логика: возможность работать без управляющего сервера, возможность исполнять сценарии по умолчанию, возможность отправлять команды других устройствам, поддержка некоторых цифровых датчиков и т.д.


2013-08-01 15:05:37 | Александ
Добрый день!
Подскажите, а порт PB7 используется?


2013-08-02 17:30:06 | Andrey_B
Александр, нет, в моих модулях PB7 не используется.


2013-09-06 13:36:46 | Дмитрий
Андрей, добрый день!
На последнем изображении вверху исполняющий модуль - он самодельный? Можно ли где-нибудь найти его схему? Спасибо


2013-09-08 23:36:22 | Andrey_B
Дмитрий, различные варианты печатных плат опубликованы здесь.


2013-10-15 02:27:22 | Лев
Ну ребята!!! Программисты то вы программисты конечно, но основы HTML Разработки тоже вкуривать нужно. Хоть бы немного CSS добавили.


2013-10-15 10:13:15 | Andrey_B
Лев, прежде чем обзывать нас "программистами", вы бы сперва прочитали статью, вникнули в суть дела. Полагаю, CSS мы знаем не хуже вашего. А может быть даже и получше.
А теперь вдумайтесь вот в это:
Микроконтроллер atmega328P
Flash-память для хранения программы: 32Кб
EEPROM: 1Кб
Оперативная память SRAM: 2Кб
Максимальный размер TCP-пакета для данного стэка: 800 байт
==
А теперь попробуйте все то, что изображено на скриншотах сделать "красиво" с использованием CSS, jQuery, Bootstrap и т.д. Как будет готово - скажите, ага?
Еще раз, интерфейс данного устройства предназначен не для конечного пользователя (а для администратора/разработчика для настройки и т.д.). Все управления такими штуками со стороны конечных пользователей должно происходить опосредованно, через полноценный Web-интерфейс Умного Дома


2013-10-21 16:00:38 | Виктор
случайно не припаял INT1 MK... и всё нормально работает.. начал копать дальше и исходниках нигде не обрабатывается это прерывание? я прав? может использовать ножку по другому?


2013-11-17 00:35:35 | Vlad
А можно ли вместо atmega328p использовать atmega32u4 ?
Есть готовая плата с atmega32u4, маленькая. Хотелось бы ее применить.
Atmega32u4 без проблем прошился, выставил фьюзы, я соединил с соответствующими выводами с ENC (у меня плата отдельно, рабочая, проверенная). И ничего.

atmega32u4 от ENC тактируется. (можно вычитать с нее все).
Может прошивку как то перекомпилировать под atmega32u4 нужно ?
Или закинуть эту идею ?
Все остальные схемотехнические варианты приведенные тут, с полтыка запускались.


2013-11-18 23:01:36 | Andrey_B
Это вполне возможно, что необходимо править код прошивки и опции компилятора для 32u4. Посмотрите файлы enc28j60.с и Makefile. Может быть, натолкнет на какие-нибудь мысли.
Если разберетесь, отпишите.


2013-11-23 23:25:54 | W-i-n-t
Андрей, Вы меня просто поразили, запихнуть столь многофункциональную программу в ATmega 328 - это просто чудо! А как будут обстоять дела с подключением аналоговых и цифровых датчиков в данном устройстве? И еще очень хотелось бы заменить ENC28J60 на скажем W5100 фирмы Wiznet или полностью на Ethernet шилд от дуины))
Замечательная работа, стоит гордиться такими соотечественниками!


2013-11-24 10:04:28 | Andrey_B
W-i-n-t, во-первых, спасибо! ;)
Во-вторых, в этой статье описано только начало проекта. Его продолжение здесь и на других страницах, а также на форуме.
Аналоговые датчики устройство поддерживает. Причем может само контролировать получаемые значения и сообщать серверу, когда эти значения вышли за определенные пользователем пределы.
Из цифровых датчиков устройство поддерживает пока только DHT11/DHT22


2013-11-28 15:14:42 | Vlad
Андрей, пытаюсь переделать под мой atmega32u4 как Вы советовали, поправил
define ENC28J60_CONTROL_CS PORTB4
define ENC28J60_CONTROL_SO PORTB3
define ENC28J60_CONTROL_SI PORTB2
define ENC28J60_CONTROL_SCK PORTB1
Как в даташите под U4
Непойму насчет INT, Где его переписать ?
По даташиту подходит нога 8 INT0 PB0
Но, в Протеусе нету U4 чипа, а в железе таки не едет.
Осциллографом на MOSI MISO SCK есть импульсы.
В остальном устройство не откликается через езернет.
Хотелось бы получить от Вас совет, думаю прикол весь в INT


2013-11-28 17:18:06 | Andrey_B
Vlad, сейчас к сожалению физически нет времени разобраться в вашей проблеме. Но задайте вопрос на нашем форуме. Там есть пользователь shemnik69, который, думаю, сможет вам помочь.


2014-04-23 01:29:53 | Геннадий
Расскажите, а можно настроить это устройство для поддержания заданной температуры и влажности по датчикам (например 2 канала независимых) по дням календаря, + 3-6 коналов независимых таймера управления исполнительных устройств по дням календаря, + переход на резервное питание,+ индикация. Жду ответ, зарание всем благодарен!


2014-04-23 09:14:17 | Andrey_B
Геннадий, устройство создавалось как элемент Умного Дома с централизованным управлением. Для подобного устройства предъявлялись определенные требования и решалась поставленная задача. Принципиально устройство ориентировано на работу с управляющим элементом (более интеллектуальным) - сервером. На сервере можно реализовать любые алгоритмы значительно проще.
Вы же описываете некое обособленное устройство, работающее само по себе, абсолютно не универсальное, а заточенное под определенную задачу. Нет. Такая задача неинтересна. Аппаратно все для этого есть. Необходимо лишь написать _другую_ прошивку. Но зачем? Если значительно проще поставить рядом любой мини-ПК на базе Linux и написать любой алгоритм на python, perl, PHP и чем-то таком, а не отлаживать программу на значительно более сложном AVR C.


2014-10-14 20:05:13 | Владимир
Здравствуйте форумчане,
Немного с другой целью изучаю тему. Удалось найти оригинальный модуль Tuxgraphics.
Запрограммировать тоже не проблема.
Но почему-то не отпускает м.б. и непроходная мысль - а нельзя извратиться и перепрограммировать, скажем, запрятанный девайс через тот же Erhernet. Или это Мюнхаузен вытягивающий лошадь за собственные волосы ?
В Инете копался, но не встретил даже намека на такой сервис.
Это действительно бредовая идея или средства утилитарно не оправдывают цель?
Тогда зачем бутлоадер, если все равно надо лезть к девайсу ?
Извините, если вопрос слишком дилетантский.
Спасибо, если кто доходчиво (я не силен в такой материи) пояснит где тут подводные камни.


2014-10-14 20:18:51 | Владимр
В предыдущем посту под "перепрограммировать", конечно, имелось ввиду "перепрошить".
Прошу понимания.


2014-10-17 15:39:18 | Andrey_B
Владимир, устройство поддерживает прошивку по сети. Подробнее описано в соответствующей статье на сайте. К девайсу лезть не надо.


2014-10-19 12:42:56 | Владимир
Спасибо, Андрей
После изучения м.б. обращусь снова


2014-12-02 21:20:07 | Сергей
Здравствуйте. Можно ли вместо atmega328p, конечно переделав плату и прошивку, использовать atmega2560? Справится с этим процессором ENC28J60?


2014-12-03 00:35:44 | Andrey_B
Сергей, не готов дать вам точный ответ. Но, думаю, atmega2560 вполне применим в данном проекте. Есть в планах использовать в следующих ревизиях этот или похожие чипы.


2015-03-23 18:51:38 | Владислав
Вопрос на засыпку если я прошью эти девайсы вашей прошивкой они будут также работать???
/www.aliexpress.com/snapshot/6561018900.html?orderId=66401001497963
/www.aliexpress.com/snapshot/6561018902.html?orderId=66401001487963


2015-03-23 21:20:41 | Andrey_B
Владислав, я не тестировал подобные конфигурации, но на нашем форуме были сообщения об успешном использовании Arduino (на базе Atmega328) и Ethernet Shield (на базе ENC28J60) с моей прошивкой. Результат, разумеется, гарантировать не могу, но можете попробовать.


2015-03-23 22:09:56 | Владислав
А в стандартной сборки сколькими устройствами может управлять 1 контроллер?


2015-03-24 10:26:59 | Andrey_B
Владислав, я не понял ваш вопрос. Что вы понимаете под контроллером, а что под устройством?


2015-03-24 19:43:53 | Владислав
под контроллером я подразумеваю вашу собранную схему а под устройством допустим у меня есть 20 чайников сколько чайников по раздельности я смогу отключить и включить???


2015-03-24 22:18:03 | Andrey_B
Владислав, если мы говорим о микроконтроллере atmega328 и моей прошивке, то имеем 14 независимых портов, которые могут работать с 14 разными нагрузками.


2015-03-25 19:02:23 | Владислав
Да именно это и интересовало это круто токой мне и нужно. Вопрос а для управления 220 мне нужно будет в цепи добавить ещё реле верно?


2015-03-25 22:06:23 | Andrey_B
Владислав, в контроллере мы конфигурируем "ногу" чипа. И обвязка должна соответствовать этой конфигурации. Для управления нагрузками 220В есть схемы для реле или для симисторов. Их полно в интернете. Есть готовые релейные сборки. Многое обсуждалось на нашем форуме.


2015-05-21 10:48:05 | Павел
Андрей, здравствуйте!
Изуродовал пару SNR ERD v1 и получил пару Ваших устройств на Atmega168.
Идея в связку клиента и сервера. На одном должны замкнуть контакт на другом должно сработать реле. Через WEB интерфейс вижу как замыкается кнопка на клиенте и могу дать команду втором устройству (назовем его сервером) включить реле. Но в связке они работать категорически отказываются. На клиенте в строке Eth после Ок остается только 192.168.200.222/sec/ в конфиге строка Server пустой не остается


2015-05-21 12:07:56 | Andrey_B
Павел, сопровождение прошивки для atmega168 было прекращено еще в 2011 году. Сейчас проект полностью переехал на atmega328. Была проделана очень большая работа в плане развития прошивки.


2015-05-21 13:59:28 | Павел
Андрей, я всё понимаю, но мне не нужно наворотов просто необходимо управлять одной кнопкой одним удалённым реле. Может по памяти какой совет может в исходниках что - либо поправить? Судя по выводу wireshark при замыкании кнопки клиент не обращается к (как бы серверу). Нет возможности быстро перейти не 328 контроллер.


2015-05-21 15:10:05 | Andrey_B
Павел, с тех пор очень много воды утекло и было сделано огромное количество изменений. Разумеется, я уже не вспомню что было 4 года назад.


2015-05-22 00:48:26 | Павел
Ну и крайний вопрос, 168 контроллеры вообще работали друг с другом или только через внешний сервер работали?


2015-05-23 10:25:12 | Andrey_B
Павел, NetAction (он же Eth) должен работать. Другое дело, что, по всей видимости, не хватает длины поля. В старой прошивке IP адрес записывался текстом, что занимало много места. В новой прошивке для 328 эта функция переписана и IP-адрес занимает только 4 байта. Попробуйте сократить пароль или изменить IP-адрес. Ведь 192.168.1.2 будет занимать меньше, чем 192.168.200.222. Вы также можете попробовать изменить прошивку, увеличив длину поля для Eth.


2015-05-24 02:00:06 | Павел
Как раз с полями и экспериментирую.
Вопрос по 328, Вы чем собираете проект. AVR Studio 4 дает ошибку.


2015-05-25 11:07:57 | Andrey_B
Павел, я использую gcc-avr 4.7.2 в Linux.
Для Windows давно уже есть Atmel Studio 6.2


2015-06-09 13:31:56 | Сергей
А какие фьюзы нужно выставлять для прошивки чипа?


2015-06-09 16:58:07 | Andrey_B
В своих модулях (для atmega328p !) я использую следующие фьюзы
Без загрузчика
Low: 0x60
High: 0xD9
С загрузчиком
Low: 0x60
High: 0xD8

Программирование фьюзов - ОЧЕНЬ ответственный процесс, так как легко можно нарушить работоспособность микроконтроллера.


2015-06-09 23:20:22 | Сергей
А есть ли проект для proteus? А то пробую эмулировать но проект получается не работоспособный. На форуме встречал пост, но видать старый и атач не сохранился.


2015-06-10 00:42:17 | Andrey_B
У меня нет. Спросите на форуме.


2015-06-22 09:29:54 | Павел
Андрей, а схема включения 168 и 328 отличается?


2015-06-22 12:12:03 | Andrey_B
Павел, если мы говорим о микросхемах в корпусе DIP, то схема включения абсолютно идентична.


2016-02-23 12:53:59 | bot
Зачем вы сделали ардуино?


2016-02-23 14:18:19 | Andrey_B
bot, аппаратно это очень похоже на Arduino. Программно - принципиально другое. Проект MegaD-328 - это, прежде всего, программная идея.


2017-11-11 18:58:14 | Андрей Николаевич
Андрей вопрос стандартные фьюзы Atmega 328 5В 16Гц
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05
будут работать


2017-11-11 21:05:04 | Andrey_B
Андрей Николаевич, это нестандартные фьюзы для atmega328. Это, вероятно, фьюзы для устройств Arduino, но это не заводская установка. Вы можете воспользоваться Fuse Calculator'ом в Интернете, чтобы понять, чем они отличаются от тех, которые используются в контроллерах MegaD.


2018-05-29 22:29:54 | Alexei
Спасибо за статью!!!


2018-10-23 10:07:38 | Евгений
Хочу повторить сей девайс. Какие fuse'ы выставлять для AtMega168? Если эта информация где-то уже есть, то извиняюсь за глупый вопрос


2018-10-23 10:12:30 | Евгений
Под какую среду разработки создан исходник (для версии с AtMega168), или если по простому, в какой IDE можно открыть исходник, внести изменения и перекомпилировать?


2018-10-23 10:39:39 | Andrey_B
Евгений, устройство на базе atmega168 делалось в исследовательских целях. В серии было устройство на базе atmega328, сейчас atmega2561.
Fuse-bits для atmega328 указаны здесь.
При разработке прошивки IDE не использовалось, поэтому где можно открыть сказать не могу.


2018-10-23 10:58:12 | Евгений
То есть информация о конфигурации фьюзов под AtMega168 недоступна или выставляется по умолчанию или она аналогична конференции AtMega328?