@@ -83,6 +83,7 @@ esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rm
8383 led_encoder -> base .del = rmt_del_led_strip_encoder ;
8484 led_encoder -> base .reset = rmt_led_strip_encoder_reset ;
8585 rmt_bytes_encoder_config_t bytes_encoder_config ;
86+ uint32_t reset_ticks = config -> resolution / 1000000 * 280 / 2 ; // reset code duration defaults to 280us to accomodate WS2812B-V5
8687 if (config -> led_model == LED_MODEL_SK6812 ) {
8788 bytes_encoder_config = (rmt_bytes_encoder_config_t ) {
8889 .bit0 = {
@@ -116,14 +117,31 @@ esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rm
116117 },
117118 .flags .msb_first = 1 // WS2812 transfer bit order: G7...G0R7...R0B7...B0
118119 };
120+ } else if (config -> led_model == LED_MODEL_WS2811 ) {
121+ // different led strip might have its own timing requirements, following parameter is for WS2811
122+ bytes_encoder_config = (rmt_bytes_encoder_config_t ) {
123+ .bit0 = {
124+ .level0 = 1 ,
125+ .duration0 = 0.5 * config -> resolution / 1000000. , // T0H=0.5us
126+ .level1 = 0 ,
127+ .duration1 = 2.0 * config -> resolution / 1000000. , // T0L=2.0us
128+ },
129+ .bit1 = {
130+ .level0 = 1 ,
131+ .duration0 = 1.2 * config -> resolution / 1000000. , // T1H=1.2us
132+ .level1 = 0 ,
133+ .duration1 = 1.3 * config -> resolution / 1000000. , // T1L=1.3us
134+ },
135+ .flags .msb_first = 1
136+ };
137+ reset_ticks = config -> resolution / 1000000 * 50 / 2 ; // divide by 2... signal is sent twice
119138 } else {
120139 assert (false);
121140 }
122141 ESP_GOTO_ON_ERROR (rmt_new_bytes_encoder (& bytes_encoder_config , & led_encoder -> bytes_encoder ), err , TAG , "create bytes encoder failed" );
123142 rmt_copy_encoder_config_t copy_encoder_config = {};
124143 ESP_GOTO_ON_ERROR (rmt_new_copy_encoder (& copy_encoder_config , & led_encoder -> copy_encoder ), err , TAG , "create copy encoder failed" );
125144
126- uint32_t reset_ticks = config -> resolution / 1000000 * 280 / 2 ; // reset code duration defaults to 280us to accomodate WS2812B-V5
127145 led_encoder -> reset_code = (rmt_symbol_word_t ) {
128146 .level0 = 0 ,
129147 .duration0 = reset_ticks ,
0 commit comments