Доброго времени суток, уважаемые хабровчане!
Разрабатываемое устройство в чем-то повторяет IRemo: Tap, а также некоторые другие аналоги, о которых писалось уже на хабрахабре. Мой же вариант будет более простым и дешевым. Для коммуникаций я выбрал обычную витую пару, а для управления у устройства будет своя вебстраничка.
В данной статье описан первый этап-создание «мозгов» для будущего проекта.
Всегда проще разбивать разработку сложных вещей на простые «кирпичики». Это называется по научному принципом модульности. Так что для начала подумаем, и разобьем нашу идею на блоки. Глобально во всем приборе я выделил 3 основных модуля: блок управления, блок коммутации и блок питания.
Речь в данной статье пойдет о блоке управления, который и будет работать вебсервером, а также принимать и обрабатывать веб-формы с запросами. А теперь садимся и за чашечкой колы нарисуем блок-схему разрабатываемого модуля:

Расшифровка обозначений такая:
Разработку первого кирпичика начинаем с выбора элементной базы. После ознакомления с микросхемами доступными на территории Украины, мною был выбран мк C8051F340-GQR(64кб флеша, 4кб ОЗУ, 10-битный АЦП, кроссбар позволяющий конфигурировать UART, АЦП и SPI на любые порты процессора, USB, 48Мгц тактовой частоты от встроенного источника, датчик температуры) в качестве «мозгов» проекта и микросхема CP2200-GQR в качестве езернет контроллера, который обеспечит нас скоростью до 10 мбит\сек(чего нам с головой хватит). Обе микросхемы существуют в корпусах TQFP-48, предназначенных для поверхностного монтажа. Более подробные характеристики в даташитах C8051F340 и CP2200.
Из остальных компонентов на первом этапе нам понадобиться Ethernet разъем с трансформатором 1:1, желательно интегрированным в сам разъем. Я выбрал HR911105A.
Отлично микросхемы добыты(за езернет контроллером пришлось побегать, есть аналог CP2201 но он в корпусе QFN-28, а паять его немного трудновато). На данном этапе мы будем создавать принципиальную схему.
Вот что у меня получилось(изображение кликабельно):

Теперь некоторые пояснения:
Создана принципиальная схема разводим. Тут проблем быть не должно. Так как я печатал платы на заводе(ДНВП Електронмаш), то я выбрал схему с 2х сторон(верхний правый угол оставался пустым, потому я насверлил там отверстий, получилась этакий кусок макетной платы).

Ну, а дальше экспортируем все в формат Gerber(рисунок платы, каждая сторона в своем файле), отверстия сохраняем в формате NC drill.
Если у вас не лицензионный альтиум, не забываем удалить все ссылки на ПО из гербер файлов, иначе Вас разведут на штраф(прецеденты были). По возможности пользуемся лицензионным ПО.
Получаем платы, собираем:
Верх:

Низ:

Обилие проводов связано с тем что я не знал какой будет использован программатор, предполагалось изначально подавать питание и данные с программатора, но увы я допустил пару ошибок при разводке программатора и он не заработал. Потому он был приведен к разъему используемого(заодно и макетная часть пригодилась).
Без описания всех частей приводить пока код прошивки не буду, а прошьем туда стандартный пример от компании Silabs. Тут только одна проблема все примеры заточены под силабовский отладочный модуль, с приставкой CP2200DK. Отличия тут только в управляющих пинах, потому открываем файл main.c
Ищем функцию void PORT_Init (void) меняем ее код на:
Находим функцию void ether_reset_low() меняем на:
Проделіваем тоже с void ether_reset_high():
Открываем mn_userconst.h
устанавливаем айпи адресс:
в void main()
после port_init();
добавить
Далее идем в VFILE_DIR
правим index.html
Выполняем update.bat.
Таким образом из index.html сделается стандартный массив 16-ричных значений.
Компилим, собираем в hex файл, назначаем компу айпи-адрес в той же сети и прошиваем.
Пингуем:

Ну и заходим посмотреть на результат:

Если не пингуется-проверяем кабеля, код программы, а если совсем плохо-идем к знакомым, берем осцилограф и дебажим.
Продолжение в следующих статьях.
Благодарю моих друзей за помощь в создании устройства и статьи.
Разрабатываемое устройство в чем-то повторяет IRemo: Tap, а также некоторые другие аналоги, о которых писалось уже на хабрахабре. Мой же вариант будет более простым и дешевым. Для коммуникаций я выбрал обычную витую пару, а для управления у устройства будет своя вебстраничка.
В данной статье описан первый этап-создание «мозгов» для будущего проекта.
Итак этап номер ноль
Всегда проще разбивать разработку сложных вещей на простые «кирпичики». Это называется по научному принципом модульности. Так что для начала подумаем, и разобьем нашу идею на блоки. Глобально во всем приборе я выделил 3 основных модуля: блок управления, блок коммутации и блок питания.
Речь в данной статье пойдет о блоке управления, который и будет работать вебсервером, а также принимать и обрабатывать веб-формы с запросами. А теперь садимся и за чашечкой колы нарисуем блок-схему разрабатываемого модуля:

Расшифровка обозначений такая:
- БП Блок питания,
- БУ Блок управления,
- Кн н-й коммутационный узел(наше устройство реализует только выключение и включение света).
Первый кирпич.
Первый этап.
Разработку первого кирпичика начинаем с выбора элементной базы. После ознакомления с микросхемами доступными на территории Украины, мною был выбран мк C8051F340-GQR(64кб флеша, 4кб ОЗУ, 10-битный АЦП, кроссбар позволяющий конфигурировать UART, АЦП и SPI на любые порты процессора, USB, 48Мгц тактовой частоты от встроенного источника, датчик температуры) в качестве «мозгов» проекта и микросхема CP2200-GQR в качестве езернет контроллера, который обеспечит нас скоростью до 10 мбит\сек(чего нам с головой хватит). Обе микросхемы существуют в корпусах TQFP-48, предназначенных для поверхностного монтажа. Более подробные характеристики в даташитах C8051F340 и CP2200.
Из остальных компонентов на первом этапе нам понадобиться Ethernet разъем с трансформатором 1:1, желательно интегрированным в сам разъем. Я выбрал HR911105A.
Второй этап.
Отлично микросхемы добыты(за езернет контроллером пришлось побегать, есть аналог CP2201 но он в корпусе QFN-28, а паять его немного трудновато). На данном этапе мы будем создавать принципиальную схему.
Вот что у меня получилось(изображение кликабельно):

Теперь некоторые пояснения:
- Начнем с соеденения мк и CP2200. Ситуация очень упрощается из-за наличия на борту интерфейса EMIF(Интерфейс внешней памяти) у обоих микросхем, ведь по сути дела CP2200 и есть навороченная память. По байту Р3 передается адрес, по байту Р4-данные, также бита Р1.7\не WR при установки в 0 микросхема понимает что мы в нее пишем по заданному адресу, а при установки бита Р1.6\не RD соответственно происходит чтение. Подключение взято с даташита, также резисторы R1-8 низковатные имеют номинал 1 КОм, и подтягивают к пины к значению логической единицы. Наличие их не обязательно.
Остальные пины:
- Р0.2\INT-сигнал тактирования, после установки в 1 микросхема начнет обрабатывать наш запрос
- Р0.0\RES-сигнал сброса
- Р0.1\CS-выбор микросхем, как позже выяснилось тоже можно было не разводить.
- Также обратите внимание на кварцевый резонатор Q2 он имеет номинал 20.000Мгц, его наличие обязательное(Q1 можно не устанавливать).
- С подключение разъема ethernet тоже сложностей нету, все подключение взято тоже из даташита. R14,R14,C16,C17 фильтр НЧ(номиналы приведены внизу статьи).
- Также я не забыл про юсб. Замыканием Х1.1 и Х1.2 Вы можете добиться питания от юсб, используя внутренний регулятор напряжения мк, но увы микросхему CP2200 Вы так не обеспечите питанием(ток на выходе мк до 100мА, требования CP2200 до 122мА при передачи).
- К Х6 подключается светодиод, который просто светиться и сигнализирует о наличие питания, на Х8 выведен транзисторный ключ на основе транзистора BC847, управляющий пин Р2.7, Вы можете подключить сюда светодиод. Очень помогло при отладки прошивки.
- На Х4 подается питание 3.3В. На Х2 можно также подать 5В для питания разных флешек и прочих юсб устройств в режиме когда мк ведущий. Х3 порты программатора С2. Остальные пины выведены на разъем Х5.
Третий этап.
Создана принципиальная схема разводим. Тут проблем быть не должно. Так как я печатал платы на заводе(ДНВП Електронмаш), то я выбрал схему с 2х сторон(верхний правый угол оставался пустым, потому я насверлил там отверстий, получилась этакий кусок макетной платы).

Ну, а дальше экспортируем все в формат Gerber(рисунок платы, каждая сторона в своем файле), отверстия сохраняем в формате NC drill.
Получаем платы, собираем:
Верх:

Низ:

Обилие проводов связано с тем что я не знал какой будет использован программатор, предполагалось изначально подавать питание и данные с программатора, но увы я допустил пару ошибок при разводке программатора и он не заработал. Потому он был приведен к разъему используемого(заодно и макетная часть пригодилась).
Четвертый этап.
Без описания всех частей приводить пока код прошивки не буду, а прошьем туда стандартный пример от компании Silabs. Тут только одна проблема все примеры заточены под силабовский отладочный модуль, с приставкой CP2200DK. Отличия тут только в управляющих пинах, потому открываем файл main.c
Ищем функцию void PORT_Init (void) меняем ее код на:
void PORT_Init (void)
{
IT01CF = 0x02; // Enable Interrupt 0 on P0.3
TCON &= ~0x01; // Make /INT0 level triggered
XBR1 = 0x40; // Enable crossbar and enable
// weak pull-ups
P0MDOUT |= 0x10 | 0x1F; // enable UTX as push-pull output
P1MDOUT |= 0xD8 | 0xFF; // /WR and /RD are push-pull
P2MDOUT |= 0xFF;
P3MDOUT |= 0xFF;
P4MDOUT |= 0xFF;
}
Находим функцию void ether_reset_low() меняем на:
void ether_reset_low()
{
P0 &= ~0x01; // Pull reset low
}
Проделіваем тоже с void ether_reset_high():
void ether_reset_high (void)
{
P0 |= 0x01; // Allow /RST to rise
while(!(P0 & 0x01)); // Wait for /RST to go high
}
Открываем mn_userconst.h
устанавливаем айпи адресс:
#define IP_SRC_ADDR { 192, 168, 0, 6 }
в void main()
после port_init();
добавить
P0 &= ~0x02;//Cs=0
Далее идем в VFILE_DIR
правим index.html
Выполняем update.bat.
Таким образом из index.html сделается стандартный массив 16-ричных значений.
Компилим, собираем в hex файл, назначаем компу айпи-адрес в той же сети и прошиваем.
Пингуем:

Ну и заходим посмотреть на результат:

Если не пингуется-проверяем кабеля, код программы, а если совсем плохо-идем к знакомым, берем осцилограф и дебажим.
Ссылки:
- Переделанный пример, а также чертежи платы формате альтиума(10й версии) и перечень элементов в формате пдф:
- Даташиты(техническая документация):
Продолжение в следующих статьях.
Благодарю моих друзей за помощь в создании устройства и статьи.