EtherCard (ENC28J60) и DMD2 (LED Панель 16х32) одновременно.

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Доброго дня, коллеги.

Вот бьюсь уже второй день над проблемкой. Мне нужно получать данные с сайта (инициатор получения данных - ардуинка) и выводить их на светодиодную вывеску.

По отдельности все работает отлично, а вместе никак.

Соединение:

Ethernet: CS-10, SI-11, SO-12, SCK-13

Панель: A-6, B-7, SCLK-8, nOE-9, R-11, CKL-13

Пересекаются у нас только SI(R) и SCK(CKL), вроде как все замечательно. Но вместе никак не хотят работать.

Причем на первое, ни второе устройсто никак не реагирую на команды типа

   pinMode(10, OUTPUT); 
   digitalWrite(10, HIGH);

 После этой команды Ethernet модуль долен был отрубить, но он работает как не в чем не бывало). С панелью тоже самое.

Прикладываю код, где происходит инициализация Ethernet модуля, а в самом теле я хочу вывести текст. Текст не выводиться, панель светиться целиком.

/*
  Scrolling alphabet demo, displays characters one at a time into a scrolling box.
 */

#include <SPI.h>
#include <DMD2.h>
#include <fonts/Arial_Black_16.h>
#include <fonts/Droid_Sans_16.h>
#include <EtherCard.h>

static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[500];
static uint32_t timer;
const char website[] PROGMEM = "shop.igri-razuma.ru";

// Кол-во модулей в панеле
const int WIDTH = 3;

const uint8_t *FONT = Droid_Sans_16;

SoftDMD dmd(WIDTH,1);  // DMD controls the entire display
DMD_TextBox box(dmd);  // "box" provides a text box to automatically write to/scroll the display


int a=0; //сигнал с клавы
int b=0;
int number=0; //цифра на клаве
String number2;
int i;
String dist;
String TotalRes;
int k=0;
String RES;

void setup() {
  
  Serial.begin(9600);


 
   /* // Change 'SS' to your Slave Select pin, if you arn't using the default pin
  if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed"));

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);
  ether.printIp("DNS: ", ether.dnsip);
#if 1
  // use DNS to resolve the website's IP address
  if (!ether.dnsLookup(website))
    Serial.println("DNS failed");
#elif 2
  // if website is a string containing an IP address instead of a domain name,
  // then use it directly. Note: the string can not be in PROGMEM.
  char websiteIP[] = "192.168.1.1";
  ether.parseIp(ether.hisip, websiteIP);
#else
  // or provide a numeric IP address instead of a string
  byte hisip[] = { 192,168,1,1 };
  ether.copyIp(ether.hisip, hisip);
#endif

  ether.printIp("SRV: ", ether.hisip);*/

  analogReference(INTERNAL);
  dmd.setBrightness(255);
  dmd.selectFont(FONT);
  dmd.begin();
}


// the loop routine runs over and over again forever:
void loop() {

    box.println("AABBBB");
    delay(5000); 

    
}



 

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Случайно закоментил инициализацию ethernet. 

    // Change 'SS' to your Slave Select pin, if you arn't using the default pin
  if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed"));

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);
  ether.printIp("DNS: ", ether.dnsip);
#if 1
  // use DNS to resolve the website's IP address
  if (!ether.dnsLookup(website))
    Serial.println("DNS failed");
#elif 2
  // if website is a string containing an IP address instead of a domain name,
  // then use it directly. Note: the string can not be in PROGMEM.
  char websiteIP[] = "192.168.1.1";
  ether.parseIp(ether.hisip, websiteIP);
#else
  // or provide a numeric IP address instead of a string
  byte hisip[] = { 192,168,1,1 };
  ether.copyIp(ether.hisip, hisip);
#endif

  ether.printIp("SRV: ", ether.hisip);

 

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Наблюдения:

Панель никак не мешает Ethernet'у. Я могу вывести на панель текст (точнее попытаться, выходит не то), убрать его и продолжить работать с Ethernet. Ethernet - работает отлично.

А вот Ethernet мешает панели. Если я убираю из программы код инициализации Ethernet, то панель работает отлично. Возвращаю код - панель перестает работать нормально. 

Приходят мысли, что при инициализации Ethernet, что-то происходит с выводом SCK(CKL) - 13 и панель перестает работать нормально.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Развести пересекающиеся выводы так, чтобы не пересекались - пробовали?

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Так это же SPI интерфейс.

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Тестировыал вот такой код:

    pinMode(10, INPUT); 
    digitalWrite(10, HIGH);
    
    pinMode(8, OUTPUT); 
    digitalWrite(10, LOW);
        
    dmd.begin();
    box.println("AABBBB");
    delay(10000); 
    dmd.end();
    
    pinMode(8, INPUT); 
    digitalWrite(10, HIGH);
    
    pinMode(10, OUTPUT); 
    digitalWrite(10, LOW); 

Ethernet действительно умирает после команды команды HIGH на 10 ногу. Но это никак не влияет на работу бегущей строки, она работает не корректно.

sadman41
Offline
Зарегистрирован: 19.10.2016

Судя по конструкторам - можно все ноги переназначить (в режиме softSPI): SoftDMD::SoftDMD(byte panelsWide, byte panelsHigh, byte pin_noe, byte pin_a, byte pin_b, byte pin_sck, byte pin_clk, byte pin_r_data);

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Действительно нашел такой код:

SoftDMD::SoftDMD(byte panelsWide, byte panelsHigh)
  : BaseDMD(panelsWide, panelsHigh, 9, 6, 7, 8),
    pin_clk(13),
    pin_r_data(11)

Буду думать...

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Все отлично работает! Всем большое спасибо!