このライブラリーはテストに作ったものです。近いうちに他の関数を加えた形でアップデートするつもりです。 read_8(int reg)、read_16(int reg) で レジスターregの値を8bit、16bitで読み込み、そのまま返します。受け取り側の変数をint8_t、int16_t で定義すれば正負に分かれた値を得られます。 write_8(int reg,int data)、write_16(int reg,int data)で レジスターregに8bit、16bit 書き込み、成功したら0、失敗したら1を返します。確認はread_8、read_16を用いています。 conect() でデバイスが使用可能かを調べ、見つかれば0、なければ1を返します。 reg_reset() で全てのレジスタの値を0にします。成功したら0、失敗したらその時点で処理を停止し、失敗したレジスタを返します。 レジスタは公式のデータシートに書いてあるものと文字は同じです。 もしかしたらうまく行かない関数があるかもしれません。次のアプデのときに修正予定です。

Dependents:   Nucleo_L3GD20_MMA7361_Kalman

Committer:
hirokimineshita
Date:
Fri Sep 30 04:14:43 2016 +0000
Revision:
12:438175c58b44
Parent:
2:de6dc4af9b75
+a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hirokimineshita 0:f2770227e24c 1 #include "mbed.h"
hirokimineshita 0:f2770227e24c 2 #include "l3gd20.h"
hirokimineshita 0:f2770227e24c 3
hirokimineshita 0:f2770227e24c 4 /*---------------------------------constracta------------------------------------------*/
hirokimineshita 0:f2770227e24c 5
hirokimineshita 1:354deb9168c0 6 l3gd20::l3gd20(): l3gdev(PB_15,PB_14,PB_13),l3gcs(PB_12),pcdev(USBTX,USBRX)
hirokimineshita 0:f2770227e24c 7 {
hirokimineshita 0:f2770227e24c 8 l3gdev.frequency(1000000);
hirokimineshita 0:f2770227e24c 9 l3gdev.format(8,3);
hirokimineshita 0:f2770227e24c 10 }
hirokimineshita 0:f2770227e24c 11
hirokimineshita 1:354deb9168c0 12 l3gd20::l3gd20(int fhz): l3gdev(PB_15,PB_14,PB_13),l3gcs(PB_12),pcdev(USBTX,USBRX)
hirokimineshita 0:f2770227e24c 13 {
hirokimineshita 0:f2770227e24c 14 l3gdev.frequency(fhz);
hirokimineshita 0:f2770227e24c 15 l3gdev.format(8,3);
hirokimineshita 0:f2770227e24c 16 }
hirokimineshita 0:f2770227e24c 17
hirokimineshita 1:354deb9168c0 18 l3gd20::l3gd20(PinName cs,int fhz): l3gdev(PB_15,PB_14,PB_13),l3gcs(cs),pcdev(USBTX,USBRX)
hirokimineshita 0:f2770227e24c 19 {
hirokimineshita 0:f2770227e24c 20 l3gdev.frequency(fhz);
hirokimineshita 0:f2770227e24c 21 l3gdev.format(8,3);
hirokimineshita 0:f2770227e24c 22 }
hirokimineshita 0:f2770227e24c 23
hirokimineshita 2:de6dc4af9b75 24 l3gd20::l3gd20(PinName mosi,PinName miso,PinName sck,PinName cs,int fhz,int mode): l3gdev(mosi,miso,sck),l3gcs(cs),pcdev(USBTX,USBRX)
hirokimineshita 0:f2770227e24c 25 {
hirokimineshita 0:f2770227e24c 26 l3gdev.frequency(fhz);
hirokimineshita 0:f2770227e24c 27 l3gdev.format(8,mode);
hirokimineshita 0:f2770227e24c 28 }
hirokimineshita 0:f2770227e24c 29
hirokimineshita 0:f2770227e24c 30 /*---------------------------------constracta------------------------------------------*/
hirokimineshita 0:f2770227e24c 31 /*-----------------------------------member--------------------------------------------*/
hirokimineshita 0:f2770227e24c 32
hirokimineshita 0:f2770227e24c 33 int l3gd20::reg_reset(){
hirokimineshita 0:f2770227e24c 34 int err;
hirokimineshita 0:f2770227e24c 35 for(int i=CTRL_REG1; i<=REFERENCE; i++){
hirokimineshita 0:f2770227e24c 36 err=l3gd20::write_8(i,0x00);
hirokimineshita 0:f2770227e24c 37 if(err){
hirokimineshita 0:f2770227e24c 38 return i;
hirokimineshita 0:f2770227e24c 39 }
hirokimineshita 1:354deb9168c0 40 if(i==CTRL_REG4){
hirokimineshita 1:354deb9168c0 41 scale=250;
hirokimineshita 1:354deb9168c0 42 }
hirokimineshita 0:f2770227e24c 43 }
hirokimineshita 0:f2770227e24c 44 err=l3gd20::write_8(FIFO_CTRL_REG,0x00);
hirokimineshita 0:f2770227e24c 45 if(err){
hirokimineshita 0:f2770227e24c 46 return FIFO_CTRL_REG;
hirokimineshita 0:f2770227e24c 47 }
hirokimineshita 0:f2770227e24c 48 err=l3gd20::write_8(INT1_CFG,0x00);
hirokimineshita 0:f2770227e24c 49 if(err){
hirokimineshita 0:f2770227e24c 50 return INT1_CFG;
hirokimineshita 0:f2770227e24c 51 }
hirokimineshita 0:f2770227e24c 52 for(int i=INT1_TSH_XH; i<=INT1_DURATION; i++){
hirokimineshita 0:f2770227e24c 53 err=l3gd20::write_8(i,0x00);
hirokimineshita 0:f2770227e24c 54 if(err){
hirokimineshita 0:f2770227e24c 55 return i;
hirokimineshita 0:f2770227e24c 56 }
hirokimineshita 0:f2770227e24c 57 }
hirokimineshita 0:f2770227e24c 58 return 0;
hirokimineshita 0:f2770227e24c 59 }
hirokimineshita 0:f2770227e24c 60
hirokimineshita 0:f2770227e24c 61 int l3gd20::conect(){
hirokimineshita 0:f2770227e24c 62 int err;
hirokimineshita 0:f2770227e24c 63 err=l3gd20::read_8(WHO_AM_I);
hirokimineshita 0:f2770227e24c 64 if(err==0xD4){
hirokimineshita 0:f2770227e24c 65 err=0;
hirokimineshita 0:f2770227e24c 66 }else{
hirokimineshita 0:f2770227e24c 67 err=1;
hirokimineshita 0:f2770227e24c 68 }
hirokimineshita 0:f2770227e24c 69 return err;
hirokimineshita 0:f2770227e24c 70 }
hirokimineshita 0:f2770227e24c 71
hirokimineshita 0:f2770227e24c 72 uint8_t l3gd20::read_8(uint8_t reg){
hirokimineshita 0:f2770227e24c 73 uint8_t re;
hirokimineshita 0:f2770227e24c 74 reg=reg|READ;
hirokimineshita 0:f2770227e24c 75 l3gcs=0;
hirokimineshita 0:f2770227e24c 76 l3gdev.write(reg);
hirokimineshita 0:f2770227e24c 77 re=l3gdev.write(0x00);
hirokimineshita 0:f2770227e24c 78 l3gcs=1;
hirokimineshita 0:f2770227e24c 79 return re;
hirokimineshita 0:f2770227e24c 80 }
hirokimineshita 0:f2770227e24c 81
hirokimineshita 0:f2770227e24c 82 uint16_t l3gd20::read_16(uint8_t reg){
hirokimineshita 0:f2770227e24c 83 uint8_t re1,re2;
hirokimineshita 0:f2770227e24c 84 uint16_t re;
hirokimineshita 0:f2770227e24c 85 reg=reg|READ;
hirokimineshita 0:f2770227e24c 86 l3gcs=0;
hirokimineshita 0:f2770227e24c 87 l3gdev.write(reg);
hirokimineshita 0:f2770227e24c 88 re1=l3gdev.write(0x00);
hirokimineshita 0:f2770227e24c 89 re2=l3gdev.write(0x00);
hirokimineshita 0:f2770227e24c 90 re=(re1<<8)|re2;
hirokimineshita 0:f2770227e24c 91 return re;
hirokimineshita 0:f2770227e24c 92 }
hirokimineshita 0:f2770227e24c 93
hirokimineshita 0:f2770227e24c 94 int l3gd20::write_8(uint8_t reg,uint8_t data){
hirokimineshita 0:f2770227e24c 95 int err;
hirokimineshita 0:f2770227e24c 96 reg=reg|WRITE;
hirokimineshita 0:f2770227e24c 97 l3gcs=0;
hirokimineshita 0:f2770227e24c 98 l3gdev.write(reg);
hirokimineshita 0:f2770227e24c 99 l3gdev.write(data);
hirokimineshita 0:f2770227e24c 100 l3gcs=1;
hirokimineshita 0:f2770227e24c 101 err=l3gd20::read_8(reg);
hirokimineshita 0:f2770227e24c 102 if(err==data){
hirokimineshita 0:f2770227e24c 103 err=0;
hirokimineshita 0:f2770227e24c 104 }else{
hirokimineshita 0:f2770227e24c 105 err=1;
hirokimineshita 0:f2770227e24c 106 }
hirokimineshita 0:f2770227e24c 107 return err;
hirokimineshita 0:f2770227e24c 108 }
hirokimineshita 0:f2770227e24c 109
hirokimineshita 1:354deb9168c0 110 void l3gd20::s_write_8(uint8_t reg,uint8_t data){
hirokimineshita 1:354deb9168c0 111 reg=reg|WRITE;
hirokimineshita 1:354deb9168c0 112 l3gcs=0;
hirokimineshita 1:354deb9168c0 113 l3gdev.write(reg);
hirokimineshita 1:354deb9168c0 114 l3gdev.write(data);
hirokimineshita 1:354deb9168c0 115 l3gcs=1;
hirokimineshita 1:354deb9168c0 116 }
hirokimineshita 1:354deb9168c0 117
hirokimineshita 0:f2770227e24c 118 int l3gd20::write_16(uint8_t reg,uint16_t data){
hirokimineshita 0:f2770227e24c 119 int err;
hirokimineshita 0:f2770227e24c 120 uint8_t d1,d2;
hirokimineshita 0:f2770227e24c 121 d2=data&0xFF;
hirokimineshita 0:f2770227e24c 122 d1=data>>8;
hirokimineshita 0:f2770227e24c 123 reg=reg|WRITE;
hirokimineshita 0:f2770227e24c 124 l3gcs=0;
hirokimineshita 0:f2770227e24c 125 l3gdev.write(reg);
hirokimineshita 0:f2770227e24c 126 l3gdev.write(d1);
hirokimineshita 0:f2770227e24c 127 l3gdev.write(d2);
hirokimineshita 0:f2770227e24c 128 l3gcs=1;
hirokimineshita 0:f2770227e24c 129 err=l3gd20::read_16(reg);
hirokimineshita 0:f2770227e24c 130 if(err==data){
hirokimineshita 0:f2770227e24c 131 err=0;
hirokimineshita 0:f2770227e24c 132 }else{
hirokimineshita 0:f2770227e24c 133 err=1;
hirokimineshita 0:f2770227e24c 134 }
hirokimineshita 0:f2770227e24c 135 return err;
hirokimineshita 0:f2770227e24c 136 }