構成可胜なマむクロコントロヌラヌPICロゞックセルを䜿甚しおWS2812を制埡する

この蚘事では、WS2812b LED制埡に぀いお、ロゞック回路の合成ずマむクロコントロヌラヌ内での実装に぀いお少し説明したす。 小さな䜙談ず2぀のボヌナスがある蚘事。 最初のボヌナスは、曞くずき、同時に読むずいう事実に基づいおいたすそうではありたせんか。 2番目のボヌナスは、マむクロコントロヌラヌのプログラミングを開始し、蚘事に蚘茉されおいる実装を10分で繰り返すのに圹立ちたす。

3色の「SPI LED」WS2812b図1ずその前身であるWS2811 / WS2812は盎列に接続され、単線シリアルバスを介しお制埡されたすしたがっお、この堎合、特に「ボヌナス1」 」、SPIむンタヌフェヌスが重芁な圹割を果たしたす。 各RGBカラヌビット24ビット、チャネルあたり8ビットは、玄1.25ÎŒsの呚期でPWM信号図2を参照によっお゚ンコヌドされたす。 WS2812 LEDは、むンタヌフェむスがすばやく簡単にでき、LEDの数を簡単に増やすこずができるため、制埡されたLEDストリップずスクリヌンでよく䜿甚されたす。 したがっお、たずえば、毎秒25フレヌムの呚波数では、ビデオ画面に40ms-50µs/0.125µs x 24〜= 1300 RGB LEDの1行を含めるこずができたす。 これはそれほどではありたせんが、広告看板の堎合、プラカヌドたたはランニングラむンで十分です。


図 1.デゞタルシリアルむンタヌフェむスを備えたLEDストリップ


図 2.ビットコヌディングパラメヌタ

このような短い信号を圢成するために安䟡なマむクロコントロヌラヌを䜿甚するこず図2を参照は、特定の困難をもたらしたす。 そのため、たずえば、クロック呚波数が16 MHzのPIC16コントロヌラヌの堎合、250 nsで1぀のコマンドが実行されたす。 したがっお、WS2812ドラむバヌをプログラムで制埡するには、カヌネル速床のほが100を費やす必芁がありたす。

むンタヌフェむス合成

この問題を解決するために、たずえばSPIむンタヌフェヌスなど、マむクロコントロヌラヌのハヌドりェア機胜を䜿甚するこずができたす。 このようなトリックは、シヌケンス「11100000」が「れロ」の送信のために送信され、「11111000」が「ナニット」のために送信される堎合によく䜿甚されたす。 1ビットぱンコヌドされたバむトたたはニブルです。

もう1぀の方法は、SPIむンタヌフェむスずロゞック芁玠を䜿甚するこずです。 アプリケヌションノヌト[1]および[2]には、説明した実装が䞻に基づいおいる䟋が含たれおいたす。

したがっお、SPIむンタヌフェむスの信号を取埗し、SCK信号同期信号を反転し、SDO出力デヌタず論理関数ANDを組み合わせるず、゚ンコヌドされた「ナニット」が埗られたす図3。


図 3.「ナニット」のコヌディング

「れロ」を゚ンコヌドするには、期間の短い別の信号が必芁です。 これを行うには、PWMマむクロコントロヌラヌを䜿甚できたす。 れロは、論理匏nSDO* nSCK* PWMnは逆数で蚘述される信号によっお゚ンコヌドされたす。 このような匏は[1]および[2]で䞎えられたすが、最終図図5からわかるように、たたは真理倀衚ずカルノヌマップを䜿甚した論理回路の合成䞭に掚定されるように、匏はnSCK * PWMずしお蚘述できたす。


図 4.「れロ」のコヌディング

「れロ」ず「ナニット」のフロヌをOR機胜ず組み合わせお、目的のPWMドラむバヌ制埡シヌケンスWS2811 / WS2812を取埗するこずは残りたす。


図 5.ストリヌムのコヌディング結果

論理匏の圢匏では、制埡信号は次のように蚘述されたす。
nSCK * SDO+nSDO * nSCK * PWM {1}

ブヌル代数の定理を適甚するずたずえば、玠晎らしい教科曞[3]を参照、匏{1}が同等の匏に倉換されるこずがわかりたす。
nSCK + nSDO+ nSDO + SCK + nPWM {2}
nSCK * PWM+nSCK * SDO {3}
nSCK + nPWM+ nSCK + nSDO {4}
nSCK *PWM + SDO {5}

PIC16F1508、PIC16F1509など、倚くのゞュニアMicrochipマむクロコントロヌラヌには、構成可胜なロゞックセルCLCが組み蟌たれおいたす。

構成可胜なロゞックセルは、コアに䟝存しない呚蟺機噚であり、マむクロコントロヌラヌ呚蟺機噚ず倖郚信号の論理的に接続された動䜜の実装に圹立ちたす。 カヌネルからの非同期性ずプログラムからの独立性により、プログラムでのみ実装するのが難しい機胜を実装できたす。

CLCの入力信号は、マむクロコントロヌラヌ入力、CLC出力、その他の統合された呚蟺モゞュヌル、および内郚ゞェネレヌタヌです。 CLC出力はポヌトに出力し、他のコントロヌラヌ呚蟺機噚ず共有できたす。

䞊蚘を考慮するず、SPIむンタヌフェヌスずCLCの組み合わせは、WS2812 LEDドラむバヌWS2811の制埡信号を生成する問題を解決するための理想的なオプションのように芋えたす。

CLC Designerナヌティリティは、CLCの芖芚的構成ずコヌド生成を目的ずしおおり、マむクロコントロヌラヌの呚蟺構成は、MPLAB X開発環境ぞのMplab Code ConfiguratorMCCプラグむンを介しお構成できたす。

入力信号のすべおの組み合わせが論理セルの入力に存圚するわけではありたせん。 したがっお、特定のタスクを実行するために必芁な信号ずセルの組み合わせを芋぀ける必芁がありたす。 CLCセルでデヌタを゚ンコヌドするには、SCK、SDO、およびPWM信号が必芁です。 ロゞックセルCLC4の入力にはSCK、SDOからの信号が含たれたすが、PWMからの信号は含たれず、CLC2は入力にPWMが含たれたす。 CLC2出力はCLC4入力に接続できたす。 したがっお、CLC2はリピヌタずしお機胜し、PWMをCLC4の入力に倉換し、CLC4は匏{1}、{2}、... {5}の論理機胜を実行したす。


図6 CLC2はPWMを出力に倉換したす。 Gate2-4にはlog.1出力があり、最終結果には圱響したせん

実際、提瀺されたフォヌムの関数{1}は1぀のCLCセルに実装できたせんが、同等のフォヌム{2} ... {5}は簡単です。 図7を参照。


図 7. CLC4は、関数nSCK + SDA + nPWM+ nSCK + SDAを介しおSPI信号のPWM゚ンコヌドを生成したす

この堎合、远加のDトリガヌが䜿甚されたす。これにより、コントロヌラヌのクロック呚波数に察しお入力信号の同期が取れなくなり、出力の誀った切り替えが回避されたす。 䞀般に、特定のケヌスでは、Dトリガヌは必芁ない堎合がありたすが、この構成は出力でより予枬可胜なタむミングを提䟛したすFOSCクロック呚波数からの同期。

䜙談1。 1぀の問題を解決する5぀の方法
論理関数{2} ... {5}の実装を図に瀺したす。 7a ... 7g すべおの匏は同等であり、期埅される結果をもたらしたす図5を参照。


図 7a。 nSCK * PWM+nSCK * SDO


図 7b。 nSCK + nPWM+ nSCK + nSDO


図 7c。 nSCK *PWM + SDO


図 7g nSCK + SDA + nPWM+ nSCK + SDA

䜙談2。 組み合わせ論理回路のスプリアスパルス
入力信号の倉化が出力のいく぀かの倉化に぀ながる堎合があり、その結果、スプリアスパルスグリッチが圢成されたす。 これは、倉化する入力信号がいく぀かの方法で出力に枡され、異なる方法で通過する論理ゲヌトの数が異なる堎合に発生する可胜性がありたす。 次に、各論理芁玠の遅延、および「最短」パスず「クリティカル」パスに沿った移動時間の差により、スプリアスむンパルスが圢成される可胜性がありたす。 このプロセスは[3]で詳しく説明されおいたす。
特定の䟋では、関数{1} ... {5}を実装するず、このような状況は発生したせんが、発生した堎合でも、構成されたセルのOR-D構成を䜿甚しお問題を解決できたす。 次に、図7dの図を図8のように再描画できたす。 7e。远加のDトリガヌが、FOSCコントロヌラヌのクロック信号の゚ッゞに沿った出力で倀をキャプチャしたす。


図 7d 図ず同じ機胜 7g。、しかし出口ラッチ付き


したがっお、CLC、PWM、およびSPIの構成埌、準備郚分は終了したす。 SSP1BUFレゞスタにバむトを曞き蟌むず、CLC4の出力で、WS2812圢匏に埓っお゚ンコヌドされたPWM信号を取埗したす。 SPIモゞュヌルがデヌタを送信しおいる間、マむクロコントロヌラヌは他のいく぀かのタスクを実行できたす。 各LEDに぀いお、3バむトを送信する必芁がありたす。 接続図を図に瀺したす。 8。


図 8. WS2812bテヌプをマむクロコントロヌラヌに接続する

ボヌナス1。 メモリ増加

説明した方法では、構成可胜なロゞックずマむクロコントロヌラヌの呚蟺ずの共同䜜業により、WS2812圢匏の䞀時的なプロトコルパラメヌタヌが圢成され、プログラムはバむトをSPIバッファヌに曞き蟌むだけで枈み、構成可胜なロゞックセルがさらに「魔法」を匕き継ぎたす。 説明した䟋では、SPIは蚘録にのみ䜿甚され、SDI入力ラむンは空いおいるため、LEDの制埡だけでなく、倖郚デヌタの受信にもSPIを䜿甚する絶奜の機䌚が提䟛されたす。 LEDの制埡ず同時にSPIむンタヌフェヌスでメモリチップからデヌタを読み取る方法を考えおみたしょう。

マむクロコントロヌラのSPIポヌトには、1぀のアドレスを持぀2぀のシフトレゞスタ送信甚、受信甚がありたす。 SSPBUFぞの曞き蟌みはバむト転送を開始し、ビットをSDOラむンにシフトしたすが、同時にSDI入力ラむンからのデヌタは同じレゞスタにシフトされたす。 ぀たり、1バむトをSPISDOに送信するず同時に、SPISDIからデヌタを受信したす。



したがっお、WS2812 LEDをマむクロコントロヌラヌのSPIモゞュヌルず、たずえばSPIメモリヌSRAM 23LC512たたはEEPROM 25LCxxxに接続し、倖郚メモリヌからLEDストリップにデヌタを転送する堎合、プログラムはSSPBUFからSSPBUFにデヌタを転送するだけです。 倖郚メモリからバむトを読み取り、次のコマンドでデヌタをSPILEDに送り返すず同時に、次のバむトを読み取りたす。



図 9.倖郚メモリの接続

デヌタの配列を倖郚SPIメモリに曞き蟌む堎合、たたはメモリから最初のバむトを読み取る堎合、LEDに「ガヌベッゞ」を䞎えないようにCLC4出力を無効にする必芁がありたす。

LEDの配列を曎新する必芁がある頻床に応じお、LEDの数は非垞に倚くなる可胜性がありたす。曎新速床ず倖郚メモリのサむズによっお制限されたす。 LEDのラむンから、LEDスクリヌンずディスプレむを䜜成できたす。 衚瀺バッファ内のデヌタは、画像が曎新されおいない間に倉曎できたす。これにより、衚瀺された画像を䜜成するために必芁な、より耇雑な蚈算、テヌブル内の怜玢などの時間も䞎えられたす。

倖郚メモリにバッファリングされたむメヌゞが存圚するため、読み取りメモリの開始アドレスをシフトするこずで動画を衚瀺できたす。 SPI EEPROMメモリを䜿甚するず、事前に蚘録された画像を衚瀺できたす。 SPIむンタヌフェヌスを䜿甚するず、耇数のメモリチップを接続できたす。たずえば、キャラクタヌゞェネレヌタヌ、静止画像を保存するための1぀のEEPROMを接続し、2番目のSRAMでLEDスクリヌンに衚瀺するためのディスプレむバッファヌを䜜成したす。

ボヌナス2。 自分でやる

゜ヌスを調べるには、マむクロチップ瀟のWebサむトにアクセスできたす AN1890サンプルの゜ヌスコヌドはWebサむトで入手できたす

しかし、短いビデオをご芧になるこずをお勧めしたす。5分で、䞊蚘のすべおの魔法を自分の手で行う方法を瀺したす。



゜ヌス


1. AN1606。 構成可胜ロゞックセルCLCを䜿甚しおPIC16F1509ずWS2811をむンタヌフェむスしたす。 LEDドラむバヌwww.microchip.com
2. AN1890。 倧型LEDアレむ甚のシンプルなSRAMバッファリング。 www.microchip.com
3. D.ハリス、S。ハリス。 「デゞタル回路ずコンピュヌタヌアヌキテクチャ」http://habrahabr.ru/post/259505/

Source: https://habr.com/ru/post/J262285/


All Articles