🗐 電装工芸日記 - 舞台照明機器の製作とか -

今年は開発案件を進めたい

or 管理画面へ

どのカテゴリにも属していない投稿[1076件](20ページ目)

Icon of admin
 東京スイッチングさんの調光ユニットがあります。購入してから25年以上経っていますが壊れる気配は皆無。丈夫さはピカイチ。
 ただしフルアナログなのでDA変換が必須です。昨今はDA変換が一般には売ってませんので入手先を探すか製作を考えねばなりません。
 製作は8chのDA変換ICを使えば簡単に作れそうですが、どんなDA回路を使ってもマイナス電位が必要。+12vと-5vが理想ですが最近は複合タイプのスイッチング電源の選択肢が少なくなりどうしたものかと思案しておりました。
 基本に立ち戻って調べなおしたところ、スイッチング電源を直列にすれば良いらしい。トランスで絶縁されているなら電位は相対的ですからそうなるわな。マイナス側のスイッチング電源のアース処理には注意が必要ですけど。
 電源が解決したら設計を進められます。

#器具の製作
Icon of admin
 中華電機の器具類を XLR3P から XLR5P へ換装中。ケーブルは XLR3P の方が安いし音響のも使えるので良いところもあるのですが、3P だ 5P だと使い分けるのが面倒なので 5P に統一する方向で整備中です。XLR5P の国内正規品は高価ですが、中華電機のノイトリック互換品(数世代遅れ品)は安価です。XLR5P ケーブルコネクタは200円程度、レセプタクルに至っては100円しません。
 XLR5P に取り付ける専用基板も作りました。内部配線まで手を入れたくないためです。XLR5P レセプタクルの端子を差し込んでハンダ付けし XH コネクタで出すものです。オスもメスも取り付ける1枚基板にしたかったのですが、器具によってオスメスの取付間隔が数ミリ違うので使いまわしが出来ません。オス側だけ基板化し、メス側はケーブル出ししてオス側の基板に挿します。PCBGOGOさんで作ってもらい75枚38ドル、1枚あたり50セントでした。
20240604121129-admin.jpg 202406041211291-admin.jpg
 コネクタの固定はブライドリベットです。元々はネジ止めでしたが、ナットを入れるのが大変ですし、滅多に外しませんのでいいかなと。

 当面の改造課題の試作は終わりなので今後はライン作業ですが、満足なハンダ付けを出来る人材が少ないのでどうしたものか。
 DMXケーブルは数年前に大規模なライトアップで使った残材で増やせそうです。カナレさんのDMX203が数百メートルあります。カナレさんの4E6Sよりもハンダ付けは楽なので皆さんに練習してもらいましょう。

 余談ですが、中国の話。
 主要メディアではそれほど報道されませんが、中国では不動産バブルが弾けて大騒ぎだそうな。部品関連の業者さんも親会社がこういったところだとどうなるものかと心配しています。
 ただ、中国に協力会社を持つ知人によると、バブルに踊ってイイ気になっていた人たちが溺れているだけで、バブルに踊らす地道に真面目にやってきたところは影響が少ないとか。この辺りは日本で不動産バブルが弾けたときと同じですね。

#器具の修理
 
Icon of admin
 MPLABXv5.5 にて PIC の書き込みが出来ました。
 以前はその場しのぎの成り行きでやっていたので、今回は設定と手順をまとめた次第です。
 MPLABX の操作・設定、コンフィゲーションビットの設定、XC8 の書式がわかれば MPLABv8 と大差ありません。この辺りがモヤモヤしていると言えばそれまでなんですけどね。
 ただ、Pickit3 は動くのですが Pickit4 はダメ。PIC を見つけてくれないし、Pickit4 とは別に不明なシュミレータ/プログラマも表示される。壊れているのか設定が間違っているのか、新品を買って比べるのがいいのでしょうが、Pickit3 で当面はしのげるので様子見です。

#PIC
Icon of admin
 MPLABv8とMPLABXを共存させる場合、「MPLAB driver switcher」を用いてUSB接続されるデバイスのドライバを切り替えなければならないらしい。
 ただし、MPLABXの後にMPLABv8をインストールするとスッキリしない。バージョン順にインストールするのがいいらしい。
 バージョンによる境界だが、MPASM が付属し使えるのは MPLABXv5.35 まで、Pickit3 が使えるのは MPLABX6.2 までらしい。

#PIC
Icon of admin
 今更ですが、PIC の開発環境を MPLAB-X に完全移行しています。このところ PIC のソースコードを書いていなかったので取り急ぎの必要がなかったのですが、DMX のスプリッターを増産することになったのでこの際といったところです。
 問題点はアセンブラが MPASM から XC8 になったためソースコードの記述が違うことです。
 以前にも少し書いたのですが、整理したので改めて揚げてみます。

1)ラベル文字の最後に ' : ' をつける
例:
--- MPASM ---
LOOP
 NOP
 GOTO LOOP
--- xc8_asm ---
LOOP:
 NOP
 GOTO LOOP

2)0x以外の数値識別子が異なる
例:
--- MPASM ---
2進数  B'01001111'
8進数  O'72'
10進数 D'34' または .34
16進数 H'4F' または 0x4F
--- xc8_asm ---
2進数  01001111B
8進数  72Q
10進数 34
16進数 04FH または 0x4F

3)cblock は使えないので equ を使用する

4)org の代わりに、psect を使用する
 コードの開始アドレスを指示するのだが、二か所に記述する。これまで ORG を書いた本文の位置と Linker に記述。
例1:
 インデックスの名前を Code_Start としアドレスを 0x0000 とする場合。
(1) 開始アドレスを与えたいコードの直上に次を記述する。ORG の代わりに用いるものである。
PSECT Code_Start,class=CODE,delta=2
(2) <project properties ダイアログ> <pic-as Linker> <Custom linker options> に以下を記述する。
-pStart_Code=0h

例2:
 インデックスの名前を Int_Vec としアドレスを 0x0004 とする場合。
(1) 開始アドレスを与えたいコードの直上に次を記述する。ORG の代わりに用いるものである。
PSECT Int_Vec,class=CODE,delta=2
(2) <project properties ダイアログ> <pic-as Linker> <Custom linker options> に以下を記述する。
-pInt_Vec=4h

例3:
 インデックスの名前を Tables としアドレスを 0x0400 とする場合。
(1) 開始アドレスを与えたいコードの直上に次を記述する。ORG の代わりに用いるものである。
PSECT Tables,class=CODE,delta=2
(2) <project properties ダイアログ> <pic-as Linker> <Custom linker options> に以下を記述する。
-pTables=400h

5)コンフィグ指定は、xc8 の形式とする
MPLABX のメニュー [Production] [Set Configuration Bits] を用いると各項目の設定から以下のようなコードの生成まで出来るので本文の冒頭にコピペする。
例:
; CONFIG1
 CONFIG FOSC = EXTRCCLK    ; Oscillator Selection bits (EXTRC oscillator; CLKO function on RA6/OSC2/CLKO)
 CONFIG WDTE = ON       ; Watchdog Timer Enable bit (WDT enabled)
 CONFIG PWRTE = OFF      ; Power-up Timer Enable bit (PWRT disabled)
 CONFIG MCLRE = ON      ; RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
 CONFIG BOREN = ON      ; Brown-out Reset Enable bit (BOR enabled)
 CONFIG LVP = ON       ; Low-Voltage Programming Enable bit (RB3/PGM pin has PGM function, Low-Voltage Programming enabled)
 CONFIG CPD = OFF       ; Data EE Memory Code Protection bit (Code protection off)
 CONFIG WRT = OFF       ; Flash Program Memory Write Enable bits (Write protection off)
 CONFIG CCPMX = RB0      ; CCP1 Pin Selection bit (CCP1 function on RB0)
 CONFIG CP = OFF       ; Flash Program Memory Code Protection bit (Code protection off)
; CONFIG2
 CONFIG FCMEN = ON      ; Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
 CONFIG IESO = ON       ; Internal External Switchover bit (Internal External Switchover mode enabled)

6)オペランドでの SFR の表記に注意する
 詳細が長すぎるのでここでは割愛


追記
 不思議な現象が発生。
 MPLABXv5.5ではアセンプルが通るのにv6.2ではエラーが出て通らないプロジェクトがある。アセンブラはどちらも同じバージョンのXC8。
 エラーメッセージを見ると書いたソースコードではなく内部的なツールにエラーが起きているとある。
 さて、とこから詰めていきましょうか。

#PIC
Icon of admin
 10年以上前に作った調光ユニットでフリッカーが出るとの話しがありました。状況を再現出来ないので原因がわかりませんでしたが、予防策を突然閃く。ACのゼロクロス時にはSCRへのトリガー信号を強制的に切るのです。ある意味簡単なことですが、なかなか思い付かなかった自分に反省。調光装置は望むレベルで点灯させるのが役目ですが、確実に消灯することがとても大事です。
 フリッカー発生条件ので検証は不可能ですが、マイコンのファームウェアを修正したところ前よりもSCRのスイッチングが安定しているようです。
 ソースコードのコメントを数年後の自分への申し送りとして事細かに書いていたことも助けになりました。勢いで書き殴って動いたらオシマイとしていたら解決出来なかったかもしれません。

#電子工作 #照明器具
Icon of admin
 CYAN6000XEmk3 の30度前傾オベタの塗装をしています。
 下塗りにはシャバシャバにした1液ウレタンを入れています。シャバシャバを吸い込ませて木の繊維を固めるのが私の流儀です。
 4-5日乾燥させてから上塗りをします。鼻を当ててテレピン油っぽい臭いが消えていれば上塗りのタイミングです。

#ガチ工作 #器具の製作
Icon of admin
 eth0 と eth1 に Art-Net のIPアドレスを設定する bashスクリプトです。
 体裁の都合でタブ下げを全角空白にしています。パクってくださる方はテキストエディタなりで全角空白を削除するか半角空白に変換してください。utf-8でも全角空白はエラーの元です。
 Art-Net の OEMコードを取っていませんので、0x29DA を勝手に使ってます。身近な器具で使われていないのと「肉だ」の語呂です。製品化する際には OEMコードを取得します。

set_artnet_ipaddress_eth0eth1.sh

// RaspberryPi:4B
// OS:RaspberryPiOS(bookworm) 32bit-Lite
// パーミッション:755
// bashスクリプトですのでファイルに実行権限を与え、Sudo で実行してください。

#!/bin/bash

# 定数定義
OEM_CODE_H=41   # Art-NetのOEMコードの上位バイト10進数で表記
OEM_CODE_L=218  # Art-NetのOEMコードの下位バイト10進数で表記 仮に0x29DA Oem_hdl_dmxnode8_1 HDL
NETWORK_SWITCH=2 # NetworkSwitch/ON=2,OFF=10
ETH0_NAME="artnet-in-eth0"
ETH1_NAME="artnet-out-eth1"

# 必要なファイル、コマンドの有無を確認
# bcコマンド
if !(type "bc" > /dev/null 2>&1); then
 /usr/bin/echo "[Art-Net] Please Install the bc command."
 exit
fi

## ipアドレス設定
ETH_NAME=$ETH0_NAME
for (( i=0; i<2; i++ )); do

 ## ethの有無を確認
 P_eth=$(/usr/sbin/ifconfig | /usr/bin/grep eth$i)
 if [ -z "$P_eth" ]; then
  /usr/bin/echo "[Art-Net] eth"$i" does not exist"
  exit
 fi

 ## ethのMACアドレスを変数に格納する
 MAC_ADDR_eth=$(/usr/bin/cat `find /sys/devices/ -name eth$i`/address)

 ## MACアドレスの有無を確認し、あればIPアドレスの設定を実行
 if [ -n "$MAC_ADDR_eth" ]; then
  # ethのIPアドレス作成
  # 区切り文字「:」で配列変数化
  MAC_eth=(${MAC_ADDR_eth//:/ })
  # 16進数の文字列を数値に変換する
  MAC_eth_4=$((16#${MAC_eth[3]}))
  MAC_eth_5=$((16#${MAC_eth[4]}))
  MAC_eth_6=$((16#${MAC_eth[5]}))
  # Art-NetのIPアドレスを計算
  ArtNet_IP_eth_1=$NETWORK_SWITCH
  ArtNet_IP_eth_2=$(((MAC_eth_4 + OEM_CODE_H + OEM_CODE_L) % 256))
  ArtNet_IP_eth_3=$MAC_eth_5
  ArtNet_IP_eth_4=$MAC_eth_6
  ArtNet_IP_eth=$ArtNet_IP_eth_1"."$ArtNet_IP_eth_2"."$ArtNet_IP_eth_3"."$ArtNet_IP_eth_4
  /usr/bin/echo "[Art-Net] "$ETH_NAME" is "$ArtNet_IP_eth
  # NetworkManager設定ファイルの有無確認
  if [ ! -e "/etc/NetworkManager/system-connections/"$ETH_NAME".nmconnection" ]; then
   # 設定ファイルが無いので新規設定し有効化
   /usr/bin/nmcli connection add con-name $ETH_NAME type ethernet ifname eth$i connection.autoconnect yes ipv4.addresses $ArtNet_IP_eth"/8" ipv4.method manual ipv4.never-default no ipv6.method disabled >> /dev/null
   /usr/bin/nmcli c reload
   /usr/bin/nmcli c up $ETH_NAME >> /dev/null
  else
   # 設定ファイルがある IPアドレスが違うなら更新
   # 現在のIPアドレスを取得
   Current_IP_eth=$(/usr/bin/ip -f inet -o addr show eth$i|cut -d\ -f 7 | cut -d/ -f 1)
   # 現在のIPアドレスがArt-NetのIPアドレスと違うなら更新
   if [ "$Current_IP_eth" != "$ArtNet_IP_eth" ]; then
    /usr/bin/nmcli c modify $ETH_NAME ipv4.address $ArtNet_IP_eth"/8"
    /usr/bin/nmcli c down $ETH_NAME >> /dev/null
    /usr/bin/nmcli c reload
    /usr/bin/nmcli c up $ETH_NAME >> /dev/null
    /usr/bin/echo "[Art-Net] Updated eth"$i" IP address."
   else
   # IPアドレスが同じなので何もしない
   /usr/bin/echo "[Art-Net] eth"$i" does not need to be changed."
   fi
  fi
 else
  # MACアドレスを取得出来ません
  /usr/bin/echo "[Art-Net] Unable to obtain IP address for eth"$i"."
 fi
 ## eth1に切換え
 ETH_NAME=$ETH1_NAME
## for 折り返し
done


 手直ししたコードに差し替えました。
 下手糞コードは勘弁してください。。。
 スマホで表示すると表示が崩れますが原因は不明です。

#[Art-Net]
Icon of admin
 資料映像のレンダリング中に Art-Net の IPアドレスを設定する Bashスクリプトを書いてみました。
 実機は自宅ですが ssh で遠隔操作が出来ます。
 dhcpcd.conf の書き換えを NetworkManager のコマンドに置き換えるだけですので難しくはありません。
 とりあえず本体プログラムを書くための準備は終わりました。

#[Art-Net]
Icon of admin
 bookworm において NetworkManager を用いて IPアドレスを設定する例です。
NIC の命名規則が eth で eth1 を対象とする場合

◆ DHCP 扱いの eth1 に固定 ipv4 アドレスを定義する。
// NerwotkManager は NIC 単位で設定します。以下は設定名を「artnet-out-eth1」としています。
// すでに同名で設定されている場合は次の「◆ ipv4 アドレスを変更する」の手順で変更します。
// 設定ファイルは「/etc/NetworkManager/system-connections」に置かれるので、ここに「artnet-out-eth1.nmconnection」があればすでに設定されています。
// ipv4 アドレスは「2.99.100.202」、サブネットマスクを「255.0.0.0」とするので「/8」
// ArtNetPatch では ipv6 を扱わないので無効にします。
$ sudo nmcli connection add con-name "artnet-out-eth1" type ethernet ifname eth1 connection.autoconnect yes ipv4.addresses "2.99.100.202/8" ipv4.method manual ipv4.never-default no ipv6.method disabled
// NetworkManager の設定を再読み込みする
$ sudo nmcli c reload
// artnet-out-eth1 を起動する
$ sudo nmcli c up artnet-out-eth1

◆ ipv4 アドレスを変更する。
// ipv4 アドレスを「2.99.100.203/8」に変更する
$ sudo nmcli c modify artnet-out-eth1 ipv4.address 2.99.100.203/8
// 以下、停止、再読み込み、起動。
$ sudo nmcli c down artnet-out-eth1
$ sudo nmcli c reload
$ sudo nmcli c up artnet-out-eth1

◆ 設定を削除する
// 停止
$ sudo nmcli c down artnet-out-eth1
// 設定を削除
$ sudo nmcli c delete artnet-out-eth1

 コマンドで設定・変更をしますが、設定ファイルが主体です。
 設定ファイルは「/etc/NetworkManager/system-connections/artnet-out-eth1.nmconnection」です。

 この書式で設定、変更、削除が出来ました。
 スクリプトで自動設定するなら、設定ファイルに呪文を書くよりこの様にコマンドで設定出来るのはいいかもしれない。

#Linux #RaspberryPi

■思ってみた

社屋を囲む田んぼの田植えが終わり季節を感じます。

編集

■全文検索:

複合検索窓に切り替える

■複合検索:

  • 投稿者名:
  • 投稿年月:
  • #タグ:
  • カテゴリ:
  • 出力順序:

■日付検索:

■カレンダー:

2024年6月
1
2345678
9101112131415
16171819202122
23242526272829
30

■カテゴリ:

■最近の投稿:

最終更新日時:
2025年6月22日(日) 15時27分49秒