#include <avr/io.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <util/delay.h>
uint8_t counter=0;
uint8_t lev_ch1, lev_ch2, lev_ch3;
uint8_t buf_lev_ch1, buf_lev_ch2, buf_lev_ch3;
ISR(TIM0_OVF_vect){
if (++counter==0) //счетчик перехода таймера через ноль
{
buf_lev_ch1=lev_ch1; //значения длительности ШИМ
buf_lev_ch2=lev_ch2;
buf_lev_ch3=lev_ch3;
PORTB |=(1<<PB0)|(1<<PB1)|(1<<PB2); //подаем 1 на все каналы
}
if (counter==buf_lev_ch1) PORTB&=~(1<<PB1); //подаем 0 на канал
if (counter==buf_lev_ch2) PORTB&=~(1<<PB0); //по достижении
if (counter==buf_lev_ch3) PORTB&=~(1<<PB2); //заданной длительности.
}
int main(void)
{
DDRB=0b00000111; // установка PortB пины 0,1,2 выходы
// таймер работает без предделителя
TCCR0B = _BV(CS00);
// прерывания по переполнению таймера разрешены
TIMSK0 = _BV(TOIE0);
// глобально прерывания так же разрешены
sei();
lev_ch1=0; //Красный цвет
lev_ch2=255; //Зеленый цвет
lev_ch3=0; //Синий цвет
while (1) //бесконечная шарманка
{
for (uint8_t i=0;i<256;i++) {
lev_ch1 = i; //Красный увеличиваем
lev_ch2 = 255-i; //Зеленый уменьшаем
_delay_us(5000); //Пауза 5мс
}
for (uint8_t i=0;i<256;i++){
lev_ch3 = i; //Синий увеличиваем
lev_ch1 = 255-i; //Красный уменьшаем
_delay_us(5000); //Пауза 5мс
}
for (uint8_t i=0;i<256;i++) {
lev_ch2 = i; //Зеленый увеличиваем
lev_ch3 = 255-i; //Синий уменьшаем
_delay_us(5000); //Пауза 5мс
}
}
}
+17 |
3738
102
|
Знаете, чем плоха хорошая, по своей сути, идея, но плохая её реализация?
Вы написали интересный «труд», но сделали это небрежно, что почти сводит на нет затраченные усилия.
Выдаёт ошибку:
Можете дать полную версию скетча, который будет компилироваться?
Большое спасибо за ответ.
Там полосатые секторы не зря — от них по ветвям бежали интересные тени, т.к. это транспортировалось пучком световодов к кончикам ветвей.
Посему бы не лентой это надо делать, а сконцентировать на малой площади, соразмерной с пучком световодов, n светодиодов сверхярких разноцветных или даже полноцветных. А тиньки вполне хватит для красивой «причудливости» их переливов.
Можно поставить светодиоды WS2812. Есть примеры работы с ними, но, ИМХО, овчинка не стоит выделки. Для WS2812 вожно найти гораздо более достойное применение в НГ
Впрочем — ради праздничного настроения, чего не пожалеешь, можно и не 13, а 2313 туда засунуть. Тогда и разгуляться можно с многоцветием, переливами и прочим :)
Но некогда и мозгов уже не хватает. :(
А за прямые руки и креативный подход однозначно плюс!
13ый очень удачный малыш, и не только для оживления игрушек.
"… и лишь слегка несимметрично стоят щербатые котлы...")
Так лучше для перфикционистов?
Кстати, смотрю на фьюзы — вполне сложно сделать 8МГц + тот же делитель на 8
На счет питания — лично мне интересно питания от двух ААА (идеально от одной) Там получае напряжение как раз до 2В будет падать на двух полуразряженных аккумуляторах
А 1Мгц вполне можно сделать, коррекция внутреннего генератора работает в широких пределах. Причем менять корректирующий коэффициент можно прямо во время работы.
1. Купить все детали, вытравить печатную плату, красиво все собрать
2. Выгрести из ящика всякое неиспользуемое барахло, недостающее выпаять со старых плат и из всего этого г… сделать конфетку. Здесь иногда удовольствия от реализации даже поболе.
А чем не нравится Ардуина в качестве программатора. И чем она от USBAsp отличается принципиально? Контроллер чуть помощнее? Конструктив другой? Да и цена у Pro Mini не намного от программатора отличается. Так что дело вкуса.
А потом прочитал… A Elbereth Gilthoniel! иными словами — ё моё!
В общем — рукоплещу «спасибо!» в 100500 рук!
… если кто не понял, у меня завалялся мешочек 13х тинек… :)
Здесь то я могу дырочек и перемычек сколько угодно сделать.
Хотя SMD на двухсторонке на порядок компактнее и эстетичнее
А то гнобят за отсутствие печатки.
Для часов точность недостаточна.
Если памяти хватает, то разницы нет, на ассемблере писать или на Си или на «Виринге».
Сейчас хочу еще туда программный сериал порт запихнуть для отладки.
Все равно по ресурсам тинька это игрушка.
Но если тот код переписать на Си то думаю получилось бы 250 строчек, но памяти занимало бы это меньше.
Большое спасибо. Читал с интересом.
Было когда-то желание что-то писать, сейчас уже отбилось напрочь, работа забирает как время так и силы.
J3 SCK option
If the target clock is lower than 1,5 MHz, you have to set this jumper.
Then SCK is scaled down from 375 kHz to about 8 kHz.
Эту перемычку, в принципе, можно и для остальных ардуин использовать — просто время прошивки немного увеличится.
Где-то были упоминание того, что для atmel частота программатора не должна превышать частоту «программируемого» более чем в 8 раз.
Прошивал с помощью Arduino 1.8.5.
Для этого нужно сменить частоту.
Выбрал частоту 4.8 мГц., нажал на кнопку «Записать загрузчик». Теперь светодиоды мигают плавно.
но вот код кривой — нет павнойти переходов — обрывы по яркости на 0…
переписал малость )
делает плавно нарастание и уменьшение яркости со сдвигом на 1/2 цвета
полный перелив всех цветов