Исходник был на C с удобными коментами,т.е. можно было меняя константу и заново компилируя менять скорость переключения.Сейчас накрылся комп с COM-портом и естественно нечем шить PIC.Но есть программатор на FT232 и в наличии Attiny13. В интернете есть куча примеров RGB на Attiny13,но не нашел ни одного чтоб был только один эффект плавного перехода R-G-B,без кнопок,ДУ,сенсоров,случайного выбора цвета,UART-а и прочих наворотов.Может у кого есть прошивка с одним единственным эффектом ШИМ R-G-B на Attiny13 ?Чтоб можно было сделать скорость переключения каналов примерно 2 Гц. Помогите пожалуйста.
Плавная волна на Attiny13
Потребовалось создать плавную бегущую волну на 3 канала.Раньше выходил из положения имеющимся RGB контроллером на PIC12F629 с програмным ШИМ и прошивкой с исходником скачанными года 3 назад уже не помню откуда.
Исходник был на C с удобными коментами,т.е. можно было меняя константу и заново компилируя менять скорость переключения.Сейчас накрылся комп с COM-портом и естественно нечем шить PIC.Но есть программатор на FT232 и в наличии Attiny13. В интернете есть куча примеров RGB на Attiny13,но не нашел ни одного чтоб был только один эффект плавного перехода R-G-B,без кнопок,ДУ,сенсоров,случайного выбора цвета,UART-а и прочих наворотов.Может у кого есть прошивка с одним единственным эффектом ШИМ R-G-B на Attiny13 ?Чтоб можно было сделать скорость переключения каналов примерно 2 Гц. Помогите пожалуйста.
Исходник был на C с удобными коментами,т.е. можно было меняя константу и заново компилируя менять скорость переключения.Сейчас накрылся комп с COM-портом и естественно нечем шить PIC.Но есть программатор на FT232 и в наличии Attiny13. В интернете есть куча примеров RGB на Attiny13,но не нашел ни одного чтоб был только один эффект плавного перехода R-G-B,без кнопок,ДУ,сенсоров,случайного выбора цвета,UART-а и прочих наворотов.Может у кого есть прошивка с одним единственным эффектом ШИМ R-G-B на Attiny13 ?Чтоб можно было сделать скорость переключения каналов примерно 2 Гц. Помогите пожалуйста.
- Реклама
- Сообщения: 1817
- Зарегистрирован: Пн ноя 29, 2010 15:58:43
купите USB-COM адаптер. и будет у вас счастье.Сейчас накрылся комп с COM-портом
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
2 секунды - это время между максимумами яркости соседних каналов?loginoff07 писал(а):?Чтоб можно было сделать скорость переключения каналов примерно 2 Гц. Помогите пожалуйста.
Т.е. красный на максимуме, ч-з 2 секунды синий на максимуме, ч-з 2 секунды зеленый на максимуме и т.д.....
Я правильно понял?
Вот исходник на С для PIC12F629 ,как его изменить для Attiny13? Компилятор у меня MicroC for AVR есть.
- Вложения
-
- qwert1.c
- (1.16 КБ) 421 скачивание
- Реклама
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
- Сообщения: 581
- Зарегистрирован: Чт янв 15, 2009 18:57:12
Такая штука разобрана у dihalt'а здесь. Тебе нужны три ШИМ-генератора, по одному на цвет. Все три можно завести на один таймер. Далее из программы по определенному закону (в твоем случае - синус или косинус со сдвинутыми градусов на 45..90 фазами) нужно время от времени менять значение ШИМ-генераторов.
[img]http://ub.imgfiles.ru/2.png[/img]
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
С пиковской прошивкой в принципе то же самое, но чет в основном цикле я не совсем разобрался, сделал по своему...
Писал в AVRStudio +GCC

Писал в AVRStudio +GCC
Код: Выделить всё
#define F_CPU 9600000
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
volatile uint8_t blue=0,red=42,green=42+64,counter,dir;
int main (void)
{
DDRB = 0xff;//линии порта на вывод
TCCR0A = 0x02;//режим таймера - CTC
TCCR0B = 0x02;//предделителя таймера - деление на 8
TIMSK0 = 0x04;//счетчика по совпадению с OCR0A
OCR0A = 120;//регистр сравнения = 120 (прерывание 10khz)
sei ();
while(1){
_delay_ms (10);//скорость изминения
if (blue++ & 0x40) blue -= 2;
if (blue == 0x40) blue = 0;
if (blue == 0x3f) blue = 0x7f;
if (green++ & 0x40) green -= 2;
if (green == 0x40) green = 0;
if (green == 0x3f) green = 0x7f;
if (red++ & 0x40) red -= 2;
if (red == 0x40) red = 0;
if (red == 0x3f) red = 0x7f;
}
}
ISR (TIM0_COMPA_vect)
{
if (++counter == 64) counter = 0;
if ((blue & 0x3f)>=counter) PORTB |= (1<<0);
else PORTB &= ~(1<<0);
if ((red & 0x3f)>=counter) PORTB |= (1<<1);
else PORTB &= ~(1<<1);
if ((green & 0x3f)>=counter) PORTB |= (1<<2);
else PORTB &= ~(1<<2);
}
- Вложения
-
- sh1.gif
- (39.87 КБ) 1326 скачиваний
Спасибо большое,что откликнулись. У меня что-то компилятор обругался.Видимо из-за того,что первоначально составлено на ассемблере .Сейчас скачаю AVRStudio.Если не сложно ,можно ещё попросить у Вас ассемблеровский вариант.
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
Установи сначала WinAVR, потом AVRStudio4, и будет компилится...
Ну можно и один AVRStudio4, тогда переделаю на асм....
Ну можно и один AVRStudio4, тогда переделаю на асм....
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
Пойдет, просто 6-ка чересчур тяжелая..... ну если уже качаеш, то докачай, помоему к ней ничего не надо лепить (как компилятор WinAVR к 4-ке)
Установил.Пока ничего не переделывайте,скомпилил hex,сейчас в протеусе крутну.
Вроде пошел проект ,надо сейчас в железе посмотреть ,как визуально это будет выглядеть и добавить скорости.Ещё раз спасибо.
Идет сильное мерцание герц так 10 на фоне этого мерцания идет волна,похоже очень низкая частота шим получилась,как её поднять? генератор выставлен в фузах внутренний RC 9,6 МГц
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
Надо выключить делитель на 8, он по умолчанию включен.....loginoff07 писал(а):Идет сильное мерцание герц так 10 на фоне этого мерцания идет волна,похоже очень низкая частота шим получилась,как её поднять? генератор выставлен в фузах внутренний RC 9,6 МГц
Точно!Мерцание исчезло.Внешне сигнал напоминает плавную бегущую тень.Можно ли программно инвертировать выходы?
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
Инвертирование ничего не изменит, т.к. сигнал симметричен, как его не крути, он визуально такой же останется. Просто поменяется направление движения волны.....
Чтобы эффекта бегущей тени не было, можно попробовать, не до конца гасить светики.....
Чтобы эффекта бегущей тени не было, можно попробовать, не до конца гасить светики.....
Да в принципе нормально ,инвертировать не нужно ,наоборот такой эффект как солнце ,отраженое от ряби на поверхности.Спасибо за помощь. Видео http://youtu.be/0LzH_2RNoCo
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
Кажется скорость большеватая..... Ощущение что простые бегущие огни...loginoff07 писал(а):Да в принципе нормально ,инвертировать не нужно ,наоборот такой эффект как солнце ,отраженое от ряби на поверхности.Спасибо за помощь. Видео http://youtu.be/0LzH_2RNoCo
Да и увеличить количество сегментов волны можно, прикольнее будет...
У меня простенькая демо платка есть со светиками, ща попробую.....


