このライブラリーはテストに作ったものです。近いうちに他の関数を加えた形でアップデートするつもりです。 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:
Wed Jan 28 05:16:22 2015 +0000
Revision:
0:f2770227e24c
Child:
1:354deb9168c0
L3GD20?????????????????????????????????

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