I2C接続加速度センサーADXL345サポートライブラリ

icon 項目のみ表示/展開表示の切り替え

概要

ADXL345(ANALOG DEVICESのページに移動します)の初期化、読み込みをサポート
使用する場合はadxl345.incをインクルードしadxl345.asmをプロジェクトに追加してください
本ライブラリを使用する前にI2Cモジュールの初期化をしてください。
I2Cバスの仕様については、次のページに記述がある。
http://www.nxp.com/documents/user_manual/UM10204_JA.pdf

プログラムの説明

ソースファイル

以下のファイルで構成されている
adxl345.asm   ・・・ ADXL345サポートライブラリ Version 1.00
adxl345.inc   ・・・ ADXL345サポートライブラリ Version 1.00

サブルーチン

以下のサブルーチンをサポート

adxl345_init

ADXL345の初期化

adxl345_single_write

レジスタアドレスをARGH、書き込みデータをARGLに設定しコールするとADXL345に1byte出力する。

adxl345_single_read

レジスタアドレスをARGH設定しコールするとADXL345から1byte読み出しWREGに結果を格納する。

adxl345_gread_xyz

ADXL345からXYZの加速度を読み出しFSR1で示されるメモリに格納する。

ソースコード

iadxl345.inc

; ADXL345ライブラリー  Version 1.00
; File:        adxl345.inc
; Target:      PIC18F14K50 48Mhz
; アセンブラ:   Microchip MPASM(v5.51)
; 書き込み:     PICKit 3
; リリース:     2013/10/01 21:00

    IFNDEF ADXL345_ASM
        EXTERN adxl345_single_write
        EXTERN adxl345_single_read
        EXTERN adxl345_gread_xyz
        EXTERN adxl345_init
    ENDIF

;   ADXL345の定義 http://www.analog.com/static/imported-files/jp/application_notes/AN-1077_jp.pdf

ADXL345_SADS EQU    0a6h    ;   スレーブアドレス
ADXL345_DEVID EQU 00h   ;   DEVIDレジスタ 正常であれば0e5hが取得できる
ADXL345_POWER_CTL EQU 02dh
ADXL345_DATA_FORMAT EQU 031h    ;   データーフォーマットレジスタ
ADXL345_BW_RATE EQU 02ch    ;   サンプリング周期レジスタ
ADXL345_DATAX   EQU 032h
ADXL345_DATAY   EQU 034h
ADXL345_DATAZ   EQU 036h

adxl345.asm

; ADXL345ライブラリー  Version 1.00
; File:        adxl345.asm
; Target:      PIC18F14K50 48Mhz
; アセンブラ:   Microchip MPASM(v5.51)
; 書き込み:     PICKit 3
; リリース:     2013/10/01 21:00

        #DEFINE ADXL345_ASM 1

        #INCLUDE <p18f14k50.inc>
        #INCLUDE "i2c.inc"
        #INCLUDE "adxl345.inc"

        EXTERN ARGH,ARGL,GX,GY,GZ
        GLOBAL adxl345_single_write
        GLOBAL adxl345_single_read
        GLOBAL adxl345_gread_xyz
        GLOBAL adxl345_init

        CODE

adxl345_init
        movlw   b'00001011'  ; ±2g 最大分解能
        movwf   ARGL
        movlw   ADXL345_DATA_FORMAT
        movwf   ARGH
        rcall   adxl345_single_write

        movlw   b'00001000'  ; 測定モード Measure
        movwf   ARGL
        movlw   ADXL345_POWER_CTL
        movwf   ARGH
        rcall   adxl345_single_write

        movlw   b'00000111'  ; サンプリング周波数 12.5Hz
        movwf   ARGL
        movlw   ADXL345_BW_RATE
        movwf   ARGH
        rcall   adxl345_single_write
        return

adxl345_single_write    ;   ARGH:レジスタアドレス ARGL:ライトデータ
        rcall   i2c_start   ; スタートを出力
        movlw   ADXL345_SADS ; スレーブアドレス
        rcall   i2c_write
        movf    ARGH,W
        rcall   i2c_write
        movf    ARGL,W
        rcall   i2c_write
        rcall   i2c_stop
        return

adxl345_single_read    ; ARGH:レジスタアドレス WREG:リードデータ
        rcall   i2c_start
        movlw   ADXL345_SADS
        rcall   i2c_write
        movf    ARGH,W
        rcall   i2c_write

        rcall   i2c_restart
        movlw   ADXL345_SADS+1
        rcall   i2c_write

        rcall   i2c_last_read
        rcall   i2c_stop
        return

adxl345_gread_xyz    ; ADXL345 xyzを一度に呼び出し
        rcall   i2c_start
        movlw   ADXL345_SADS
        rcall   i2c_write
        movlw   ADXL345_DATAX
        rcall   i2c_write

        rcall   i2c_restart
        movlw   ADXL345_SADS+1
        rcall   i2c_write

        lfsr    FSR1,GX
        movlw   6
        rcall   i2c_block_read
        return

        END