Прблема с Ethernet Shield (w5200) и Music Shield (VS10xx)

Тема в разделе "Arduino & Shields", создана пользователем rekrut683, 11 мар 2015.

  1. rekrut683

    rekrut683 Нуб

    Всем доброго дня.

    Столкнулся со следующей проблемой, пытаюсь сделать связку 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'у что-то мешает.

    Может подскажете в чем можно искать проблему?
     
  2. Unixon

    Unixon Оракул Модератор

    А где у вас выборка устройства то делается 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);
    }
     
     
  3. rekrut683

    rekrut683 Нуб

    Нет, все равно не помогает.
     
  4. rekrut683

    rekrut683 Нуб

    Такое ощущение, что шум какой-то на шине есть в это время, потому что даже в какой-то момент IP получает, смотрю в лог, а там

    "яяяяяяяяяяяяяяяяяяяяяяяяяяяяя",
     
  5. rekrut683

    rekrut683 Нуб

    Разобрался.

    Взял плату с чипом w5100 и все заработало. + оставил родную библиотеку от Wiznet.

    Но теперь в другом, вопрос:

    Есть музыка, играет песня, и к примеру в это время мне нужно передать или получить какой-то пакет по сети, если в данном случае выбираю Eth, то музыка останавливается, т.к. получается убираю с шины SPI флешку, с которой играет музыка.

    Как лучше в этой ситуации сделать?

    Жать на паузу песню, когда хочу работать с сетью?

    Использовать каким-то образом прерывания?

    Или еще как-то?