RU EN DE
Illegal Systems Corporation

Чем проще, тем лучше.

Подключение PIC18 к Ethernet (10BASE-T) без контроллера

Иногда бывает необходимо подключить какой-нибудь простенький датчик к сети. Городить ради этого что-то на многоногом и мощном процессоре со встроенным контроллером Ethernet, или ставить отдельный контроллер - перебор. Это как перевозить один кирпич на многотонном грузовике. Требуется-то, всего навсего, периодически посылать пакет с данными датчика в сеть по заданному адресу. Как выяснилось в результате экспериментов, с такой задачей может справиться самый простой PIC18F1320 без помощи какого-либо контроллера. А ведь контроллер, кстати, зачастую стоит гораздо дороже самого процессора. Уж про то, что производители однокристаллок по каким-то им одним ведомым причинам напрочь отказываются производить процессоры со встроенным контроллером Ethernet в небольших корпусах на 8-18 выводов и с нормальным питанием до 5 В я вообще молчу. И это в то время, когда Ethernet окончательно и безповоротно стал самым распространённым способом обмена данными, когда Ethernet розетка найдётся даже в самом тёмном углу дома, предприятия или офиса. В общем, раз производители даже не собираются предоставлять сообразное задаче решение, развлекаясь со всякими TQFP100 и 3.3V only, займёмся этим вопросом сами.

Проект позволяет подключить любой PIC c тактовой частотой Fosc = 40MHz и наличием синхронного режима в EUSART к сети Ethernet по витой паре на скорости 10 Мбит в режиме Half Duplex без использования контроллера Ethernet. Сигнал Ethernet формируется с помощью логических элементов XOR 74AC86 (К1554ЛП5).

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



Схема EtherPIC

Ethernet 10Base-T - это дифференциальный манчестер 10Мбит.



Манчестер (из wikipedia)

Манчестер можно сделать поXORив CLK и DATA надлежащей частоты, если CLK - меандр и DATA синхронна c CLK.

CLK и DATA в 10Мбит легко даёт USART любого PIC способного работать на частоте 10МГц (Кварц 40МГц или PLL).

Есть ещё импульсы NLP (Normal Link Pulse) которые дают понять другой стороне, что к линии подключено устройство - раз в 16 мс положительный импульс длиной 100 нс и TP_IDL - сигнал окончания фрейма - сразу после фрейма положительный уровень длиной более 200 нс.

Соответственно, загоняем USART на скорость 10Мбит (BAUDCTLbits.BRG16 = 0; SPBRG = 0;), на выходы CK(RB1) и DT(RB4) вешаем XOR (IC2A) и получаем манчестер. Пропустив его через инвертирующий XOR (IC2C) и неинвертирующий XOR (IC2D) получаем дифференциальный манчестер, хоть с запаздыванием на элементах, но одинаковым для обоих полярностей.

Чтобы установить тишину в линии передачи нужно инвертирующий XOR (IC2C) сделать неинвертирующим, в результате на обеих выходах выходных элементов будет одинаковый уровень, что даст полное отсутствие сигнала в линии. Это достигается использованием выхода RB0 для управления инвертирующим XOR (IC2C). Лог."0" на RB0 запрещает выдачу сигнала в линию, лог."1" - разрешает.

Чтобы сформировать NLP и TP_IDL нужно заранее выставить на выходах RB1(CK) лог."0" и на RB4(DT) лог."1". При отключённом USART на входах первого XOR (IC2A) появляется лог."1". Теперь можно сформировать импульс нужной длины управляя выходом RB0.

Выходной трансформатор - обычный трансформатор для LAN, который применяется в сетевухах и свитчах с соотношением обмоток 1:1. Можно использовать и комбинированный модуль, где трансформатор установлен в корпусе разъёма RJ45. Кроме того, выходной трансформатор можно сделать самому. Трансформатор мотается на небольшом ферритовом колечке с отношением обмоток 1:1 так, чтобы индуктивность одной обмотки была больше 350 мкГн. Для ферритового колечка размером 7.15 x 2 x 1.5 мм и проницаемостью 2000 обмотки будут по 17 витков.

Может потребоваться подбор резистора. Изначально я поставил резистор 100 ом, но оказалось, что хотя сигнал на нагрузке 100 ом вписывается в стандарт, многие устройства (свитчи, сетевухи) теряли пакеты при приёме. Отсутствия потерь на всех доступных для проверки сетевых устройствах удалось добиться при сопротивлении в 33 ома. При этом, сигнал остался в рамках стандарта. Скорее всего дело в сопротивлении открытых транзисторов выходных каскадов IC2, которое значительно больше 0, как я решил сначала, выбрав резистор 100 ом. Возможно, при использовании других серий 74xx86 (ALS, F, HCT...) этот резистор нужно будет подобрать, чтобы добиться безперебойной работы и не вылезти из стандарта.

Простейший пример, который лежит в исходниках раз в секунду посылает UDP пакет с 192.168.255.200:1024 на 192.168.255.1:1024. MAC адрес устройства - 00:DE:AD:BE:EF:00, MAC получателя - 00:01:02:03:04:05. Если нужны другие адреса - просто поправьте в исходниках и пересоберите прошивку. В примере, в UDP пакете 1-й и 2-й байты данных содержат данные PORTA и PORTB соответственно. 18-й байт содержит значение флага RCONbits.TO, 1 означает нормальный старт процессора после подачи питания, 0 означает что произошла перезагрузка из-за таймаута WDT (случилось зависание программы).

Если у создаваемого устройства есть интерфейс с пользователем, то имеет смысл предусмотреть изменение сетевых настроек пользователем и сохранение их в EEPROM. Ethernet-пакет целиком передаётся из RAM (статический массив в примере - лишь для инициализации заголовков пакета в RAM, чтобы много кода не писать), поэтому любые данные пакета полностью доступны для изменения, от преамбулы до FCS (Frame Check Sequence), ну и все тайминги тоже можно изменять как угодно, что, кстати, нереально при использовании контроллера Ethernet.

  • Софт, исходники, прошивка - всё тут
  • Описание PIC18F1320 - на сайте Microchip
  • Всё про Ethernet - Стандарты 802.3 на сайте IEEE
  • Обсуждение на форуме MICROCHIP.SU - в этом топике
  • SDCC - компилятор C для всяких мелких процессоров, который потребуется для сборки прошивки
  • gputils - ассемблер, линкер и пр. для процессоров PIC, который потребуется для сборки прошивки
 
 

©2005 Illegal Systems Corp. Designed by Stanson.