全年6月2日の投稿[4件]
2024年 この範囲を時系列順で読む この範囲をファイルに出力する
今更ですが、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
問題点はアセンブラが 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年 この範囲を時系列順で読む この範囲をファイルに出力する
FIFOなど、諸々書き加えたファームウェアも正常に動きました。
自分で書いた送出停止処理の扱いを間違えて信号が出ないことに悩んでしまいましたが、テストプログラムが間違っていただけでした。肝心のモジュール本体は一発OKです。
今回のPICはパソコンから送られてきたデータを淡々と差動バイフェーズで送り出すだけです。難しいことはパソコンでやれと、PICの名前の由来を考えろと。そんな作りです。
データを差動バイフェーズで送出することは出来た。データのタイミング緩衝となるFIFOもどうやら正常に動く。残るはパソコンとの通信です。FT232RLを経由したシリアル通信ですが、PIC側はDMXで散々やったことですし、パソコン側はPythonなのでほんの数行で書けます。10分の空き時間で進められるものでもありませんけどね。
あとはラインセレクタも必要です。
音響さんからもらう本線LTCと自分のパソコンから送るチェック用LTCの2系統を切り替える必要があるからです。
セレクタにはJRCさんのNJM2750が良さそうです。単電源で動く電子ロータリースイッチってイメージですね。
NJM2750はアンバランスのLRを4系統から1つ選ぶって構成ですが、バランスのモノ4系統として使っても良さそう。
今回はそこまで使わないけど、4系統のラインセレクタ基板を作っておけばいいかな?
#PIC #タイムコード #電子工作
自分で書いた送出停止処理の扱いを間違えて信号が出ないことに悩んでしまいましたが、テストプログラムが間違っていただけでした。肝心のモジュール本体は一発OKです。
今回のPICはパソコンから送られてきたデータを淡々と差動バイフェーズで送り出すだけです。難しいことはパソコンでやれと、PICの名前の由来を考えろと。そんな作りです。
データを差動バイフェーズで送出することは出来た。データのタイミング緩衝となるFIFOもどうやら正常に動く。残るはパソコンとの通信です。FT232RLを経由したシリアル通信ですが、PIC側はDMXで散々やったことですし、パソコン側はPythonなのでほんの数行で書けます。10分の空き時間で進められるものでもありませんけどね。
あとはラインセレクタも必要です。
音響さんからもらう本線LTCと自分のパソコンから送るチェック用LTCの2系統を切り替える必要があるからです。
セレクタにはJRCさんのNJM2750が良さそうです。単電源で動く電子ロータリースイッチってイメージですね。
NJM2750はアンバランスのLRを4系統から1つ選ぶって構成ですが、バランスのモノ4系統として使っても良さそう。
今回はそこまで使わないけど、4系統のラインセレクタ基板を作っておけばいいかな?
#PIC #タイムコード #電子工作
2022年 この範囲を時系列順で読む この範囲をファイルに出力する
これはおバカで好きです。
#雑談
#雑談