Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 03.10.2017
Сообщений: 24
1

Плавное зажигание ws2812b

22.06.2020, 18:31. Просмотров 538. Ответов 28
Метки нет (Все метки)

Привет всем!
Имеются несколько светодиодов ws2812b. Нужно сделать так, чтобы они плавно зажигались, сначала первый, потом второй и т.д.
Никак не могу сообразить, как это сделать, пока научился только включать их всех сразу, фиксированным цветом и яркостью.
Подскажите, как реализовать задуманное? Заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2020, 18:31
Ответы с готовыми решениями:

stm32 + ws2811/ws2812b
приветствую всех. переписываю библиотеку для работы со светодиодами на базе ws2811 на STM32 с...

stm32f103 + dma + timer управление ws2812b
Здравствуйте, решил обучаться семейству Sortix-m3, сейчас пытаюсь подключить к моему stm32f103c8t6...

WS2812B работает только поштучно
Купил на oty ленту с WS2812B. Для теста отрезал кусочек с 4-мя светодиодами, взял здесь на...

Esp8266+ws2812b+control web interface
Доброго времени суток. Уважаемые знатоки есть скетч солянка из 3х скетчей работает, выполняет...

28
0 / 0 / 0
Регистрация: 03.10.2017
Сообщений: 24
07.07.2020, 19:01  [ТС] 21
Попробовал сделать массив, что то не работает.. Сначала он в eeprom не хотел заходить, avrdude ошибку выдавала. Потом, вроде бы, залился, но не работает. Что не так с этим кодом, подскажите?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
 
   uint8_t svet1[525]={4,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,8,16,8,0,0,0,0,0,0,0,
     0,0,0,0,0,0,16,0,0,0,0,12,24,12,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,16,32,16,0,0,0,0,0,0,0,0,0,0,
     0,0,2,33,0,0,0,0,20,40,20,0,0,0,0,0,0,0,0,0,0,0,0,2,41,0,0,0,0,24,48,24,0,0,0,0,0,0,0,0,0,0,0,0,4,
     49,3,0,0,0,28,56,28,0,0,0,0,0,0,0,0,0,0,0,0,4,58,6,0,0,0,32,64,32,0,0,0,0,0,0,0,0,0,0,0,0,6,66,9,0,
     0,0,36,72,36,0,0,0,0,0,0,0,0,0,0,0,0,6,74,12,0,0,0,40,80,40,0,0,0,0,0,0,0,0,0,0,0,0,8,83,15,0,0,0,
     43,88,43,0,0,0,0,0,0,0,0,0,0,0,0,8,92,18,0,0,0,47,96,47,0,0,0,0,0,0,0,0,0,0,0,0,10,101,21,0,0,0,51,
     104,51,0,0,0,0,0,0,0,0,0,0,0,0,10,110,24,0,0,0,55,112,55,0,0,0,0,0,0,0,0,0,0,0,0,12,118,27,0,0,0,
     59,120,59,0,0,0,0,0,0,0,0,0,0,0,0,12,128,30,0,0,0,63,128,63,0,0,0,0,0,0,0,0,0,0,0,0,14,136,33,0,0,
     0,66,136,66,0,0,0,0,0,0,0,0,0,0,0,0,14,146,36,0,0,0,70,143,70,0,0,0,0,0,0,0,0,0,0,0,0,16,155,39,0,
     0,0,74,151,74,0,0,0,0,0,0,0,0,0,0,0,0,16,164,42,0,0,0,78,159,78,0,0,0,0,0,0,0,0,0,0,0,0,18,172,45,
     0,0,0,81,168,81,0,0,0,0,0,0,0,0,0,0,0,0,18,181,48,0,0,0,83,177,83,0,0,0,0,0,0,0,0,0,0,0,0,18,190,
     51,0,0,0,86,185,86,0,0,0,0,0,0,0,0,0,0,0,0,20,200,54,0,0,0,89,193,89,0,0,0,0,0,0,0,0,0,0,0,0,20,
    210,57,0,0,0,92,205,92,0,0,0,0,0,0,0,0,0,0,0,0,20,220,60,0,0,0};
    
void SendBit1(void)
{
    PORTD|=(1<<6);
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    PORTD&=~(1<<6);
}
void SendBit0(void)
{
    PORTD|=(1<<6);
    asm("nop");
    asm("nop");
    PORTD&=~(1<<6);
}
unsigned char y;
 
void SendByte11(y)
{
    signed char i;
    for (i=7; i>=0; i--)
    {
    if (y&(1<<i)) SendBit1();
    else SendBit0();
    }
}
int main(void)
{
DDRD|=(1<<6);
    
while(1)
{
unsigned char a;
y=svet1[0];
            
    for(a=7;a>=0;a--)
    {
    SendByte11(y);
    y++;
    SendByte11(y);
    y++;
    SendByte11(y);
    y++;
    }
    _delay_ms(250);
    }
}
0
404 / 192 / 40
Регистрация: 21.09.2008
Сообщений: 661
07.07.2020, 20:36 22
Под какую архитектуру компилируете? Какой командой получаете hex-файл?
У меня под ATmega328P собрался avr-gcc 10.1

avr-gcc -Wall -Wextra -mmcu=atmega328p -DF_CPU=16000000UL -Os -o ws.elf ws.c
avr-objcopy -j .text -j .data -O ihex ws.elf ws.hex

Исходник немного поправил, чтобы не ругался компилятор:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
 
  uint8_t svet1[525] ={4,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,8,16,8,0,0,0,0,0,0,0,
     0,0,0,0,0,0,16,0,0,0,0,12,24,12,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,16,32,16,0,0,0,0,0,0,0,0,0,0,
     0,0,2,33,0,0,0,0,20,40,20,0,0,0,0,0,0,0,0,0,0,0,0,2,41,0,0,0,0,24,48,24,0,0,0,0,0,0,0,0,0,0,0,0,4,
     49,3,0,0,0,28,56,28,0,0,0,0,0,0,0,0,0,0,0,0,4,58,6,0,0,0,32,64,32,0,0,0,0,0,0,0,0,0,0,0,0,6,66,9,0,
     0,0,36,72,36,0,0,0,0,0,0,0,0,0,0,0,0,6,74,12,0,0,0,40,80,40,0,0,0,0,0,0,0,0,0,0,0,0,8,83,15,0,0,0,
     43,88,43,0,0,0,0,0,0,0,0,0,0,0,0,8,92,18,0,0,0,47,96,47,0,0,0,0,0,0,0,0,0,0,0,0,10,101,21,0,0,0,51,
     104,51,0,0,0,0,0,0,0,0,0,0,0,0,10,110,24,0,0,0,55,112,55,0,0,0,0,0,0,0,0,0,0,0,0,12,118,27,0,0,0,
     59,120,59,0,0,0,0,0,0,0,0,0,0,0,0,12,128,30,0,0,0,63,128,63,0,0,0,0,0,0,0,0,0,0,0,0,14,136,33,0,0,
     0,66,136,66,0,0,0,0,0,0,0,0,0,0,0,0,14,146,36,0,0,0,70,143,70,0,0,0,0,0,0,0,0,0,0,0,0,16,155,39,0,
     0,0,74,151,74,0,0,0,0,0,0,0,0,0,0,0,0,16,164,42,0,0,0,78,159,78,0,0,0,0,0,0,0,0,0,0,0,0,18,172,45,
     0,0,0,81,168,81,0,0,0,0,0,0,0,0,0,0,0,0,18,181,48,0,0,0,83,177,83,0,0,0,0,0,0,0,0,0,0,0,0,18,190,
     51,0,0,0,86,185,86,0,0,0,0,0,0,0,0,0,0,0,0,20,200,54,0,0,0,89,193,89,0,0,0,0,0,0,0,0,0,0,0,0,20,
    210,57,0,0,0,92,205,92,0,0,0,0,0,0,0,0,0,0,0,0,20,220,60,0,0,0};
    
void SendBit1(void)
{
    PORTD|=(1<<6);
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    PORTD&=~(1<<6);
}
 
void SendBit0(void)
{
    PORTD|=(1<<6);
    asm("nop");
    asm("nop");
    PORTD&=~(1<<6);
}
 
void SendByte11(signed char y)
{
    signed char i;
    for (i=7; i>=0; i--)
    {
    if (y&(1<<i)) SendBit1();
    else SendBit0();
    }
}
int main(void)
{
DDRD|=(1<<6);
signed char a;
unsigned char y;
    
while(1)
{
y=svet1[0];
    for(a=7; a>=0; a--)
    {
    SendByte11(y);
    y++;
    SendByte11(y);
    y++;
    SendByte11(y);
    y++;
    }
    _delay_ms(250);
    }
}
Хекс-дамп:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
:100000000C9434000C9449000C9449000C94490061
:100010000C9449000C9449000C9449000C9449003C
:100020000C9449000C9449000C9449000C9449002C
:100030000C9449000C9449000C9449000C9449001C
:100040000C9449000C9449000C9449000C9449000C
:100050000C9449000C9449000C9449000C944900FC
:100060000C9449000C94490011241FBECFEFD8E036
:10007000DEBFCDBF13E0A0E0B1E0ECE2F1E002C0F2
:1000800005900D92AE30B107D9F70E9477000C941D
:1000900094000C9400005E9A000000000000000034
:1000A000000000005E9808955E9A000000005E98CF
:1000B00008950F931F93CF93DF93C7E0D0E0082FED
:1000C000880F110BC8010C2E02C0959587950A94D4
:1000D000E2F780FF09C00E944B00219798F7DF915B
:1000E000CF911F910F9108950E945400F6CF569A18
:1000F000C0910001D8E1DC0F8C2F0E94590081E0F3
:100100008C0F0E94590082E08C0F0E945900CD5F35
:10011000CD13F2CF2FEF84E39CE02150804090403C
:0C012000E1F700C00000E4CFF894FFCF2E
:10012C0004080400000000000000000000000000B3
:10013C00080000000008100800000000000000008B
:10014C00000000000010000000000C180C00000063
:10015C00000000000000000000001800000000106B
:10016C002010000000000000000000000000022130
:10017C000000000014281400000000000000000023
:10018C0000000002290000000018301800000000D8
:10019C0000000000000000000431030000001C38C7
:1001AC001C000000000000000000000000043A06E3
:1001BC0000000020402000000000000000000000B3
:1001CC000000064209000000244824000000000042
:1001DC0000000000000000064A0C00000028502817
:1001EC0000000000000000000000000008530F0099
:1001FC0000002B582B000000000000000000000045
:10020C0000085C120000002F602F000000000000AE
:10021C000000000000000A65150000003368330080
:10022C0000000000000000000000000A6E18000032
:10023C0000377037000000000000000000000000D4
:10024C000C761B0000003B783B0000000000000017
:10025C0000000000000C801E0000003F803F0000EA
:10026C00000000000000000000000E8821000000CB
:10027C004288420000000000000000000000000E58
:10028C009224000000468F46000000000000000091
:10029C0000000000109B270000004A974A00000055
:1002AC0000000000000000000010A42A0000004E16
:1002BC009F4E00000000000000000000000012AC87
:1002CC002D00000051A851000000000000000000AB
:1002DC0000000012B53000000053B15300000000C4
:1002EC00000000000000000012BE3300000056B9F0
:1002FC005600000000000000000000000014C8368A
:10030C0000000059C159000000000000000000006E
:10031C00000014D2390000005CCD5C00000000002D
:0E032C000000000000000014DC3C0000000097
:00000001FF
0
0 / 0 / 0
Регистрация: 03.10.2017
Сообщений: 24
09.07.2020, 01:04  [ТС] 23
У меня тинька 2313а, но он слабоват, похоже, для этого, памяти мало.. подумываю мегу какую нибудь взять.
Писал программку в atmel studio 6, там вроде avr-gcc и есть, и win avr, кажется, тоже можно включить..
Цитата Сообщение от sharpey Посмотреть сообщение
Исходник немного поправил, чтобы не ругался компилятор:
Так а что не так с моим кодом? Ну, на будущее мне..
0
404 / 192 / 40
Регистрация: 21.09.2008
Сообщений: 661
09.07.2020, 11:22 24
Свежий AVR-GCC я беру отсюда.
Цитата Сообщение от Avellan Посмотреть сообщение
Так а что не так с моим кодом?
Предупреждения выдаются. Это потенциальные места ошибок. Теперь их нет. Смотрите вывод компилятора, сравните исходный и правленный листинги.
Возьмите Arduino Nano. Мала по размеру, все выводы МК ATmega328P распаяны на гребёнку. Доступна по цене в проверенном магазине на Aliexpress.
0
0 / 0 / 0
Регистрация: 03.10.2017
Сообщений: 24
09.07.2020, 19:42  [ТС] 25
Цитата Сообщение от sharpey Посмотреть сообщение
Возьмите Arduino Nano.
Зачем она мне, у меня есть usbasp программатор, контроллер шьется им нормально.
0
404 / 192 / 40
Регистрация: 21.09.2008
Сообщений: 661
10.07.2020, 04:55 26
Avellan, у меня тоже есть usbasp. И Nano, и Leonardo, и Mini, и Mega2560. Вопрос в удобстве. Получаете готовый продукт по вменяемой цене, с шелкографией и защитной маской. Nano также можно "шить" через usbasp, там разъём ICSP-6 имеется. Если Вам развести минимальную отладочную плату, покрыть фоторезистом, засветить ультрафиолетом маску, протравить, просверлить отверстия, запаять имеющимися компонентами - как два пальца об асфальт, то пожалуйста. Всё это я умею и знаю. Выбор всегда за человеком.
0
0 / 0 / 0
Регистрация: 03.10.2017
Сообщений: 24
10.07.2020, 17:11  [ТС] 27
Мне не совсем понятно, как массив загнать в eeprom, не уверен, что правильно это сделал.. И как потом обращаться к такому массиву?
0
404 / 192 / 40
Регистрация: 21.09.2008
Сообщений: 661
10.07.2020, 17:21 28
Сохранение констант в EEPROM при использовании WinAVR (GCC)
0
0 / 0 / 0
Регистрация: 03.10.2017
Сообщений: 24
10.07.2020, 23:31  [ТС] 29
Ну оттуда я вот это "uint8_t svet1[525]=" и взял.. Так понимаю это должно работать..
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2020, 23:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как подключить нескольких светодиодных лент на WS2812b одновременно?
Приветствую всех! Нужно, что бы один ардуино одновременно и одинакого управлял шестью...

SMART RGB диоды WS2812b - нужно узнать некоторые нюансы
В общем нет ничего сложного и непонятного в их работе - &quot;0&quot; или &quot;1&quot; определяется по длительности...

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

Зажигание светодиодов AT90S2313
Доброго времени суток. На AVR только начинающий Вот написал программу для циклического зажигания...

Зажигание ВАЗ 2109
Поворачиваю ключ (на холодную) срабатывает стартер в первом положении. И бывает на ходу треск...

Последовательное зажигание светодиодов
Собственно задание: при включении МК светодиоды не горят, через 2 с загораются 1-й, затем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.