Перейти к содержанию

WS2812b первый светодиод в кольце горит зеленым


-=FISHER=-

Рекомендуемые сообщения

Приветствую всех!

Недавно собрал себе контроллер (на Atmega8) для управления светодиодным колечком из 16 штук WS2812b. В процессе отладки использовал готовое кольцо, заказанное в Китае, однако под мои нужды внутренний диаметр кольца нужен немного больше, поэтому заказал (опять таки в Китае) платы-колечки, сами же светодиоды купил в наличии у себя в городе. Однако после сборки я заметил, что после первого включения и вместе с первой отправкой данных  на кольцо, на нем кратковременно мигает зелёным цветом первый светодиод (после этого кольцо ведет себя согласно программе, пока не скинуть питание никаких глюков больше нет). Я стал разбираться и пришел к выводу, что даже если отправить на ленту посылку из 24 байт (набора данных для включения только первого светодиода) для включения чисто синего цвета или чисто красного, то к его цвету в ~50% случаях примешивается зелёный, но бывает что и чисто синий удается зажечь..

Самое интересное: я подключаю старое колечко и на нем этого глюка не отображается! Справедливости ради стоит сказать, что чип в светодиодах "китайских" и тех что я купил в наличии отличается, китайский меньше, но при этом ведет себя правильнее. Я знаю что есть некие WS2812b-v3 и WS2812b-v5 и у них с просто WS2812b отличаются тайминги, но в Чип Дип я выбрал именно обычные, фото для сравнения:

Скрытый текст

834721654_WhatsAppImage2020-12-10at22_24_42.jpeg.6c292f758180008155f1b3d7c44612ef.jpeg

Приведу код инициализации аппаратного SPI в Atmega8, а так же функции для отправки данных на WS2812b:

Скрытый текст

#include "SPI.h"

#define LED_COUNT 16 //количество светодиодов

#define WS2812_BIT_0 0b11000000 // Константа для формирования импульса "0" для WS2812

#define WS2812_BIT_1 0b11111100 // Константа для формирования импульса "1" для WS2812  
  
/// Структура, описывающая один пиксель
typedef struct pixel_t
{
	uint8_t		g;			///< зеленая составляющая цвета
	uint8_t		r;			///< красная составляющая цвета
	uint8_t		b;			///< синяя составляющая цвета
} pixel_t;

pixel_t pixels[LED_COUNT]; // массив пикселей

#define SS _BV(PB2) //ножка SS (Chip Select) (1<<PB2)
#define MOSI _BV(PB3) //ножка MOSI (1<<PB3)
#define SCK _BV(PB5) //ножка SCK (1<<PB5)
#define SPI_pins (SS|MOSI|SCK) //комбинация ножек интерфейса SPI
#define SPI_DDR DDRB //порт интерфейса SPI выбран порт B

void SPI_ini(void) //ФУНКЦИЯ ИНИЦИАЛИЗАЦИИ SPI
{
	SPI_DDR|=SPI_pins; //ножки SPI на выход
	PORTB&=~((1<<2)|(1<<3)|(1<<5)); //низкий уровень
	SPCR|=(1<<SPE)|(1<<MSTR)|(1<<CPHA); //включим шину, объявим ведущим
	SPSR|=(1<<SPI2X); //частота SPI 16/2 = 8 МГц
	SPDR=0;
}

void SPI_SendByte(uint8_t byte) //ФУНКЦИЯ ОТПРАВКИ БАЙТА ПО SPI
{
	for(uint8_t mask=0x80; mask; mask >>=1)
	{	
		SPDR = byte & mask ? WS2812_BIT_1 : WS2812_BIT_0;
	}
	while (!(SPSR & (1 << SPIF)));
}

void ws2812_show(void)
{
	cli();
	for(uint8_t i=0; i < LED_COUNT; i++)
	{
		// для чипа WS2812 порядок цветовых составляющих должен быть таким:
 		SPI_SendByte(pixels[i].g);	// сначала ЗЕЛЕНЫЙ
 		SPI_SendByte(pixels[i].r);	// затем КРАСНЫЙ
 		SPI_SendByte(pixels[i].b);	// в конце - СИНИЙ
	}
	while (!(SPSR & (1 << SPIF))); // ждем завершения передачи последнего бита
	sei();
}

 

Помогите пожалуйста разобраться, где собака зарыта?

Изменено пользователем -=FISHER=-

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Проблему решил, подтянув линию данных со стороны МК к земле через 10к. Тему можно закрывать...

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Ин-14 довольно тусклые лампы, а у вас вокруг освещают.
    • Вначале нужно измерить 5 вольт с блока питания при подключенных часах ! , и только потом принимать решение о замене блока питания. Если не меньше 4,8 вольта - , ничего не меняйте
    • Ток ламп у Вас скорее слишком большой, вон как сияют, но БП 5 вольт на него никак повлиять не сможет, внутренний высоковольтный преобразователь влияет на это, или китайцы поставили слишком маленькие токоограничивающие резистторы.
    • Всем доброго! Такой вот специфический вопрос возник - как бороться с нагревом соленоида, который будет работать 24/7 ?  В чем суть: есть такие штуки, может видели - "левитирующие цветочные горшки". Если кто ещё не видел - гуглить по ключевым словам "repulsive magnetic levitation" на youtube. С программной и электронной стороны - отлично знаю, как устроено, могу собрать - проблем нет. И хочу собрать :). Но проблема вот в чём: есть у меня большие сомнения, что соленоид, запитанный 24 часа в сутки, 7 дней в неделю - сие есть хорошо. По крайней мере, придётся очень серьёзно озаботиться (как мне кажется) борьбой с нагревом такого соленоида. Есть у меня ряд идей конечно, как это сделать - но хотелось бы послушать сначала умных людей. Любым идеям буду рад!
    • Та чистая плата, я отмывал флюс когда лампы припаивал. Да хорошо, попробую мощнее бп, а не сгорит плата, там защита есть?? А то 3 А подам и мало ли пыхнет((
    • Любые керамические конденсаторы соответствующей группы. КМ-ки бывают очень разные, группы ТКЕ - П33, МП0, М47....Н90. Также и любые другие - импортные, например NP0, X7R, Y5V и другие. Назначение, пределы емкости и потери на разных частотах разные. А минимальная индуктивность - у СМД, доли нГ.
×
×
  • Создать...