Совместимость модулей 433 мГц WL101-341 (WL102-341) и LED панелей

vlforum
Offline
Зарегистрирован: 06.09.2018

Добрый день.

Использую для передачи модули 433 мГц WL101-341 (WL102-341) с библитекой RadioHead. Все работает прекрасно.

Пытаюсь подключить ЛЕД панель https://www.freetronics.com.au/collections/display/products/dot-matrix-display-32x16-red#.W5DQKMAVTDf

с библиотекой DM2 и радисигнал прекращает приниматься.

DM2 использует интерфейс SPI, в библиотеке RadioHead он тоже вроде как использовался но написано

#include <SPI.h> // Not actualy used but needed to compile

Подскажите где копать?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ссылки на библиотеки дадите? Или предлагаете самим догадаться что там у Вас стоит?

А заодно, даже стесняюсь спросить, Ваш скетч то серкретный или его Вы тоже можете показать?

vlforum
Offline
Зарегистрирован: 06.09.2018
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Значит, vlforum,

слушайте внимаетльно.

А. Текст Вашего скетча Вы не дали
Б. Что именно за ардуина у Вас, Вы тоже не написали

Потому ответ на Ваш вопрос только таков:

1.
Эти библиотеки, если они работают с AVR (что, на самом деле, не очевидно, см. п. Б выше), по умолчанию, используют один и тот же таймер (timer 1) и потому не совместимы между собой.

2. Но то по умолчанию! Их (а точнее RadioHead) можно переконфигурировать на использование другого таймера (второго) в скетче (как это сделать написано в строках 25-29 файла RH_ASK.cpp). Как она у Вас сконфигурирована сейчас - ХЗ, т.к. см. п. А выше.

Ну, в общем, как-то так. Вы сами себе злобный буратино - объяснили бы что у Вас за контроллер и выложили бы код - ответ был бы намного полнее и однозначнее.

vlforum
Offline
Зарегистрирован: 06.09.2018

Arduino Nano, Mini.

Скетча нет на данный момент - потер и разнес управление ЛЕД и прием данных на разные ардуины. Так работает :)

Спасибо большое, понял где копать. Отпишусь по результату и выложу скетч.

vlforum
Offline
Зарегистрирован: 06.09.2018

Вот код

//Попытка объединить LED & RH
#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile
//#include <MsTimer2.h>
#include <EEPROM.h>
#include <SoftwareSerial.h>
#include <DMD2.h>
#define TRANSMIT_PIN  4
#define RECEIVE_PIN   3
#define LENGHT_DATA 8 //Число передаваемых ЗНАЧИМЫХ+4  байт (см формат команды)
#define BROADCAST  0
#include <fonts/Arial_Black_16.h>
#define DISPLAYS_WIDE 2
#define DISPLAYS_HIGH 1

byte dataFromMC[LENGHT_DATA]; // буфер данных для приема из main контроллера
int timeCount;  // счетчик времени
int timeOutCount; // счетчик времени тайм-аута обмена
byte thisDeviceID; //Адрес этого LC
unsigned int cyclCount = 0;  // счетчик циклов
unsigned int errorCount = 0;  // счетчик ошибок
volatile byte stateCommun; // состояние обмена (1 - ожидание пакета от MC, 2 - Передача в табло  3 - ошибка, 11 - запись адреса)

String strMsg; //*************************************************************************
RH_ASK driver(2000, RECEIVE_PIN, TRANSMIT_PIN); //RH_ASK(uint16_t speed = 2000, uint8_t rxPin = 11, uint8_t txPin = 12, uint8_t pttPin = 10, bool pttInverted = false);
SoftwareSerial softSerial(6,5); // software serial #1: RX = digital pin 4, TX = digital pin 5
SoftDMD dmd(DISPLAYS_WIDE,DISPLAYS_HIGH);
DMD_TextBox box(dmd, 10, 0, 0, 0); //Сдвиг работает только для скроллинга  

void setup() {
  Serial.begin(9600); // скорость 9600 
  softSerial.begin(600); // Инициализация программного последовательного порта
  randomSeed(analogRead(0));
 // MsTimer2::set(1, timerInterrupt); // прерывания по таймеру 1 мс 
  //MsTimer2::start(); // разрешаем прерывание по таймеру
  if (!driver.init())  Serial.println(F("init failed"));
  thisDeviceID = deviceID(1);
  Serial.print(F("thisDeviceID ")); Serial.println(thisDeviceID); //*******************************************************
  stateCommun = 1; //Переходим в режим ожидания пакета от MC
  dmd.setBrightness(50);
  dmd.selectFont(Arial_Black_16);
  //dmd.begin();  
}

Если закоментировать dmd.begin(), прием работает.  

Пробовал включить таймер 2. Не помогает.

Не пинайте за использование переменных, знаю :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

vlforum пишет:
Пробовал включить таймер 2. Не помогает.

Как пробовал? Что пробовал? ХЗ! Хрустальные шары здесь запрещены, так что разбирайтесь.

vlforum пишет:
Не пинайте за использование переменных, знаю :)
Оно мне надо? Пинать Вас? Да ещё и бесплатно?

vlforum
Offline
Зарегистрирован: 06.09.2018

Раскоментировал строку #define RH_ASK_ARDUINO_USE_TIMER2  (RH_ASK.cpp) чтобы использовать таймер 2. Не помогло.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А должно было помочь? Таки нет - не должно.

Вы читали что там рядом написано? Там ведь прямо написано что константу нужно определять во включаемом файле. Читайте!

Константа RH_ASK_ARDUINO_USE_TIMER2  используется в целом ряде .cpp файлов и раскомментировать (или добавлять) её нужно в каком-нибудь .h файле, который включается во все эти .cpp файлы.

Т.е. сначала определите все файлы в которых она исполуется, потом найдите такой файл, который в них всех включается и уж в нём раскомментируйте (или определите) эту константу. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Нет, неверно, посмотрел - там действительно всё в одном файле, так что должно было помочь.

Значит, что-то сделали неправильно. Хрустальных шаров нет и что Вы там как делали никто не знает.

vlforum
Offline
Зарегистрирован: 06.09.2018

Ну как не правильно? Раскоментирова строчку в срр файле, заново залил. Эффекта "0". 

Посмотрел на форуме про библиотеки DMD DMD2, там разработчики тоже советуют использовать отдельный МК для управления панелями, а всю остальную логику выносить на другие МК. В любом случае спасибо.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, не знаю, дело Ваше. Я то не знаю, что Вы там делаете.

vlforum
Offline
Зарегистрирован: 06.09.2018

Хочу сказать Вам спасибо. Действительно смена таймера заработала, но только для класа SPIDMD. Для SoftDMD не получается.