Электроника для всех
Блог о электронике
Ethernet модуль на ENC28J60
Уже давно был сделан Ethernet модуль, но все валялся в ящике. Никак руки не доходили.
Вот, наконец, собрался. Проверил на примерах от lifelover — работает.
В качестве микрухи используется ENC28J60 в SSOP28 корпусе. Бывает также в DIP28 и QFN корпусе. В общем, на любой вкус.
Схемотехника
Схема типейшая, по даташиту. Никаких заморочек, разве что применен разъем с трансформатором J00-0086NL, тогда как лучше было бы поставить J00-0066NL — у него коэффициент трансформации оптимальней (1:1). Но что было под рукой то и поставил. Можно и отдельный трансформатор взять, вроде FC-22 который стоял в модуле для WIZ100SR
Еще одна важная деталь. Резистор Rbias, у меня он на схеме обозначен как R8 2k 1% нужно подбирать исходя из ревизии микросхемы. Я поставил 2.2кОм. Errata рекомендует
For silicon revisions, B1 and B4, use a 2.7 k, 1% external resistor between the RBIAS pin and ground. The value shown in the data sheet (2.32 k,) is correct for revisions B5 and B7.
Деталей не много, развести все удалось по одной стороне практически, с парой перемычек.
Дорожки мелковаты, 0.3мм, но не думаю, что у кого то это вызовет сильных затруднений. Сделано ЛУТом без проблем.
Интерфейс
Связь с контроллером по SPI интерфейсу.
- SO — MISO
- SI — MOSI
- SCK — SCK
- CS — SS Впрочем, выбор кристалла SS тут может быть повешан куда угодно.
- RESET — если никуда не подключать, то лучше его повесить на +3.3 вольта. Чтобы не болтался и не создавал глюки.
- INT — выход прерывания. При приеме пакета может дрыгать этой ногой и заставлять проц срочно обрабатывать пакет. Или, как минимум, принять во внимание, что надо получать данные.
- WOE — Это, как я понял, Wake On Ethernet. Я никуда не подключал
- 3V3 — питание на 3.3 вольта. Микруха жручая, потребляет 250мА и весьма активно при этом греется. От платы не отпаивается конечно, но горячая — палец еле держит. Да, несмотря на питание в 3.3 вольта ее входы толерантны к 5 вольтам
- GND — земля
Подробнейшее описание работы с этой игрушкой можно найти в сообществе, в цикле статей посвященной этой микросхеме и работе с Ethernet в частности. Подробней вы вряд ли где найдете 🙂
З.Ы.
Сейчас эта поделка у меня плавно мутирует в боковой модуль для Pinboard II и скоро пойдет в производство.
Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!
А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.
Источник
Ethernet — устройство на микроконтроллере AVR
Microchip ENC28J60
Теория:
Ethernet традиционно был довольно таки сложным интерфейсом. Все Ethernet чипы имели до сегодняшнего дня 100 и более контактов, их было тяжело найти в маленьких количествах и ими было тяжело управлять с помощью маленького микроконтроллера с небольшим количеством памяти. Компания Microchip изменила мир с появлением их нового Ethernet чипа — ENC28J60.
ENC28J60 это небольшой чип всего с 28 контактами, он имеет интерфейс SPI, который легко использовать с любого микроконтроллера.
Это открывает целый мир совершенно новых прикладных задач. Вы можете легко создавать небольшие устройства, которые могут распространиться на все в доме и просто будут подключены в сеть Ethernet. Вы более не должны разделять последовательные подключения или другие шины. Все может быть легко подключено через Ethernet. Расстояние больше не ограничивающий фактор. Даже WIFI соединения возможны, так как вы можете подключить устройства к беспроводному мосту.
Все детали можно заказать здесь shop.tuxgraphics.org. Программное обеспечение и схемы свободно доступны (Лицензия GPL V2).
ENC28J60 Ethernet контроллер. Вводный курс
Чип ENC28J60 от компании Microchip это сказочный чип. Он включает протокол приема/передачи данных, MAC адрес, и протокол физического уровня в одном чипе. К нему подключаются несколько внешних элементов, в основном это кварцевый резонатор и Ethernet трансформатор, так же известный как магнит. Внешне он представляет из себя 28 – выводный чип в DIP корпусе, легко паяется и идеально подходит для применения в хобби.
Рисунок 1: Структурная схема подключения ENC28J60
Микроконтроллер таким образом может управлять любым вашим устройством: Вы можете подключить какие либо датчики (фото, тепловые), вы можете что ни будь включать и выключать, можете подключить LCD дисплей и т.п.
План действий
В этой первой статье мы создадим устройство с множеством интерфейсов ввода/вывода и входами аналого-цифрового преобразователя (АЦП). Однако мы будем управлять только небольшим реле, чтобы включать и выключать что ни будь. В последующих статьях мы сможем таким образом использовать это же устройство для более сложных вещей.
Основная цель статьи – показать схему подключения и объяснить программу. Мы будем использовать протокол UDP для посылки команд микроконтроллеру. Эти команды и будут причиной того, что микроконтроллер будет включать или выключать реле.
Я думаю, вполне возможно осуществить даже протокол TCP. Размер программы, реализующей UDP в данном устройстве – менее 3х килобайт, это меньше половины памяти контроллера Atmega88. TCP позволит нам управлять устройством через web браузер. Я пока что это не испытывал.
Схема
Здесь представлена схема. Большая ее часть стандартная для ENC28J60. Важно правильно соблюсти полярность светодиода LED-B, так как он определяет дуплексный процесс в чипе. Устройства, работающие в режиме полу-дуплекса способны обрабатывать только небольшой трафик.
Рисунок 2: Принципиальная схема устройства. (кликните на изображение, чтобы получить pdf версию, пригодную для печати).
Принципиальную схему предыдущей версии устройства вы найдете в секции загрузки. Реле подключается к разъему CONN3. Заметьте, диод D1 не бесполезен и не включен в неправильном направлении, даже если с виду кажется таковым. Он здесь для тех, кто планирует подключить к схеме небольшое реле с рабочим напряжением 6 вольт. Диод защищает целую схему от очень высокого напряжения, которое может быть вызвано катушкой реле.
Если вы используете реле с большой катушкой, вы должны также добавить резистор параллельно реле (1 или 2,2 кОм). Диод имеет конечное время отклика, и резистор предотвратит слишком быстрый рост напряжения, прежде чес диод срежет его.
Если вы планируете использовать нестабилизированный источник питания напряжением 9 вольт и более, в комбинации с 6-ти вольтовым реле, подключенном к разъему CONN3, вы можете добавить небольшой резистор (около 33 Ом, подберите экспериментально) последовательно к реле, чтобы компенсировать избыток напряжения.
Разъемы, на схеме названные IO-port и Analog-IN сейчас не используются. Они предназначены для будущей функциональности, которая будет описана в последующих статьях. В этом проекте мы используем только разъем CONN3.
Ethernet требует довольно больших токов, потому как работает с достаточно длинными кабелями. Вышеописанная схема потребляет около 200 миллиампер при 3,3 вольтах. Микросхема стабилизатора LM2937-33 требует таким образом охлаждения, если питающее напряжение более 5 вольт. Небольшого алюминиевого радиатора будет вполне достаточно.
Ethernet трансформаторы и фильтры
Микросхеме ENC28J60 требуется трансформатор с соотношением витков 1:1, аттестованный для 10base-T. Существует несколько видов очень хороших RJ45 разъемов, называемых «Magjack», которые имеют интегрированный трансформатор и дополнительные светодиоды. В дополнение вам нужна небольшая фильтрующая катушка (на схеме L1). 5-ти миллиметровое ферритовое кольцо с 5-7 витками тонкой проволоки подойдет.
Обновления устройства в 2007 году
В первом квартале 2007 года я переделал устройство, принимая во внимание следующие пункты:
1. Диод D1 был неправильно подключен к общему проводу GND вместо Vdd. Интересно, что никто не заметил этого недостатка. Неправильно подключенный диод защищал транзистор от переполюсовки, но не защищал против пиков напряжения, создаваемых катушкой реле. Однако, если вы последуете моим рекомендациям и подключите дополнительный резистор параллельно катушке, после размыкания цепи ток катушки будет течь через него и схема таким образом будет защищена.
2. Микросхема ENC28J60 имеет выход тактовой частоты. Сначала я хотел использовать его, но возникла проблема с прерыванием тактовых сигналов при перезапуске, что приводило к неправильной работе AVR микроконтроллера. Я связывался со службой технической поддержки фирмы Microchip, но они не поняли проблемы. Может быть PIC контроллеры фирмы Microchip менее чувствительны к непостоянным тактовым сигналам. В конечном счете я вычислил, что это работает если я не использую перезапуск и аппаратными и программными средствами во время инициализации чипа. Сейчас я использую только программный перезапуск и это работает хорошо. Микросхема ENC28J60 вырабатывает тактовый сигнал частотой 12,5 мегагерц. Это дает небольшое увеличение скорости по сравнению со встроенным в atmega88 тактовым генератором частотой 8 мегагерц. Фирма Atmel предписывает, atmega88 может работать на тактовых частотах 0-20 мегагерц при напряжении питания 4,5-5,5 вольт или 0-10 мегагерц при напряжении 2,7-5,5 вольт. Исходя из этого мы должны использовать максимальную тактовую частоту не более 10 мегагерц. Теоретически для нашего случая максимально допустимая тактовая частота будет где то между 10 и 20 мегагерц. Мои тесты показали, что при 3,3 вольтах на тактовой частоте 12,5 мегагерц устройство работает стабильно и надежно.
Если вы уже собрали предыдущую схему, не беспокойтесь. При разработке новой программы я учел особенности старого устройства. Таким образом: новое устройство не будет работать со старой программой, но старое устройство будет работать с новой программой. Для старого устройства не требуется ничего переделывать. Никогда ничего не меняйте в работающем устройстве! Для тех, кто желает взглянуть на схему старого устройства от 2006 года есть секция загрузки.
Шаг за Шагом. Сборка и тестирование.
Проблема всех устройств на микроконтроллерах в том, что их невозможно собрать с первого раза. Обычно, устройство отказывается работать по ряду причин, и тогда возникает главный вопрос – где здесь ошибки. Ошибки обычно попадаются и в аппаратной и в программной части. Вы имеете преимущество используя надежную основу. Вы знаете, что, по крайней мере эта программа работает и схема не содержит ошибок, так как вы основываетесь на моей разработке. Несмотря на это, все же имеет смысл собирать устройство по шагам и тестировать после каждого шага. Таким образом вы можете сузить область возможных ошибок.
Шаг первый:
Припаяйте микросхему LM2937-33 и необходимые конденсаторы к схеме. Разъем питания (на схеме обозначен как RawDC-In) к лабораторному источнику питания напряжением 5 вольт, и используя вольтметр, проверьте напряжение на выходе стабилизатора, должно быть 3,3 вольта. Теперь возьмите маленькую лампочку на 3,5 вольт от карманного фонаря или на 6 вольт от велосипеда и подключите ее к выходу стабилизатора. Проверьте напряжение, оно должно остаться равным 3,3 вольтам, даже при нагрузке.
Шаг второй:
Впаяйте микросхему ENC28J60, разъем «magjack» и все остальные детали кроме контроллера Atmega88. Снова подключите схему к лабораторному источнику в 5 вольт, ограничив максимальный ток в 300 миллиампер. На выходе стабилизатора вы должны опять получить 3,3 вольта. Теперь подключите Ethernet кабель от вашего сетевого концентратора (будь то Switch или Hub) к устройству. Зеленый светодиод на разъеме «Magjack» должен засветиться. Также должен засветиться светодиод, обозначенный как «link» на вашем концентраторе.
Ethernet использует протокол автоматической проверки целостности линии. Зеленый светодиод показывает, что проверка данной линии проходит успешно.
Шаг третий:
Припаяйте контроллер Atmega88 к плате. Подключите питание. Распакуйте файл eth_rem_dev-1.X (загрузить можно в конце статьи) и запустите команду «make test0.hex» из под шелла (ОС Unix или Linux). Эта команда скомпилирует файл test0.hex. загрузите этот файл в микроконтроллер (командой «avrdude -p m88 -c avrusb500 -e -U flash:w:text0.hex» или изменив аргумент команды «make»: «make load_test0»). Если у вас есть один из программаторов то tuxgraphics, вы можете просто напечатать «make load_test1» в Linux. Заметьте, что Atmega88 требует как минимум avr-glibc-1.4.X.
После этого красный светодиод замигает с частотой приблизительно 1 герц.
Сейчас все компоненты схемы уже проверены и будет очень хорошо, если устройство заработает с конечными программами. Во время разработки я использовал еще несколько программ для тестирования, которые включил в пакет eth_rem_dev-1.X.
* Тест 1: Позволит вам пинговать устройство по сети.
* Тест 2: Посылка и получение строки.
Все они описаны подробнее в файле README пакета eth_rem_dev-1.X. вы также можете использовать их как образцы программ для собственных разработок.
Последний шаг:
Отредактируйте файл main.c и измените 2 строчки:
static uint8_t myip[4] = <10,0,0,24>;
для первого устройства, что вы соберете, вам не требуется менять параметр mymac. Но вам вероятно потребуется изменить IP адрес (параметр myip). Это должен быть свободный адрес из диапазона адресов вашей сети.
Здесь представлен диапазон частных IP адресов (не маршрутизируемых в интернете), которые вы можете использовать:
Маска подсети Сетевые адреса
255.0.0.0 10.0.0.0 — 10.255.255.255
255.255.0.0 172.16.0.0 — 172.31.255.255
255.255.255.0 192.168.0.0 — 192.168.255.255
Например: ваш WIFI маршрутизатор может иметь IP адрес 192.168.1.1, ваш компьютер может иметь адрес 192.168.1.12. это означает, что вы можете использовать адрес 192.168.1.10 и оставить некоторый диапазон адресов для других компьютеров в сети. Если вы используете в сети протокол DHCP, проверьте, чтобы этот адрес не дублировался в сети (исключите его из диапазона DHCP).
Теперь скомпилируйте программу командой «make», загрузите файл eth_rem_dev.hex в микроконтроллер пошлите устройству ваш первый пинг из шелла.
ping IP адрес вашего устройства(что вы назначили).
Вы должны получить ответ с 0% потерянных пактов (остановите команду нажав crtl-c).
Использование пакета eth_rem_dev чтобы включать и выключать что либо
Единственная полезная функция, реализованная в коде микроконтроллера – включение и выключение транзистора, подключенного к контакту PD7 (разъем CONN3). Остальная функциональность придет позднее.
Я написал небольшую программу – udpcom, которая посылает строку символов по протоколу UDP и ждет ответную строку. Udpcom также включен в пакет eth_rem_dev-1.X. эта программа очень маленькая и может быть перенесена на множество операционных систем с небольшими изменениями. Если вы переписали код программы под другую операционную систему, которая еще не поддерживается, пришлите мне код и я помещу его в следующий релиз.
Чтобы скомпилировать программу udpcom войдите в каталог eth_rem_dev-1.X/udpcom и скомпилируйте правильную версию программы из соответствующего подкаталога командой «make».
Команда включения реле: t=1
Команда выключения реле: t=0
Запрос состояния реле: t=?
Синтаксис команды udpcom: udpcom пароль, X=Y, IP адрес
Пароль, установленный по умолчанию в пакете eth_rem_dev-1.X — «secret». Вы можете изменить его в том же самом файле main.c, в котором вы изменяли IP адрес.
Вот пример:
./udpcom/unix/udpcom secret,t=1 10.0.0.24
II: data: secret,t=1, ip: 10.0.0.24 port: 1200
Сейчас транзистор, подключенный к выводу PD7 должен быть включен и, если вы подключили реле к этому транзистору, реле должно быть также включено.
./udpcom/unix/udpcom secret,t=? 10.0.0.24
II: data: secret,t=?, ip: 10.0.0.24 port: 1200
Здесь мы запросили состояние устройства, ответ «OK: 10.0.0.24: t=1» означает, что транзистор включен.
./udpcom/unix/udpcom secret,t=0 10.0.0.24
II: data: secret,t=0, ip: 10.0.0.24 port: 1200
Теперь транзистор, подключенный к выводу PD7 должен быть снова выключен.
Готовое к сборке Ethernet устройство удаленного переключения
Вот две фотографии устройства, которое я собрал.
Вид спереди с открытым корпусом: видно два светодиода вверху разъема «Magjack» и три дополнительных. Зеленый показывает что питание включено, красный загорается когда обрабатывается пакет UDP, желтый показывает текущее состояние реле (включено или выключено). Разъемы сзади это питание и выход реле. Слева, накрытий куском белого пластика, размещен блок питания на 9 вольт.
Вид сверху с открытым корпусом: видно небольшую Ethernet плату с микроконтроллером справа, слева (обособлены и практически не видны) реле и блок питания. Микросхема LM2937 прикреплена одним винтом к серой алюминиевой передней панели. Боковые стенки выполнены из дерева, верхняя и нижняя крышки из пластика.
Структура программ
Прежде чем мы рассмотрим программу для микроконтроллера, мы должны изучить как работает программирование сетевых сокетов в Linux. В нашем устройстве мы можем создать (и создаем) каждый бит кадра Ethernet. В Linux (или в любой порядочной ОС) мы работаем в более цивилизованной среде и не можем делать все, что захотим.
Каждый хост (любое, подключенное к сети устройство, которое имеет IP адрес, будь то компьютер, роутер и т.п.) имеет один Ethernet адрес (MAC адрес) на интерфейс и один или несколько IP адресов на интерфейс. Эти MAC адреса уникальны во всем мире, это сделано для того, чтобы упростить установку сетевых устройств. В нашем случае MAC адреса должны быть уникальны хотя бы в пределах локальной сети, это: Персональные компьютеры, маршрутизатор, WIFI роутер и маршрутизатор Интернет провайдера. МАС адреса всех этих устройств должны быть уникальны.
Сетевые программы разделены по номерам портов. Не может быть двух активных номеров портов одновременно. Например, вы не можете иметь на одном компьютере два web сервера, одновременно работающих на 80 порту. Когда вы посылаете в сеть пакет данных, локальный номер порта выделяется случайным образом и данные посылаются к удаленному IP адресу и заданному номеру порта (например, 80=http).
Если в системе запущен процесс приложения, прослушивающий порт с номером X локально (сервер), вы не можете запустить другое приложение, посылающее данные на это порт. Однако одно и то же приложение может и посылать, и принамать данные с одного и того же порта.
Порты с номерами, меньшими 1024 зарезервированы. Используем порт с номером 1200.
Сетевой интерфейс компьютера Ethernet AVR устройство
Источник