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

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

or 管理画面へ

全年6月2日の投稿[4件]

2024年 この範囲を時系列順で読む この範囲をファイルに出力する

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

2023年 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 LTC Generator のプリアンプは回路を手直ししてOKになりました。
 バイアス電圧を当て、反転増幅回路の出力端子とマイナス端子の間の抵抗と並列に20pFのコンデンサを入れて解決しました。
 波形を示さないとわかりにくいのですが、コンデンサを入れる前は妙なノイズが出ていたのです。音声ではなく矩形波ですから周波数特性はそれほど気にしませんが、ノイズというか別波形が足されている状態はいただけない。
 回路修正用の基板も発注したので、プリアンプはとりあえずOKかな。

#PIC #タイムコード
Icon of admin
 FIFOなど、諸々書き加えたファームウェアも正常に動きました。
 自分で書いた送出停止処理の扱いを間違えて信号が出ないことに悩んでしまいましたが、テストプログラムが間違っていただけでした。肝心のモジュール本体は一発OKです。
 今回のPICはパソコンから送られてきたデータを淡々と差動バイフェーズで送り出すだけです。難しいことはパソコンでやれと、PICの名前の由来を考えろと。そんな作りです。
 データを差動バイフェーズで送出することは出来た。データのタイミング緩衝となるFIFOもどうやら正常に動く。残るはパソコンとの通信です。FT232RLを経由したシリアル通信ですが、PIC側はDMXで散々やったことですし、パソコン側はPythonなのでほんの数行で書けます。10分の空き時間で進められるものでもありませんけどね。

 あとはラインセレクタも必要です。
 音響さんからもらう本線LTCと自分のパソコンから送るチェック用LTCの2系統を切り替える必要があるからです。
 セレクタにはJRCさんのNJM2750が良さそうです。単電源で動く電子ロータリースイッチってイメージですね。
 NJM2750はアンバランスのLRを4系統から1つ選ぶって構成ですが、バランスのモノ4系統として使っても良さそう。
 今回はそこまで使わないけど、4系統のラインセレクタ基板を作っておけばいいかな?

#PIC #タイムコード #電子工作

2022年 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 これはおバカで好きです。


#雑談

■思ってみた

春ですねぇ~。
花粉症の部下は死にそうですが、暖かいってのはいいことです。

編集

■全文検索:

複合検索窓に切り替える

■複合検索:

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

■日付検索:

■カレンダー:

2024年6月
1
2345678
9101112131415
16171819202122
23242526272829
30

■カテゴリ:

■最近の投稿:

最終更新日時:
2025年4月29日(火) 20時16分48秒