このライブラリーはテストに作ったものです。近いうちに他の関数を加えた形でアップデートするつもりです。 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 Sep 28 11:11:52 2016 +0000
Revision:
1:354deb9168c0
Parent:
0:f2770227e24c
Child:
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 1:354deb9168c0 24 l3gd20::l3gd20(PinName mosi,PinName miso,PinName sck,PinName cs,int fhz): 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,3);
hirokimineshita 0:f2770227e24c 28 }
hirokimineshita 0:f2770227e24c 29
hirokimineshita 1:354deb9168c0 30 l3gd20::l3gd20(PinName miso,PinName mosi,PinName sck,PinName cs,int fhz,int mode): l3gdev(mosi,miso,sck),l3gcs(cs),pcdev(USBTX,USBRX)
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 1:354deb9168c0 46 if(i==CTRL_REG4){
hirokimineshita 1:354deb9168c0 47 scale=250;
hirokimineshita 1:354deb9168c0 48 }
hirokimineshita 0:f2770227e24c 49 }
hirokimineshita 0:f2770227e24c 50 err=l3gd20::write_8(FIFO_CTRL_REG,0x00);
hirokimineshita 0:f2770227e24c 51 if(err){
hirokimineshita 0:f2770227e24c 52 return FIFO_CTRL_REG;
hirokimineshita 0:f2770227e24c 53 }
hirokimineshita 0:f2770227e24c 54 err=l3gd20::write_8(INT1_CFG,0x00);
hirokimineshita 0:f2770227e24c 55 if(err){
hirokimineshita 0:f2770227e24c 56 return INT1_CFG;
hirokimineshita 0:f2770227e24c 57 }
hirokimineshita 0:f2770227e24c 58 for(int i=INT1_TSH_XH; i<=INT1_DURATION; i++){
hirokimineshita 0:f2770227e24c 59 err=l3gd20::write_8(i,0x00);
hirokimineshita 0:f2770227e24c 60 if(err){
hirokimineshita 0:f2770227e24c 61 return i;
hirokimineshita 0:f2770227e24c 62 }
hirokimineshita 0:f2770227e24c 63 }
hirokimineshita 0:f2770227e24c 64 return 0;
hirokimineshita 0:f2770227e24c 65 }
hirokimineshita 0:f2770227e24c 66
hirokimineshita 0:f2770227e24c 67 int l3gd20::conect(){
hirokimineshita 0:f2770227e24c 68 int err;
hirokimineshita 0:f2770227e24c 69 err=l3gd20::read_8(WHO_AM_I);
hirokimineshita 0:f2770227e24c 70 if(err==0xD4){
hirokimineshita 0:f2770227e24c 71 err=0;
hirokimineshita 0:f2770227e24c 72 }else{
hirokimineshita 0:f2770227e24c 73 err=1;
hirokimineshita 0:f2770227e24c 74 }
hirokimineshita 0:f2770227e24c 75 return err;
hirokimineshita 0:f2770227e24c 76 }
hirokimineshita 0:f2770227e24c 77
hirokimineshita 0:f2770227e24c 78 uint8_t l3gd20::read_8(uint8_t reg){
hirokimineshita 0:f2770227e24c 79 uint8_t re;
hirokimineshita 0:f2770227e24c 80 reg=reg|READ;
hirokimineshita 0:f2770227e24c 81 l3gcs=0;
hirokimineshita 0:f2770227e24c 82 l3gdev.write(reg);
hirokimineshita 0:f2770227e24c 83 re=l3gdev.write(0x00);
hirokimineshita 0:f2770227e24c 84 l3gcs=1;
hirokimineshita 0:f2770227e24c 85 return re;
hirokimineshita 0:f2770227e24c 86 }
hirokimineshita 0:f2770227e24c 87
hirokimineshita 0:f2770227e24c 88 uint16_t l3gd20::read_16(uint8_t reg){
hirokimineshita 0:f2770227e24c 89 uint8_t re1,re2;
hirokimineshita 0:f2770227e24c 90 uint16_t re;
hirokimineshita 0:f2770227e24c 91 reg=reg|READ;
hirokimineshita 0:f2770227e24c 92 l3gcs=0;
hirokimineshita 0:f2770227e24c 93 l3gdev.write(reg);
hirokimineshita 0:f2770227e24c 94 re1=l3gdev.write(0x00);
hirokimineshita 0:f2770227e24c 95 re2=l3gdev.write(0x00);
hirokimineshita 0:f2770227e24c 96 re=(re1<<8)|re2;
hirokimineshita 0:f2770227e24c 97 return re;
hirokimineshita 0:f2770227e24c 98 }
hirokimineshita 0:f2770227e24c 99
hirokimineshita 0:f2770227e24c 100 int l3gd20::write_8(uint8_t reg,uint8_t data){
hirokimineshita 0:f2770227e24c 101 int err;
hirokimineshita 0:f2770227e24c 102 reg=reg|WRITE;
hirokimineshita 0:f2770227e24c 103 l3gcs=0;
hirokimineshita 0:f2770227e24c 104 l3gdev.write(reg);
hirokimineshita 0:f2770227e24c 105 l3gdev.write(data);
hirokimineshita 0:f2770227e24c 106 l3gcs=1;
hirokimineshita 0:f2770227e24c 107 err=l3gd20::read_8(reg);
hirokimineshita 0:f2770227e24c 108 if(err==data){
hirokimineshita 0:f2770227e24c 109 err=0;
hirokimineshita 0:f2770227e24c 110 }else{
hirokimineshita 0:f2770227e24c 111 err=1;
hirokimineshita 0:f2770227e24c 112 }
hirokimineshita 0:f2770227e24c 113 return err;
hirokimineshita 0:f2770227e24c 114 }
hirokimineshita 0:f2770227e24c 115
hirokimineshita 1:354deb9168c0 116 void l3gd20::s_write_8(uint8_t reg,uint8_t data){
hirokimineshita 1:354deb9168c0 117 reg=reg|WRITE;
hirokimineshita 1:354deb9168c0 118 l3gcs=0;
hirokimineshita 1:354deb9168c0 119 l3gdev.write(reg);
hirokimineshita 1:354deb9168c0 120 l3gdev.write(data);
hirokimineshita 1:354deb9168c0 121 l3gcs=1;
hirokimineshita 1:354deb9168c0 122 }
hirokimineshita 1:354deb9168c0 123
hirokimineshita 0:f2770227e24c 124 int l3gd20::write_16(uint8_t reg,uint16_t data){
hirokimineshita 0:f2770227e24c 125 int err;
hirokimineshita 0:f2770227e24c 126 uint8_t d1,d2;
hirokimineshita 0:f2770227e24c 127 d2=data&0xFF;
hirokimineshita 0:f2770227e24c 128 d1=data>>8;
hirokimineshita 0:f2770227e24c 129 reg=reg|WRITE;
hirokimineshita 0:f2770227e24c 130 l3gcs=0;
hirokimineshita 0:f2770227e24c 131 l3gdev.write(reg);
hirokimineshita 0:f2770227e24c 132 l3gdev.write(d1);
hirokimineshita 0:f2770227e24c 133 l3gdev.write(d2);
hirokimineshita 0:f2770227e24c 134 l3gcs=1;
hirokimineshita 0:f2770227e24c 135 err=l3gd20::read_16(reg);
hirokimineshita 0:f2770227e24c 136 if(err==data){
hirokimineshita 0:f2770227e24c 137 err=0;
hirokimineshita 0:f2770227e24c 138 }else{
hirokimineshita 0:f2770227e24c 139 err=1;
hirokimineshita 0:f2770227e24c 140 }
hirokimineshita 0:f2770227e24c 141 return err;
hirokimineshita 0:f2770227e24c 142 }