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.
// 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);Наблюдения:
Панель никак не мешает Ethernet'у. Я могу вывести на панель текст (точнее попытаться, выходит не то), убрать его и продолжить работать с Ethernet. Ethernet - работает отлично.
А вот Ethernet мешает панели. Если я убираю из программы код инициализации Ethernet, то панель работает отлично. Возвращаю код - панель перестает работать нормально.
Приходят мысли, что при инициализации Ethernet, что-то происходит с выводом SCK(CKL) - 13 и панель перестает работать нормально.
Развести пересекающиеся выводы так, чтобы не пересекались - пробовали?
Так это же SPI интерфейс.
Тестировыал вот такой код:
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 ногу. Но это никак не влияет на работу бегущей строки, она работает не корректно.
Судя по конструкторам - можно все ноги переназначить (в режиме 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);
Действительно нашел такой код:
SoftDMD::SoftDMD(byte panelsWide, byte panelsHigh) : BaseDMD(panelsWide, panelsHigh, 9, 6, 7, 8), pin_clk(13), pin_r_data(11)Буду думать...
Все отлично работает! Всем большое спасибо!