Jump to content
-=FISHER=-

Как регулировать яркость WS2812b?

Recommended Posts

Только что, optima сказал:

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

Эта пауза нужна для обновления ВСЕЙ ленты. А я отправляю посылку всего лишь на один светодиод, тут никаких пауз не нужно. Я читал документацию.


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

Share this post


Link to post
Share on other sites
1 минуту назад, optima сказал:

Плохо читали!

823772284_.JPG.d556757abf9ec83a1f50afc4ae5f0d77.JPG

Покажите пожалуйста, где вы видите паузу в передаче первых 24 бит?

Edited by -=FISHER=-

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

Share this post


Link to post
Share on other sites

Приглашаем на вебинар «Новинки и уникальные решения Molex. На что обратить внимание и почему»

7 апреля приглашаем на вебинар, который будет интересен разработчикам и инженерам-схемотехникам, интересующимся тенденциями рынка, новыми перспективными решениями для соединений «провод-провод», «провод-плата», «плата-плата». Для инженеров КИПиА и IT будут освещены уникальные решения Molex для «удлинения» интерфейсов HDMI, DisplayPort и USB даже в условиях сильного зашумления, а также семейство бесконтактных датчиков Contrinex. Помимо этого, будет уделено внимание дальнейшему развитию направления антенн, где Molex имеет ряд интересных и уникальных решений

Подробнее

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


Сергей.

Share this post


Link to post
Share on other sites
17 минут назад, -=FISHER=- сказал:

Эта пауза нужна для обновления ВСЕЙ ленты.

эта пауза нужна для обновления тех светодиодов для которых была передана посылка, а сколько их будет 1 или нацать без разницы

Share this post


Link to post
Share on other sites
                     

Измеряем мощность в режиме реального времени с помощью ИС регистратора потребляемой мощности

Одной из важнейших функций обеспечения работы системы управления питанием является измерение среднего значения потребляемой мощности критичных участков цепи питания в режиме реального времени. Микросхемы регистраторов производства Maxim Integrated имеют встроенную функцию накопления измеренных значений мощности и предоставляют на выходе данные, пригодные для вычисления ее среднего значения. В статье рассматриваются различные примеры использования регистраторов для проведения критичных измерений мощности в режиме реального времени.

Подробнее

1 минуту назад, IMXO сказал:

эта пауза нужна для обновления тех светодиодов

#include "main.h"

int main(void)
{
    SPI_ini();
    SPI_SendByte(0xDB); //ЗЕЛЁНЫЙ
    SPI_SendByte(0x5C); //КРАСНЫЙ
    SPI_SendByte(0xB3); //СИНИЙ
    _delay_us(50);
    while (1) 
    {

    }
}

Хорошо, сделал вот так)) ничего не изменилось.


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

Share this post


Link to post
Share on other sites

Я нашел как минимум одну ошибку в инициализации SPI, исправил, теперь инициализация выглядит вот так:

void SPI_ini(void)
{
    SPI_DDR|=SPI_pins; //ножки SPI на выход
    PORTB&=~((1<<2)|(1<<3)|(1<<5)); //низкий уровень
    SPCR|=(1<<SPE)|(1<<MSTR); //включим шину, объявим ведущим
    SPSR|=(1<<SPI2X);
}

Это при условии, что МК настроен на 8 МГц.

5 минут назад, IMXO сказал:

угадать

В каких именно? Все используемые функции описаны на предыдущей странице.

@IMXO Не могу понять, как я должен выставить 8 МГц частоты SPI.

02.03.2020 в 17:45, ARV сказал:

SPI настраивается на 8 МГц (кварц 16 МГц).

Не могу понять, как я могу при кварце 16 МГц, настроить частоту SPI на 8...

Edited by -=FISHER=-

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

Share this post


Link to post
Share on other sites

@IMXO image.png.dfc5031a4c45e9dc57ac83096e640d0d.png

Вот что получается при 16 МГц, 8 МГц никак не получить. Поправьте пожалуйста.

Edited by -=FISHER=-

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

Share this post


Link to post
Share on other sites

Я видимо изначально неправильно понял эту таблицу, и в итоге чтобы настроить частоту SPI на 8 МГц, инициалиация будет выглядеть следующим образом, правильно?

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

Я изменил функцию отправки следующим образом и теперь у меня начали загораться светодиоды. Только почему -то независимо от того, какой байт я передаю. У меня они светят БЕЛЫМ, то есть все цвета по максимуму...

void SPI_SendByte(uint8_t byte)
{
	for(uint8_t mask=0x80; mask; mask >>=1)
	{
		SPDR = byte & mask ? WS2812_BIT_1 : WS2812_BIT_0;
		while (!(SPSR & (1 << SPIF)));
	}
}

Сейчас ещё заметил такой интересный факт, что даже если я обе константы выставлю равными НУЛЮ, то всё равно будут гореть все три цвета в пикселе...Единственное что верно отображается это количество зажженых пикселей, которое равно количеству отправленных по SPI байт делённое на 3.

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

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

Edited by -=FISHER=-

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

Share this post


Link to post
Share on other sites
24 минуты назад, -=FISHER=- сказал:

Вся надежда на вас(((

Я понял, был косяк в инициализации SPI. Я не включил бит CPHA в регистре SPCR.


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

Share this post


Link to post
Share on other sites

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

Единственный и нормальный выход из ситуации использовать стороннюю библиотеку. 

Прикрепил файл. Библиотека маленькая и понятная. Я её использую и по логическому анализатору все четко по временным рамкам.

 

light_ws2812_AVR.rar

Share this post


Link to post
Share on other sites
3 минуты назад, LEVV2006 сказал:

И во временные рамки протокола вам не попасть!!!

Не соглашусь с Вами, потому что у меня всё заработало как надо, а ошибка была в инициализации SPI.

 


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

Share this post


Link to post
Share on other sites
44 минуты назад, LEVV2006 сказал:

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

действительно он выполняется дольше, а в них и не нужно попадать.  прием бита начинается с фронта импульса , чтение состояния бита происходит через 0,6мкс (в середине бита) , сколько времени будет пауза не критично , главное чтобы это время не привесило 50мкс. 

Share this post


Link to post
Share on other sites

Когда я писал алгоритм на С у меня была проблема с первым светодиодом. Он всегда загорался разным цветом, а остальные горели нормально......

Вот я и искал библиотеку.

Хорошо что у вас заработало сразу!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...