Nano + EthernetShield ENC28J60
- Войдите на сайт для отправки комментариев
Коллеги, здравствуйте!
Прошу помощи. Уже мозг сломал.
Есть схема расширения входов на 74LS165. Стандартная. Работает по SPI. Хорошо работает, вопросов нет.
Но тут поставил вот такой сервер на ENC28J60: http://www.ebay.com/itm/ENC28J60-Webserver-module-Ethernet-Shield-for-Ar....
Сервер сам по себе тоже работает нормально. Но если установить сервер совместно с 74LS165, то входы работать перестали! Убил ДВА дня и только осциллографом увидел, что при подключенном Ethernet-шилде MISO сильно искажается - на осцилле он виден как постоянка приверно 2,5В!
Естественно, данные искажаются. Стоит убрать шилд, как вход начинает работать нормально. Шилд без платы 74LS165 так же работает нормально.
По схеме Ethernet-шилда MISO сразу с ENC28J60 идет на AVR. Мой модуль так же: выход 74LS165 идет напрямую на MISO (D12). Я так понимаю, что происходит аппаратный конфликт - 74LS165 и ENC28J60 просто давят друг друга.
Подскажите как быть? Подтянуть на Vcc? Реально отупел уже..
Еще добавлю: при этом Eth-shield и 74LS595 вместе работаю нормально: там один выход MISO контроллера одновременно подключается к двум входам: MISO Eth-shield и MISO 74LS595.
Чувствую, что решение тривиальное, просто отупел уже.
Ткните, пожалуйста, носом уже.
>Ткните, пожалуйста, носом уже.
zanuda.mode(ON);
Да запросто: схему подключения нужно телепатически отгадывать? Со скетчем - тоже самое. Все сами обо всем догадаются.
zanuda.mode(OFF);
Можно конечно строить догадки по поводу SS пина, но это будут догадки.
Почитайте вот ветку Ethernet shield c sd картой. Не пишет на карту. | Аппаратная платформа Arduino
Там речь про Wiznet и SD карту, но суть может быть таже самая - два устройства на одном SPI.
Решение - либо разносить SS пины и включать устройсва по очереди, либо одно из них уносить с аппаратного SPI и использовать програмный.
В вашем случае - думаю проще это со сдвиговым делать. Так как ему не нужен "полноценный SPI" и относительно не сложно программно они рулятся. А возможно это будет даже не "проще", а единствено возможно. Не уверен что сдвиговый нормально поймет SS пин (лень счас вникать).
Схемы прилагаю.
Блин! Опять при вставке картинки сбросил форму с текстом!
Писать красиво опять не стану.
Кратко: проблема локализована - конфликт двух выходов на входе MISO МК.
Решение через ShiftOut работает. Проверено уже, но дико медленно. Нужно получать 48-64 бита. Так вот во столько раз и медленнее. Даже больше. Это критично для задачи.
Рассматриваю решение железное: мультиплексирование MISO. Вопрос: нужно ли так же мультиплексировать аппатарный SS (D10)? Учавствует ли он при работе SPI.transfer()?
Скетч:
Этот фрагмент возвращает мусор при подключении модуля Ethernet-shield. Без этого модуля - работает как нужно.
вы тут используете spi. А перед этим нужно подать HIGH на ss ( slave select ) ethernet модуля, чтобы он отключился от шины. В его библиотеке должен быть метод, который это делает. Может disable какой-нибудь.