2023年の投稿[318件](17ページ目)
2023年5月 この範囲を時系列順で読む この範囲をファイルに出力する
LTC Generator のPICのファームウェアを書いています。
今日の課題は「バイトデータ送出モジュール(補正機能付)」です。信号を出す要の部分でしょうか。
30fps、29.97fps、25fps、24fpsに対応する予定ですが、それぞれに適したパルス波長を作る部位です。
1時間単位の計測方法が無いので精度の確認は出来ませんが、オシロスコープで確認する限りは適切なパルス長です。
データ送信も確認しました。0x00と0xFFを繰り返し送出するテストですが、ちゃんと差動バイフェーズの波形が出ています。そこそこ面倒なアルゴリズムですが一発で動いてしまい嬉しいやら寂しいやら。
データに応じた波形が出せる状態になったのでファームウェアは一旦お休み。
この後は、プリアンプの手直し、パソコンからFT232RL経由でデータを送るテストプログラムの作成と続きます。
追記
そういやFIFOモジュールを書いてない。
これは先にやっておきましょう。
#PIC #タイムコード
今日の課題は「バイトデータ送出モジュール(補正機能付)」です。信号を出す要の部分でしょうか。
30fps、29.97fps、25fps、24fpsに対応する予定ですが、それぞれに適したパルス波長を作る部位です。
1時間単位の計測方法が無いので精度の確認は出来ませんが、オシロスコープで確認する限りは適切なパルス長です。
データ送信も確認しました。0x00と0xFFを繰り返し送出するテストですが、ちゃんと差動バイフェーズの波形が出ています。そこそこ面倒なアルゴリズムですが一発で動いてしまい嬉しいやら寂しいやら。
データに応じた波形が出せる状態になったのでファームウェアは一旦お休み。
この後は、プリアンプの手直し、パソコンからFT232RL経由でデータを送るテストプログラムの作成と続きます。
追記
そういやFIFOモジュールを書いてない。
これは先にやっておきましょう。
#PIC #タイムコード
MUSES02Dが入荷したので入れ替えてみました。
率直な感想は素直で良い音なこと。成り行きでエージングした無改造品と比べても明らかです。
音に迷いがなく自信に満ちている感じ。中域がシッカリしていて余韻も気持ちよく、全域に渡って耳に入ってきます。ネットには「今まで聴こえなかった音に気付きます」との評価がありますが大げさな表現ではありません。
私個人としては5,000円なら納得の変化ですが、大事なのは商売道具としての価値です。エージングが済んだら音響チームに確認してもらいましょう。
#音の世界
率直な感想は素直で良い音なこと。成り行きでエージングした無改造品と比べても明らかです。
音に迷いがなく自信に満ちている感じ。中域がシッカリしていて余韻も気持ちよく、全域に渡って耳に入ってきます。ネットには「今まで聴こえなかった音に気付きます」との評価がありますが大げさな表現ではありません。
私個人としては5,000円なら納得の変化ですが、大事なのは商売道具としての価値です。エージングが済んだら音響チームに確認してもらいましょう。
#音の世界
MPLABX-IDEv5.50、XC8_pic-as、PICkit3 の組み合わせでPICが動きました。
今までは古い古いMPLABv8.92を主に使ってきましたが、MPLABXへの引っ越しが終わった感じです。出来るだけ新しいMPLABXを使わないと対応デバイスやら動作クロックの制限があって不便だったのです。
PICに対して行う要点は同じですが、大事なところが微妙に違うのには難儀しました。特に、プログラムメモリアドレスの指定とコンフィゲエーションビットの設定という超重要項目の設定方法が全く違うのには泣かされました。先達の情報に感謝です。
TMR1をコンペアモードで動かして所定の基底パルスが出ています。25fps向けの4,000Hzなので折り返しは250usec.です。オシロスコープにしっかりと波形が出ています。
基本的なところがクリア出来ましたので、試行錯誤で散らかったソースコードを掃除して次のステップです。
追記
音声信号に変換するプリアンプ回路が思った様になりません。
アナログは苦手です。
追記
先達の情報にこんなんがありました。
単電源でアンバランス-バランス変換 その2
単電源でオペアンプを使う際の注意点というか基本が読み取れる回路図です。自分は単電源での使い方を間違って覚えているかもしれません。
試しにブレッドボードで組んでみましょう。
つか、苦手な要素はテストしてから基板作れよっ・・
追記
上記のサイトの回路を参考に、プリアンプ回路の修正基板を描いてみました。オペアンプを搭載するDIP8ピンのパターンに被せる基板です。

全てを作り直してもいいのですが、無駄になる物が多いので、すでに入荷済みの基板にはこの手で使おうかなと。聴くものじゃありませんので多少ノイズが出ても支障ありませんし。
オーダーするのはブレッドボードでのチェックの後にしますケドね。
#PIC #タイムコード
今までは古い古いMPLABv8.92を主に使ってきましたが、MPLABXへの引っ越しが終わった感じです。出来るだけ新しいMPLABXを使わないと対応デバイスやら動作クロックの制限があって不便だったのです。
PICに対して行う要点は同じですが、大事なところが微妙に違うのには難儀しました。特に、プログラムメモリアドレスの指定とコンフィゲエーションビットの設定という超重要項目の設定方法が全く違うのには泣かされました。先達の情報に感謝です。
TMR1をコンペアモードで動かして所定の基底パルスが出ています。25fps向けの4,000Hzなので折り返しは250usec.です。オシロスコープにしっかりと波形が出ています。
基本的なところがクリア出来ましたので、試行錯誤で散らかったソースコードを掃除して次のステップです。
追記
音声信号に変換するプリアンプ回路が思った様になりません。
アナログは苦手です。
追記
先達の情報にこんなんがありました。
単電源でアンバランス-バランス変換 その2
単電源でオペアンプを使う際の注意点というか基本が読み取れる回路図です。自分は単電源での使い方を間違って覚えているかもしれません。
試しにブレッドボードで組んでみましょう。
つか、苦手な要素はテストしてから基板作れよっ・・
追記
上記のサイトの回路を参考に、プリアンプ回路の修正基板を描いてみました。オペアンプを搭載するDIP8ピンのパターンに被せる基板です。


全てを作り直してもいいのですが、無駄になる物が多いので、すでに入荷済みの基板にはこの手で使おうかなと。聴くものじゃありませんので多少ノイズが出ても支障ありませんし。
オーダーするのはブレッドボードでのチェックの後にしますケドね。
#PIC #タイムコード
PICをプログラムするのに開発ツールのMPLABXと書き込み機のPICkitを使っています。
最新のMPLABXでアセンブラファイルを作ったので書き込みのテストを始めたのですがPICkit4が正常に動かない。認識はされているのに書き込みをすると正常な通信が出来ないとエラーを出します。イロイロ試すものの一向に改善しません。
こんな時はヴァージョンを落とすのも対策の一つです。原因がMPLABXにあるのかPICkit4にあるのかわかりませんので、開発ツールも書き込み機も世代を落とします。条件はXC8のアセンブラとPICkit3が使えることです。ver5.40、5.45、5.50が該当します。
ダウンロード済みだったver5.40を試すとアッサリ解決。正常なログが出ました。試行錯誤の6時間はなんだったのでしょう。
当面、ver5シリーズの最終版であるver5.50を使うことにします。
PICが正しく動くかのチェックはこれからです。正しく書きこんだ顔をしているのにダメって可能性もあるので安心するのは早いです。
PICkit4が動かないのは困りますが、こういった開発ツールではヴァージョンアップの過渡期によくあることです。気にしても始まらない。
#PIC
最新のMPLABXでアセンブラファイルを作ったので書き込みのテストを始めたのですがPICkit4が正常に動かない。認識はされているのに書き込みをすると正常な通信が出来ないとエラーを出します。イロイロ試すものの一向に改善しません。
こんな時はヴァージョンを落とすのも対策の一つです。原因がMPLABXにあるのかPICkit4にあるのかわかりませんので、開発ツールも書き込み機も世代を落とします。条件はXC8のアセンブラとPICkit3が使えることです。ver5.40、5.45、5.50が該当します。
ダウンロード済みだったver5.40を試すとアッサリ解決。正常なログが出ました。試行錯誤の6時間はなんだったのでしょう。
当面、ver5シリーズの最終版であるver5.50を使うことにします。
PICが正しく動くかのチェックはこれからです。正しく書きこんだ顔をしているのにダメって可能性もあるので安心するのは早いです。
PICkit4が動かないのは困りますが、こういった開発ツールではヴァージョンアップの過渡期によくあることです。気にしても始まらない。
#PIC
DI-1の内部電源はDC9vと表記あり。オペアンプの電源端子を実測すると8.3v。
MUSES01Dの定格電源は±9~±16v。単電源換算なら18~32vですから圧倒的電圧不足ぢゃね?ちなみにM5218やNJM4580Dは±2~±16v(4~32v)なので楽勝。
エージングをすれば良い方向になると思い込んではいたものの、NJM4580Dに比べて価格差ほど良質なのかと腑に落ちない感じはありました。ひょっとしてコレ?
MUSES02D、MUSES8820D、MUSES8920Dは±3.5~±16v(7~32v)です。DI-1向けならこれらを選ぶべきぢゃね!?
MUSES02Dをポチリました。エージングも評価も全部やり直しです。
MUSES02Dで納得いけば、MUSES02Dの廉価版ながらNJM4580Dより高音質と評判のMUSES8820Dも試してみましょう。安く済むに越したことはありませんので。
正直なところ、ナゼMUSES01DとMUSES02Dの2種なのかイマイチ理解出来ませんでしたが、電源電圧の違いではないかと思ったところ。
音質云々以前に、電圧低めの回路にはMUSESD01DではなくMUSES02Dを使うべきです。所定の電圧を突っ込まずに良い音が出るワケありません。
メーカーの意図は想像の域を越えませんが、基本的な確認を怠ったことは大反省です。部品と販売店さんに謝らないといけません。
オペアンプの評価はこちらを参考にしました。
オペアンプの違いによる音質比較表
ここの評価を真に受けるなら、DI-1にはMUSES02Dではないか!?
#音の世界 #電子工作
MUSES01Dの定格電源は±9~±16v。単電源換算なら18~32vですから圧倒的電圧不足ぢゃね?ちなみにM5218やNJM4580Dは±2~±16v(4~32v)なので楽勝。
エージングをすれば良い方向になると思い込んではいたものの、NJM4580Dに比べて価格差ほど良質なのかと腑に落ちない感じはありました。ひょっとしてコレ?
MUSES02D、MUSES8820D、MUSES8920Dは±3.5~±16v(7~32v)です。DI-1向けならこれらを選ぶべきぢゃね!?
MUSES02Dをポチリました。エージングも評価も全部やり直しです。
MUSES02Dで納得いけば、MUSES02Dの廉価版ながらNJM4580Dより高音質と評判のMUSES8820Dも試してみましょう。安く済むに越したことはありませんので。
正直なところ、ナゼMUSES01DとMUSES02Dの2種なのかイマイチ理解出来ませんでしたが、電源電圧の違いではないかと思ったところ。
音質云々以前に、電圧低めの回路にはMUSESD01DではなくMUSES02Dを使うべきです。所定の電圧を突っ込まずに良い音が出るワケありません。
メーカーの意図は想像の域を越えませんが、基本的な確認を怠ったことは大反省です。部品と販売店さんに謝らないといけません。
オペアンプの評価はこちらを参考にしました。
オペアンプの違いによる音質比較表
ここの評価を真に受けるなら、DI-1にはMUSES02Dではないか!?
#音の世界 #電子工作
無改造のDI-1のエージングは150時間を経過しましたが、ここへ来て急に音が良くなってるんですよ。24時間毎に音が変わるので評価がアッチコッチします。
良いの意味はDI-1特有の高域が尻つぼみする感じがなくなったことです。よくよく比べればMUSES01Dの方が透明感を感じますが、言われなければわからない違いです。実用上はどっちでもいいんじゃね?って感じ。
MUSES01Dのエージングが300時間ならまだ数日ありますが、DI-1に感じていた問題が解決してしまったなら無理してMUSESD01D化する必要はありません。
ただ、オペアンプよりもコンデンサの方が音に影響がある可能性もありますので、この辺りも試すつもりです。
#音の世界
良いの意味はDI-1特有の高域が尻つぼみする感じがなくなったことです。よくよく比べればMUSES01Dの方が透明感を感じますが、言われなければわからない違いです。実用上はどっちでもいいんじゃね?って感じ。
MUSES01Dのエージングが300時間ならまだ数日ありますが、DI-1に感じていた問題が解決してしまったなら無理してMUSESD01D化する必要はありません。
ただ、オペアンプよりもコンデンサの方が音に影響がある可能性もありますので、この辺りも試すつもりです。
#音の世界
MUSES01DのDI-1のエージングは230時間経過です。
先日「シャー」ノイズが増えたと書きましたが、電池の電圧が落ちたことが原因みたいです。電池を交換したところノイズは無くなりました。ファンタム駆動なのに電池の影響を受ける不思議。その他、無改造品とは挙動が違うところがあり、正確な比較が出来ない感じもあります。
音は良くなったと思います。高域の抜けが良くなり、特に残響音がストンと切れる感じはありません。しかし、一緒にエージングをしてきた無改造品も音質の向上が認められたために費用分の価値があるかというと正直微妙です。
さて、どうすっかな。。。
#音の世界
先日「シャー」ノイズが増えたと書きましたが、電池の電圧が落ちたことが原因みたいです。電池を交換したところノイズは無くなりました。ファンタム駆動なのに電池の影響を受ける不思議。その他、無改造品とは挙動が違うところがあり、正確な比較が出来ない感じもあります。
音は良くなったと思います。高域の抜けが良くなり、特に残響音がストンと切れる感じはありません。しかし、一緒にエージングをしてきた無改造品も音質の向上が認められたために費用分の価値があるかというと正直微妙です。
さて、どうすっかな。。。
#音の世界
MUSES01DのDI-1のエージングは185時間経過です。
無改造品は80時間時点から変化はありません。高域の詰まり感が減少して伸びる感じが出ているのでエージングは望ましいと思いますが、この辺りが限界なのかな?
MUSES01Dの方は高域の明瞭度が更に良くなり、主旋の裏にある細い音が一層聴こえる様になっています。特に無改造品では聴き取れない高域のリバーブ音が存在感を持って聴こえます。無改造品とはすでに別物です。ただ、「シャー」ノイズが耳に付くような気もします。S/Nが悪くなったのではなく、高域が主張されるのに伴って音源からの「シャー」も大きくなったようです。
良し悪しはともかく、改造によって別物になった意味では現状でもアリだと思いますので、この後はエージングの時間を決めることでしょうか。本番中に音が変わっても困りますからね。変化が落ち着くタイミングを知りたいところです。
#音の世界
無改造品は80時間時点から変化はありません。高域の詰まり感が減少して伸びる感じが出ているのでエージングは望ましいと思いますが、この辺りが限界なのかな?
MUSES01Dの方は高域の明瞭度が更に良くなり、主旋の裏にある細い音が一層聴こえる様になっています。特に無改造品では聴き取れない高域のリバーブ音が存在感を持って聴こえます。無改造品とはすでに別物です。ただ、「シャー」ノイズが耳に付くような気もします。S/Nが悪くなったのではなく、高域が主張されるのに伴って音源からの「シャー」も大きくなったようです。
良し悪しはともかく、改造によって別物になった意味では現状でもアリだと思いますので、この後はエージングの時間を決めることでしょうか。本番中に音が変わっても困りますからね。変化が落ち着くタイミングを知りたいところです。
#音の世界
オレメモです。
PICにおいてPORTx,nに対するbit反転方法。
TMR1のコンペアで割り込みしてPORTの出力を反転すればパルスになりますから、差動バイフェーズで重要です。
; PORTAの3bit目だけ反転させる。
MOVLW 00001000B ; Wレジスタにフィルタ値を定義 3bit目だけ1
XORWF PORTA,SELF ; PORTAの3bit目だけを反転
※ 書式はXC8のPIC-as
データシート読むとPORTxではなくLATxに対して計算を当てるのがいいらしいのですが、ここではわかりやすさのためにあえてPORT相手です。
XORの計算は次の通り。
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
PIC16系にはbit単位の反転命令がありませんので、反転させたいbitだけ1にしたフィルタ値をXORで当てます。
左の値をPORTの現在値、右の値をフィルタ値とすると、2行目と4行目が反転になり、1行目と3行目は非反転になります。
論理演算の基本ちゃ基本ですが、案外忘れてしまうのでメモメモ。
アセンブラに限らずですが、出来るだけ簡単な計算で条件分岐を行うことが大事です。
例えば処理を10回繰り返すとして、0から加算してカウンタが10になったことを判断するより、10から減算して0になったことを判断する方が好みです。PICのアセンブラの分岐処理は計算結果が0かで扱うのが自然だからです。
; 10回繰り返す
MOVLW 10 ; COUNTに10を設定する
MOVWF COUNT ;
LOOP:
~ 10回繰り返す処理をここに書く ~
DECFSZ COUNT,SELF ; COUNTをデクリメント(-1)し、結果が0なら次行の処理を飛ばす
GOTO LOOP ; LOOPを繰り返す
~ 繰り返しの後の処理をここに書く ~
DECFSZはDECFとBTFSSを組み合わせたマクロ命令みたいなものです。
少し蛇足ですが、レジスタの現在値が0であるかを見るには、
; レジスタNUMの値は0か?
MOVF NUM,SELF ; 自分自身へ値をコピー
BTFSC STATUS,ZE ; 計算結果がゼロかどうかで分岐
GOTO NUMisZERO ; ゼロの場合NUMisZEROへジャンプ(CALLでもいいけど)
MOVFで自分自身に値をコピーするとSTATUSのゼロフラグ以外変化しないので便利です。
もちろんWレジスタにコピーしても同じ結果を得られますが、Wレジスタが変化しない方がスッキリまとまることが多いようです。
てな感じで、PICのアセンブラのリハビリをしています。
#PIC
PICにおいてPORTx,nに対するbit反転方法。
TMR1のコンペアで割り込みしてPORTの出力を反転すればパルスになりますから、差動バイフェーズで重要です。
; PORTAの3bit目だけ反転させる。
MOVLW 00001000B ; Wレジスタにフィルタ値を定義 3bit目だけ1
XORWF PORTA,SELF ; PORTAの3bit目だけを反転
※ 書式はXC8のPIC-as
データシート読むとPORTxではなくLATxに対して計算を当てるのがいいらしいのですが、ここではわかりやすさのためにあえてPORT相手です。
XORの計算は次の通り。
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
PIC16系にはbit単位の反転命令がありませんので、反転させたいbitだけ1にしたフィルタ値をXORで当てます。
左の値をPORTの現在値、右の値をフィルタ値とすると、2行目と4行目が反転になり、1行目と3行目は非反転になります。
論理演算の基本ちゃ基本ですが、案外忘れてしまうのでメモメモ。
アセンブラに限らずですが、出来るだけ簡単な計算で条件分岐を行うことが大事です。
例えば処理を10回繰り返すとして、0から加算してカウンタが10になったことを判断するより、10から減算して0になったことを判断する方が好みです。PICのアセンブラの分岐処理は計算結果が0かで扱うのが自然だからです。
; 10回繰り返す
MOVLW 10 ; COUNTに10を設定する
MOVWF COUNT ;
LOOP:
~ 10回繰り返す処理をここに書く ~
DECFSZ COUNT,SELF ; COUNTをデクリメント(-1)し、結果が0なら次行の処理を飛ばす
GOTO LOOP ; LOOPを繰り返す
~ 繰り返しの後の処理をここに書く ~
DECFSZはDECFとBTFSSを組み合わせたマクロ命令みたいなものです。
少し蛇足ですが、レジスタの現在値が0であるかを見るには、
; レジスタNUMの値は0か?
MOVF NUM,SELF ; 自分自身へ値をコピー
BTFSC STATUS,ZE ; 計算結果がゼロかどうかで分岐
GOTO NUMisZERO ; ゼロの場合NUMisZEROへジャンプ(CALLでもいいけど)
MOVFで自分自身に値をコピーするとSTATUSのゼロフラグ以外変化しないので便利です。
もちろんWレジスタにコピーしても同じ結果を得られますが、Wレジスタが変化しない方がスッキリまとまることが多いようです。
てな感じで、PICのアセンブラのリハビリをしています。
#PIC