Прошу в помощи в объединении кодов для RGB контроллера

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
fevcomp
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт окт 24, 2013 21:16:26
Откуда: Волгоград

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение fevcomp »

Спсибо Unreal_2009 за указания на граматичекие ошибки в тексте, стыдно :facepalm:. За совет по инверсии спасибо. Тогда не сочтите за наглость еще один вопорос к Вам, при реальной сборке через какие чип мосфеты можно поставить и как, чтобы соединить сборку RGB диодов и микроконтролер. По поводу протеуса, версия 8.0 SP0 build 15417.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
Аватара пользователя
Unreal_2009
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн авг 06, 2012 10:39:53
Откуда: Москва

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение Unreal_2009 »

Вот такой код - для светодиодов включенных относительно земли.

Код: Выделить всё

  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 контроллера

Сообщение Unreal_2009 »

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 контроллера

Сообщение fevcomp »

Unreal_2009, программный шим, что ты показал действительно убрал инверсию значений цвета. но это как ты сказал относительно земли, а если относительно напряжения в +12 v. И ещё один вопрос, при симуляции у меня после выбора цвета, яркость при вращении энкодера ноль реакции, а после выбора кнопкой изменения спектра по кругу, тем более энкодер не переходит в состояние регулировки яркости и естественно тоже эффект с изменением яркости. Как я догадываюсь мной реализована не правильно функция регулировки яркости, а она у меня более применима для монохромного диода и что - то я упускаю после нажатия кнопки, но из-за мизерного опыта сколько не пытаюсь понять, что именно, ответа не нахожу. Укажи, если не сложно, путь истины.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение phanis »

Код: Выделить всё

 
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;
 }
если хотябы один из цветов не меньше 255, яркость не прибавлять.
пример тот же зеленый R=0, G=255, B=0,
Аватара пользователя
Unreal_2009
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн авг 06, 2012 10:39:53
Откуда: Москва

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение Unreal_2009 »

У меня протеус 7.10 не окрывает твою схему - скинь мне скриншот в личку.

Вот так надо включать реальную нагрузку для каждого канала.
Изображение

номинал резистора R3 зависит от нагрузки - падения напряжения на светодиоде, количества светодиодов и максимально допустимого тока через светодиод.
Аватара пользователя
fevcomp
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт окт 24, 2013 21:16:26
Откуда: Волгоград

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение fevcomp »

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 контроллера

Сообщение phanis »

для этого случая (регулировки яркости) использовал в свое время еще один шим, аппаратный, который управлял транзистором, тот в свою очередь
питал схему трех остальных RGB транзисторов.Но схематично есть другие варианты. Например использование логического элемента И для управления транзисторами.
Аватара пользователя
Unreal_2009
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн авг 06, 2012 10:39:53
Откуда: Москва

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение Unreal_2009 »

Я же написал выше в посте как сделать в коде чтобы 0- минимум свечения, 255 - максимум.

Правильно я понимаю (пожелания по функционалу)
1. При первом нажатии кнопки регулируется красный цвет по яркости.
2. При втором нажатии кнопки регулируется зеленый .
3. При третьем нажатии кнопки регулируется голубой.
4. При четвертом регулируется общая яркость.

Там в коде конечно сделано по другому. Но не совсем понимаю насколько так удобнее.???
Аватара пользователя
fevcomp
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт окт 24, 2013 21:16:26
Откуда: Волгоград

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение fevcomp »

Unreal_2009 не совсем так, нажатие кнопок с предварительно настроенными цветами, это только выбор цвета подсветки, также как при 4-ом нажатии на кнопку входим в режим позволяющий выбрать любой произвольный цвет подсветки, а регулировка яркости должна работать при любом цвете подсветки т.е. нажали 1 раз кнопку выбрали цвет подсветки панели приборов красный и при необходимость при эксплуатации регулируем яркость, захотели сменить цвет подсветки на зелёный (надоел красный цвет) нажали на кнопку 1 раз потом 2 раз выбрали для подсветки зеленый цвет и ездим с зеленой подсветкой приборной панели при необходимости регулируем яркость, ну и в таком духе, ну а если предварительно настроенные цвета не устраивают, то нажимаем кнопку 4 раза и входим в режим выбора цвета из кругового спектра на любой вкус, после настройки цвета ездим с подсветкой, скажем серо-бурмалиновой и когда появляется необходимость регулируем яркость ее. Ну а если вообще все цвета приелись, то нажимаем кнопку 5 раз и возвращаем приборной панели белый цвет подсветки и опять же при необходимости во время езды регулируем яркость. Как то так. Обычная светодиодная подсветка приборной панели автомобиля, только с возможностью выбора цвета подсветки.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
Аватара пользователя
fevcomp
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт окт 24, 2013 21:16:26
Откуда: Волгоград

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение fevcomp »

Unreal_2009 писал(а):Я же написал выше в посте как сделать в коде чтобы 0- минимум свечения, 255 - максимум.

Нет по этому поводу я всё понял спасибо и поправил, сейчас главное мне разобраться с регулировкой яркости после настройки насыщенности цвета подсветки. Ну а остальные трудности потом, главное шаг за шагом разбираться.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
Аватара пользователя
Unreal_2009
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн авг 06, 2012 10:39:53
Откуда: Москва

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение Unreal_2009 »

Во как. Назначение девайса понятно :-)
Аватара пользователя
Unreal_2009
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн авг 06, 2012 10:39:53
Откуда: Москва

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение Unreal_2009 »

Как успехи?
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение phanis »

Может так попробовать регулировать яркость?
RGB_Dim.c
(6.95 КБ) 333 скачивания
Аватара пользователя
fevcomp
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт окт 24, 2013 21:16:26
Откуда: Волгоград

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение fevcomp »

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

Код: Выделить всё

#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 контроллера

Сообщение phanis »

МК правильно отрабатывает ваш код.
Спойлер

Код: Выделить всё

//===========Функция увеличения яркости=======
 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 контроллера

Сообщение fevcomp »

Когда при начале написания попытался изменить все переменные на Unsigned char проверка кода показывала ошибку, поэтому и оставил целую переменную. Что касается

Код: Выделить всё

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 контроллера

Сообщение phanis »

Да точно ошибся.
вот почему не выходит из мин

Код: Выделить всё

 kr=tempR/15
если например если tempR будет меньше 15, то результат kr будет равен нулю.
поэтому число плюс R=tempR+0;
или
минус R=tempR-0; не изменят его R.
Аватара пользователя
fevcomp
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт окт 24, 2013 21:16:26
Откуда: Волгоград

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение fevcomp »

Подумаю над решением.
Phanis, подскажи почему при изменении переменной с int на char протеус выдают ошибку симулирования, новерно это аппаратная ошибка.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
Аватара пользователя
fevcomp
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт окт 24, 2013 21:16:26
Откуда: Волгоград

Re: Прошу в помощи в объединении кодов для RGB контроллера

Сообщение fevcomp »

Phanis, ты прав ошибка есть, не та переменная стоит при подсчете коэф. вместо tempR нужен r2, уходят все прежние глюки, но появляются новые, при регулировки яркости вместо уменьшения или увеличения, без какой либо разницы куда вращать, уходит в цикл увеличения -уменьшения-увеличение-уменьшение, причина мне понятна, в коэф., но как по другому решить задачу пропорционального изменения яркости 3-х каналов при любом выбранном цвете,я сколько не пытался придумать, ни чего не получается кроме того, что получилось (да, тип переменные в коде с int сменил на char). Подскажи как ещё это можно организовать?
Да, код твой разобрал, как у тебя все оптимально реализовано, очень понравилось, поучительно! Понравилось, как реализована обработка энкодера, я правильно понял, что при такой реализации, энкодер можно вешать на любые порты, не только на int1 и int0.
Вот последний код, что у меня получается.
Вложения
CVAVR-RGB.7z
(183.81 КБ) 151 скачивание
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
Ответить

Вернуться в «AVR»