このライブラリーはテストに作ったものです。近いうちに他の関数を加えた形でアップデートするつもりです。 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
l3gd20.cpp@0:f2770227e24c, 2015-01-28 (annotated)
- Committer:
- hirokimineshita
- Date:
- Wed Jan 28 05:16:22 2015 +0000
- Revision:
- 0:f2770227e24c
- Child:
- 1:354deb9168c0
L3GD20?????????????????????????????????
Who changed what in which revision?
User | Revision | Line number | New 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 | } |