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

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

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

Сообщение phanis »

Чтобы яркость менялась так как вам хочется, сделайте три таблицы, для каждого цвета свою.
пример для красного
Спойлер

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

flash unsigned char RED_mass[256]={
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x08, 0x09, 0x0B, 0x0D, 0x0F,
0x11, 0x13, 0x15, 0x18, 0x1A, 0x1D, 0x20, 0x23,
0x26, 0x29, 0x2D, 0x30, 0x34, 0x38, 0x3C, 0x40,
0x44, 0x48, 0x4D, 0x51, 0x56, 0x5B, 0x60, 0x65,
0x6A, 0x70, 0x75, 0x7B, 0x81, 0x87, 0x8D, 0x93,
0x99, 0xA0, 0xA6, 0xAD, 0xB4, 0xBB, 0xC2, 0xC9,
0xD1, 0xD8, 0xE0, 0xE8, 0xF0, 0xF8, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

// 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 > RED_mass[R])  PORTB &= ~(1 << PORTB0); //ШИМ канал для красного канала RGB LED
 
 }

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

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

Сообщение fevcomp »

Спасибо Phanis! обязательно в последующих проектах применю, но изучив повторно систему цветообразования, понял. что в некоторых моментах ошибался, хотя не исключаю, что могу ошибаться и сейчас. По поводу цветообразования и регулирования яркости выбранного цвета так конкретного ни чего не нашел, все описывают регулировку отдельно каждого канала, а одновременное регулирование трех каналов по яркости с сохранением выбранного цвета не где ни встречал, даже в теории. Так что остановился на том, что есть. Но возникла, как всегда в моем случае камни. Плавное включение, которое я реализовал подходит только для белого цвета, при изменении параметра цвета плавное включение не работает, тем более что после включения даже белового цвета, последующее изменение яркости опять изменяет яркости по круговому циклу.
Полный тупик, если работает что то одно не работает другое, кошмар с мозгами.
Вложения
CVAVR-RGB.rar
(225.31 КБ) 125 скачиваний
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

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

Сообщение phanis »

Предложу еще раз. использовать ШИМ аппаратный, для регулировки общей яркости.У меня работало.
По коду:

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

//========Выбор сцены спектра палитры цветов=========== 
          if((PIND&(1 << PORTD2)|(1 << PORTD0))==0)//это условие никогда не выполнится приоритет за  &
           {
            scena++;
            if (scena>=5)
            scena=0;
           }
Аватара пользователя
fevcomp
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт окт 24, 2013 21:16:26
Откуда: Волгоград

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

Сообщение fevcomp »

Phanis, ну что-то получилось, хотя реализовать весь задуманный функционал полностью у вы нет.
Что получилось:
- Полностью реализовать выбор любого цвета по спектру и пред настроенного цвета с регулировкой их яркости.
Что не получается:
- Запись и чтение настроек из/в EEPROM
- Плавное включение и выключение RGB светодиодов с учетом выбранного цвета и выставленной яркости.
То как сейчас реализовано чтение и запись из/в eeprom почему-то не работает, или возможно я не знаю, как подключать файл *. еер в протеусе. При включении эмуляции, яркость и цвет включаются в белом режиме 255-255-255, хотя данные в eeprom настроены на другой цвет, а именно 153-102-51.
Приложил описание полного функционала будущей программы, схему и последний рабочий, в части того что получилось код Си CVAVR.
Если возможно помогите пока с чтением и записью в eeprom, а плавные включение и выключение позже, как разберусь c eeprom. Реализовывал чтение и запись разными методами, описанными в хелпе на CVAVR, в коде это видно.
Вложения
CVAVR-RGB функционал-схема-код.rar
(208.21 КБ) 148 скачиваний
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
Аватара пользователя
fevcomp
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт окт 24, 2013 21:16:26
Откуда: Волгоград

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

Сообщение fevcomp »

Phanis. Ну, плавное включение и выключение я реализовал, как и хотел. Осталось как - то проверить eeprom в протеусе. Хотя планирую, сделать пробную макетку и посмотреть, что реально у меня получилось, ну а затем продолжим дальше усовершенствовать свой код.
Вложения
CVAVR-RGB _схема_код,_функционал.rar
(209.3 КБ) 146 скачиваний
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

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

Сообщение phanis »

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

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

Сообщение fevcomp »

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

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

Сообщение phanis »

Да можно к любым ножкам, считывается регистр PIN, но на железе не проверял, только в протеусе..

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

     enc_state <<= 1;
     enc_state  |= PINx.0;
     enc_state <<= 1;
     enc_state  |= PINx.2;
Аватара пользователя
fevcomp
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт окт 24, 2013 21:16:26
Откуда: Волгоград

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

Сообщение fevcomp »

Phanis подскажите, правильно ли я инициирую таймер 2 и прерывание INT1, а также их обработку по подсчету частоты импульсов на входе INT1 от тахометра (пытаюсь реализовать дополнительную функцию), а то я кое - как по даташит со словарем посмотрел, но насколько правильно не знаю.

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

// ================Объявление переменных=============

int frq=0;
 int count_time;

//=======Объявления функций=======

 void light_shift (void);

// Разрешение прерывания по таймеру Т0 и Т2 в разделе main (void)

TIMSK |= (1 << TOIE0)|(1 << TOIE2);
TCCR0 |= (1 << CS00);

TCCR2|=(0<<CS22)|(0<<CS21)|(1<<CS20);  //TCCR2=0x06; //делитель 256 =31250 Гц
TCNT2=0x00; 

MCUCR |= (0 << ISC00)|(1 << ISC01)|(0 << ISC10)|(1 << ISC11);

GIFR |= (1 << INTF0);   /* |(1 << INTF1) */
GICR |= (1 << INT0)|(1<<INT1); // разрешаем прерывание по INT0 и INT1

interrupt [EXT_INT1] void imp_tah(void)

  frq++;
}

// Timer2 overflow interrupt service routine

interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
  TCNT2=6; //0b00000110 //0x06 // 31250/(256-6)= 125 Гц (125 циклов таймера на 1с)
  count_time=TCNT2;
  count_time++;
}

//====Функция сравнения подсчитаных импульсов с допустимым и изменение цвета подсветки====

void light_shift (void)
 {
    if (count_time==125)
     {
      count_time=0;
      frq=0;
     }
   if (frq>=166,67)
     {
      R=255;G=0;B=0;
     }
    else
     {
      color(tempR,tempG,tempB);
     }
 }

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

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

Сообщение fevcomp »

Добрый день! Уважаемые коты.
Снова возвращаюсь к своей теме. Собрал я код воедино, опробывал по ранее, выложенной схеме (в протеусе) на макетной плате, все более менее работает (и регулировка яркости и выбор цвета из спектра и пред настроенных, в память тоже записывает), но когда решил собрать плату в полном объеме деталей (под нагрузку не от одного светодиода, а от ленты), по схеме которую выложил ниже, ни чего не работает! Помогите, Знаний кроха, может что не так в этой схеме, может она не подходит под программу. Unreal_2009? Panis вы до этого момента помогали советами и не без результат но, помогите и дальше. :dont_know: :dont_know:.
Последняя схема по которой проверял в протеусе:
Изображение
и
Изображение
Схема по которой делал плату. (в железе не работает)
Изображение

В архиве исходный код, PCB, модель протеуса (версия восьмая), схема.
Вложения
CVAVR_RGB.7z
(687.58 КБ) 112 скачиваний
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

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

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

Сообщение fevcomp »

Светодиоды соединены последовательно по три штуки. Напряжение питания 12 вольт. на схеме все видно.
"Жизнь человека - это короткое мгновение во вселенной, и не стоит её тратить на обиды, оскорбления и выяснение отношений."
Ответить

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