VGA подсветка

AlexBAN
Offline
Зарегистрирован: 17.09.2020
[code]
#include <Adafruit_NeoPixel.h>
float R,G,B,H,V = 0;
#define PIN 6
#define NUMPIXELS 79
Adafruit_NeoPixel strip(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
 pinMode(A0,INPUT);
 pinMode(A1,INPUT);
 pinMode(A2,INPUT);

 pinMode(3, INPUT);
 pinMode(2, INPUT);



// Serial.begin(9600);
 strip.begin();
 strip.show();
}
void loop() {

R  = map( analogRead(A0), 0, 1023, 0, 255);
G  = map( analogRead(A1), 0, 1023, 0, 255);
B  = map( analogRead(A2), 0, 1023, 0, 255);
H  = digitalRead(3);                                                                           
V  = digitalRead(2);




 
 for (int i = 0; i < 79 ;  i++) {
  
int Matrix[79] =         {27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,
                          26,                                                                     52,
                          25,                                                                     53,
                          24,                                                                     54,
                          23,                                                                     55,
                          22,                                                                     56,
                          21,                                                                     57,
                          20,                                                                     58,
                          19,                                                                     59,
                          18,                                                                     60,
                          17,                                                                     61,
                          16,                                                                     62,
                          15,                                                                     63,
                          14,                                                                     64,
                          13,                                                                     65,
                          12,                                                                     66,
                          11,10,9,8,7,6,5,4,3,2,      1,      0, 78,77,76,75,74,73,72,71,70,69,68,67} ;
                  
      
  strip.setPixelColor( i, R,G,B);
 
 }
 
  strip.show();
}
AlexBAN
Offline
Зарегистрирован: 17.09.2020

Прошу помочь с данным кодом

Нужно синхронизировать выполнение кода с сигналами H и V

Сигнал H импульсы с частотой 45 кГц должен менять положение пикселя на ленте

Сигнал V импульсы с частотой 60 Гц должен возвращать в начало

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

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

Но как эта информация может Вам помочь, не знаю. Опишите подробно, как, по Вашему мнению, должна работать Ваша программа. Не зная этого, трудно что-то посоветовать конкретное.

b707
Offline
Зарегистрирован: 26.05.2017

у меня дежавю....?

Я этот вопрос с этими картинками за месяц третий раз вижу... и каждый раз в новой теме

Алекс, у вас же есть тема в проектах... зачем еще одна?

AlexBAN
Offline
Зарегистрирован: 17.09.2020

Первый импульс H дает разрешение на 1 светодиод яркость и цвет которого зависит от сигналов RGB

Второй импульс H - второй светодиод и так далее

Импульс V возвращает в начало

Как то так я это вижу

А это видео как работает сейчас

https://youtu.be/yKl8Rbw47z8

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

AlexBAN пишет:
Первый импульс

А вот чего в комментариях к Вашей программе это не описать? Программа - плюнь, так 90% в подпрограмму попадешь. Поэтому и неправильно работает, что Вы не знаете как она должна ПРАВИЛЬНО работать. Напишите комментарии и все поймете.

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

AlexBAN пишет:

Первый импульс H дает разрешение на 1 светодиод яркость и цвет которого зависит от сигналов RGB

Вот ошибся я - не надо было отвечать на тему с неправильно вставленным кодом - как теперь ссылаться на номера строк?

Вставьте код правильно и укажите, в какой строчке кода упоминается первый светодиод.

И что значит "дает разрешение"?

При 45 кГц период составит 22 мкс. А время выполнения analogRead - 112 мкс. А вместе с map, которая здесь абсолютно неуместна, - все 200. 3 цвета будут готовы через 600 мкс. За это время успеет придти 27 разрешений. И что с этим всем делать?

 

AlexBAN
Offline
Зарегистрирован: 17.09.2020

[code]
#include <Adafruit_NeoPixel.h>
int R,G,B = 0;
#define PIN 6
#define NUMPIXELS 79



Adafruit_NeoPixel strip(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
 pinMode(A0,INPUT);
 pinMode(A1,INPUT);
 pinMode(A2,INPUT);

 pinMode(Hs, INPUT);
pinMode(Vs, INPUT);
 

// Serial.begin(9600); 
 strip.begin();
 strip.show(); 
}
void loop() {

R  = map( analogRead(A0), 0, 1023, 0, 255); 
G  = map( analogRead(A1), 0, 1023, 0, 255); 
B  = map( analogRead(A2), 0, 1023, 0, 255); 
//Hs  = digitalRead(3);                                                                           
//Vs  = digitalRead(2);



 
 
   
int Matrix[79] =         {27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,
                          26,                                                                     52,
                          25,                                                                     53,
                          24,                                                                     54,
                          23,                                                                     55,
                          22,                                                                     56,
                          21,                                                                     57,
                          20,                                                                     58,
                          19,                                                                     59,
                          18,                                                                     60,
                          17,                                                                     61,
                          16,                                                                     62,
                          15,                                                                     63,
                          14,                                                                     64,
                          13,                                                                     65,
                          12,                                                                     66,
                          11,10,9,8,7,6,5,4,3,2,      1,      0, 78,77,76,75,74,73,72,71,70,69,68,67} ; 
                  
 for (int i = 0 ; i < 79 ; i++ ) {     
 
 strip.setPixelColor(Matrix[i], R,G,B);
  
 } 
 
 strip.show();  
}

   



[/code]

Как работает ЭЛТ монитор представляете ? кадровая и строчная развертки через отклоняющую систему

управляют направлением потока электронов в нужное место а сигналы RGB аналоговые содержащие яркостную

составляющую так вот и я хотел попытаться их с имитировать (отклоняющую систему)

Начало с верхнего левого угла построчно

Наверно как то так если грубо.

Код криво отображается по номерам строк

b707
Offline
Зарегистрирован: 26.05.2017

ну вы хоть явные-то косяки в коде поправьте...

Про map() вам уже сказали, вы что, не знаете другого способа привести диапазон 0-1024 к 0-255?  - просто поделить на 4 в голову не пришло?

Во вторых, этим своим map вы приводите величины R G B к диапазону 0-255 - тогла зачем они описаны как int?

И в третьих - вы после каждого чтения цветов R G B присваиваете эти цвета всем пикселям ленты (строчки 55-59) Зачем? Она у вас всегда будет одним цветом светится?  Вы пишете, что пытались симитировать работу развертки ЭЛТ - но в коде нет никаких следов имитации развертки. Ну вообще никаких, нечего даже обсуждать... вся лента тупо заливается одним и тем же цветом да и все

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

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

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

AlexBAN пишет:

Как работает ЭЛТ монитор представляете ? кадровая и строчная развертки через отклоняющую систему

управляют направлением потока электронов в нужное место а сигналы RGB аналоговые содержащие яркостную

составляющую так вот и я хотел попытаться их с имитировать (отклоняющую систему)

Ну, ЭЛТ трубки давно ушли в прошлое. И, кстати, работали они со строчной частотой 15 кГц, а не 45. Значит, о них можно вообще забыть.

Далее: с набором сигналов: HS, VS, R, G, B - в принципе понятно, непонятно, откуда Вы их собираетесь брать.

Цитата:

Начало с верхнего левого угла построчно

А у Вас в коде первым идет число 27 (37 строка кода), а числа 0 и 1 находятся в середине 53 строки кода. Как это понимать?

Цитата:

Наверно как то так если грубо.

Надо не "грубо", надо очень точно и подробно. Попытайтесь еще раз.

AlexBAN
Offline
Зарегистрирован: 17.09.2020

Сигналы Hs, Vs ,R,G,B я беру с переходника HDMI-VGA далее R,G,B сигналы с уровнем 0.7V приходят на схему пиковых детекторов где получается

меняющийся уровень постоянного сигнала от 0 до 3.3 V . 3.3V должна быть максимальная яркость .

Первый светодиод да 27 потому что они расположены за телевизором как в первом коде и используются для других программ

Первая строка начинается с 27 светодиода. Потом  вторая строка 26-52  и так далее

Сигнал Hs на 3 пин сигнал Vs на 2 пит уровень TTL 0-5V импульсы горизонтальной и вертикальной синхронизации

я пытался их вписать через прерывания но опыта и понимания как точно это сделать нет. Пробовал счетчик -прерывание срабатывает

но от этого не чего не меняется

А нужен сдвиг - Первый  импульс Hs-HIGH сигналы RGB зажигается 27 светодиод Hs- LOW -27 светодиод гаснет

второй импульс Hs-HIGH сигналы RGB-28 и так далее

Импульс Vs-HIGH возврат в начало на 27 светодиод

[code]
#include <Adafruit_NeoPixel.h>
int  R,G,B = 0;
#define PIN 6
#define NUMPIXELS 79

 volatile int counter = 0;

Adafruit_NeoPixel strip(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
 pinMode(A0,INPUT);
 pinMode(A1,INPUT);
 pinMode(A2,INPUT);

 pinMode(2, INPUT);

attachInterrupt(0, HsRGB,FALLING);

// Serial.begin(9600); 
 strip.begin();
 strip.show(); 
}
void HsRGB(){
counter++; 
}
void loop() {





  
R  = map( analogRead(A0), 0, 1023, 0, 255); 
G  = map( analogRead(A1), 0, 1023, 0, 255); 
B  = map( analogRead(A2), 0, 1023, 0, 255); 

  
                       
 
 
   
int Matrix[79] =         {27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,
                          26,                                                                     52,
                          25,                                                                     53,
                          24,                                                                     54,
                          23,                                                                     55,
                          22,                                                                     56,
                          21,                                                                     57,
                          20,                                                                     58,
                          19,                                                                     59,
                          18,                                                                     60,
                          17,                                                                     61,
                          16,                                                                     62,
                          15,                                                                     63,
                          14,                                                                     64,
                          13,                                                                     65,
                          12,                                                                     66,
                          11,10,9,8,7,6,5,4,3,2,      1,      0, 78,77,76,75,74,73,72,71,70,69,68,67} ; 


                  
 for ( int i = 0 ; i < 79 ; i++){ 
  for ( int i = 79 ; i >=0  ; i--){ 
strip.setPixelColor ( Matrix[i], R,G,B);
 }

    
 }
 strip.show();    
}

  

 
 
 
 
    

   



[/code]

 

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

Не вижу, где ловится "Hs-HIGH".

AlexBAN
Offline
Зарегистрирован: 17.09.2020

Поправил в коде выше. Я и так пробовал и как кнопка использовал сигнал Hs и Vs

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

До сих пор не вижу, где ловится "Hs-HIGH".

b707
Offline
Зарегистрирован: 26.05.2017

AlexBAN - ну вот добавили вы прерывание, увеличиваете в нем counter - а зачем? Все равно вы этот counter нигде не используете и заполняете сплошь всю матрицу одним цветом. Конечно у вас "ничего не срабатывает"...

И еще - я вам в сообщении #8 указал кучу ошибок. Не вижу, чтобы вы хоть что-то пытались поправить... Нафига тогда писать что-то в форум. если вы ответы игнорируете?

AlexBAN
Offline
Зарегистрирован: 17.09.2020

Во первых форум создан для того чтобы задавать вопросы не все так все понимают как вы мы бестолковые 

идем методом тыка поэтому и спрашиваю как можно  реализовать данную идею и лента светится не одним цветом а меняющимся в зависимости от уровня сигналов RGB вот так

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

AlexBAN пишет:

Во первых форум создан для того...

Алекс, Вы начинаете хамить.

В Правилах форума однозначно сказано, что новичкам не следует учить старожилов, для чего создан форум.

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

Цитата:

идем методом тыка поэтому и спрашиваю как можно  реализовать данную идею и лента светится не одним цветом а меняющимся в зависимости от уровня сигналов RGB вот так

Вы обратились не по адресу.

Организация подсветки никаким боком не относится к Ардуино.

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

Пока что мы видим, что никаких позитивных идей у Вас нет, и Вы пытаетесь получить их на непрофильном форуме.

Да еще и ведете себя неадекватно:

1. Пытаетесь учить старожилов, для чего нужен форум.

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

AlexBAN
Offline
Зарегистрирован: 17.09.2020

Идея добавить к имеющемуся коду сигналы Hs и VS и управлять с их помощью положением светодиода

Алгоритм я описал выше- импульс  Hs пусть увеличивает Counter на 1 пусть до 25( первая строка 25 светодиодов)и так все 79 а импульс Vs возвращает Counter в 0

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

А вы мне говорите что я А и Б не знаю да не знаю но носом то что тыкать

Можете ведь и не отвечать раз не хотите  

 

b707
Offline
Зарегистрирован: 26.05.2017

AlexBAN пишет:

Идея добавить к имеющемуся коду сигналы Hs и VS и управлять с их помощью положением светодиода

Алгоритм я описал выше- импульс  Hs пусть увеличивает Counter на 1 пусть до 25( первая строка 25 светодиодов)и так все 79 а импульс Vs возвращает Counter в 0

Алекс, пока это не идея, а бессмысленный набор слов. В сообщении #6 andriano аргументировано указал. что ваша задумка на этом уровне неосуществима - ардуиновскому коду банально не хватит скорости, причем отставание тут не на несколько процентов - а в несколько раз/

"Идея" ваша должна заключаться в том, каким образом вы собрались успеть считать три сигнала цветности с частотой горизонтальной развертки. Пока у вас такой идеи нет - тут и разговаривать не о чем.

AlexBAN пишет:

вы мне говорите что я А и Б не знаю да не знаю но носом то что тыкать

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

AlexBAN
Offline
Зарегистрирован: 17.09.2020

Ну  вот можно же нормально писать. 

Придется самому до всего доходить, а спрашивать на форуме желание отбили.

Тему закрываю!!!

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

AlexBAN пишет:

Идея добавить к имеющемуся коду сигналы Hs и VS и управлять с их помощью положением светодиода

С какой целью? И как именно управлять?

Т.е. чего Вы хотите добиться?

Пока Вы говорите общие слова, которые никак не проясняют идею.

Цитата:

Алгоритм я описал выше- импульс  Hs пусть увеличивает Counter на 1 пусть до 25( первая строка 25 светодиодов)и так все 79 а импульс Vs возвращает Counter в 0

Это не алгоритм работы программы, а лишь описание работы двух обработчиков аппаратных прерываний. Причем, описание, скорее всего, неправильное: в лучшем (но на практике недостижимом) случае Вы узнаете цвета первых 25 строк растра, т.е. 25/720 - т.е. верхних 3.5% высоты дисплея. Причем, только с одной стороны экрана. Вы уверены, что Вам нужно именно это?

Каков алгоритм работы всей программы?

Цитата:

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

А почему Вы решили спрашивать на форуме Ардуино? Это непрофильный для Ваших вопросов форум.

Для того, чтобы иметь шанс получить не глум, а совет по существу, Вам сначала нужно узнать, как это сделать. Вероятно, с помощью других - профильных - форумов. И только когда у Вас это знание будет, обращаться на форум Ардуино, чтобы перевести Ваши знания с русского языка на язык Ардуино (на Си++).

Цитата:

А вы мне говорите что я А и Б не знаю да не знаю но носом то что тыкать

Можете ведь и не отвечать раз не хотите  

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

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

AlexBAN пишет:

Ну  вот можно же нормально писать. 

Придется самому до всего доходить, а спрашивать на форуме желание отбили.

Тему закрываю!!!

Еще раз: спрашивать нужно на профильном форуме.