差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
mp_ws2812b [2021/10/07 23:27]
gongyusu [1. 数据输入和数据输出]
mp_ws2812b [2021/10/07 23:36] (当前版本)
gongyusu [2. 一个真实的例子]
行 86: 行 86:
  
 ### 2. 一个真实的例子 ### 2. 一个真实的例子
-前面的示例有点做作,所以让我们通过一个实际示例来看看使用PIO的方法。WS2812B led(有时也被称为NeoPixels)是一种包含三个led(一个红、一个绿、一个蓝)和一个小微控制器的光。它们是由一根数据线控制的,该数据线有一个时间依赖协议,很难对数据进行实时控制。 +前面的示例有点做作,所以让我们通过一个实际示例来看看使用PIO的方法。WS2812B led(有时也被称为NeoPixels)是一种包含三个led(一个红、一个绿、一个蓝)和一个小微控制器的。它们是由一根数据线控制的,该数据线有一个时间依赖协议,很难对数据进行实时控制。
-LED条的布线很简单,如图C-1所示。取决于你的LED带的制造商,你可能已经有电线连接,你可能有一个插座,你可以推动头部电线,或你可能需要焊接他们自己+
  
-你需要知道的一件事是潜在的电流吸引。虽然你可以在你的Pico上添加几乎无穷无尽的新像素系列,但你可以从Pico上的5v引脚获得的功率是有限的。在这里,我们将使用8个led,这是非常安全的,但如果你想使用更多的led,你需要了解其局限性,可能需要添加一个单独的电源。你可以把长条切成长度,led之间应该有切线,告诉你在哪里切。在hsmag.cc/​neopixelpower上有关于各种问题的很好的讨论。 +让我们看看如何用PIO来控制它:​
- +
-现在我们已经把led连接起来了,让我们看看如何用PIO来控制它:​+
 <code python> <code python>
 import array, utime import array, utime
行 99: 行 96:
  
 # Configure the number of WS2812 LEDs.  # Configure the number of WS2812 LEDs. 
-NUM_LEDS = 10+NUM_LEDS = 12
  
 @asm_pio(sideset_init=PIO.OUT_LOW,​ out_shiftdir=PIO.SHIFT_LEFT,​ autopull=True,​ pull_thresh=24) @asm_pio(sideset_init=PIO.OUT_LOW,​ out_shiftdir=PIO.SHIFT_LEFT,​ autopull=True,​ pull_thresh=24)
行 105: 行 102:
     T1 = 2     T1 = 2
     T2 = 5     T2 = 5
-    T3 = 3 label("​bitloop"​) ​+    T3 = 3  
 +    ​label("​bitloop"​) ​
     out(x, 1)  .side(0) [T3 - 1]     out(x, 1)  .side(0) [T3 - 1]
     jmp(not_x, "​do_zero"​) .side(1) ​ [T1 - 1]     jmp(not_x, "​do_zero"​) .side(1) ​ [T1 - 1]
行 120: 行 118:
 </​code>​ </​code>​
  
-数据进入状态机有两个阶段。第一个是称为先进先出(FIFO)的存储器。这是我们的主Python程序发送数据的地方。第二个是输出移位寄存器(OSR)这是out()指令获取数据的地方。这两个是由pull指令连接的,从FIFO取数据,并把它放在OSR。然而,由于我们的程序设置autopull启用阈值为24,每次我们从OSR读取24位,它将从FIFO重新加载。+数据进入状态机有两个阶段。第一个是称为先进先出(FIFO)的存储器。这是我们的主Python程序发送数据的地方。第二个是输出移位寄存器(OSR)这是out()指令获取数据的地方。这两个是由pull指令连接的,从FIFO取数据,并把它放在OSR。然而,由于我们的程序设置autopull启用阈值为24,每次我们从OSR读取24位,它将从FIFO重新加载。
  
 指令out(x,​1)从OSR获取一位数据,并将其放入名为x的变量中(在PIO中只有两个可用变量:​x和y)。 指令out(x,​1)从OSR获取一位数据,并将其放入名为x的变量中(在PIO中只有两个可用变量:​x和y)。