ENC28J60 Подключаем Микроконтроллер к сети Ethernet


04.11.2011

Смотри также WiFi модуль ESP8266

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

Однако, зависимость от компьютера - это не всегда хорошо. Иногда требуется создать автономное сетевое устройство со своим сетевым адресом и, желательно, с уже ставшим привычным, Web-интерфейсом. Этим мы и займемся.

Я начинал с реализации схемы, опубликованной в этой статье: http://www.rlocman.ru/shem/schematics.html?di=55059 http://www.radiolocman.com/shem/schematics.html?di=55059

Все оказалось не так сложно, как может показаться на первый взгляд. Мое первое устройство для удаленного отключения/включения питания через web интерфейс.

Устройство для удаленного отключения/включения питания через web интерфейс. Внешний вид. Устройство для удаленного отключения/включения питания через web интерфейс. Внутренности. Устройство для удаленного отключения/включения питания через web интерфейс. Плата.

Как видите, ENC28J60 упрощает схему подключения микроконтроллера с компьютерной сети до простейшей.

После того, как компания Microchip выпустила микросхему Ehernet интерфейса ENC28J60, имеющую SPI интерфейс, подключения микроконтроллера в компьютерную сеть стала довольно простой задачей. Подключенный к сети микроконтроллер становится сетевым устройством и доступ к нему может быть организован по локальной сети, интернет,  беспроводным сетям. В общем, открываются очень радужные перспективы.

Итак, микросхема Ethernet интерфейса ENC28J60 включает протокол приема/передачи данных, MAC адрес, и протокол физического уровня в одном чипе. Микросхема имеет 28 ног. Требует подключение всего нескольких внешних элементов. Кварц, Ethernet трансформатор, Ethernet-разъем, несколько конденсаторов и резисторов, пару светодиодов. Вот схема подключения к микроконтроллеру Atmega88 /Atmega168.

Обращаю внимание, что все схемы и софт распространяются по лицензии GPL2. Т.е. общедоступны, и если Вы использовали что либо из софта, то свой софт Вы обязаны опубликовать и сделать общедоступным.

Микросхема Ehernet интерфейса ENC28J60 греется. Причем в SMD корпусе чуть больше, чем DIP. Вероятнее всего, это субъективное ощущение, но я в конце концов, перешел на DIP корпуса. Что касается Ehernet трансформаторов, сразу я выпаивал их из старых сетевых карточек. Мне ни разу не попадалось два одинаковых трансформатора. Отдельно их купить в Украине нереально. Утомившись каждый раз по новому разводить плату, я перешел на разъем со встроенным трансформатором и светодиодами. Цена немного кусается, но зато на плате сразу освобождается место, да и внешний вид устройства становится значительно симпатичнее.

ENC28J60 подключал к Atmega88, ATMEga168, ATMEga32. Питание всей схемы 3.3В. Собственно, по железу все, ничего сложного. Проблем с запуском ни разу не испытывал. Все работало сразу и без вопросов.

Исходный пример для работы с ENC28J60 на CGG (WinAVR) можно скачать в указанной выше статье.  Я же расскажу о том, что получилось у меня в конечном итоге. Все основано на этом же примере и распространяется по лицензии GPL2.

NETAlarm

NETAlarm создавался как устройство для контроля климатических условий в серверных помещениях. Но его можно применять везде, где требуется удаленный контроль и управление.  Например, дома или на даче, в качестве устройства для удаленного контроля поливом, вентиляцией, и т.п. Чуть позже я расскажу, как на базе NETAlarm была создана метеостанция, работающая в сети интернет. Задача NETAlarm  контролировать состояние датчиков (аналоговых, дискретных, датчиков температуры), предоставлять Web интерфейс для контроля и управления, с заданной периодичностью отправлять данные на сервер. Отправлять сообщения для предотвращения аварийных ситуаций.

Характеристики Устройства: - 3 цифровых датчика DS18B20 - 2 аналоговых входа (0...3,3В) - 4 дискретных входа - два дискретных выхода (управляются программно (настраивается через Web-интерфейс) или вручную) - web-интерфейс, позволяющий настроить все параметры устройства, в том числе сетевые, и алгоритм срабатывания на разные состояния датчиков. - отправка данных демону Syslog на указанный сервер через указанный промежуток времени - отправка сообщений по UDP протоколу на указанный сервер в случае превышения критических показаний датчиков (настраивается через Web-интерфейс).

Схема NETAlarm

Внимание! В схеме используется микросхема Atmega32A или Atmega32LAtmega32 не подойдет по напряжению питания.

Печатная плата двусторонняя сторона 1:

сторона 2:

Скачать схему, плату, прошивку, исходники.

Фьюзами нужно установить тактирование от внешнего источника и отключить JTAG. Все остальные по умолчанию.

Описание работы NETAlarm

Краткое описание NETAlarm

NETAlarm - устройство для отслеживания состояния различных датчиков и передачи данных по компьютерным сетям. Специализирован для контроля за климатической обстановкой в помещениях. Имеет Web-интерфейс для настройки и отслеживания состояния. Позволяет в случае аварийных ситуаций организовать уведомление серверов. Отправляет данные по протоколу Syslog через определенный промежуток времени. Позволяет подключить через два дискретных выхода внешние устройства и управлять ими по заданному алгоритму.

Характеристики и возможности

  • - до 3 цифровых датчиков температуры DS18B20 с интервалом измеряемых температур от -55 до +125 0C.
  • - 2 аналоговых входа 0...3,3В. Внутренний АЦП обеспечивает 10 разрядное преобразование.
  • - 4 дискретных входа (внутренняя подтяжка к логической 1)
  • - 2 дискретных выхода с нагрузочной способностью 10 мА
  • - отправка состояния датчиков на указанный сервер по протоколу Syslog
  • - отправка уведомления списку серверов или одному из списка, при наступлении указанного условия
  • - возможность управления выходами и отправкой данных по указанной логической схеме
  • - web-интерфейс для управления и получения данных

Требования к питанию и окружающей среде

Питание прибора осуществляется от внешнего стабилизированного источника питания +5В, 500mA. Прибор рассчитан на работу при температуре 0...85 0С. При относительно влажности до 90% в неагрессивной среде. Не рассчитан на прямое попадание воды и ВЧ излучений.

Подключение и установка датчиков

NETAlarm позволяет подключить до 6 внешних датчиков помимо 3 датчиков температуры DS18B20. Для этого применяются клеммы.

На клеммы также выведено стабилизированное питание +5В от источника питания.

Подключение дополнительных датчиков температуры

Общее количество датчиков температуры DS18B20 не должно превышать трех. Датчики подключаются параллельно друг другу. Никаких других элементов не требуется. Длина провода не более 3 метров.

Подключение аналоговых датчиков

Подключаемый аналоговый датчик должен выдавать напряжение в пределах 0...3,3В. В противном случае, необходимо обеспечить согласование сигналов. При этом вся защита от возможного перенапряжения должна ложиться на схему согласования. Прибор имеет 10 разрядный АЦП. Уровень измеренного сигнала отображается в числовом выражении от 0 до 1023. Пересчет в милливольты и другие величины прибор не выполняет.

Подключение дискретных датчиков

Подключаемые датчики могут быть как контактными (герконы, переключатели, кнопки) так и электронными ключами (цифровые датчики Холла, датчики, имеющие на выходе транзистор с открытым коллектором) Подключение датчика выполняется между нужным входом и "GND". Вход контроллера "подтягивается" к логической 1 через внутренний резистор 10...60 кОм. Поэтому, при разомкнутом датчике на входе будет 1. При замыкании датчика на входе 0. Использование схемы для предотвращения дребезжания контактов при замыкании/размыкании необязательна. Если существует возможность попадания в цепь датчика напряжения, превышающего 3,3В, необходимо реализовать схему защиты входов от перенапряжения.

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

Номинальная нагрузочная способность выходов OUT9, OUT10 10 мА (максимальная 20 мА). Используя внешние исполнительные устройства, можно реализовать управление сильноточной нагрузкой (вентиляцией, кондиционером, насосом, генератором и т.п.)

Настройка NETAlarm через web-интерфейс

Вход на страницу управления выполняется по ссылке следующего вида: http://IP-адрес NETAlarm/пароль

Пример:

http://192.168.114.20/whfynl

Если выполняется первичная настройка устройства, IP-адрес и пароль, заданный производителем можно узнать на наклейке корпуса NETAlarm. После удачного входа, первой откроется страница состояния датчиков. Используя меню, перемещайтесь по закладкам.

Сетевые настройки

В закладке "Settings" выполняются основные сетевые настройки. А именно настройка MAC-адреса, IP-адреса, маски подсети, адрес шлюза, пароль доступа.

Настройки заголовков

В закладке "Titles" можно установить короткие текстовые подписи длинной до 20 символов к входам NETAlarm. Эти подписи отображаются на страницах состояния датчиков.

Настройки лог-сервера

В закладке "Log-Server" указывается IP-адрес сервера, порт и временной интервал, для отправки данных по протоколу syslog. При этом сервер должен быть настроен для приема данных, кроме того сетевые экраны (firewall) должны также позволять прохождению UDP пакетов на указанный IP-адрес и порт от IP-адреса NETAlarm. Как настроить сервер FreeBSD для приема данных, читайте здесь: "Настройка syslog на FreeBSD".

Настройка списка "Alarm"

В закладке "Alarm List" указывается список IP-адресов серверов и портов, сообщений, которые будут отправлять серверам при условиях, указанных в следующей закладке "Events". При этом несколько строк могут содержать одну и ту же комбинацию IP-адреса и порта, но с разными сообщениями. Сообщения отправятся, если будет включено поле `Enable/Disable`.

Настройка списка "Events"

В закладке ""Events" настраивается логическая таблица работы NETAlarm. В каждой строке указывается:
  • - опрашиваемый датчик
  • - условие сравнения (> = <)
  • - значение для сравнения
  • - действие, которое необходимо выполнить при выполнении условия в течение времени, указанного в поле `Delay time`
  • - поле `Delay time` задающее время, в течении которого должно выполняться условие прежде чем указанное действие будет выполнено. Задается в секундах. Если установлен 0 - немедленное выполнение.
  • - поле Enable/Disable Для включения/отключения обработки строки.

Прибор проверяет таблицу условий 10 раз в секунду, проходя последовательно по таблице, начиная со строки 0 до строки 9. Проверка условий выполняется только для строк, у которых включено поле Enable/Disable. При выполнении условия в течении указанного периода выполняется указанное действие. В списке действий имеется проверка другого условия, что позволяет реализовать операцию логического "И". При этом желательно указывать строки с отключенным полем Enable/Disable. В этом случае условие будет проверено, но будет проигнорировано в основном цикле проверке.

Если Вам, вдруг, захочется "зациклить" проверку условий, Вы сможете это сделать, но прибор работать правильно не будет.

Подробное описание полей:

Первое поле содержит список датчиков:
  • T0 - цифровой датчик температуры #1
  • T1 - цифровой датчик температуры #2
  • T2 - цифровой датчик температуры #3
  • A3 - аналоговый вход #1
  • A4 - аналоговый вход #2
  • IN5 - дискретный вход #1
  • IN6 - дискретный вход #2
  • IN7 - дискретный вход #3
  • IN8 - дискретный вход #4
  • OUT9 - дискретный выход #1
  • OUT10 - дискретный выход #2
Как видно, в условиях может использоваться проверка состояния выходов.

Условие сравнения:

  • > - если значение датчика превышает указанное в поле `Value` значение
  • = - если значение датчика равно указанному в поле `Value` значению
  • < - если значение датчика меньше указанного в поле `Value` значения
В Поле `Value` можно указывать целые числа в диапазоне от -9999 до 32767

Поле `What to do`

  • On OUT9 -включить OUT9
  • On OUT10 -включить OUT10
  • Off OUT9 -выключить OUT9
  • Off OUT10 -выключить OUT10
  • Send to Log -отправить состояние датчиков серверу, указанному в закладке "Log-Server"
  • Send Alarm#0..#9 -отправить сообщения всем со списка
  • Send Alarm#0 -отправить сообщение серверу, указанному в строке #0 из списка `Alarm List`
  • Send Alarm#1 -отправить сообщение серверу, указанному в строке #1 из списка `Alarm List`
  • Send Alarm#2 -отправить сообщение серверу, указанному в строке #2 из списка `Alarm List`
  • Send Alarm#3 -отправить сообщение серверу, указанному в строке #3 из списка `Alarm List`
  • Send Alarm#4 -отправить сообщение серверу, указанному в строке #4 из списка `Alarm List`
  • Send Alarm#5 -отправить сообщение серверу, указанному в строке #5 из списка `Alarm List`
  • Send Alarm#6 -отправить сообщение серверу, указанному в строке #6 из списка `Alarm List`
  • Send Alarm#7 -отправить сообщение серверу, указанному в строке #7 из списка `Alarm List`
  • Send Alarm#8 -отправить сообщение серверу, указанному в строке #8 из списка `Alarm List`
  • Send Alarm#9 -отправить сообщение серверу, указанному в строке #9 из списка `Alarm List`
  • Event#0 -проверить условие в строке #0
  • Event#1 -проверить условие в строке #1
  • Event#2 -проверить условие в строке #2
  • Event#3 -проверить условие в строке #3
  • Event#4 -проверить условие в строке #4
  • Event#5 -проверить условие в строке #5
  • Event#6 -проверить условие в строке #6
  • Event#7 -проверить условие в строке #7
  • Event#8 -проверить условие в строке #8
  • Event#9 -проверить условие в строке #9
Поле `Delay time`

В этом поле следует указывать период в секундах, на протяжении которого условие должно выполняться, прежде, чем будет выполнено указанное действие. Технически возможно указать значения в диапазоне от -9999 до 32767. Но отрицательные значения, лишенные логического смысла, лишат логики всего, что вы делаете.

Поле `Enable/Disable`

Если Вы хотите, чтобы условие проверялось, установите это поле. Если условие используется как подчиненное в цепочке логического "И", и Вам не нужно чтобы эту условие работало как самостоятельное, не устанавливайте это поле.

Пример #1:

Задача:

При превышении температуры 27 градусов на протяжении 1 минуты включать вентиляцию. Если температура превышает 30 градусов на протяжении 30 сек, рассылать сообщения всем серверам. Выключать вентиляцию при температуре ниже 25 градусов

Решение:

0 T0 > 27 On OUT9 60 checked
1 T0 > 30 Send Alarm#0..#9 30 checked
2 T0 < 25 Off OUT9 0 checked

Пример #2:

Задача:

Регистрировать момент открытия/закрытия двери серверной (датчик IN5)

Решение:

0 IN5 = 0 Send to Log 0 checked
1 IN5 = 1 Send to Log 0 checked

Пример #3:

Задача:

Отправлять сообщение серверам, если дверь в серверную (датчик IN5) закрыта более часа, вентилятор включен (Выход OUT9) более 30 минут, а температура превышает значение 30 градусов в течении 30 секунд. При наличии воды на полу (датчик IN6) более 5 секунд отправлять сообщения.

Решение:

0 IN5 = 1 Event#1 3600 checked
1 OUT9 = 1 Event#2 1800 checked
2 T0 > 30 Send Alarm#0..#9 30 checked
3 IN6 = 0 Send Alarm#0..#9 5 checked

 Настройка прибора через последовательный порт

Этот способ предназначен для возвращения контроля над устройством, если его основные параметры (IP-адрес, пароль доступа) безвозвратно утеряны и не представляется возможным их восстановить.

!ВАЖНО! Кабель последовательного интерфейса в комплект не входит. Для изменения настроек NETAlarm по последовательному порту нужно выполнить следующие действия:

  • открыть крышку прибора
  • подключить кабель последовательного интерфейса к разъему USART
  • подключить кабель к компьютеру
  • включить прибор
  • запустить терминальную программу (например HyperTerminal) и подключиться к NETAlarm по соответствующему COM порту
В таком варианте подключения NETAlarm имеет ограниченный набор команд:
  • AT - проверка связи, в случае успеха, возвращает `OK`
  • CONFIG - выводит на дисплей текущую конфигурацию в сжатом виде
  • SETMAC- устанавливает MAC-адрес. Пример:

    SETMAC 88-255-114-17-50-117

    Обратите внимание! MAC-адрес указывается в десятичном формате
  • SETIP- устанавливает IP-адрес.

    Пример:

    SETIP 192.168.0.1
  • SETPWD- устанавливает пароль.

    Пример:

    SETPWD qwerty

    Пароль может содержать латинские буквы и цифры. Использование других символов крайне не рекомендуется.

  • HELP - выводит подсказку по командам.

 Страницы состояния датчиков

Кроме страницы состояния в главном web-интерфейсе, NETAlarm предоставляет дополнительные страницы, где можно получить состояние датчиков.

С описание входов: http://[IP-адрес NETAlarm]/status

Пример:

http://192.168.114.20/status

Содержание страницы:

Сокращенная информация: http://[IP-адрес NETAlarm]/stat

Пример:

http://192.168.114.20/stat

Содержание страницы:

Эти данные могут быть получены и обработаны любым ПО с любой операционной системы, что расширяет сферу использования NETAlarm.

Настройка Syslog на FreeBSD

Для настройки syslog необходимо в файл syslog.conf добавить строку
local0.info                                     /var/log/climate.log
где /var/log/climate.log - файл, в который будут записываться данные NETAlarm.

Пример файла syslog.conf:

# $FreeBSD: src/etc/syslog.conf,v 1.28 2005/03/12 12:31:16 glebius Exp $
#
#       Spaces ARE valid field separators in this file. However,
#       other *nix-like systems still insist on using tabs as field
#       separators. If you are sharing this file between systems, you
#       may want to use only tabs as field separators here.
#       Consult the syslog.conf(5) manpage.
*.err;kern.warning;auth.notice;mail.crit                /dev/console
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err   /var/log/messages
security.*                                      /var/log/security
auth.info;authpriv.info                         /var/log/auth.log
mail.info                                       /var/log/maillog
lpr.info                                        /var/log/lpd-errs
ftp.info                                        /var/log/xferlog
cron.*                                          /var/log/cron
local0.info                                     /var/log/climate.log
*.=debug                                        /var/log/debug.log
*.emerg                                         *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info                                   /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
# touch /var/log/all.log and chmod it to mode 600 before it will work
*.*                                             /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.*                                            @10.20.27.111
# uncomment these if you`re running inn
# news.crit                                     /var/log/news/news.crit
# news.err                                      /var/log/news/news.err
# news.notice                                   /var/log/news/news.notice
!mpd
*.*                                             /var/log/mpd.log
!startslip
*.*                                             /var/log/slip.log
!ppp
*.*                                             /var/log/ppp.log
В rc.conf устанавливаем флаг syslog, и указываем от кого ему можно принимать данные. Пример:

syslogd_flags= "-a 192.168.114.20/32:*"

Настройка FreeBSD для приема и обработки сообщений

Предположим, отправка сообщений будет выполняться на порт 773. Смотрим в файле /etc/services 773/udp - это notify

В файле inetd.conf добавляем строку

notify  dgram udp       wait            root    /root/scripts/alarm.sh  alarm.sh
/root/scripts/alarm.sh - это скрипт, который будет принимать, и обрабатывать полученное сообщение.

Пример скрипта:

#!/usr/local/bin/bash

#LOG="/var/log/alarm.log"
LOG=`mktemp /tmp/alarm.XXXXXX` || exit 1
MY_IP_AND_PORT="192.168.144.1 773"
SECRET_STRING="balar"

WAIT_CNT=3
# get modify time of log
LOG_MODIFY=`stat -f "%m" ${LOG}`

/usr/bin/nc -l -u ${MY_IP_AND_PORT} > ${LOG} &

BG_PID=$!

while [ $WAIT_CNT -gt 0 ]; do
sleep 1
LOG_MODIFY_CUR=`stat -f "%m" ${LOG}`
if [ $LOG_MODIFY -eq $LOG_MODIFY_CUR ]; then
WAIT_CNT=$((WAIT_CNT-1))
else
WAIT_CNT=0
fi
done

kill $BG_PID

# bug fix BEGIN
read -t 1 sss
# bug fix END

MSG=`cat ${LOG}`

if [ $MSG=$SECRET_STRING ]; then
echo ALARM! SHUTDOWN! | mail -s ALARM [email protected]
logger AHTUNG! SHUTDOWN
else
logger GADI PITALIS POTUSHIT SERVER
fi

unlink ${LOG}

exit 0

ВНИМАНИЕ!На разных версиях операционных систем скрипт может не работать как следует или не работать вовсе. Придется применить свое умение.

Настройка MRTG для построения графиков температуры

Создаем скрипт /usr/local/etc/periodic/daily/climate.shСледующего содержания:

#!/bin/sh

read=`cut -f 4 -d: /var/log/climate.log | tail -1`
write=${read}

echo ${read}
echo ${write}
echo 0
echo items

где /var/log/climate.log - файл, в который принимаются данные от NETAlarm.

В файле /usr/local/etc/mrtg/mrtg.cfgдобавляем следующие строки:

Target[tgadova]:`/usr/local/etc/mrtg_scripts/climate.sh`
Options[tgadova]: nopercent,growright,gauge,noinfo
Title[tgadova]: Temperature
PageTop[tgadova]: 

Temperature

MaxBytes[tgadova]: 10000 YLegend[tgadova]: temperature, oC ShortLegend[tgadova]: items LegendI[tgadova]: Temperature: LegendO[tgadova]: Temperature: Legend1[tgadova]: temperature, oC Legend2[tgadova]: temperature, oC

Установка и настройка сервиса для обработки сообщений на Windows серверах

Для приема сообщений серверами под управлением Windows систем создан специальный сервис NETAlarm.exe. Установить как сервис командой:

NETAlarm.exe -install

Проверьте, служба Net Alarm должна появиться в списке сервисов.

Далее выполняем настройку. Для этого в папке Windows создаем файл NETAlarm.ini Примерно следующего содержания:

[Settings]
udpport=773
fromip=192.168.114.20
string=alarm
todo="C:\Atmel_Projects\AVRWeb\WinUDPServer\WinService\1.bat"
Где
  • udpport=773 - порт на котором служба будет принимать сообщения
  • fromip=192.168.114.20 - адрес от куда принимать сообщения, другие адреса будут игнорироваться
  • string=alarm - текст сообщения, после приема которого нужно выполнить команду
  • todo="C:\NETAlarm\alarm.bat" - команда, которая выполняется после получения сообщения
Скачать схему, плату, прошивку, исходники.

P.S.

На той же основе была создана метеостанция для работы в интернет.

Принцип тот же, что и NETAlarm.  Добавлены: - датчик давления HP02 - "тахометр" для измерения скорости ветра - работа с 4 битным энкодером для определения направления ветра - отправка данных на сервер по http протоколу - вывод данных в XML формате

Со схемой и прошивкой метеостанции познакомлю Вас немного позже.

Схеми і прошивки
Коментарі:
avr говорить:
10.02.2012 16:23
Очень интересный проект, попробую в ближайшее время повторить. Рад что исходник не закрыт, так как проект довольно трудоемкий и хорошо офрмлен, честно гоовря не ожидал что будет бесплатным. Спасибо.

mestny говорить:
14.03.2012 08:43
Проект интересный. Но очень интересует обещанный рассказ о метеостанции.

admin говорить:
14.03.2012 10:34
Материал о метеостанции обязательно будет. Все никак не пристрою к ней анемометр и указатель направления ветра. Считаю без этого метеостанция не совсем законченна.

viktor говорить:
15.03.2012 16:13
Спасибо большее за выложенное, очень помогло!!! У меня такой вопрос, а какой именно MagJack вы использовали?

admin говорить:
15.03.2012 16:23
Я использовал:
J00-0065NL  и  J00-0061NL (без встроенных светодиодов)

Виталий говорить:
02.04.2012 11:06
а у вас есть печатная плата для контроллера в dip корпусе ?

admin говорить:
02.04.2012 11:21
К сожалению нет. Такой платы нет.

Владимир говорить:
03.04.2012 18:25
Не получается откомпилировать исходники в WinAVR...не покажите как это сделать...

admin говорить:
04.04.2012 08:23
Сообщите хотя бы ошибку которую выдает компилятор.

Владимир говорить:
04.04.2012 16:50
Видимо не верный Makefile, я новичок поэтому не знаю как это исправить.
make.exe: *** No rule to make target `test0.c`, needed by `test0.o`.  Stop.

Volag говорить:
10.04.2012 15:09
Спасибо за полезную информацию о работе с ENC28J60. Собрал плату на ATMega32 и ENC28J60, в качестве RG45 разъема с трансформатором применил HR911105A. Работает. Оказалось что сигнал CLKOUT с ENC28J60 не обязательно заводить на микроконтроллер, все работает и от внутреннего генератора ATMega32 на частоте 8Мгц. 
К выводу 10 (-REST) ENC28J60 можно подключить один  из свободных выводов микроконтроллера, например PD4 для возможности программного сброса.
Теперь хотелось бы добавить 2 вещи:
1) Питание POE. Разъемы с трансформаторами похоже не подойдут, потому что все выводы гальванически развязаны и нет на выходных штырьках отводов от средних точек первичных обмоток трансформаторов. 
2) Карту памяти Flash на несколько гигабайт. Для этого тоже понадобится SPI, не будет-ли проблем с его разделением между Flash и Ethernet микросхемами.

admin говорить:
10.04.2012 15:59
1) С POE не приходилось иметь дело. Буду рад узнать о результатах.
2) Что касается Flash, я подключал SD карту к ATMega64 и не использовал встроенный SPI. Библиотека позволяла использовать другие ноги контроллера.
Исходники брал от сюда:
http://avrlab.com/node/156
http://avrlab.com/node/167
http://avrlab.com/node/231
С ATMega32 не пробовал. под ATMega64 пришлось поправить пару мелких ошибок.

andvas говорить:
16.04.2012 07:50
Спасибо большое за устройство, собрал, прошил, все заработало. Проверьте только пожалуйста, ножка 14 ENC28J60 соединена с резистором , и на схеме явно написано 27К, хотя должно быть 2К7. Пол час меня эта проблема заставила поволноваться :-)

andvas говорить:
16.04.2012 18:22
Собрал устройство, прошил .hex, все выводы кроме DS18B20 работают, Не можете подсказать куда копать?

admin говорить:
17.04.2012 08:35
Касательно DS18B20 наблюдал что датчик может не обнаруживаться если слишком длинный кабель к нему. Особенно это проявляется если на датчик не подавать питание. Такое допускается только и работает только при коротких проводах (примерно 30 сантиметров).

andvas говорить:
17.04.2012 09:40
Я сначала подключил датчик на проводе 20 см, потом впаял его вообще в плату. Разницы никакой.
Датчик подключил: 1 контакт DS18B20  на массу, 2 на PD6 atmegi, 3 на Vcc. Между PD6 и Vcc стоит резистор 4K7. Попробовал другой датчик, думал может бракованный, не помогло. Попробовал два датчика результат нулевой.

admin говорить:
17.04.2012 10:02
Ситуация странная. С DS18B20 никогда проблем не было. Подключено все верно. Разобрал свой работающий NETAlarm, проверил, может где я в схеме накосячил. Нет, все правильно. Напрашивается только одна мысль, возможно, где то нет контакта.

admin говорить:
17.04.2012 10:04
В схеме действительно была ошибка. Нога 14 ENC28J60 соединена с резистором 2К7.
Схему исправил. Спасибо.

andvas говорить:
17.04.2012 10:34
Вроде я все позванивал, но чтобы наверняка вечером еще раз проверю/пропаяю и отпишусь.

andvas говорить:
17.04.2012 17:50
Пропаял еще раз, не помогло, результата нет. Это конечно не то но по плате видно smd деталь между 5 и 6 ножкой atmega, на схеме ее нет. Что там такое стоит? 
На сайте точно последняя/рабочая прошивка выложена?

admin говорить:
18.04.2012 08:43
Между 5 и 6 ногой стоит конденсатор по питанию 0,1мФ. Это не принципиально. У меня вот какая мысль возникла. А как у Вас выставлены фюзы, отвечающие за тактирование Атмеги? Я в статье упустил этот момент. Это моя недоработка. Атмега то тактируется от внешнего сигнала от ENC28J60 12,5МГц. А если у Вас установлены фюзы на работу от внутреннего генератора, скажем, 8МГц, то это вполне может повлиять, поскольку при опросе датчика используются временные задержки. Если Вы все таки решите использовать тактирование от внутреннего генератора, в проекте следует изменить значение тактовой частоты (F_CPU), скомпилировать и залить прошивку.

andvas говорить:
18.04.2012 10:50
Я пока не  разбираюсь во фьюзах , поэтому они у меня стоят по умолчанию. Я просто залил прошивку и все.     Я так понимаю, что по умолчанию они как раз настроены на внутренний генератор на какую-то частоту, а мне теперь нужно изменить их на внешний генератор от ENC60 на 12,5 МГц.    Если я найду правильные фьюзы для аtmega на 12,5МГц , мне можно будет просто их записать , не компилируя заново прошивку?

andvas говорить:
18.04.2012 22:55
Поставил фьюзы low fuse: 0x60  high fuse: 0xdf, точно не уверен правильные ли они, но температура на одном датчике стала показываться, плюс скорость работы возросла. Но если подключаю второй датчик температуры, то устройство его не видит, передергиваю питание(может поможет увидеть второй датчик), и устройство впадает в какой то ступор, как будто не может загрузиться, доступа на устройства нет, при этом линк на сетевке моргает с частотой 1 раз в 2-3 сек.. Но если тут же отключаю второй датчик, сразу начинает работать нормально.

admin говорить:
19.04.2012 10:31
Теперь фьюзы стоят правильно. Касательно датчика хотелось бы знать правильные ли значения показывает один датчик. Вечером проверю работу двух датчиков на своем устройстве и сообщу.

andvas говорить:
19.04.2012 12:49
Один датчик показывает точно, проверял термометром.

Андрей говорить:
23.04.2012 06:41
Тоже немому запустить тензодатчик((( Для чего закомментированы строчки
 #define OW_PIN2 PD6
#define OW_DIR_IN2()   ( *OW_DDR &amp;= ~(1 &lt;&lt; OW_PIN2 ) )
в файле onewire.c

Андрей говорить:
23.04.2012 06:42
Хотел написать "термодатчик", сори...)

andvas говорить:
23.04.2012 13:37
А в смысле запустить? У меня один то датчик заработал, но вот два уже не работают ((

Андрей говорить:
24.04.2012 05:43
И меня и один сначала не работал, пока фьюзы как у вас не поставил....два упорно не работают, устройство зависает....

andvas говорить:
24.04.2012 07:36
Нужно разбираться с исходниками, времени пока нет, надеюсь что автор поможет...

Андрей говорить:
24.04.2012 08:04
Я уже начал, пока что глухо, думаю будет проще переработать исходники, а и вообще есть мысль выкинуть USART и 1-ware реализовать вот так (ссылка удалена)

admin говорить:
24.04.2012 08:54
Проблема с двумя датчиками присутствует. Сейчас пытаюсь ее решить.

admin говорить:
24.04.2012 13:57
Проблема с двумя датчиками DS18B20 решена. Новую прошивку и исходный код можно качать здесь: http://www.avislab.com/blog/wp-content/uploads/2011/11/netalarm.zip
Обращаю Ваше внимание на то, что опрос датчиков DS18B20 занимает достаточно длительное время. Поэтому, чтобы прибор не "затыкался" датчики опрашиваются по очереди через каждые 5 секунд. Т.е. если у Вас 3 датчика, то сразу опрашивается датчик №1, через 5 секунд датчик №2, через 5 секунд датчик №3, через 5 секунд снова датчик №1 и т.д. Успехов!

andvas говорить:
24.04.2012 19:29
Работает!!!  будем тестить, большое спасибо

Андрей говорить:
25.04.2012 08:58
Спасибо. Тоже попробую

foxit говорить:
25.04.2012 13:25
Хотелось бы увидеть проект метеостанции.

foxit говорить:
03.05.2012 12:26
А можно проект метеостанции увидеть?

Pavel говорить:
02.06.2012 11:49
Спаял схему на МК AtMega32A AU. Загрузил Ваш hex. файл. Устройство работает не стабильно. Тактирую внешним сигналом с enc28j60. Грешу на контроллер.?

admin говорить:
05.06.2012 08:36
А в чём выражается нестабильность?

Дядя Вова говорить:
10.06.2012 12:02
Перепрошил исправленной прошивкой. Два датчика вместе НЕ заработали . Смущает то, что в архиве по ссылке лежит прошивка от 04.11.11, а схема апрельская. Так и должно быть?

Дядя Вова говорить:
10.06.2012 15:59
Нашел! Новый файл прошивки в папке netalarm/default
Все работает! Спасибо!

PS На странице Titles не выводится последняя строка с OUT10. 
Т.е. вот этот кусок main.c нужно вместо 10 поставить 11:
//Titles
	if (page==3) {
....
		plen=fill_tcp_data_p(buf,plen,PSTR("for(i=0;i&lt;11;i++)....

andvas говорить:
13.06.2012 06:41
Спасибо

Pavel говорить:
15.06.2012 14:24
Нестабильность заключается в следующем:
1.(Тактирование 12,5МГц. Hex файл Ваш.Fuse-bit выставлены соответствующим образом)При сохранении изменений во вкладке Settings устройство становиться недоступным. Во вкладку Events зайти не получается. Как только запаиваю один датчик температуры устройство также недоступно.
(Тактирование 8МГц. Hex файл создан в AVRStudio4+WinAVR.Fuse-bit выставлены соответствующим образом)
При сохранении изменений во вкладке Settings устройство становиться недоступным. Во вкладку Events зайти уже получается:-).Как только запаиваю один датчик температуры устройство также недоступно.

admin говорить:
22.06.2012 07:51
Alexust, отличная разработка! С интересом буду следить за Вашим проектом. Дисплей просто сразил! Желаю успехов.

sim говорить:
30.07.2012 17:30
Очень интересная разработка, даже не ожидал найти работу такого уровня в свободном доступе..

Владимир говорить:
05.08.2012 22:55
Меня Ваше устройство сильно заинтересовало. Мне бы очень хотелось добавить одну функцию, что бы устройство следило за интернет соединением, это возможно? А именно пинговало  сайт в интернете, в случаи не удачи срабатывала реле отключающая модем на минутку.

oldmaelstrom говорить:
07.08.2012 15:23
Владимир, есть отдельно такой проект http://tuxgraphics.org/electronics/201102/eth-network-watchdog.shtml у меня вот как раз собран и работает. Вопрос к автору - возможно ли собрать NETalarm на atmega328, вроде в makefile есть строка для atmega328?

Alexust говорить:
11.09.2012 21:09
Сейчас с одним из "храбрецов" с форума Радиокот пробуем создать одноплатную малогабаритную метеостанцию с аналогичным функционалом +USB, не считая платы индикатора. А результат - на Казусе выложу. Всем - успехов.

klimartews говорить:
17.09.2012 05:49
Подскажите, как тут вставить фото? 
Я вот пробую, но никак не выходит :(

Алексей говорить:
04.10.2012 14:32
В двух местах в статье есть намеки, что устройство кем-то производится. Можно поинтересоваться, где и за какую цену можно приобрести готовое устройство?

admin говорить:
05.10.2012 07:31
Увы, NETAlarm даже в мелкую серию не пошел.

shtorm_l говорить:
27.11.2012 12:50
здравсвуйте админ
а можно фьюзы или они по  умоланию

admin говорить:
27.11.2012 13:15
Фьюзами нужно установить тактирование от внешнего источника и отключить JTAG. Все остальные по умолчанию.

Юрий говорить:
02.12.2012 04:36
Андрей, добрый день. Можно ли Вам сделать заказ на разработку ПО - управления ENC28J60 посредством AVR Maga168 ??

admin говорить:
05.12.2012 09:06
Уточните, пожалуйста, что именно Вас интересует. Какого рода ПО? Что от него 
требуется?

Igor говорить:
22.12.2012 10:31
А можно как-нибудь получить материалы о Вашем самом первом устройстве для удаленного отключения/включения питания через web интерфейс? Мне только именно этот функционал и нужен, да и ENC28J60 есть у меня только для поверхностного монтажа...

admin говорить:
24.12.2012 08:39
Увы, проект печатной платы не сохранился. Все, что могу предложить по первому проекту - статью, с которой начинал: http://www.rlocman.ru/shem/schematics.html?di=55059 и файлы с ПО: http://tuxgraphics.org/common/src2/article06061/

Виталий говорить:
05.01.2013 10:05
Есть парочка вопросов к автору.
1. Из статьи я понял, что датчики температуры подключаются в параллель к порту PD6. Как тогда идентифицировать где первый датчик, где второй и где третий? Или опытным путём определять?
2. При установке фьюзов атмеги через UniProf достаточно снять галки с CKSEL3…0?

Владимир говорить:
05.01.2013 14:02
http://we.easyelectronics.ru/Lifelover/tcp-http-i-tinka.html 
у меня на тиньке заработало! Можно управлять четыремя нагрузками.

admin говорить:
05.01.2013 23:18
1. Да, экспериментальным путем.
2. UniProf не пользовался, снять или оставить галки сказать не могу (это зависит от того, что имел ввиду разработчик софта под установленной галкой). Биты CKSEL3…0 должны быть установлены, т.е. в нулях (0000).

Виталий говорить:
07.01.2013 15:46
В UniProf: 1-галка стоит, 0-галка снята.
Спасибо за ответ. Буду пробовать.

Viktor говорить:
26.02.2013 11:26
спасибо. 
1. сейчас собираю ваш девайс на mega328p + китайский готовый модуль на ENC28J60 .думаю получиться
2. а незадумывались идентифицировать ds18b20 и запомнить привязку к Т0,Т1,Т3 в  eeprom?

Юра говорить:
08.04.2013 20:50
Всем добрый вечер!
Собрал сий девайс, на готовом модуле ENC28j60 + мега32 и запитал всё от 5 вольт, в модуле есть место для 5 вольт, к меге также подключил 5 вольт. При подключение устройства к модему, то на модеме загорается лампочка LAN1, соответсвующая порту, на пару секунд, буквально на секунд 10 и дальше отключается, также во время этих 10 секунд по UART`у устройству можно отослать команду AT, HELP в ответ на которые устройство присылает набор непонятных символов, иероглифы какие-то... иногда ноль просто присылает в треугольных скобках. Когда на модеме лампочка тухнет, то устройство перестает также отвечать и по UART`у. Но корректно задать параметры не получается, т.к. оно не правильно отвечает на команды...

Подскажите в чем проблема???очень понравилось устройство, хочу повторить, второй день сижу над ним и никак :(

admin говорить:
09.04.2013 07:32
Вероятнее всего, схема купленного Вами модуля ENC28j60 + мега32 отличается от приведенной здесь. Убедитесь, что на плате есть стабилизатор напряжения на 3.3В. ENC28j60 и контроллер нужно питать 3.3 В. Максимальное напряжение для ENC28j60 3.6В. Если вся схема питается напряжением 5 В, то есть вероятность того, что ENC28j60 мог выйти со строя. Проверьте номинал кварца установленного для ENC28j60, он должен быть 25 МГц. При прошивки контроллера во фьюзах следует установить тактирование от внешнего источника и отключить JTAG. Все остальные по умолчанию.

Юра говорить:
09.04.2013 10:18
модуль enc28J60 отдельно от меги32. всё на одной макетке сделал просто.
В модуле ENC28J60 есть стабилизатор на 3.3В, там есть отдельная ножка на 5В.
Кварц в модуле стоит на 25 МГц, ну всё как и нужно по схеме.
фьюзы поставил как писал кто-то выше:
<b>"Поставил фьюзы low fuse: 0×60 high fuse: 0xdf,"</b>

Всё спаял как нужно по схеме, только перед SO резистора убрал на 270 Ом.. Модуль ENC первые 10 секунд активно моргает, типо связь с модемом есть. во время этого схема по UART`у хоть както общается, хоть и не корректно, в ответ на команду AT приходит бред, и на остальные тоже... Что это может значить?

Виталий говорить:
10.04.2013 20:29
Можно узнать какой по умолчанию IP-адрес в прошивке?
Прошил атмегу, собрал схему, подкинул в сеть. Пытаюсь пинговать устройство по адресам 192.168.114.20, 192.168.114.21 - ничего не пингуется. Комп конечно настроен в эту подсеть.
Или же первоначальную настройку через uart обязательно надо проводить?

Юра говорить:
11.04.2013 01:40
ну так что?? помощи не ждать??? ответьте пожалуйста хоть что-то, буду стараться своими усилиями, чтобы я напрасно не ждал помощи...

Буду благодарен любой подсказке.

andvas говорить:
11.04.2013 07:11
admin не сочтите за рекламу, или за что нибудь еще, но можно я посоветую Юре спросить еще вот здесь на форуме http://www.ab-log.ru/forum/viewtopic.php?f=1&amp;t=6&amp;start=460. В этой ветке , а конкретно на этой странице пользователь ( vgolinsky ) собирал устройство как раз с вашим модулем. Спросите его в личку, возможно он что нибудь подскажет. Ну и вообще посмотрите эту ветку, потому что я точно не помню, но кто то еще вроде собирал с таким же модулем.

admin говорить:
11.04.2013 07:43
По умолчанию IP 192.168.114.21 (IP указан в исходниках). Uart можно вообще не использовать.

Юра говорить:
11.04.2013 19:50
благодарю за ссылку, буду там интересоваться.

Юра говорить:
11.04.2013 19:53
кстати, сегодня спаял схемку на тиньке управление 4-мя нагрузками с easyelectronics. То вообщем у меня  проблема и с той схемой такая же как и с этой, модуль подключается к модему, на модеме горит индикатор, а спустя 10 секунд тухнет и помогает только перезагрузка схемы с модулем ENC, т.е. вытащить питание и вставить через секунд 30. Не значило бы это что у меня ENC модуль подгоревший??? или каким нибудь образом я его припалил ?

Vlad говорить:
14.04.2013 16:04
Собрал Вашу схему, все заработало сразу, и вообще трудностей не возникло.  За разработку схемы и софта, спасибо. Мне с легкостью удалось переделать софт под свои нужды. Но, хотелось бы доработать  управление  по wi fi. Я просто  внутри роутера wifi, разместил плату, и как то получилось. Но это  монстер вышел. Может есть мысли какие по поводу доработки wifi?  Понимаю, что проще роутер переделать в подобие netalarm. Но все таки хочется подумать над доработкой схемы радиомодулем.

Виталий говорить:
15.04.2013 18:11
Да, всё заработало! Спасибо за полезную разработку!

Виталий говорить:
16.04.2013 07:29
Мне необходимо увеличить число портов выхода в данном устройстве. Подскажите пожалуйста чем компилировать данные исходники? Поставил AVRStudio 5, но там, как я понял, открывает только проекты. Может есть простой компилер для командной строки (как для PIC-ов)?

Виталий говорить:
16.04.2013 08:26
Установил opensource WinAVR.
Пробую make - ругается на test0.c - такого файла не существует. Я так понимаю с Makefile что-то...
С какими опциями компилировать, чтобы получить netalarm.hex ???

up-too-date говорить:
25.04.2013 21:40
Всем привет, собрал ALARMa atmega32 + ENC28j60 оба на китайских маленьких платках, заработало почти сразу перепутал MISO  и MOSI на  ENC28j60 и не подтянул CS, перед сборкой/пайкой собрал это все в ПРОТЕУСЕ - работает в ключая WEB интерфейс, модуль с кварцем 16Мгц, частоту поправил в MIKE файле и еще какихто 3 или 4 INKLUDных файлах (воспользовался бональным посиком по F_CPU) работает на 16МГц (на других частотах пробывал только в протеусе), кстати насчет протеуса он уменя развернут в виртуальной машине ХР мне так удобней я ее запсукаю на разных машинах (компах) и что я заметил, видимо из-за разной производительности железа наблюдется следующее, на домашнем (мощном) компе все работает норм при любых (разумных ) частотах тактирования atmegИ, а на рабочем при тактировани 12.5МГц протеус тупит или пишет ошибку (уже не помню), и выход их этой ситуации при симуляции я выбираю тактирование от внутренего RC 1МГц, WEB начинает работать ОК, а UART И 1-ware  не работет тайминг другой.
в протеусе симулировал с 18S20 как поведет себя с 2 или 3 не пробывал.
из пожеланий и собственых хотелок, приколотить SD карточку для красоты WEB, логирования и BOOTloderA, или FLASH i2c типа 24сXX для BOOTloderA, былобы удобно прям через WEB обновлять прошивки , темболее UPD тут есть значит эту функцию сюда прибить не сложно. А также расширить число выходов и может сделать парочку с ШИМ.

Вопрос АВТОРУ, в какой переменой храниться IP, я не очень понял он при из менении прописывается в память ПРОГРАММ? я поменял IP в протеусе залил HEX в железо,  а IP остался новый (я НЕ правил IP в исходнике, да я и не нашел где он там).

ENC28j60  сильно греется и наверно жрет не мало думаю запитать его через стабилтзатор 3,3В большего размера.

up-too-date говорить:
25.04.2013 21:46
совсем забыл если кому то нужет рабочий проект в ПРОТЕУСе пишите, (как его сюда выложить я не знаю)

Виталий говорить:
29.04.2013 14:16
up-too-date, можете скинуть мне плиз на мыло: degesha(гав-гав)gmail.com
Я сейчас перерабатываю исходники - пытаюсь использовать PORTC для выходов (1 и 0). Так вот указываю в функции main() ===&gt;
DDRC = 0xFF; // все выводы порта C в выход
Затем пытаюсь поставить их все в "единицу"===&gt;
PORTC = 0xFF; // установить на все выходы 1
Устанавливаются в 1 только PC0, PC1, PC6, PC7. Т.е. на портах PC2, PC3, PC4, PC5 - глухо, т.е. НУЛИ. Может эти (TDI, TDO, TMS, TCK соответственно) надо по-другому инициализировать? Что уже не перепробовал только, даже начинаю думать, что спалил их...

andre говорить:
29.04.2013 14:35
JTAG во фьюзах отключите.

Виталий говорить:
29.04.2013 15:12
Да, помогло. Спасибо.

up-too-date говорить:
04.05.2013 15:14
скинул проект и мини инструкцию

Виктор говорить:
04.05.2013 17:12
А разве с 32 мегой будет по тяжелее?

Виктор говорить:
04.05.2013 18:44
Я повторил на аттине2313 работает превосходно.4мя каналами управляет.

tlt83 говорить:
21.05.2013 14:09
рабочая схема в протеусе и исходниками http://yadi.sk/d/szwjHwr251o6S

вадим говорить:
07.06.2013 21:27
в каком файле и какие строчки поменять порт PD6 цифрового датчика на PD5(OC1A) ?

andre говорить:
11.06.2013 09:47
строка:
#define OW_PIN  PD6
в файле:
onewire.h

вадим говорить:
15.06.2013 00:18
//#define OW_PIN1  это как PD7 ? а что еще нужно изменить ?  
//#define OW_DIR_IN2()   ( *OW_DDR &amp;= ~(1 &lt;&lt; OW_PIN1 ) )

andre говорить:
17.06.2013 09:59
строка:
#define OW_PIN PD6
в файле:
onewire.h

Строки
//#define OW_PIN....
//#define OW_DIR_IN...
закомментированы. Т.е. не работают.

Додати коментар
Code
* - обов'язкові поля

Архіви