全年全月9日の投稿[42件](4ページ目)
2022年3月 この範囲を時系列順で読む この範囲をファイルに出力する
PICでDMX512を出力する際、面倒なのがBreakTimeです。
一般的なUARTでDMX512の様に長いBreakTimeが使われることは無いためか、PICにはそのような機能がありません。何らかのチカラ技で作らないといけません。
私が最終的にたどり着いた方法は、
1)USARTが出力されるI/Oピンをプルダウンしてアイドル・ローにしておく。
2)BreakTimeは0x00の空送信で作る。ただし、0x00送信でもStopBit(H)が発生するので、以下(3)の方法で消す。
3)BreakTimeの空送信が始まってからStopBitが始まるまでの間(Lが続く間)にTRIS(I/Oピンの入出力方向を決めるフラグ)を入力に切り替える。入力にするとI/Oピンがハイインピーダンス(Z)になり、プルダウンされているためRS485ドライバに届く信号はLを維持する。
4)BreakTimeの時間に相当する空送信する。
5)BreakTimeの終わりというか次のフレームの送信開始前に0x00を送信してTRISを出力に切り替える。0x00送信のStopBitがMarkAfterBreakとなる。ただ、MarkAfterBreakは少し長い方が安定するので、0xCO(b11000000)などのMSB詰めの数値を使ってMarkAfterBreakを長くしてもいい。
といった内容です。
これならタイマー処理をせずにBreakTimeを作れます。
BreakTimeを表すデータをBreakTimeZero、BreakTimeZeroの始まりのバイトをBreakTimeNose、最後をBreakTimeTailと勝手に呼んでますが、RaspberryPiからのSPIデータをBreakTimeTailから始まるモノにしておけばPIC側の処理は凄く簡単です。
0)RaspberryPiからRESET信号(実際にはCSを用いる)をPICに送り、PICはこれを見て送信カウンタをクリアしてUSART.TXピンのTRISを入力に切り替えておく。アイドル・ロー。
1)SPIの最初のバイト(BreakTimeTail)を受信したら、USARTに渡して送信し、3bit分待ってからUSART.TXピンのTRISを出力に切り替える。以下、受信値を1バイト送信するごとに送信カウンタをインクリメントする。
2)512スロットを送信した後のバイトはBreakTimeNoseになる。ただ、PICのUSARTは1ワード分のキャッシュを持っているので、BreakTimeZeroの2バイト目をUSARTに渡した後(BreakTimeNoseが送信開始された後)、3bit分待ってからTRISを入力に切り替えてBrakTimeとする。送信制御は送信カウンタを用いる。
3)以下、SPIのデータが終了(RaspberryPiからのCSで確認)したら、送信カウンタをクリアしてSPIを受信待機にする。=>(1)に戻る。
4)BreakTimeZeroを送信する前にSPIが終わってしまったらエラー。TRISを入力に切り替えてBrakTimeにしておくなど、エラー処理を行う。
5)TRISの切り替えの前に3bit分待つのは、次の送信バイトの受け入れがStopBit中に可能になるからです。
こんな感じかな。
#電子工作
一般的なUARTでDMX512の様に長いBreakTimeが使われることは無いためか、PICにはそのような機能がありません。何らかのチカラ技で作らないといけません。
私が最終的にたどり着いた方法は、
1)USARTが出力されるI/Oピンをプルダウンしてアイドル・ローにしておく。
2)BreakTimeは0x00の空送信で作る。ただし、0x00送信でもStopBit(H)が発生するので、以下(3)の方法で消す。
3)BreakTimeの空送信が始まってからStopBitが始まるまでの間(Lが続く間)にTRIS(I/Oピンの入出力方向を決めるフラグ)を入力に切り替える。入力にするとI/Oピンがハイインピーダンス(Z)になり、プルダウンされているためRS485ドライバに届く信号はLを維持する。
4)BreakTimeの時間に相当する空送信する。
5)BreakTimeの終わりというか次のフレームの送信開始前に0x00を送信してTRISを出力に切り替える。0x00送信のStopBitがMarkAfterBreakとなる。ただ、MarkAfterBreakは少し長い方が安定するので、0xCO(b11000000)などのMSB詰めの数値を使ってMarkAfterBreakを長くしてもいい。
といった内容です。
これならタイマー処理をせずにBreakTimeを作れます。
BreakTimeを表すデータをBreakTimeZero、BreakTimeZeroの始まりのバイトをBreakTimeNose、最後をBreakTimeTailと勝手に呼んでますが、RaspberryPiからのSPIデータをBreakTimeTailから始まるモノにしておけばPIC側の処理は凄く簡単です。
0)RaspberryPiからRESET信号(実際にはCSを用いる)をPICに送り、PICはこれを見て送信カウンタをクリアしてUSART.TXピンのTRISを入力に切り替えておく。アイドル・ロー。
1)SPIの最初のバイト(BreakTimeTail)を受信したら、USARTに渡して送信し、3bit分待ってからUSART.TXピンのTRISを出力に切り替える。以下、受信値を1バイト送信するごとに送信カウンタをインクリメントする。
2)512スロットを送信した後のバイトはBreakTimeNoseになる。ただ、PICのUSARTは1ワード分のキャッシュを持っているので、BreakTimeZeroの2バイト目をUSARTに渡した後(BreakTimeNoseが送信開始された後)、3bit分待ってからTRISを入力に切り替えてBrakTimeとする。送信制御は送信カウンタを用いる。
3)以下、SPIのデータが終了(RaspberryPiからのCSで確認)したら、送信カウンタをクリアしてSPIを受信待機にする。=>(1)に戻る。
4)BreakTimeZeroを送信する前にSPIが終わってしまったらエラー。TRISを入力に切り替えてBrakTimeにしておくなど、エラー処理を行う。
5)TRISの切り替えの前に3bit分待つのは、次の送信バイトの受け入れがStopBit中に可能になるからです。
こんな感じかな。
#電子工作
SPIでレガシーDMXを出力する回路の基本要素は揃いました。PICをプログラムして実験する段階です。
本業が忙しくなってしまったので棚上げですが、PICの基本設計は進めましょう。
PICは12F1822を使います。PIC12とありますが、PIC16系の8ピン版と思っていい製品です。
ピンアサインは次の通りです。
拡張ミッドレンジPICにはモジュールのアサインピンをある程度切り替えられる機能があります。
TRISとはI/Oピンの入出力方向を設定する要素です。
VDD
VSS(GND)
RA0 TX_Pilot_LED TRIS-OUTPUT(汎用I/Oとして使い、送信が行われるとLEDを点灯させます)
RA1 SPI.SCK TRIS-INPUT
RA2 SPI.SDI TRIS-INPUT
RA3 DMX.RESET TRIS-INPUT
RA4 USART.TX TRIS-OUTPUT(ただし、BreakTimeを作るためにINPUTにすることがあります)
RA5 CSC1 TRIS-INPUT(クロックの設定は優先順位が高いので、TRISはどちらでも機能します)
これには隠れたコツがあります。
SPIを使うならSPI.SDOがあります。使わないI/Oですがどこかにアサインしなければなりませんので、USART.TXと同じRA4にアサインします。被って出力がおかしくなりそうですが、SPIよりも優先順位が高いUSART.TXが出力されますから大丈夫。逆だったら困りましたけどね。
クロック発信子にはクリスタルオシレータ(8MHz)SG-8002DC(3.3V)を使います。普段はPIC1個に対し水晶発振子を1個使うのですが、今回は同じクロックレートで動く複数のPICを1枚の基板に載せますので、部品点数を減らす意味も含めてこれを使います。PICのI/Oピンも減るし。
#電子工作
本業が忙しくなってしまったので棚上げですが、PICの基本設計は進めましょう。
PICは12F1822を使います。PIC12とありますが、PIC16系の8ピン版と思っていい製品です。
ピンアサインは次の通りです。
拡張ミッドレンジPICにはモジュールのアサインピンをある程度切り替えられる機能があります。
TRISとはI/Oピンの入出力方向を設定する要素です。
VDD
VSS(GND)
RA0 TX_Pilot_LED TRIS-OUTPUT(汎用I/Oとして使い、送信が行われるとLEDを点灯させます)
RA1 SPI.SCK TRIS-INPUT
RA2 SPI.SDI TRIS-INPUT
RA3 DMX.RESET TRIS-INPUT
RA4 USART.TX TRIS-OUTPUT(ただし、BreakTimeを作るためにINPUTにすることがあります)
RA5 CSC1 TRIS-INPUT(クロックの設定は優先順位が高いので、TRISはどちらでも機能します)
これには隠れたコツがあります。
SPIを使うならSPI.SDOがあります。使わないI/Oですがどこかにアサインしなければなりませんので、USART.TXと同じRA4にアサインします。被って出力がおかしくなりそうですが、SPIよりも優先順位が高いUSART.TXが出力されますから大丈夫。逆だったら困りましたけどね。
クロック発信子にはクリスタルオシレータ(8MHz)SG-8002DC(3.3V)を使います。普段はPIC1個に対し水晶発振子を1個使うのですが、今回は同じクロックレートで動く複数のPICを1枚の基板に載せますので、部品点数を減らす意味も含めてこれを使います。PICのI/Oピンも減るし。
#電子工作
2022年2月 この範囲を時系列順で読む この範囲をファイルに出力する
オレメモです。
socket受信の待ち受けで処理が一時停止するなら、threading用いた並列処理でsocket受信を実行し、メイン側へはqueueを使って通信する。
socketから受信したデータはqueue.putでメイン側に送る。block=True,time_out=Noneとし、block要因はメイン側での取り出し作業だけなので終了を待つ。
メイン側はqueue.getをtry:配下で実行する。block=Falseとし、queueにデータがあれば取り出し、データが無いかsocket受信側がアクセス中でデータが取り出せないと例外:Emptyになるのでtry:でスルーする。
queueでやりとりするデータはintのNet,SubNet,Universeとレベルデータのnumpy.arrayをタプルにした物とする。タプルに入れ込んだnumpy.arrayをqueueで扱えるかは今後の実験で確認する。
受信したArt-NetのUniverseが対象かどうかはメイン側で判別する。
これならsocketの受信待ちで全体を止めることなく動かせる、といいな。
#Python
socket受信の待ち受けで処理が一時停止するなら、threading用いた並列処理でsocket受信を実行し、メイン側へはqueueを使って通信する。
socketから受信したデータはqueue.putでメイン側に送る。block=True,time_out=Noneとし、block要因はメイン側での取り出し作業だけなので終了を待つ。
メイン側はqueue.getをtry:配下で実行する。block=Falseとし、queueにデータがあれば取り出し、データが無いかsocket受信側がアクセス中でデータが取り出せないと例外:Emptyになるのでtry:でスルーする。
queueでやりとりするデータはintのNet,SubNet,Universeとレベルデータのnumpy.arrayをタプルにした物とする。タプルに入れ込んだnumpy.arrayをqueueで扱えるかは今後の実験で確認する。
受信したArt-NetのUniverseが対象かどうかはメイン側で判別する。
これならsocketの受信待ちで全体を止めることなく動かせる、といいな。
#Python
客席テーブルに塗布したポリエステル樹脂は硬化していました。一安心。
ただ、アセトンが抜けるのに時間がかかりそうです。急がず焦らず今日は手を付けず、1日なのか2日なのか、アセトンが抜けたのを確認出来てから2層目にかかりましょう。
2層目は濃い目で肉付けをします。原液ままでは硬いのでアセトンを入れて少し柔らかくするつもりですが、塗り伸ばせる範囲で固めが望みです。熟練者なら室温で判断がつくのでしょうけど。
3層目は顔料を入れて色付けです。
単に1層目だからかもしれませんが、アセトンを多めに入れると硬化した表面が半艶になるようです。顔料を入れた3層目がツヤツヤ過ぎるなら、トップコートを兼ねてサラサラを塗ってみましょう。
小学生の頃、シンナーで溶かした発砲スチロールで紙を固められないか?と実験したのを思い出しました。
表面が固まっても中が固まらなくてガッカリした思い出ですけど、約半世紀後もやってることに大差がない。「三つ子の魂百まで」という格言がありますがその通りかもしれません。
ひょっとすると、発砲スチロールはアセトンで溶けるので、ポリエステル樹脂を半艶にする添加剤代わりになるかもしれません。ポリエステル樹脂は不純物を入れると艶が落ちるような気がするのです。
#ガチ工作
ただ、アセトンが抜けるのに時間がかかりそうです。急がず焦らず今日は手を付けず、1日なのか2日なのか、アセトンが抜けたのを確認出来てから2層目にかかりましょう。
2層目は濃い目で肉付けをします。原液ままでは硬いのでアセトンを入れて少し柔らかくするつもりですが、塗り伸ばせる範囲で固めが望みです。熟練者なら室温で判断がつくのでしょうけど。
3層目は顔料を入れて色付けです。
単に1層目だからかもしれませんが、アセトンを多めに入れると硬化した表面が半艶になるようです。顔料を入れた3層目がツヤツヤ過ぎるなら、トップコートを兼ねてサラサラを塗ってみましょう。
小学生の頃、シンナーで溶かした発砲スチロールで紙を固められないか?と実験したのを思い出しました。
表面が固まっても中が固まらなくてガッカリした思い出ですけど、約半世紀後もやってることに大差がない。「三つ子の魂百まで」という格言がありますがその通りかもしれません。
ひょっとすると、発砲スチロールはアセトンで溶けるので、ポリエステル樹脂を半艶にする添加剤代わりになるかもしれません。ポリエステル樹脂は不純物を入れると艶が落ちるような気がするのです。
#ガチ工作
socketの送受信は簡単ですが、受信は待ち受けになり、タイムアウトはあるものの、有効な受信があるまで全体の動作が一時停止になります。待ち受けをしながら他の処理を止めずに動かす方法の確立が当面の課題になります。
ネットを探すとそれらしい方法がいくつかあります。たぶんこの中に望んでいる方法があるのだと思いますが、それがどれかをこれから検討するワケです。
#Python
ネットを探すとそれらしい方法がいくつかあります。たぶんこの中に望んでいる方法があるのだと思いますが、それがどれかをこれから検討するワケです。
#Python
今週来週はコロナ騒動で現場が飛びまくり、急ぎの要件はありませんので工作を徹底的に進めます。
客席テーブルが現場から帰ってきたので天板表面の再塗装です。
先日も書きましたが、問題はウレタン塗料の柔らかさです。私の施工が間違っていたのかもしれませんが、ゴム脚の当たっていたところが凹んでしまったのです。硬さを増さないといけません。オービタルサンダーで前の塗装を削り落とし、FRPで使うポリウレタン樹脂を塗ります。
一層目は表面に塗るというよりポリウレタン樹脂を木の繊維に染み込ませるイメージです。気温が低いので硬化剤を重量比1.2%(夏季の2.0倍強)加え、アセトンを重量比40%加えてシャバシャバというかサラサラにし、塗ったというより濡らした感じにしています。
アセトンの量は変質しないギリギリかと思います。硬化しなかったら笑うしかありませんが、モノ作りの神様に見放されないことを祈りつつジックリ取り組みましょう。
#ガチ工作
客席テーブルが現場から帰ってきたので天板表面の再塗装です。
先日も書きましたが、問題はウレタン塗料の柔らかさです。私の施工が間違っていたのかもしれませんが、ゴム脚の当たっていたところが凹んでしまったのです。硬さを増さないといけません。オービタルサンダーで前の塗装を削り落とし、FRPで使うポリウレタン樹脂を塗ります。
一層目は表面に塗るというよりポリウレタン樹脂を木の繊維に染み込ませるイメージです。気温が低いので硬化剤を重量比1.2%(夏季の2.0倍強)加え、アセトンを重量比40%加えてシャバシャバというかサラサラにし、塗ったというより濡らした感じにしています。
アセトンの量は変質しないギリギリかと思います。硬化しなかったら笑うしかありませんが、モノ作りの神様に見放されないことを祈りつつジックリ取り組みましょう。
#ガチ工作
2022年1月 この範囲を時系列順で読む この範囲をファイルに出力する
友人と新年会をしてきました。
想うことは人それぞれ色々あるのだなと思ったり。
されど、自分評価かもしれませんが、今までやってきたことを有難がってくれるご意見があることには感謝であります。
#日常
想うことは人それぞれ色々あるのだなと思ったり。
されど、自分評価かもしれませんが、今までやってきたことを有難がってくれるご意見があることには感謝であります。
#日常
ここ数日、地元の消防団の出初式やら成人式のイベントでホール管理の増員に出ていました。
つて、基本の式典仕込みをするだけなので、仕込んでしまえば操作盤の置物になるだけ。
ちょうどいい空き時間が出来たので書き物を進める。
タイムコードのネタが随分進みました。
解説コーナーというより、自分で製品を作る際の資料整理と基本設計の場になっています。
けど、誰かが読むかもしれない文書としてまとめる作業は自分しか読まないメモとして殴り書きするより具体的に整理できるかもしれません。
読んでわかる人は少ないかもしれませんが、自分向けにはわかりやすく書くことになるので後日の自分向けのメッセージとしては価値が高いと思われます。オレメモの新しい書き方ってことで。
#ガチ工作
つて、基本の式典仕込みをするだけなので、仕込んでしまえば操作盤の置物になるだけ。
ちょうどいい空き時間が出来たので書き物を進める。
タイムコードのネタが随分進みました。
解説コーナーというより、自分で製品を作る際の資料整理と基本設計の場になっています。
けど、誰かが読むかもしれない文書としてまとめる作業は自分しか読まないメモとして殴り書きするより具体的に整理できるかもしれません。
読んでわかる人は少ないかもしれませんが、自分向けにはわかりやすく書くことになるので後日の自分向けのメッセージとしては価値が高いと思われます。オレメモの新しい書き方ってことで。
#ガチ工作
2021年12月 この範囲を時系列順で読む この範囲をファイルに出力する
切った貼ったの工作も大好きですが、ちょっと胃モタレ気味(w
電子工作にガチで取り組みたい今日この頃。
仕掛品ラックを作らないと作業スペースがありませんので、工作部屋の整理整頓が自宅での優先作業となりますが・・・
優先して手をつけたいのはDMXのパッチマシンです。
どれくらいの規模にするかはRaspberryPiを主軸にしたハードウェアの処理能力によりますが、小規模なディナーショーや野外コンサートで過不足なく使えるものにしたいとイメージしております。
以前、DMX切替機を頼まれて作ったことがあります。フェスで卓を2枚組んでどちらを使うか選択するための装置です。信号はBreakTimeを見て切り替えを行いますので受信側にとっては値が変わっただけのことになり、コネクタの抜き差しで稀に起こるパケットエラーからのアオリが発生しません。本卓とバックアップ卓の切り替えみたいな用法も出来ますので、可能ならこういった機能も搭載したいものです。
今思い付いたのですが、Art-NetなどのEtherNetベースなら切り替え器簡単かも。
debian系のOSでなら、3つのNICをbridge接続し、2つを卓側にし、1つを受信側にします。LinuxでHUBを作る方法の応用です。
で、卓側のNICの1つをiptablesで全DROP(NICは生きているがIPパケットをすべて破棄)にするのです。受信側にはもう1つのNICのパケットしか行きません。
切り替えは一端卓側のNICを2つとも全DROPにしてから有効にしたい方だけ改めてACCEPTにする手順です。
iptablesの設定変更だけで可能ならbashを数行書けば出来てしまいます。
ちょっと乱暴な方法に感じますが、これは実験してみたい。
#電子工作
電子工作にガチで取り組みたい今日この頃。
仕掛品ラックを作らないと作業スペースがありませんので、工作部屋の整理整頓が自宅での優先作業となりますが・・・
優先して手をつけたいのはDMXのパッチマシンです。
どれくらいの規模にするかはRaspberryPiを主軸にしたハードウェアの処理能力によりますが、小規模なディナーショーや野外コンサートで過不足なく使えるものにしたいとイメージしております。
以前、DMX切替機を頼まれて作ったことがあります。フェスで卓を2枚組んでどちらを使うか選択するための装置です。信号はBreakTimeを見て切り替えを行いますので受信側にとっては値が変わっただけのことになり、コネクタの抜き差しで稀に起こるパケットエラーからのアオリが発生しません。本卓とバックアップ卓の切り替えみたいな用法も出来ますので、可能ならこういった機能も搭載したいものです。
今思い付いたのですが、Art-NetなどのEtherNetベースなら切り替え器簡単かも。
debian系のOSでなら、3つのNICをbridge接続し、2つを卓側にし、1つを受信側にします。LinuxでHUBを作る方法の応用です。
で、卓側のNICの1つをiptablesで全DROP(NICは生きているがIPパケットをすべて破棄)にするのです。受信側にはもう1つのNICのパケットしか行きません。
切り替えは一端卓側のNICを2つとも全DROPにしてから有効にしたい方だけ改めてACCEPTにする手順です。
iptablesの設定変更だけで可能ならbashを数行書けば出来てしまいます。
ちょっと乱暴な方法に感じますが、これは実験してみたい。
#電子工作
数日前に納めた品物です。
友人が芝居公演をすることになり、マネキンを座らせた状態で飾るとのこと。
ただし、表情をプロジェクションマッピングで出したいらしく、周囲で役者が動いてもマネキンの頭が揺れないようにしなければなりません。
幸いマネキンの衣装はボリュームのあるスカートで足先はスネの半分から下しか見えませんので、マネキンを座らせるのではなく、上半身をスタンドで立てることにしました。

スタンドだけでも安定していますが、底部の板に錘を載せれば役者が激突しない限り要求を満たします。
又の位置にある平板は脚を取り付けるためのベースです。写真の位置では低かったので今は変更しています。
スタンドは鉄の角パイプ製です。
寸法が大雑把でも強度が欲しいだけなら鋼材を溶接するのが手っ取り早い。
木材ではホゾ継ぎをしないと出せない強度がヘタクソ溶接でも簡単に出せるからです。
衣装の製作はそこそこ名の知れた現役のコスプレイヤーさんが手掛けるとのこと。自らの衣装をデザインして作るジャンルの方ですから仕上がりが楽しみです。
後日、現場での飾りっぷりをお見せしたいところですが、キャラクターに版権があるのでここには出さないことにします。
こんな作品ですので、公演後に検索すれば写真が見つかるかもしれません。
最近はこんな感じで1.5日ペースで何かを仕上げています。ここに出していないネタも数多くあります。
本業はモノづくりと舞台監督。舞台照明は趣味になりつつあります。
名刺の肩書を変えた方がいいような気がする今日この頃。
#ガチ工作
友人が芝居公演をすることになり、マネキンを座らせた状態で飾るとのこと。
ただし、表情をプロジェクションマッピングで出したいらしく、周囲で役者が動いてもマネキンの頭が揺れないようにしなければなりません。
幸いマネキンの衣装はボリュームのあるスカートで足先はスネの半分から下しか見えませんので、マネキンを座らせるのではなく、上半身をスタンドで立てることにしました。



スタンドだけでも安定していますが、底部の板に錘を載せれば役者が激突しない限り要求を満たします。
又の位置にある平板は脚を取り付けるためのベースです。写真の位置では低かったので今は変更しています。
スタンドは鉄の角パイプ製です。
寸法が大雑把でも強度が欲しいだけなら鋼材を溶接するのが手っ取り早い。
木材ではホゾ継ぎをしないと出せない強度がヘタクソ溶接でも簡単に出せるからです。
衣装の製作はそこそこ名の知れた現役のコスプレイヤーさんが手掛けるとのこと。自らの衣装をデザインして作るジャンルの方ですから仕上がりが楽しみです。
後日、現場での飾りっぷりをお見せしたいところですが、キャラクターに版権があるのでここには出さないことにします。
こんな作品ですので、公演後に検索すれば写真が見つかるかもしれません。
最近はこんな感じで1.5日ペースで何かを仕上げています。ここに出していないネタも数多くあります。
本業はモノづくりと舞台監督。舞台照明は趣味になりつつあります。
名刺の肩書を変えた方がいいような気がする今日この頃。
#ガチ工作