. За совет по инверсии спасибо. Тогда не сочтите за наглость еще один вопорос к Вам, при реальной сборке через какие чип мосфеты можно поставить и как, чтобы соединить сборку RGB диодов и микроконтролер. По поводу протеуса, версия 8.0 SP0 build 15417.Прошу в помощи в объединении кодов для RGB контроллера
- fevcomp
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Чт окт 24, 2013 21:16:26
- Откуда: Волгоград
Re: Прошу в помощи в объединении кодов для RGB контроллера
Спсибо Unreal_2009 за указания на граматичекие ошибки в тексте, стыдно
. За совет по инверсии спасибо. Тогда не сочтите за наглость еще один вопорос к Вам, при реальной сборке через какие чип мосфеты можно поставить и как, чтобы соединить сборку RGB диодов и микроконтролер. По поводу протеуса, версия 8.0 SP0 build 15417.
. За совет по инверсии спасибо. Тогда не сочтите за наглость еще один вопорос к Вам, при реальной сборке через какие чип мосфеты можно поставить и как, чтобы соединить сборку RGB диодов и микроконтролер. По поводу протеуса, версия 8.0 SP0 build 15417."Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
- Unreal_2009
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Пн авг 06, 2012 10:39:53
- Откуда: Москва
Re: Прошу в помощи в объединении кодов для RGB контроллера
Вот такой код - для светодиодов включенных относительно земли.
Код: Выделить всё
if (pwm_counter++ > 255)
{
PORTB |= (1 << PORTB0)|(1 << PORTB1)|(1 << PORTB2)|(1 << PORTB3);
pwm_counter = 0;
}
if (pwm_counter > R)
PORTB &= ~(1 << PORTB0); //ШИМ канал для красного канала RGB LED
if (pwm_counter > G)
PORTB &= ~(1 << PORTB1); //ШИМ канал для зеленого канала RGB LED
if (pwm_counter > B)
PORTB &= ~(1 << PORTB2); //ШИМ канал для синего канала RGB LED
if (pwm_counter > C)
PORTB &= ~(1 << PORTB3); //ШИМ канал для красного монохромного LED
}- Unreal_2009
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Пн авг 06, 2012 10:39:53
- Откуда: Москва
Re: Прошу в помощи в объединении кодов для RGB контроллера
fevcomp писал(а):при реальной сборке через какие чип мосфеты можно поставить и как, чтобы соединить сборку RGB диодов и микроконтролер.
Для не очень сурового тока я использую - irlml2502(SOT32)/irlml2402(SOT23)
http://www.irf.com/product-info/datasheets/data/IRLML2402.pdf
http://www.irf.com/product-info/datasheets/data/irlml2502.pdf
У этих ключей маленькое напряжение открывания и сопротивление открытого канала.
Просто исторически у меня мешок этих ключей.
Для сильноточных приложений - IRLR024n
http://www.irf.com/product-info/datasheets/data/irlr024n.pdf
Можно ставить npn - типа BC817
http://www.nxp.com/documents/data_sheet/BC817_BC817W_BC337.pdf
Только в между базой транзистора и выходом микроконтроллера надо ставить резистор от 1000 Ом - для ограничения тока через базу
Вот так делаю я
R1 - подтягивает выход микроконтроллера к земле, когда микроконтроллер еще не проинициализирован.
R2 - ограничивает ток через затвор полевика.
Оба резистора опциональны.
- fevcomp
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Чт окт 24, 2013 21:16:26
- Откуда: Волгоград
Re: Прошу в помощи в объединении кодов для RGB контроллера
Unreal_2009, программный шим, что ты показал действительно убрал инверсию значений цвета. но это как ты сказал относительно земли, а если относительно напряжения в +12 v. И ещё один вопрос, при симуляции у меня после выбора цвета, яркость при вращении энкодера ноль реакции, а после выбора кнопкой изменения спектра по кругу, тем более энкодер не переходит в состояние регулировки яркости и естественно тоже эффект с изменением яркости. Как я догадываюсь мной реализована не правильно функция регулировки яркости, а она у меня более применима для монохромного диода и что - то я упускаю после нажатия кнопки, но из-за мизерного опыта сколько не пытаюсь понять, что именно, ответа не нахожу. Укажи, если не сложно, путь истины.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
-
phanis
- Вымогатель припоя
- Сообщения: 513
- Зарегистрирован: Сб фев 19, 2011 18:04:08
- Откуда: Татарстан, пос. Актюбинский
- Контактная информация:
Re: Прошу в помощи в объединении кодов для RGB контроллера
Код: Выделить всё
if ((R>0)&&(G>0)&&(B>0))
{
R=R-15;
G=G-15;
B=B-15;
}
из кода программы следует: если хотя бы один из цветов не больше нуля, тогда не убавлять яркость.
например если горит зеленый R=0, G=255, B=0,
и тоже самое при увеличении яркости
Код: Выделить всё
void bright_min (void)
{
if ((R<255)&&(G<255)&&(B<255))
{
R=R+15;
G=G+15;
B=B+15;
}пример тот же зеленый R=0, G=255, B=0,
- Unreal_2009
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Пн авг 06, 2012 10:39:53
- Откуда: Москва
Re: Прошу в помощи в объединении кодов для RGB контроллера
У меня протеус 7.10 не окрывает твою схему - скинь мне скриншот в личку.
Вот так надо включать реальную нагрузку для каждого канала.

номинал резистора R3 зависит от нагрузки - падения напряжения на светодиоде, количества светодиодов и максимально допустимого тока через светодиод.
Вот так надо включать реальную нагрузку для каждого канала.
номинал резистора R3 зависит от нагрузки - падения напряжения на светодиоде, количества светодиодов и максимально допустимого тока через светодиод.
- fevcomp
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Чт окт 24, 2013 21:16:26
- Откуда: Волгоград
Re: Прошу в помощи в объединении кодов для RGB контроллера
phanis, я и не отрицаю, что мой код не будет работать при выборе зеленого или какого иного цвета, а регулирует только белый цвет, по поводу 0 и 255 то у меня получилась инверсия значений и поэтому 0 - это максимум насыщенности, а 255 - минимум, поэтому так. А вообще данная функция работает, но как писал только для белого цвета. Всякие эксперименты с кодом пока не дали результата. Поэтому и прошу на толкнуть шаблоном как это сделать. Как я понимаю нужна проверка min значение насыщенности "0" у каналов и выставления max допустимого значения для каналов т.е. если к примеру оранжевый цвет (R-G-B) 255-102-0, то max значение R=255, G=102, B=0 яркость должна регулироваться только по каналам R и G, а B остается без изменений, R меняется от 0 до 255, а G от 0 до 102. как это происходит я понимаю, а вот реализовать в коде не получается.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
-
phanis
- Вымогатель припоя
- Сообщения: 513
- Зарегистрирован: Сб фев 19, 2011 18:04:08
- Откуда: Татарстан, пос. Актюбинский
- Контактная информация:
Re: Прошу в помощи в объединении кодов для RGB контроллера
для этого случая (регулировки яркости) использовал в свое время еще один шим, аппаратный, который управлял транзистором, тот в свою очередь
питал схему трех остальных RGB транзисторов.Но схематично есть другие варианты. Например использование логического элемента И для управления транзисторами.
питал схему трех остальных RGB транзисторов.Но схематично есть другие варианты. Например использование логического элемента И для управления транзисторами.
- Unreal_2009
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Пн авг 06, 2012 10:39:53
- Откуда: Москва
Re: Прошу в помощи в объединении кодов для RGB контроллера
Я же написал выше в посте как сделать в коде чтобы 0- минимум свечения, 255 - максимум.
Правильно я понимаю (пожелания по функционалу)
1. При первом нажатии кнопки регулируется красный цвет по яркости.
2. При втором нажатии кнопки регулируется зеленый .
3. При третьем нажатии кнопки регулируется голубой.
4. При четвертом регулируется общая яркость.
Там в коде конечно сделано по другому. Но не совсем понимаю насколько так удобнее.???
Правильно я понимаю (пожелания по функционалу)
1. При первом нажатии кнопки регулируется красный цвет по яркости.
2. При втором нажатии кнопки регулируется зеленый .
3. При третьем нажатии кнопки регулируется голубой.
4. При четвертом регулируется общая яркость.
Там в коде конечно сделано по другому. Но не совсем понимаю насколько так удобнее.???
- fevcomp
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Чт окт 24, 2013 21:16:26
- Откуда: Волгоград
Re: Прошу в помощи в объединении кодов для RGB контроллера
Unreal_2009 не совсем так, нажатие кнопок с предварительно настроенными цветами, это только выбор цвета подсветки, также как при 4-ом нажатии на кнопку входим в режим позволяющий выбрать любой произвольный цвет подсветки, а регулировка яркости должна работать при любом цвете подсветки т.е. нажали 1 раз кнопку выбрали цвет подсветки панели приборов красный и при необходимость при эксплуатации регулируем яркость, захотели сменить цвет подсветки на зелёный (надоел красный цвет) нажали на кнопку 1 раз потом 2 раз выбрали для подсветки зеленый цвет и ездим с зеленой подсветкой приборной панели при необходимости регулируем яркость, ну и в таком духе, ну а если предварительно настроенные цвета не устраивают, то нажимаем кнопку 4 раза и входим в режим выбора цвета из кругового спектра на любой вкус, после настройки цвета ездим с подсветкой, скажем серо-бурмалиновой и когда появляется необходимость регулируем яркость ее. Ну а если вообще все цвета приелись, то нажимаем кнопку 5 раз и возвращаем приборной панели белый цвет подсветки и опять же при необходимости во время езды регулируем яркость. Как то так. Обычная светодиодная подсветка приборной панели автомобиля, только с возможностью выбора цвета подсветки.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
- fevcomp
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Чт окт 24, 2013 21:16:26
- Откуда: Волгоград
Re: Прошу в помощи в объединении кодов для RGB контроллера
Unreal_2009 писал(а):Я же написал выше в посте как сделать в коде чтобы 0- минимум свечения, 255 - максимум.
Нет по этому поводу я всё понял спасибо и поправил, сейчас главное мне разобраться с регулировкой яркости после настройки насыщенности цвета подсветки. Ну а остальные трудности потом, главное шаг за шагом разбираться.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
- Unreal_2009
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Пн авг 06, 2012 10:39:53
- Откуда: Москва
Re: Прошу в помощи в объединении кодов для RGB контроллера
Во как. Назначение девайса понятно 
- Unreal_2009
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Пн авг 06, 2012 10:39:53
- Откуда: Москва
-
phanis
- Вымогатель припоя
- Сообщения: 513
- Зарегистрирован: Сб фев 19, 2011 18:04:08
- Откуда: Татарстан, пос. Актюбинский
- Контактная информация:
Re: Прошу в помощи в объединении кодов для RGB контроллера
Может так попробовать регулировать яркость?
- fevcomp
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Чт окт 24, 2013 21:16:26
- Откуда: Волгоград
Re: Прошу в помощи в объединении кодов для RGB контроллера
Спасибо Phanis попробую разобраться, т.к. то как ты написал код, для меня еще некоторые вещи темный лес, если ты заметил, то моя манера написания на Си больше похожа на академическое обучение начального уровня, а так оно и есть на самом деле с программным языком связался впервые, но попробую разобраться. Если можно попросить в твой файл добавь пояснения, с моими познаниями Си не все понятно.
Но у меня то же есть продвижение, правда не без последующих косяков, двигаюсь спотыкаясь.
Регулировку яркости сделал, все выборы цвета и цвет из спектра регулируются, но появилась другая проблема, выбивает шим в максимальных точках увеличения и уменьшения яркости, причины не пойму, а также при выборе цвета из кругового спектра синий канал тоже стала выбивать из шим (прямоугольная кривая становится прямой и от туда не выходит, канал переходит в постоянное свечение)
При максимальном увеличении яркости:

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

И при максимальном уменьшении яркости с зависанием, ни какой реакции на энкодер при увеличении:

Вот код:
Phanis, Unreal_2009 посмотрите пожалуста, где я опять на косячил, кажется все осталось как прежде, только переменные добавил.
Но у меня то же есть продвижение, правда не без последующих косяков, двигаюсь спотыкаясь.
Регулировку яркости сделал, все выборы цвета и цвет из спектра регулируются, но появилась другая проблема, выбивает шим в максимальных точках увеличения и уменьшения яркости, причины не пойму, а также при выборе цвета из кругового спектра синий канал тоже стала выбивать из шим (прямоугольная кривая становится прямой и от туда не выходит, канал переходит в постоянное свечение)
При максимальном увеличении яркости:

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

И при максимальном уменьшении яркости с зависанием, ни какой реакции на энкодер при увеличении:

Вот код:
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
#include <math.h>
//=========Обявление переменных======================
volatile unsigned int pwm_counter,R,G,B,C,scena=0,button;
volatile unsigned int tempR,tempG,tempB,r2,g2,b2,temp,kr,kg,kb;
//==========Обявление функций=====
void min_C (void);
void max_C (void);
void color (unsigned int iR,unsigned int iG,unsigned int iB);
void btn_color (unsigned int button);
void bright_max (void);
void bright_min (void);
void on_rgb_led (void);
void off_rgb_led (void);
void on_red_led (void);
void off_red_led (void);;
interrupt [EXT_INT0] void Encoder(void)
{
//==================Обработка событий вращения экодера вправо - влево====================
delay_us(50);
if((PIND&(1 << PORTD2))==0)
{
delay_us(50);
if((PIND&(1 << PORTD0))==0)
{
if (button==4)
{
//Регулировка каналов по спектру
min_C ();
color(R,G,B);
if (button==5)
{
goto B1;
}
}
else
{
B1:
//Уменьшение яркости LED RGB
bright_min ();
}
}
else
{
//Регулировка каналов по спектру
if (button==4)
{
max_C ();
color(R,G,B);
if (button==5)
{
goto B2;
}
}
else
{
B2:
//Увеличение яркости LED RGB
bright_max ();
}
}
}
// очищаем флаг внешнего прерывания
GIFR = (1<<INTF0);
return;
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void Prog_pwm(void)
{
//===Реализация программного ШИМ на 4 канала=========
if (pwm_counter++ > 255)
{
PORTB |= (1 << PORTB0)|(1 << PORTB1)|(1 << PORTB2)|(1 << PORTB3);
pwm_counter = 0;
}
if (pwm_counter > R)
PORTB &= ~(1 << PORTB0); //ШИМ канал для красного канала RGB LED
if (pwm_counter > G)
PORTB &= ~(1 << PORTB1); //ШИМ канал для зеленого канала RGB LED
if (pwm_counter > B)
PORTB &= ~(1 << PORTB2); //ШИМ канал для синего канала RGB LED
if (pwm_counter > C)
PORTB &= ~(1 << PORTB3); //ШИМ канал для красного монохромного LED
}
//===Функция выбора палитры цвета из кругового спектра========
void min_C (void)
{
{
if (scena == 0) {if(G<temp) G+=15; else scena = 1;}
if (scena == 1) {if(R>0) R-=15; else scena = 2;}
if (scena == 2) {if(B<temp) B+=15; else scena = 3;}
if (scena == 3) {if(G>0) G-=15; else scena = 4;}
if (scena == 4) {if(R<temp) R+=15; else scena = 5;}
if (scena == 5) {if(B>0) B-=15; else scena = 0;}
}
tempR=r2=R; tempG=g2=G; tempB=b2=B;
}
void max_C (void)
{
{
if (scena == 0) {if(G>0) G-=15; else scena = 5;}
if (scena == 1) {if(R<temp) R+=15; else scena = 0;}
if (scena == 2) {if(B>0) B-=15; else scena = 1;}
if (scena == 3) {if(G<temp) G+=15; else scena = 2;}
if (scena == 4) {if(R>0) R-=15; else scena = 3;}
if (scena == 5) {if(B<temp) B+=15; else scena = 4;}
}
tempR=r2=R; tempG=g2=G; tempB=b2=B;
}
//============Функция предворительно настроенных цветов========
void color (unsigned int iR,unsigned int iG,unsigned int iB)
{
tempR=R=r2=iR; tempG=G=g2=iG; tempB=B=b2=iB;
}
//=====Функция выбора преднастроенного цвета по нажатию на кнопку=================
void btn_color (unsigned int button)
{
switch (button)
{
case 1: color (temp,0,0);break; //красный
case 2: color (0,temp,0);break;//зеленый
case 3: color (0,0,temp);break; //синий
case 0: color (temp,temp,temp);break;//белый
}
}
//===========Функция увеличения яркости=======
void bright_max (void)
{
kr=tempR/15; kg=tempG/15; kb=tempB/15;//коэф. пропорциональности
if ((R<255)||(G<255)||(B<255))
{
R=tempR+kr;
G=tempG+kg;
B=tempB+kb;
}
tempR=R; tempG=G; tempB=B;
temp=max(max(R,G),B);
}
//===========Функция уменьшения яркости========
void bright_min (void)
{
kr=tempR/15; kg=tempG/15; kb=tempB/15;//коэф. пропорциональности
if ((R>0)||(G>0)||(B>0))
{
R=tempR-kr;
G=tempG-kg;
B=tempB-kb;
}
tempR=R; tempG=G; tempB=B;
temp=max(max(R,G),B);
}
//=====Функция плавного включение RGB LED=======
void off_rgb_led (void)
{
{
for (((R=tempR)&&(G=tempG)&&(B=tempB));((R>0)&&(G>0)&&(B>0));((R--)&&(G--)&&(B--)))
delay_ms(10);
}
}
//=====Функция плавного выключения RGB LED=======
void on_rgb_led (void)
{
{
for (((R=0)&&(G=0)&&(B=0));((R<tempR)&&(G<tempG)&&(B<tempB));((R++)&&(G++)&&(B++)))
delay_ms(10);
}
}
//=====Функция плавного включение RED LED=======
void off_red_led (void)
{
{
for (C=255;C>0;C--)
delay_ms(5);
}
}
//=====Функция плавного выключение RED LED=======
void on_red_led (void)
{
{
for (C=0;C<255;C++)
delay_ms(5);
}
}
void main(void)
{
// Инициализация портов.
// Инициализация выходов
DDRB |= (1 << PORTB5)|(1 << PORTB4)|(1 << PORTB3)|(1 << PORTB2)|(1 << PORTB1)|(1 << PORTB0);
PORTB = 0x00;
// Инициализация входов
DDRD |= (0 << PORTD2)|(0 << PORTD1)|(0 << PORTD0)|(0<<PORTD7);
// Подключаем подтягивающие резисторы
PORTD |= (1 << PORTD2)|(1 << PORTD1)|(1 << PORTD0)|(1<<PORTD7);
PORTD=0x00;
// подтяжка к Vcc
PORTD |= (1<<7);
DDRD=0x00;
// Разрешение прерывания по таймеру0
TIMSK |= (1 << TOIE0);
TCCR0 |= (1 << CS00);
MCUCR |= (0 << ISC00)|(1 << ISC01);
GIFR |= (1 << INTF0);
GICR |= (1 << INT0);
tempR=255;tempG=255;tempB=255;
#asm("sei")
//===================Плавное включение RED LED при вкл. питания=========
on_red_led();
//===================Плавное включение RGB LED при вкл. питания=========
delay_ms(5);
on_rgb_led();
while (1)
{
//========Выбор сцены спектра палитры цветов===========
if((PIND&(1 << PORTD2)|(1 << PORTD0))==0)
{
scena++;
if (scena>=5)
scena=0;
}
//=====Обработка события нажатия кнопки энкодера=======
if((PIND&(1 << PORTD1))==0)// если нажата кнопка
{
while((PIND&(1 << PORTD1))==0){} //ждем отпускания кнопки
button++;
delay_ms(30);
if(button > 5)
button = 0;
//==================Выбор преднастроенных цветов палитры по нажатию кнопки=================
btn_color (button);
}
}
//== выключение RGB LED при выкл. питания======
off_rgb_led();
delay_ms(5);
//== выключение RED LED при выкл. питания======
off_red_led();
}Phanis, Unreal_2009 посмотрите пожалуста, где я опять на косячил, кажется все осталось как прежде, только переменные добавил.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
-
phanis
- Вымогатель припоя
- Сообщения: 513
- Зарегистрирован: Сб фев 19, 2011 18:04:08
- Откуда: Татарстан, пос. Актюбинский
- Контактная информация:
Re: Прошу в помощи в объединении кодов для RGB контроллера
МК правильно отрабатывает ваш код.
Из кода следует:
Если хотя бы один из цветов больше ноля, то отнять от всех цветов, тип данных при этом без знаковый unsigned int R,G,B,C.(0..65535)
Так вот, если например отнять R=0 единицу (R=R-1), то получим R=65535, а это куда больше 255, условие if ((R<255)|... не будет выполнено.
И еще по коду if (button==5)-для чего здесь, если button=4
Спойлер
Код: Выделить всё
//===========Функция увеличения яркости=======
void bright_max (void)
{
kr=tempR/15; kg=tempG/15; kb=tempB/15;//коэф. пропорциональности
if ((R<255)||(G<255)||(B<255))
{
R=tempR+kr;
G=tempG+kg;
B=tempB+kb;
}
tempR=R; tempG=G; tempB=B;
temp=max(max(R,G),B);
}
//===========Функция уменьшения яркости========
void bright_min (void)
{
kr=tempR/15; kg=tempG/15; kb=tempB/15;//коэф. пропорциональности
if ((R>0)||(G>0)||(B>0))
{
R=tempR-kr;
G=tempG-kg;
B=tempB-kb;
}
tempR=R; tempG=G; tempB=B;
temp=max(max(R,G),B);
}Если хотя бы один из цветов больше ноля, то отнять от всех цветов, тип данных при этом без знаковый unsigned int R,G,B,C.(0..65535)
Так вот, если например отнять R=0 единицу (R=R-1), то получим R=65535, а это куда больше 255, условие if ((R<255)|... не будет выполнено.
И еще по коду if (button==5)-для чего здесь, если button=4
Код: Выделить всё
if (button==4)
{
//Регулировка каналов по спектру
min_C ();
color(R,G,B);//по моему лишнее
if (button==5) // для чего здесь
{
goto B1;// такие переходы лучше не использовать
}
}- fevcomp
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Чт окт 24, 2013 21:16:26
- Откуда: Волгоград
Re: Прошу в помощи в объединении кодов для RGB контроллера
Когда при начале написания попытался изменить все переменные на Unsigned char проверка кода показывала ошибку, поэтому и оставил целую переменную. Что касается
то без этого, функция энкодера по изменению спектра не переходит к яркости, поэтому после нажатия на кнопку я освобождаю энкодер от регулировки спектра оставляя выбранный цвет и перехожу к регулировки яркости. А если не осуществлять выхода то можно вечно только и знать, что изменять спектр цвета, без доступа к регулировки яркости.
Короче только так у меня получилось реализовать мной задуманный алгоритм.
А что касается
то раньше до ввода дополнительных переменных код МК обрабатывал ранее нормально и таких глюков не было.
тем паче, если смотреть функцию max, то если одно из условий R<255 или G<255 или B<255, то идет пропорциональное увеличение каналов до момента, пока переменные не превысят 255, и если я правильно понимаю, то чтоб остаться с шимом то наверно нужно увеличить параметр шима до 256 или условие изменить <= меньше или равно 255, и тоже самое с min, я правильно рассуждаю, или чего-то не понимаю?
Код: Выделить всё
if (button==5) // для чего здесь
{
goto B1;// такие переходы лучше не использовать
}
то без этого, функция энкодера по изменению спектра не переходит к яркости, поэтому после нажатия на кнопку я освобождаю энкодер от регулировки спектра оставляя выбранный цвет и перехожу к регулировки яркости. А если не осуществлять выхода то можно вечно только и знать, что изменять спектр цвета, без доступа к регулировки яркости.
Короче только так у меня получилось реализовать мной задуманный алгоритм.
А что касается
Код: Выделить всё
//===========Функция увеличения яркости=======
void bright_max (void)
{
kr=tempR/15; kg=tempG/15; kb=tempB/15;//коэф. пропорциональности
if ((R<255)||(G<255)||(B<255))
{
R=tempR+kr;
G=tempG+kg;
B=tempB+kb;
}
tempR=R; tempG=G; tempB=B;
temp=max(max(R,G),B);
}
//===========Функция уменьшения яркости========
void bright_min (void)
{
kr=tempR/15; kg=tempG/15; kb=tempB/15;//коэф. пропорциональности
if ((R>0)||(G>0)||(B>0))
{
R=tempR-kr;
G=tempG-kg;
B=tempB-kb;
}
tempR=R; tempG=G; tempB=B;
temp=max(max(R,G),B);
}то раньше до ввода дополнительных переменных код МК обрабатывал ранее нормально и таких глюков не было.
тем паче, если смотреть функцию max, то если одно из условий R<255 или G<255 или B<255, то идет пропорциональное увеличение каналов до момента, пока переменные не превысят 255, и если я правильно понимаю, то чтоб остаться с шимом то наверно нужно увеличить параметр шима до 256 или условие изменить <= меньше или равно 255, и тоже самое с min, я правильно рассуждаю, или чего-то не понимаю?
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
-
phanis
- Вымогатель припоя
- Сообщения: 513
- Зарегистрирован: Сб фев 19, 2011 18:04:08
- Откуда: Татарстан, пос. Актюбинский
- Контактная информация:
Re: Прошу в помощи в объединении кодов для RGB контроллера
Да точно ошибся.
вот почему не выходит из мин если например если tempR будет меньше 15, то результат kr будет равен нулю.
поэтому число плюс R=tempR+0;
или
минус R=tempR-0; не изменят его R.
вот почему не выходит из мин
Код: Выделить всё
kr=tempR/15поэтому число плюс R=tempR+0;
или
минус R=tempR-0; не изменят его R.
- fevcomp
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Чт окт 24, 2013 21:16:26
- Откуда: Волгоград
Re: Прошу в помощи в объединении кодов для RGB контроллера
Подумаю над решением.
Phanis, подскажи почему при изменении переменной с int на char протеус выдают ошибку симулирования, новерно это аппаратная ошибка.
Phanis, подскажи почему при изменении переменной с int на char протеус выдают ошибку симулирования, новерно это аппаратная ошибка.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
- fevcomp
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Чт окт 24, 2013 21:16:26
- Откуда: Волгоград
Re: Прошу в помощи в объединении кодов для RGB контроллера
Phanis, ты прав ошибка есть, не та переменная стоит при подсчете коэф. вместо tempR нужен r2, уходят все прежние глюки, но появляются новые, при регулировки яркости вместо уменьшения или увеличения, без какой либо разницы куда вращать, уходит в цикл увеличения -уменьшения-увеличение-уменьшение, причина мне понятна, в коэф., но как по другому решить задачу пропорционального изменения яркости 3-х каналов при любом выбранном цвете,я сколько не пытался придумать, ни чего не получается кроме того, что получилось (да, тип переменные в коде с int сменил на char). Подскажи как ещё это можно организовать?
Да, код твой разобрал, как у тебя все оптимально реализовано, очень понравилось, поучительно! Понравилось, как реализована обработка энкодера, я правильно понял, что при такой реализации, энкодер можно вешать на любые порты, не только на int1 и int0.
Вот последний код, что у меня получается.
Да, код твой разобрал, как у тебя все оптимально реализовано, очень понравилось, поучительно! Понравилось, как реализована обработка энкодера, я правильно понял, что при такой реализации, энкодер можно вешать на любые порты, не только на int1 и int0.
Вот последний код, что у меня получается.
- Вложения
-
- CVAVR-RGB.7z
- (183.81 КБ) 151 скачивание
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."