Всем доброго дня. Столкнулся со следующей проблемой, пытаюсь сделать связку Arduino Mega2560, Ethernetd Shield 1.1 (Wiznet W5200) , Music Shield 2.0 (SD + VS10xx) Сосбственно по отдельности все работает прекрасно, и Ethernet Shield работает с Мегой, и Music работает с Мегой. 1 проблема. У Music Shield и Ethernet Shield 10 pin используется под CS. Эту проблему я обошел, отогнул 10 пин у Музыки, сделал перемычку, изменил в библиотеке 10 pin на 9pin. Все работает Хорошо. Далее, если составляю бутерброд. Пытаюсь проверить музыку, перед тем как запустить песню, делаю следующее: Код (Text): pinMode(4,OUTPUT); /////////CS SD на Ethernet Shield'е отрубаем digitalWrite(4,HIGH); pinMode(10,OUTPUT); ///////////CS W5200 отрубаем digitalWrite(10,HIGH); Музыка работает, все здорово. Далее, пытаюсь проверить работу Ethernet Shield'а в бутерброде и пишу следующее: Код (Text): pinMode(4,OUTPUT); ///////CS SD Ethernet Shield отрубаем digitalWrite(4,HIGH); pinMode(9,OUTPUT); /////////CS SD Music Shield отрубаем digitalWrite(9,HIGH); и Ethernet Shield не работает. 1. Если выключаю только Пин 4 (SD карту на эзернет шилде) и пытаюсь сделать так: Код (Text): Ethernet.begin(mac,ip) Serial.println(Ethernet.localIP()); то IP'шник выдает, и даже работает как сервер, но на WEb странице выдает все как будто с помехами, как-то много лишней инфы, и все неупорядоченно. 2. Если точно также, выключаю только пин 4 (SD карту на эзернет шилде) и пытаюсь сделать так: Код (Text): Ethernet.begin(mac); Serial.println(Ethernet.localIP()); то по DHCP так и получает IP. и ждал, и делал вывод если Ethernet.mac == 0 3. Если выключаю и пин 4 и пин 9 (SD карты на ethernet shield'e и music shield'e), то ни первый случай не работает, ни второй. Т.е. в любом случае IP не получает. В первом случае пишет 0.0.0.0 Еще раз повторюсь, по отдельности все прекрасно работает , и по DHCP и статика. Но как только сверху ставлю music shield, то тому ничего не мешает, а вот ethernet shield'у что-то мешает. Может подскажете в чем можно искать проблему?
А где у вас выборка устройства то делается digitalWrite(PIN_xxx, LOW)? Попробуйте так: Код (Text): enum SPI_Device {Ethernet, SDCard, Music}; uint8_t SPI_PINS[3] = {10,4,9}; void selectDevice(SPI_Device device) { digitalWrite(SPI_PINS[Ethernet], Ethernet!=device); digitalWrite(SPI_PINS[SDCard], SDCard!=device); digitalWrite(SPI_PINS[Music], Music!=device); }
Такое ощущение, что шум какой-то на шине есть в это время, потому что даже в какой-то момент IP получает, смотрю в лог, а там "яяяяяяяяяяяяяяяяяяяяяяяяяяяяя",
Разобрался. Взял плату с чипом w5100 и все заработало. + оставил родную библиотеку от Wiznet. Но теперь в другом, вопрос: Есть музыка, играет песня, и к примеру в это время мне нужно передать или получить какой-то пакет по сети, если в данном случае выбираю Eth, то музыка останавливается, т.к. получается убираю с шины SPI флешку, с которой играет музыка. Как лучше в этой ситуации сделать? Жать на паузу песню, когда хочу работать с сетью? Использовать каким-то образом прерывания? Или еще как-то?