Jump to content

Таймер ATtiny13A каждый такт на частоте 9.6 МГц


dubrovkin
 Share

Recommended Posts

Posted (edited)

Всем привет! Вот код на C (использую MPLAB X IDE):

Спойлер
#include <avr/interrupt.h>
#include <avr/io.h>

typedef unsigned char															UInt8;

#define R																		50
#define G																		50
#define B																		50

#define B0()																	\
	asm volatile(																\
		"ldi R16,0b00001100"											"\n\t"	\
		"out %[PORT],R16"												"\n\t"	\
		"nop"															"\n\t"	\
		"ldi R16,0b00001000"											"\n\t"	\
		"out %[PORT],R16"												"\n\t"	\
		:																		\
		: [PORT] "I" (_SFR_IO_ADDR(PORTB))										\
	);

#define B1()																	\
	asm volatile(																\
		"ldi R16,0b00001100"											"\n\t"	\
		"out %[PORT],R16"												"\n\t"	\
		"nop"															"\n\t"	\
		"nop"															"\n\t"	\
		"nop"															"\n\t"	\
		"nop"															"\n\t"	\
		"ldi R16,0b00001000"											"\n\t"	\
		"out %[PORT],R16"												"\n\t"	\
		:																		\
		: [PORT] "I" (_SFR_IO_ADDR(PORTB))										\
	);

UInt8 rb;
UInt8 gb;
UInt8 bb;

inline void delay(void);
inline void set(UInt8 r,UInt8 g,UInt8 b);
void send(void);

int main(void)
{
	cli();
	
	DDRB=0b00000111;
	PORTB=0b00001000;
	
	while(1)
	{
		delay(); set(R,0,  0); send();
		delay(); set(R,G/2,0); send();
		delay(); set(R,G,  0); send();
		delay(); set(0,G,  0); send();
		delay(); set(0,G,  B); send();
		delay(); set(0,0,  B); send();
		delay(); set(R,0,  B); send();
		//delay(); set(R,G,  B); send();
		delay(); set(0,0,  0); send();
	}
}

inline void delay(void)
{
	for(UInt8 i=0;i<255;++i)
	{
		for(UInt8 j=0;j<255;++j)
		{
			for(UInt8 k=0;k<16;++k)
			{
				asm volatile("nop"::);
			}
		}
	}
}

inline void set(UInt8 r,UInt8 g,UInt8 b)
{
	rb=r;
	gb=g;
	bb=b;
}

void send(void)
{
	for(UInt8 i=0;i<3;++i)
	{
		UInt8 cb;
		
		if(i==0)
			cb=rb;
		else if(i==1)
			cb=gb;
		else
			cb=bb;
		
		for(UInt8 j=0;j<8;++j)
		{
			if((cb & (1<<(7-j)))>0)
			{
				B1();
			}
			else
			{
				B0();
			}
		}
	}
}

 

В коде закомментирована строка отправки белого цвета (на самом деле серый, но не важно). Без белого цвета работает правильно. Стоит её раскомментировать, так поведение меняется. К примеру, загорается красный, оранжевый, жёлтый, зелёный, голубой, синий, фиолетовый, белый и он остаётся слишком долго, пропуская выключение цвета. Потом красный и так далее, доходит до белого и может пропуститься или следующий цвет стать ярче (или вообще не белый будет). В общем там непонятные для меня вещи. Могу лишь сказать то, что последовательности из красного, оранжевого, жёлтого, зелёного, голубого, синего, фиолетового, белого, выключенного и по кругу, я не добился. Мне сказали что ошибка в коде. Где?)

Edited by dubrovkin
Link to comment
Share on other sites

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

 В даташите на светодиод на 5 стр.  есть    "ret code"  . Возврат от последнего светодиода линейки к первому , епп  . Может причина в несоблюдении  ?   

WS2812B.pdf

Link to comment
Share on other sites

Реле, разъемы, вентиляторы, корпуса, микросхемы, конденсаторы и много другое!

Скидки до 20% на сайте электронного дискаунтера ТМ Электроникс.

Бесплатная доставка в любую точку России + кэшбэк 15%.

Подробнее

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

6 минут назад, dodik сказал:

Может причина в несоблюдении  ?   

Ну это вы привели свой код в соответствие с ДШ, а ТС с упорством носорога передает RGB вместо GRB ....

Link to comment
Share on other sites

Материалы вебинара «Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока»

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Posted (edited)
3 часа назад, dodik сказал:

 В даташите на светодиод на 5 стр.  есть    "ret code"  . Возврат от последнего светодиода линейки к первому , епп  . Может причина в несоблюдении  ?   

WS2812B.pdf 420 кБ · 3 загрузки

Вы мне про WS2812B, а я Вам про что?

3 часа назад, IMXO сказал:

Ну это вы привели свой код в соответствие с ДШ, а ТС с упорством носорога передает RGB вместо GRB ....

Откуда Вы всё это берёте? В Datasheet'е чёрным по-белому написано:

Цитата

Composition of 24bit data:

R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2 B1 B0

Note: Data transmit in order of RGB, high bit data is firs

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

Edited by dubrovkin
Link to comment
Share on other sites

Комплексные решения с литиевыми батареями EVE для интеллектуальных систем безопасности

Литиевые химические источники тока EVE по своим характеристикам являются идеальным выбором для современных интеллектуальных систем безопасности. EVE разрабатывает литиевые батареи, опираясь на многолетние исследования таких областей применения, как беспроводная связь стандартов Bluetooth, LoRa, Wi-Fi, NB-IoT и ZigBee. Рассмотрим решения для систем безопасности с использованием батарей EVE. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

10 минут назад, dubrovkin сказал:

Откуда Вы всё это берёте? В Datasheet'е чёрным по-белому написано:

1077677035_.png.d8c37c3a93d6de5316818c3d60eb6570.png

ну и где здесь RGB ???

Link to comment
Share on other sites

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ой, я для чего написал эту фразу?

Цитата

Вы мне про WS2812B, а я Вам про что?

Ладно, скажу проще: Вы про WS2812B, а я про WS2818B.

Link to comment
Share on other sites

а если после белого цвета переходить не сразу на чёрный, а на какой нибудь цветной ? ещё попробовать не чисто белый, а на единицу изменить один из цветов ? 

ну и процедуры set() и send() можно объединить, использовать _delay_ms() из  #include <util/delay.h>, чтобы код более читабельным стал.

 

пропустил несколько серий в этом сезоне, В0 и В1 это отправка нулевого и единичного бита в порт ? 

Link to comment
Share on other sites

Posted (edited)

Пробовал не ставить чёрный. Тут дело именно в белом. Я разные комбинации пробовал. Про изменить на единицы я думал, но, это уже как костыль. Мне же интересно что не так сейчас. Да про то, как написан код - это не нужно обращать внимание. Это я его для Вас накидал. У меня же весь код чисто на ассемблере. Скажем так, вырвал кусок из ассемблерного кода и переписал его на C чтобы для наглядности. Да, B0 и B1 - это отправка битов. Но не в порт, а именно на микросхему как сигнал.

Edited by dubrovkin
Link to comment
Share on other sites

почему биты разной толщины ?

 

если на Си грамотно писать код,  то по объему он превысит ассемблерный на 20%. а ваша делэй занимает место в памяти МК.

11 минут назад, dubrovkin сказал:

Это я его для Вас накидал.

в этом коде комменты мусорные и табуляции просто так не накидать ИМХО

Link to comment
Share on other sites

Биты разной толщины, вот почему. В datasheet есть такая информация:

image.png.fde41674a53c022ae0fae2b0a2799aca.png

Интервалы для T0H, T0L, T1H и T1L там тоже есть:

image.png.b03a3551ebea36399353df2fcdfc87fd.png

Частота микроконтроллера у меня 9.6 МГц. В общем, чтобы вписаться, я рассчитал сколько можно потратить тактов:

image.png.574c6314ba7561762435348998d19761.png

Выходит, чтобы передать бит 0, мне нужно включить HIGH на 3 тика, затем 6 тиков чтобы было LOW. Чтобы передать 1, нужно наоборот.

Да я знаю как писать код. Дело не в том что у меня там delay и всё такое. Для простоты можно было бы и взять delay из avr/delay.h (или куда они там её сейчас перенесли). Я тупо скопировал эту функция в таком виде, в каком она у меня на ассемблере реализована. 

Link to comment
Share on other sites

Это такой троллинг? Спрашивать про баги программы, а подсовывать для нас накиданную лабуду? В чем наглядность? Неужели Вы думаете, что парни в Ассме не разберутся? Петляете как заяц!

Ваша переписанная лабуда работает так:

555.jpg.f786f857b0747b1885d67016464bfc6b.jpg

Очень похоже на примеры из даташита? Сигнал RET Вы вообще не формируете?

Link to comment
Share on other sites

1 минуту назад, Геннадий сказал:

Сигнал RET

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

Link to comment
Share on other sites

Posted (edited)

А какая разница на каком языке код? Да, оригинальный мой код написан на ассемблере. Я воспроизвёл алгоритм на C и результат такой же как и на ассемблере. И дело тут не в том что кто-то не разберётся, мне самому хотелось реализовать это на C. Так проще. С чего Вы взяли что сигнала RET нет? У меня между отправками цвета проходит времени гораздо больше, чем 280 мкс.

После передачи HIGH, я передаю LOW. Как мне тут же описали, мне потом не нужно снова передавать HIGH и снова LOW уже длиной более 280 мкс.

Edited by dubrovkin
Link to comment
Share on other sites

delay.h

Skip to content
Product
Solutions
Open Source
Pricing
Search
Sign in
Sign up
johnmccombs
/
arduino-libraries
Public
Code
Issues
2
Pull requests
1
Actions
Projects
Wiki
Security
Insights
arduino-libraries/glcd/include/delay.h
@sulsadev
sulsadev - initial commit
Latest commit d1d6686 on Jun 7, 2011
 History
 1 contributor
Executable File  256 lines (229 sloc)  9.72 KB
 

/*
 *  delay.h
 *
 *  Provides accurate delays for a given number of nanoseconds
 *  This version is part of the Arduino GLCD library.
 *
 *  This file is based on code by Copyright Hans-Juergen Heinrichs (c) 2005
 *
 *  the following comment is from his file
 *  The idea for the functions below was heavily inspired by the
 *  file <avr/delay.h> which is part of the excellent WinAVR
 *  distribution. Therefore, thanks to Marek Michalkiewicz and
 *  Joerg Wunsch.
 *
 *  The idea is to have the GCC preprocessor handle all calculations
 *  necessary for determining the exact implementation of a delay
 *  algorithm. The implementation itself is then inlined into the
 *  user code.
 *  In this way it is possible to always get the code size optimized
 *  delay implementation.
 *
 */
 
 /*
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  POSSIBILITY OF SUCH DAMAGE.
*/


#ifndef _ARDUINO_DELAY_H_
#define _ARDUINO_DELAY_H_

#include <inttypes.h>

#ifndef F_CPU
# warning "Macro F_CPU must be defined"
#endif

/*
 * Forward declaration for all functions with attribute
 * 'always_inline' enforces GCC to inline the code (even
 * if it would be better not to do so from optimization
 * perspective).
 * Without this attribute GCC is free to implement
 * inline code or not (using the keyword 'inline'
 * alone is not sufficient).
 *
 */
static __inline__ void _NOP1( void) __attribute__((always_inline));
static __inline__ void _NOP2( void) __attribute__((always_inline));
static __inline__ void _NOP3( void) __attribute__((always_inline));
static __inline__ void _NOP4( void) __attribute__((always_inline));
static __inline__ void _NOP5( void) __attribute__((always_inline));
static __inline__ void _NOP6( void) __attribute__((always_inline));
static __inline__ void _NOP7( void) __attribute__((always_inline));
static __inline__ void _NOP8( void) __attribute__((always_inline));
static __inline__ void _NOP9( void) __attribute__((always_inline));
static __inline__ void _NOP10(void) __attribute__((always_inline));
static __inline__ void _NOP11(void) __attribute__((always_inline));
static __inline__ void _NOP12(void) __attribute__((always_inline));

static __inline__ void _delay_loop_3(  uint32_t) __attribute__((always_inline));
static __inline__ void _delay_loop_1_x( uint8_t) __attribute__((always_inline));
static __inline__ void _delay_loop_2_x(uint16_t) __attribute__((always_inline));
static __inline__ void _delay_loop_3_x(uint32_t) __attribute__((always_inline));

static __inline__ void _delay_cycles(const double) __attribute__((always_inline));


/*
 * _ N O P x ( void )
 *
 * Code sized optimized NOPs - not using any registers
 *
 * These NOPs will be used for very short delays where
 * it is more code efficient than executing loops.
 *
 */
static __inline__ void _NOP1 (void) { __asm__ volatile ( "nop    " "\n\t" ); }
static __inline__ void _NOP2 (void) { __asm__ volatile ( "rjmp 1f" "\n\t"  "1:" "\n\t" ); }
static __inline__ void _NOP3 (void) { __asm__ volatile ( "lpm    " "\n\t" ); }
static __inline__ void _NOP4 (void) { _NOP3(); _NOP1(); }
static __inline__ void _NOP5 (void) { _NOP3(); _NOP2(); }
static __inline__ void _NOP6 (void) { _NOP3(); _NOP3(); }
static __inline__ void _NOP7 (void) { _NOP3(); _NOP3(); _NOP1(); }
static __inline__ void _NOP8 (void) { _NOP3(); _NOP3(); _NOP2(); }
static __inline__ void _NOP9 (void) { _NOP3(); _NOP3(); _NOP3(); }
static __inline__ void _NOP10(void) { _NOP3(); _NOP3(); _NOP3(); _NOP1(); }
static __inline__ void _NOP11(void) { _NOP3(); _NOP3(); _NOP3(); _NOP2(); }
static __inline__ void _NOP12(void) { _NOP3(); _NOP3(); _NOP3(); _NOP3(); }



/*
 *  _ d e l a y _ l o o p _ 3( uint32_t __count )
 *
 * This delay loop is not used in the code below: It is
 * a supplement to the _delay_loop_1() and _delay_loop_2()
 * within standard WinAVR <arv/delay.h> giving a wider
 * (32 bit) delay range.
 *
 */
static __inline__ void
_delay_loop_3( uint32_t __count )
{
    __asm__ volatile (
        "1: sbiw %A0,1" "\n\t"
        "sbc %C0,__zero_reg__" "\n\t"
        "sbc %D0,__zero_reg__" "\n\t"
        "brne 1b"
        : "=w" (__count)
        : "0" (__count)
    );
}


/*
 *  _ d e l a y _ l o o p _ 1 _ x( uint8_t __count )
 *  _ d e l a y _ l o o p _ 2 _ x( uint16_t  __count )
 *  _ d e l a y _ l o o p _ 4 _ x( uint32_t __count )
 *
 *  These delay loops always have exactly 4(8) cycles per loop.
 *  They use a 8/16/32 bit register counter respectively.
 *
 */
static __inline__ void      /* exactly 4 cycles/loop, max 2**8 loops */
_delay_loop_1_x( uint8_t __n )
{                                               /* cycles per loop      */
    __asm__ volatile (                          /* __n..one        zero */
        "1: dec  %0"   "\n\t"                   /*    1             1   */
        "   breq 2f"   "\n\t"                   /*    1             2   */
        "2: brne 1b"   "\n\t"                   /*    2             1   */
        : "=r" (__n)                            /*  -----         ----- */
        : "0" (__n)                             /*    4             4   */
    );
}

static __inline__ void      /* exactly 4 cycles/loop, max 2**16 loops */
_delay_loop_2_x( uint16_t __n )
{                                               /* cycles per loop      */
    __asm__ volatile (                          /* __n..one        zero */
        "1: sbiw %0,1"   "\n\t"                 /*    2             2   */
        "   brne 1b  "   "\n\t"                 /*    2             1   */
        "   nop      "   "\n\t"                 /*                  1   */
        : "=w" (__n)                            /*  -----         ----- */
        : "0" (__n)                             /*    4             4   */
    );
}

static __inline__ void      /* exactly 8 cycles/loop, max 2**32 loops */
_delay_loop_3_x( uint32_t __n )
{                                               /* cycles per loop      */
    __asm__ volatile (                          /* __n..one        zero */
        "1: sbiw %A0,1           "  "\n\t"      /*    2             2   */
        "   sbc  %C0,__zero_reg__"  "\n\t"      /*    1             1   */
        "   sbc  %D0,__zero_reg__"  "\n\t"      /*    1             1   */
        "   nop                  "  "\n\t"      /*    1             1   */
        "   breq 2f              "  "\n\t"      /*    1             2   */
        "2: brne 1b              "  "\n\t"      /*    2             1   */
        : "=w" (__n)                            /*  -----         ----- */
        : "0" (__n)                             /*    8             8   */
    );
}


/*
 *
 *  _ d e l a y _ c y c l e s (double __ticks_d)
 *
 *  Perform an accurate delay of a given number of processor cycles.
 *
 *  All the floating point arithmetic will be handled by the
 *  GCC Preprocessor and no floating point code will be generated.
 *  Allthough the parameter __ticks_d is of type 'double' this
 *  function can be called with any constant integer value, too.
 *  GCC will handle the casting appropriately.
 *
 *  With an 8 MHz clock e.g., delays ranging from 125 nanoseconds
 *  up to (2**32-1) * 125ns ~= 536,87 seconds are feasible.
 *
 */
static __inline__ void
_delay_cycles(const double __ticks_d)
{
    uint32_t __ticks = (uint32_t)(__ticks_d);
    uint32_t __padding;
    uint32_t __loops;

    /*
     * Special optimization for very
     * small delays - not using any register.
     */
    if( __ticks <= 12 )  {              /* this can be done with 4 opcodes      */
        __padding = __ticks;

    /* create a single byte counter */
    } else if( __ticks <= 0x400 )  {
        __ticks -= 1;                   /* caller needs 1 cycle to init counter */
        __loops = __ticks / 4;
        __padding = __ticks % 4;
        if( __loops != 0 )
            _delay_loop_1_x( (uint8_t)__loops );

    /* create a two byte counter */
    } else if( __ticks <= 0x40001 )  {
        __ticks -= 2;                   /* caller needs 2 cycles to init counter */
        __loops = __ticks / 4;
        __padding = __ticks % 4;
        if( __loops != 0 )
            _delay_loop_2_x( (uint16_t)__loops );

    /* create a four byte counter */
    } else  {
        __ticks -= 4;                   /* caller needs 4 cycles to init counter */
        __loops = __ticks / 8;
        __padding = __ticks % 8;
        if( __loops != 0 )
            _delay_loop_3_x( (uint32_t)__loops );
    }

    if( __padding ==  1 )  _NOP1();
    if( __padding ==  2 )  _NOP2();
    if( __padding ==  3 )  _NOP3();
    if( __padding ==  4 )  _NOP4();
    if( __padding ==  5 )  _NOP5();
    if( __padding ==  6 )  _NOP6();
    if( __padding ==  7 )  _NOP7();
    if( __padding ==  8 )  _NOP8();
    if( __padding ==  9 )  _NOP9();
    if( __padding == 10 ) _NOP10();
    if( __padding == 11 ) _NOP11();
    if( __padding == 12 ) _NOP12();
}


/*
 *   _ d e l a y _ n s (double __ns)
 *   _ d e l a y _ u s (double __us)
 *
 *   Perform a very exact delay with a resolution as accurate as a
 *   single CPU clock (the macro F_CPU is supposed to be defined to a
 *   constant defining the CPU clock frequency in Hertz).
 *
 */
#define _delayNanoseconds(__ns)     _delay_cycles( (double)(F_CPU)*((double)__ns)/1.0e9 + 0.5 )

#endif /* _ARDUINO_DELAY_H_ */
Footer
© 2023 GitHub, Inc.
Footer navigation
Terms
Privacy
Security
Status
Docs
Contact GitHub
Pricing
API
Training
Blog
About

 

если на асме пишешь то на асме выкладывай листинг,  или попробуй код Си залить в МК.

Link to comment
Share on other sites

Ну я же Вам по-русски сказал что код работает так же. Что то же самое поведение. Как я мог сделать такой вывод, если я бы не скомпилировал и не залил. Всё заливал.

Link to comment
Share on other sites

значит или в расчёты закралась ошибка, или в реализации светодиодов. Посылать на светодиоды трёхцветные сигналы с разным заполнением битами.

Link to comment
Share on other sites

Вот для этого я и привёл код и расчёты. Просто очень интересно, остальные цвета работают нормально. Что же за проблема-то такая, что именно если задействовать все три канала с одним значением (ну, пока проверял только на 50,50,50 и 255,255,255).

Link to comment
Share on other sites

Posted (edited)

О, как раз Paint пригодился) Питание от лабораторного источника питания. Выставлено 5 В. Максимальный ток в 200 мА.

image.png.855294ca8990c9e07d42ad81b88d1120.png

Edited by dubrovkin
Link to comment
Share on other sites

1 час назад, Геннадий сказал:

работает так

в коде между отправками битов в порт присутствует куча вычислений, поэтому осцилограмма такая

Link to comment
Share on other sites

2 минуты назад, dubrovkin сказал:

R,G,B-1 и R,G,B+1 - нормально

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

Link to comment
Share on other sites

Posted (edited)

Что значит светодиоды кривят? Как они будут гореть, это же зависит от того, через какие ножки пойдёт ток. Значит так WS2818B сигналами оперирует, что они так горят. У меня было так, что я передавал цвета радуги, а дойдя жо белого, у меня вдруг слишком ярко загорелся, скажем, какой-нибудь голубой. Не понимаю такого поведения. Вообще, я думал что во всех этих WS28xx всё работает через старый добрый ШИМ. Но был удивлён, когда увидел что на выходных контактах идёт изменение по току.

В общем, я не пойму, я где-то ошибся или что? Эх блин, не хотелось, но походу придётся доставать секретное оружие.

Спойлер

Первые мои тесты с этой микросхемой были на Arduino UNO R3 и библиотеку microLED. Как же не хочется опять всё это доставать и слать через неё белый (я просто не помню слал ли я его). С другой стороны, даже если и слал и было нормально, где гарантия что они в коде там это дело не подменяют чтобы работало нормально.

 

Edited by dubrovkin
Link to comment
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
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...