<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title><![CDATA[ 2022年3月7日の投稿［1件］ - 電装工芸日記 - 舞台照明機器の製作とか - ]]></title>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi</link>
	<description><![CDATA[ 今年は開発案件を進めたい ]]></description>
	<language>ja</language>
	<copyright>Copyright 2026</copyright>
	<lastBuildDate>Fri, 24 Apr 2026 07:46:09 +0900</lastBuildDate>
	<generator><![CDATA[ <!-- てがろぐ Version: -->Powered by <a href="https://www.nishishi.com/cgi/tegalog/" target="_top">てがろぐ</a> Ver 3.4.0 ]]></generator>
	<!-- BEGIN ENTRIES -->
	<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　RaspberryPiからレガシーDMXを出力する方法を妄… ]]></title>
	<description><![CDATA[ 　RaspberryPiからレガシーDMXを出力する方法を妄想しています。<br />　直接出すのは無理があります。UARTはありますが、２系統出すのが関の山。BreakTimeも出しにくい。<br />　ならば、RaspberryPiからはSPIで出力し、PICで250kbpsのUARTに変換するのがいいかなと。<br /><br />　RaspberryPiからCS(チップセレクト)を使ってPICを選択するのがノーマルな方法ですが、レガシーDMXを出来る限り数多くだすには効率が悪い。SPIを休みなく送りつけたらPICは処理しきれませんので１ワード毎に休み時間を入れないといけない。また、PIC１個毎に一気にデータを送り付けるにはPICがデータをキャッシュ出来なければなりませんが、512バイト以上のメモリを持ったPICは選択肢が少なくピン数も多い。<br />　しかるに、SPIを普通に使ったら２系統扱うのが限界だと思われます。<br /><br />　で、考えた方法が、複数のPIC(レガシーDMX１系統に付き１個使用)がRaspberryPiから１個に見える方法です。<br />　RaspberryPiからは複数のユニバースのデータを適切に並べ替えて一気に送出します。RaspberryPiにとっては一番ストレスが無い方法です。<br />　もちろんPICはこれを捌くことが出来ませんから、RaspberryPiとPICの間に仕掛けを入れます。<br /><br />　SPIはクロック同期型の送信方法ですからデータ線の他にクロック線があります。受信はクロックによって実行されますので、CSがアクティブでも、データ線に変化があっても、クロックが伴わなければ何も起こりません。通常ならCSを用いて受信先を決定しますが、クロックの出力先を仕分けても同じことです。<br />　送信が始まって１から８カウントの間は１番目のPICへSPIのクロックを送り、９から１６カウントの間は２番目のPICへSPIのクロックを送り・・・以下末番のPICまで繰り返します。RaspberryPiから送信があっても、クロックが行かない受信器にとってはワードとワードの間の休み時間でしかありません。<br />　これなら、送信するRaspberryPiからはPIC達が１個に見え、受信するPIC達には自分宛のデータがだけが届きます。RaspberryPiが休みなく送信してもPIC側は他が受信している間に処理を進められますし、RaspberryPiの送信タイミングが適切であれば受信したSPIのデータをUARTに渡すだけでPIC内でのスタックは不要です。ピン数が少ないPIC12F1822でも対応可能ということ。<br /><br />　これを実現するクロックの仕分けは汎用ロジックICで行います。<br />　<a class="url" href="https&#58;//eleshop.jp/shop/g/gT11590/" target="_blank" title="https&#58;//eleshop.jp/shop/g/gT11590/">バイナリカウンタ74HC4040</a><br />　<a class="url" href="https&#58;//akizukidenshi.com/catalog/g/gI-10013/" target="_blank" title="https&#58;//akizukidenshi.com/catalog/g/gI-10013/">3to8 ラインデコーダ TC74HC138</a><br />　この二つです。<br />　数日前はGALを使おうかと思ったのですが、16ピンの汎用ロジック２個で可能ならこちらの方がいいかと。ファームウェア書かなくていいし、安いし、30年以上確実に動くし。<br /><br />　バイナリカウンタはクロックをカウントして２進数相当の出力をするICです。これにSPIクロックを入力し、下から4～6bit目の出力を使います。SPIクロックの８倍周期でカウントされる3bitのバイナリと見なせます。<br />　８倍周期の3bitのバイナリをラインデコーダに入れます。ラインデコーダは入力された3bitのバイナリに相当するピンだけ出力します。このデコーダにSPIのクロックも入れれば８カウント毎に送り先が切り替わるクロックが出力されます。<br />　SPIのモードは74HC4040の特性に合わせてmode3がよいと思われます。<br /><br />　文章で伝わりにくいのは承知していますが、アイデアがまとまってスッキリした。<br />　オレメモってことで。<br /><br />　整理しきらないとモヤモヤして本業が手に付かなかったので回路図を描いてみました。気分スッキリ。<br />　折角なので揚げてみました。<br />　クリックして表示されるモノはぼやけてしまいますので、回路を追いたい方はサムネのリンク先の画像本体をダウンロードして見てください。<br /><img class="embeddedimage" src="https&#58;//www.densokogei.jp/tegalog/images/20220307150548-admin.jpg" alt="20220307150548-admin.jpg"><br />　追記<br />　回路図に間違い発見！<br />　74HC4040のCLKにはSPI_CLKが入らないといけません。<br />　74HC4040から74HC138のA,B,Cに行くのもQ4,Q5,Q6です。なら74HC4020でもいいな。<br />　データは手直ししましたが、ここに再アップするのは面倒。まぁいいか。<br /><br />　さらに追記<br />　クロックカウントの考え方が根本的に間違っているような気が・・・74HC4040(4020)のカウントの進み方がズレてね？最初のビットをサンプリングする前に１カウントされてしまうぞ。<br />　ならばSPIをmode0で使えばいいか？mode0ならアイドル・ローだから74HC138ではなく74HC238か？<br />　考え直し。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%e9%9b%bb%e5%ad%90%e5%b7%a5%e4%bd%9c" class="taglink" title="電子工作">#電子工作</a> <a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%50%69" class="taglink" title="RaspberryPi">#RaspberryPi</a>  -- Posted by 電装工芸 〔2032文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=175</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=175</guid>
	<category>tegalog</category>
	<pubDate>Mon, 07 Mar 2022 12:35:32 +0900</pubDate>
</item>

	<!-- END ENTRIES -->
</channel>
</rss>

