Не выводит информацию в дисплей TM74HC595 при получении IP адреса шилдом ENC28J60

Добрый день

Это мой первый код и возникла проблема
Если это не противоречит правилам, подскажите пожалуйста, из за чего возникает проблема.

Используется оборудование:
Ардуино мини;
сетевой шилд ENC28J60;
дисплей на TM74HC595.

Код собран из кусков примеров используемых библиотек.

Проблема в следующем, если модуль получает IP адрес от DHCP или адрес присваивается в ручную, то данные mqtt серверу данные отправляются, но не отображаются на табло.
Если закомментировать строчку Ethernet.begin(mac, ip); и IP адрес 0.0.0.0, то данные на модуле табло отображаются.
У меня есть предположение, что не хватает памяти, но другой платы ардуино у меня нет и проверить не могу.

Информация при компиляции скетча: “Скетч использует 24828 байт (86%) памяти устройства. Всего доступно 28672 байт.
Глобальные переменные используют 1268 байт (61%) динамической памяти, оставляя 780 байт для локальных переменных. Максимум: 2048 байт.”

Код:

#include <UIPEthernet.h>
#include <TBPubSubClient.h>
#include <microDS18B20.h>
#include <GyverTimers.h>
#include <SevenSegmentsDisp.h>


#define CLIENT_ID "SensorMQTT"
#define TOPIC "sensor/temp"  // наименование топика
#define PUBLISH_DELAY 6000
#define MQQT_SERV 172, 31, 10, 190 // mqtt сервер
#define MQQT_PORT 1883  // mqtt порт
#define DATA_PIN 10  // Пины для подключения дисплея. 
#define RCLK_PIN 11
#define SCLK_PIN 12
#define DISP_PERIOD 3000

byte mac[6] = { 0xA8, 0x61, 0x0A, 0x01, 0x08, 0x04 };
byte ip[4] = { 172, 31, 10, 184 };


EthernetClient ethClient;
PubSubClient mqttClient;
MicroDS18B20<3> sensor;

IPAddress mqttServer(MQQT_SERV);
Disp595 disp(DATA_PIN, SCLK_PIN, RCLK_PIN);

long previousMillis;
float tm = (sensor.getTemp()); // получить первоначальные данные датчика

void setup() {
  Serial.begin(115200);
  while (!Serial) {};

  /*  
  if (Ethernet.begin(mac) == 0) {
    Serial.println(F("Unable to configure Ethernet using DHCP"));
    for (;;)
      ;
  }
  */

  Ethernet.begin(mac, ip);
  mqttClient.setClient(ethClient);
  mqttClient.setServer(mqttServer, MQQT_PORT);
  Serial.print("IP address: ");
  Serial.println(Ethernet.localIP());

  previousMillis = millis();

  Timer2.setPeriod(DISP_PERIOD);
  Timer2.enableISR();
}

void loop() {
  if (millis() - previousMillis >= PUBLISH_DELAY) {
    readData(); /* Читаем данные с датчика */
    visData();  /* Выведем данные на дисплей */
    sentData(); /* Отправляем данные mqtt на сервер */
    previousMillis = millis();
  }
  mqttClient.loop();
}

void readData() {
  if (sensor.readTemp())
    tm = (sensor.getTemp());
  sensor.requestTemp();
}

void sentData() {
  char msgBuffer[20];
  if (mqttClient.connect(CLIENT_ID)) {
    if (tm != 0) {
      mqttClient.publish(TOPIC, dtostrf(tm, 6, 2, msgBuffer));
    }
  }
}

void visData() {
  disp.clear();
  disp.displayFloat(tm, 2);
  delay(1000);
}

ISR(TIMER2_A) {  
  disp.tickManual();  // Обслуживание динамической индикации дисплея
}

Закомментируйте всю mqtt - это освободит памяти.

…а, вона как - 595 на SPI повесил?

#define DATA_PIN 10  // Пины для подключения дисплея. 
#define RCLK_PIN 11
#define SCLK_PIN 12

Перенеси на другие - 5,6,7 например.

sadman41, действительно, перенеся дисплей на 5,6,7 пины, все заработало.
Прочитал про порты ардуино. Понял, что в примере не просто так были использованы порты в разнобой, а мне захотелось сделать красиво, подряд))