ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
16 апреля
1036883 Топик полностью
Гyдвин, волшебник (15.09.2020 19:46, просмотров: 192) ответил my504 на Вопрос по WS2812B. Насколько следует из даташита, любая пауза меньше чем ресет игнорируется. То есть я могу передавать отдельные биты с достаточно вольной паузой между ними, но меньше, чем ресет (50 мкс). Из такого посыла следует, что единица и ноль определяются длительностью высокого уровня, потому как низкий уровень включает в себя допустимую паузу, которая на порядок больше, чем регламентированные длительности низкого уровня и по нулю и по единице. Я правильно мыслю?
Вот кусочек моего кода для PIC16F1454 -экспериментировал с "USB лампой" года полтора назад. Рулил посредством SPI. Основное - времянка импульса, задаваемая в моем случае скоростью spi. NOP-ами подгонял к "идеальной" времянке из даташита. Но, как оказалось во время экспериментов, да - паузы некритичны... 
void send_ws(void)
{
 static uint8_t cb;
 static uint8_t i;
  for (i=0;i<36;i++)
 {
     cb=RxDataBuffer[i+3];
     SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
     cb <<= 1;
      asm("nop");
      asm("nop");
      asm("nop");
     SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
     cb <<= 1;
      asm("nop");
      asm("nop");
      asm("nop");
     SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
     cb <<= 1;
      asm("nop");
      asm("nop");
      asm("nop");
     SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
     cb <<= 1;
      asm("nop");
      asm("nop");
      asm("nop");
     SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
     cb <<= 1;
      asm("nop");
      asm("nop");
      asm("nop");
     SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
     cb <<= 1;
      asm("nop");
      asm("nop");
      asm("nop"); 
     SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
     cb <<= 1;
      asm("nop");
      asm("nop");
      asm("nop");
     SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
 }
}