Tags:
view all tags
---+ NeoPixel NeoPixelWing ---++ Timing ---+++ !WS2812B Neopixel * !WS2812B data sheet https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf * SK6812 https://cdn-shop.adafruit.com/product-files/1138/SK6812+LED+datasheet+.pdf | | | *WS2812B* | *SK6812* | | !T0H | 0 code, high voltage time | 0.4 us ±150 ns | 0.3 us ±150 ns | | !T1H | 1 code, high voltage time | 0.8 us ±150 ns | 0.6 us ±150 ns | | !T0L | 0 code, low voltage time | 0.85 us ±150 ns | 0.9 us ±150 ns | | !T1L | 1 code, low voltage time | 0.45 us ±150 ns | 0.6 us ±150 ns | | RES | low voltage time | Above 50 us | 80 us | <img src="%ATTACHURLPATH%/timing-neopixel.png" alt="timing-neopixel.png" width="583" height="400" /> * 1 bit takes 1.25 us (800 kHz), 24 bit take 30 us * Timer resolution 0.25 us * MSB first * GRB * 3 cycles for a wait loop <pre> lsls r3, r3, #1 // set carry bit ittee cs movwcs r5, #T1H movtcs r5, #T1L movwcc r5, #T0H movtcc r5, #T0L </pre> 6 cycles. HTML Color 0xRRGGBB ---+++ F405 https://github.com/spyren/Mecrisp-Cube/blob/F405/Forth/cube/wings.s <pre> Cycle = 1 / 168 MHz = 6 ns 0.4 us / 6 ns = 66.7 -> max. 66 cycles .equ T0H, 16 // 0.3 us .equ T1H, 40 // 0.8 us .equ T0L, 36 // 0.8 us .equ T1L, 12 // 0.3 us </pre> ---+++ WB55 <pre> Cycle = 1 / 32 MHz = 31.25 ns 0.4 us / 31.25 ns = 12.8 -> max 12 cycles .equ T0H, 4 // 0.4 us / (3 * 31.25 ns) = 4.27 -> 4 .equ T1H, 8 // 0.8 us / (3 * 31.25 ns) = 8.53 -> 8 .equ T0L, 5 // 0.85 us / (3 * 31.25 ns) = 9.07 -> 5 (4 turns less) .equ T1L, 1 // 0.45 us / (3 * 31.25 ns) = 4.53 -> 1 (4 turns less) .equ RESTIME, 533 // 50 us / (3 * 31.25 ns) = 533 // Registers .equ GPIO_BSRR, 0x18 // GPIOx->BSRR bit set/reset .global BSP_neopixelDataTx BSP_neopixelDataTx: push {r4-r6, lr} lsl r2, r2, #8 // r2 = rrggbb00 mov r3, r2 // r3 = rrggbb00 bfc r3, #16, #16 // r3 = 0000bb00 rev16 r2, r2 // r2 = ggrr00bb bfc r2, #0, #16 // r2 = ggrr0000 add r2, r2, r3 // r2 = ggrrbb00 lsl r3, r1, #16 // clear port pin for BSRR mov r6, #24 // 24 bits // set DOUT pin low and wait reset time str r3, [r0, #GPIO_BSRR] ldr r4, =RESTIME 1: subs r4, r4, #1 1 bne 1b cycles bit_loop: lsls r2, r2, #1 // get the next bit -> set the carry bit 1 ittee cs 1 movcs r4, #T1H 1 movcs r5, #T1L 1 movcc r4, #T0H 1 movcc r5, #T0L 1 // set DOUT pin high str r1, [r0, #GPIO_BSRR] 2 1: subs r4, r4, #1 1 bne 1b 1 (2) // set DOUT pin low str r3, [r0, #GPIO_BSRR] 2 2: subs r5, r5, #1 1 bne 2b 1 (2) subs r6, r6, #1 1 bne bit_loop 2 pop {r4-r6, pc} </pre> ---++ Set/Reset Portpin GPIO port bit set/reset register GPIOx_BSRR * Address offset: 0x18, x = A..K, D8 = PC0 * bit0 .. bit15 bit set * bit16 .. bit31 bit reset <pre> #define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800UL) #define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000UL) #define PERIPH_BASE 0x40000000UL /*!< Peripheral base address in the alias region */ GPIOC->BSRR </pre>
Attachments
Attachments
Topic attachments
I
Attachment
History
Action
Size
Date
Who
Comment
png
timing-neopixel.png
r1
manage
19.1 K
2021-04-05 - 14:38
PeterSchmid
Edit
|
Attach
|
Watch
|
P
rint version
|
H
istory
:
r12
|
r10
<
r9
<
r8
<
r7
|
B
acklinks
|
V
iew topic
|
Raw edit
|
More topic actions...
Topic revision: r8 - 2021-06-18
-
PeterSchmid
Home
Site map
Cosmac web
MRR web
MecrispCube web
SuperRandonnee web
TWiki web
Ursula web
Velo web
MecrispCube Web
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
P
View
Raw View
Print version
Find backlinks
History
More topic actions
Edit
Raw edit
Attach file or image
Edit topic preference settings
Set new parent
More topic actions
Account
Log In
Edit
Attach
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback