A/Dデータの読み込み

8bitと10bit

F675のADコンバーターは4CHで10bit分解能。
ただし、4CH分のADコンバーターを内蔵しているのではなく、CHセレクタで4つのうちの1つをセレクトしてADする。
8bitで使用する場合は、データを左詰めして2バイトのレジスタに取り込み、うち上位8ビットのレジスタ(ADRESH)を読み出すことで上位8ビット分のデータを取得できる。このとき下位2ビット(ADRESL)は特に処理せず捨てる。
10bitで使用する場合は、データを右詰めして2バイトのレジスタに取り込み、それぞれ(ADRESH/ADRESL)を読み出して汎用メモリーにコピーする。このとき、ADRESHはBank0だが、ADRESLはBank1に存在するため、AD結果のデータを読み出す前にBank切り替えを行う必要がある。

読み込み手順(8bit取り込みの例)

2CHのAD値を取り込む例。
1CH分読み出してはCHセレクタを切り替えて、他のCHの取り込みを行う。
AD結果は汎用メモリーにコピーしておく。

;---------------------------------------------------------------------------
; AD変換 その1
; 取り込み後のデータは、AD1_DATAに保存する
;---------------------------------------------------------------------------
	MOVLW	B'00000001'			; 左詰(ADRESHに8bitデータ)、REF=Vdd、AD電源ON
	MOVWF	ADCON0

	; AN0をセレクト
	BCF	ADCON0,2			; AN0でアナログ変換(CHS0クリア)
	BCF	ADCON0,3			; AN0でアナログ変換(CHS1クリア)

	MOVLW	D'20'				; 1ms x 20をセット
	CALL	WAIT_1msec_w			; WAIT実行

	BCF	PIR1,ADIF			; ADIF を 0 に(A/D 変換終了時このビットが 1 になる)
	BSF	ADCON0,GO			; GO (start) bit を立てて A/D 変換開始

EXEC_AD1:
	BTFSC	ADCON0,GO			; A/D 変換終了したか? 0 なら次をスキップ
	GOTO	EXEC_AD1			; 変換中なのでループ

	MOVF	ADRESH,W			; A/D 変換値を読み出して
	MOVWF	AN1_DATA			; 汎用メモリに保存

;---------------------------------------------------------------------------
; AD変換 その2
;---------------------------------------------------------------------------
	; AN1をセレクト
	BSF	ADCON0,2			; AN1でアナログ変換(CHS0セット)
	BCF	ADCON0,3			; AN1でアナログ変換(CHS1クリア)

	MOVLW	D'20'				; 1ms x 20をセット
	CALL	WAIT_1msec_w			; WAIT実行

	BCF	PIR1,ADIF			; ADIF を 0 に(A/D 変換終了時このビットが 1 になる)
	BSF	ADCON0,GO			; GO (start) bit を立てて A/D 変換開始

EXEC_AD2:
	BTFSC	ADCON0,GO			; A/D 変換終了したか? 0 なら次をスキップ
	GOTO	EXEC_AD2			; 変換中なのでループ

	MOVF	ADRESH,W			; A/D 変換値を読み出して
	MOVWF	AN2_DATA			; 汎用メモリに保存

読み込み手順(10bit取り込みの例)

10ビット分解能を使用するために、データは右詰めにして、下位8ビットと上位2ビットを読み出して、結果を別々のメモリーに保存する。

;---------------------------------------------------------------------------
; AD変換 その1(10ビット)
; 取り込み後のデータは、AD1_DATAH(9-8bit)とAD1_DATAL(7-0bit)に保存する
; ADRESHはBank0、ADRESLはBank0にあるので、切り替えが必要。
;---------------------------------------------------------------------------
	MOVLW	B'10000001'			; 右詰(ADRESLに8bitデータ)、REF=Vdd、AD電源ON
	MOVWF	ADCON0

	; AN0をセレクト
	BCF	ADCON0,2			; AN0でアナログ変換(CHS0クリア)
	BCF	ADCON0,3			; AN0でアナログ変換(CHS1クリア)

	MOVLW	D'50'				; 1ms x 50をセット(長めにする)
	CALL	WAIT_1msec_w			; WAIT実行

	BCF	PIR1,ADIF			; ADIF を 0 に(A/D 変換終了時このビットが 1 になる)
	BSF	ADCON0,GO			; GO (start) bit を立てて A/D 変換開始

EXEC_AD1:
	BTFSC	ADCON0,GO			; A/D 変換終了したか? 0 なら次をスキップ
	GOTO	EXEC_AD1			; 変換中なのでループ

	MOVF	ADRESH,W			; A/D 変換値(上位)を読み出して
	MOVWF	AN1_DATAH			; 汎用メモリに保存
	BANKSEL	ADRESL				; Bank1に切り替え
	MOVF	ADRESL,W			; A/D 変換値(下位)を読み出して
	MOVWF	AN1_DATAL			; 汎用メモリに保存
	BANKSEL	GPIO				; Bank0に切り替え

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-11-27 (月) 23:39:34