EtherCard (ENC28J60) и DMD2 (LED Панель 16х32) одновременно.
- Войдите на сайт для отправки комментариев
Доброго дня, коллеги.
Вот бьюсь уже второй день над проблемкой. Мне нужно получать данные с сайта (инициатор получения данных - ардуинка) и выводить их на светодиодную вывеску.
По отдельности все работает отлично, а вместе никак.
Соединение:
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); }
Случайно закоментил инициализацию ethernet.
Наблюдения:
Панель никак не мешает Ethernet'у. Я могу вывести на панель текст (точнее попытаться, выходит не то), убрать его и продолжить работать с Ethernet. Ethernet - работает отлично.
А вот Ethernet мешает панели. Если я убираю из программы код инициализации Ethernet, то панель работает отлично. Возвращаю код - панель перестает работать нормально.
Приходят мысли, что при инициализации Ethernet, что-то происходит с выводом SCK(CKL) - 13 и панель перестает работать нормально.
Развести пересекающиеся выводы так, чтобы не пересекались - пробовали?
Так это же SPI интерфейс.
Тестировыал вот такой код:
Ethernet действительно умирает после команды команды HIGH на 10 ногу. Но это никак не влияет на работу бегущей строки, она работает не корректно.
Судя по конструкторам - можно все ноги переназначить (в режиме 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);
Действительно нашел такой код:
Буду думать...
Все отлично работает! Всем большое спасибо!