Создание календаря из светодиодов + zs-042 + arduino UNO

leks
Offline
Зарегистрирован: 22.10.2017

Наверное, у меня нет образования в данном направлении.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Наверное.

Собственно, у Вас два варианта: либо ликвидировать свою безграмотность в данном направлении, либо выбрать себе какое-нибудь другое направление.

kirya_355
Offline
Зарегистрирован: 17.11.2018

b707 пишет:

а зря вы так быстро сдаетесь. Я бы на вашем месте собрал и так и так - и сравнил. Неужели не интересно?

Конечно интересно, поэтому я и спрашивал вас, попробую сам потом.

leks
Offline
Зарегистрирован: 22.10.2017

andriano пишет:

Наверное.

Собственно, у Вас два варианта: либо ликвидировать свою безграмотность в данном направлении, либо выбрать себе какое-нибудь другое направление.

Для ликвидации безграмотности сделал цепочку из 2 пикселей (pl9823), выход первого на вход второго через развязывающий диод и резистор на минус. Работает нормально, как будто этих элементов и нет вовсе.

leks
Offline
Зарегистрирован: 22.10.2017
// Подключаем библиотеку Adafruit NeoPixel.
#include "Adafruit_NeoPixel.h"

// Указываем, какое количество пикселей у нашей ленты.
#define LED_COUNT1 2
#define LED_COUNT2 2

// Указываем, к какому порту подключен вход ленты DIN.
#define LED_PIN1 6
#define LED_PIN2 7
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(LED_COUNT1, LED_PIN1, NEO_RGB + NEO_KHZ400);// Создаем переменную strip для управления нашей лентой. 
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(LED_COUNT2, LED_PIN2, NEO_RGB + NEO_KHZ400);// Создаем переменную strip для управления нашей лентой. 

 
void setup()
{
 strip1.begin(); 
 strip2.begin(); 
 }

void loop()
{
strip1.setPixelColor(0, strip1.Color(5,0,0));//включение пикселя
strip1.setPixelColor(1, strip1.Color(5,0,0));//включение пикселя
strip2.setPixelColor(0, strip2.Color(0,0,0));//выключение пикселя
strip2.setPixelColor(1, strip2.Color(0,0,0));//выключение пикселя
strip2.show();strip1.show();delay(1000);

strip1.setPixelColor(0, strip1.Color(0,0,0));//выключение пикселя
strip1.setPixelColor(1, strip1.Color(0,0,0));//выключение пикселя
strip2.setPixelColor(0, strip1.Color(0,5,0));//включение пикселя
strip2.setPixelColor(1, strip1.Color(0,5,0));//включение пикселя
strip1.show();strip2.show();delay(1000);
} 

Ну вот такой скетч в лоб написал, две ленты по 2 светодиода, один общий пиксель для двух лент через развязывающие диоды и один резистор. Всё работает - первые перемигиваются красным,зелёным, а второй (общий) меняет цвет аналогично...

Вообщем для экспериментов и перспектив использования широкие возможности :)

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

у меня целая гирлянда для украшения на НГ улицы, там 100 штук 2811, но резать не хочу.

Поэтому "кличь в пустоту": хорошо бы экпериментально определить нагрузочную способность: на сколько ветвить можно? Если входой импеданс высокий, то практически на сколько угодно, но ведь и выход не беспределен.... ща нужно в ДШ глянуть.

----------------

PS: А вот и нет данных в ДШ, так что тока "икскримент" - критерий истины! ;)))))

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

Тут вот товарищ тоже экспериментировал: https://www.electro-tech-online.com/threads/splitting-data-signal-of-ws2811-into-many-outputs.149610/

Правда я не понял, что в итоге - башка сегодня не переводит что-то.

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

wdrakula пишет:

хорошо бы экпериментально определить нагрузочную способность: на сколько ветвить можно? Если входой импеданс высокий, то практически на сколько угодно, но ведь и выход не беспределен.... 

Это Вы вот про это?

ЕвгенийП пишет:

не перегрузят ли выход несколько входов, тоже смотреть надо. 

Если про это, то ТС похоже не понял о чём здесь, а ведь тут может быть засада. Если немного перегружает, то оно всё может работать весело и хорошо, но недолго. Всё-таки я бы не стал извращаться. Тем более, какие проблемы ставить последовательно, как делают все нормальные люди? Разводить проще - а проблемы-то какие?

leks
Offline
Зарегистрирован: 22.10.2017

ЕвгенийП пишет:

wdrakula пишет:

хорошо бы экпериментально определить нагрузочную способность: на сколько ветвить можно? Если входой импеданс высокий, то практически на сколько угодно, но ведь и выход не беспределен.... 

Это Вы вот про это?

ЕвгенийП пишет:

не перегрузят ли выход несколько входов, тоже смотреть надо. 

Если про это, то ТС похоже не понял о чём здесь, а ведь тут может быть засада. Если немного перегружает, то оно всё может работать весело и хорошо, но недолго. Всё-таки я бы не стал извращаться. Тем более, какие проблемы ставить последовательно, как делают все нормальные люди? Разводить проще - а проблемы-то какие?

Да проблем никаких и практической пользы вроде тоже от того что пиксель может принимать информацию с двух и более направлений...

Но год назад (от жадности:) я тут спрашивал про ограничение количества светодиодов из-за объёма резервируемого буфера (вроде правильно выругался). Для УНО это около 600 единиц. А теперь такая мысль витает - пишим ленту скажем на 20 штук, а через мультиплексор/демультиплексор поочерёдно обновляем, например в 5 лент только "быстро". Получается "картинка" уже на 100 при 20 в ленте. Вот такое навеяло этими развязывающими диодами.

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

leks пишет:

Да проблем никаких и практической пользы вроде тоже от того что пиксель может принимать информацию с двух и более направлений...

Проблема не в том, может ли принимать, а в том, может ли отдавать на две параллельные ветки!

leks пишет:

Но год назад (от жадности:) я тут спрашивал про ограничение количества светодиодов из-за объёма резервируемого буфера (вроде правильно выругался). Для УНО это около 600 единиц.

Вот не понимаю, если у Вас есть 10 логически одинаковых кусков ленты (светятся всегда одинаково), кто Вас заставляет иметь буфер на все диоды сразу? Кто Вам мешает вместо танцев с бубнами диодами просто десять раз выдавать на ленту один и тот же кусок буфера? Где тут перерасход памяти? А вот отсутствие танцев/секса с диодами и резисторами и прямая, простая разводка платы - налицо.

leks
Offline
Зарегистрирован: 22.10.2017

Мне казалось, что выход всегда способен тянуть несколько входов.., как он там называется?, "коэффициент размножения". Проверять нет смысла - в чём фишка?, вместо ленты-ветви дерева.

Буфер как я помню с прошлогоднего разговора ограничен числом- нет просто места писать программу для куба с ребром 8 или 9. 

 

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

leks пишет:

Мне казалось,

Ну, так перекреститесь, раз казалось. 

У любого выхода есть нагрузочная способность, а любой вход - нагрузка. Хватит или нет - смотреть надо.

leks
Offline
Зарегистрирован: 22.10.2017

ЕвгенийП пишет:

leks пишет:

Мне казалось,

Ну, так перекреститесь, раз казалось. 

У любого выхода есть нагрузочная способность, а любой вход - нагрузка. Хватит или нет - смотреть надо.

Как то это всё деструктивно...

Берём любой элемент, передающий сигнал "через себя без искажения" - с известным множителем размножения, например  как у КМОП и всё.

bwn
Offline
Зарегистрирован: 25.08.2014

leks пишет:

с известным множителем размножения, ......

Ой, а это кто?))))

leks
Offline
Зарегистрирован: 22.10.2017

bwn пишет:

leks пишет:

с известным множителем размножения, ......

Ой, а это кто?))))

Коэффициент разветвления или нагрузки...вот.

leks
Offline
Зарегистрирован: 22.10.2017

Вот например...

https://megalektsii.ru/s2011t1.html

bwn
Offline
Зарегистрирован: 25.08.2014

Да понял я, понял, звучало как-то двусмысленно.))))

P/S Фермерствую, думал может самцов уволить можно будет.))))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Коэффициент разветвления - это пережиток ТТЛ логики, у которой на входе стоял многоэмиттерный транзистор, входные эмиттеры которого потребляли довольно большой постоянный ток. Соответственно, коэффициент разветвления - это отношение максимального выходного тока к входному току.

У современной КМОП логики очень большое входное сопростивление, так что входным постоянным током можно пренебречь, зато заметная входная емкость. А т.к. выходной ток, как и в случае ТТЛ, ограничен, длительность фронтов (а, следовательно, и задержка распространения сигнала) напрямую зависит от количества подключенных входов. Другими словами, в статическом режиме коэффициент разветвления приближается к бесконечности, но резко уменьшается по мере увеличения частоты переключений. Т.е. для КМОП коэффициент разветвления в традиционном понимании лишен смысла.

leks
Offline
Зарегистрирован: 22.10.2017

Ясно... А то я вчера забыл указать номинал резистора на минус. Он был 4,7 кОм. Теперь надо что?, конденсатором шунтировать и узнавать ёмкость при которой сигнал перестанет передаваться? Или проще, провести опыт на серии параллельно включённых пикселей, когда пойдут сбои?

leks
Offline
Зарегистрирован: 22.10.2017

А потом не забыть поменять частоту с 800 кГц на 400 кГц. Пользы всё равно не видно.

leks
Offline
Зарегистрирован: 22.10.2017

Попробовал на макетке. 5 параллельно подключил, всё работает. Думаю всем всё понятно.

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

leks пишет:

Попробовал на макетке. 5 параллельно подключил, всё работает. Думаю всем всё понятно.

Нет, не всем, и не всё. Но, главное, что Вам понятно, и мы за Вас рады :)

leks
Offline
Зарегистрирован: 22.10.2017

ЕвгенийП пишет:

leks пишет:

Попробовал на макетке. 5 параллельно подключил, всё работает. Думаю всем всё понятно.

Нет, не всем, и не всё. Но, главное, что Вам понятно, и мы за Вас рады :)

Ну, я не в глобальном плане... Нее...

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

Nursik_9797
Offline
Зарегистрирован: 09.11.2016

Помогите ребята есть плата леонардо + RTC module DS1302 + display TM1637 + светодиоды p9823 60шт помогите со скетчом просьба!!! есть два скетча времени и дисплея но их соединить не получается, а с диодами вообще дуб дуб, там какой то neoflеsh используют как читал( мне хотелось бы что бы бегали 60 диодов как на часах секундная стрелка, каждый круг новый цвет, а на дисплее показывалось только часы и минуты) Я немного дуб оказывается, думал научился но что то не получается со скетчом)))) 


#include <DS1302.h>

// Init the DS1302
DS1302 rtc(2, 3, 4);

void setup()
{
  // Set the clock to run-mode, and disable the write protection
  rtc.halt(false);
  rtc.writeProtect(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1302
  rtc.setDOW(FRIDAY);        // Set Day-of-Week to FRIDAY
  rtc.setTime(9, 56, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(30, 11, 2018);   // Set the date to August 6th, 2010
}

void loop()
{
  // Send Day-of-Week
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  
  // Send date
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Send time
  Serial.println(rtc.getTimeStr());
  
  // Wait one second before repeating :)
  delay (1000);
}
#include <TimerOne.h>
#include "TM1637.h"
#define ON 1
#define OFF 0

int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char halfsecond = 0;
unsigned char second;
unsigned char minute = 0;
unsigned char hour = 12;


#define CLK 6//pins definitions for TM1637 and can be changed to other ports    
#define DIO 5
TM1637 tm1637(CLK,DIO);

void setup()
{
  tm1637.set();
  tm1637.init();
  Timer1.initialize(500000);//timing for 500ms
  Timer1.attachInterrupt(TimingISR);//declare the interrupt serve routine:TimingISR  
}
void loop()
{
  if(Update == ON)
  {
    TimeUpdate();
    tm1637.display(TimeDisp);
  }
  
}
void TimingISR()
{
  halfsecond ++;
  Update = ON;
  if(halfsecond == 2){
    second ++;
    if(second == 60)
    {
      minute ++;
      if(minute == 60)
      {
        hour ++;
        if(hour == 24)hour = 0;
        minute = 0;
      }
      second = 0;
    }
    halfsecond = 0;  
  }
 // Serial.println(second);
  ClockPoint = (~ClockPoint) & 0x01;
}
void TimeUpdate(void)
{
  if(ClockPoint)tm1637.point(POINT_ON);
  else tm1637.point(POINT_OFF); 
  TimeDisp[0] = hour / 10;
  TimeDisp[1] = hour % 10;
  TimeDisp[2] = minute / 10;
  TimeDisp[3] = minute % 10;
  Update = OFF;
}