Yuki Kimura / AS5601
Committer:
kimuraYUKI
Date:
Wed Nov 27 16:42:34 2019 +0000
Revision:
1:81d37343e965
Parent:
0:f1ca084bfe47
Child:
2:35dd35dc4a4a
add void init()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kimuraYUKI 1:81d37343e965 1 #include "mbed.h"
kimuraYUKI 0:f1ca084bfe47 2 #include "AS5601.h"
kimuraYUKI 0:f1ca084bfe47 3
kimuraYUKI 0:f1ca084bfe47 4 AS5601::AS5601(PinName sda, PinName scl, int ppr, int offset_val) : i2c(sda,scl)
kimuraYUKI 0:f1ca084bfe47 5 {
kimuraYUKI 0:f1ca084bfe47 6 i2c.frequency(400000);
kimuraYUKI 0:f1ca084bfe47 7
kimuraYUKI 0:f1ca084bfe47 8 offset = offset_val;
kimuraYUKI 1:81d37343e965 9 }
kimuraYUKI 1:81d37343e965 10
kimuraYUKI 1:81d37343e965 11 void init(){
kimuraYUKI 0:f1ca084bfe47 12 //初期化
kimuraYUKI 0:f1ca084bfe47 13 //平均化数設定
kimuraYUKI 0:f1ca084bfe47 14 int conf1_set = read(CONF1_REG);
kimuraYUKI 0:f1ca084bfe47 15 conf1_set |= SF_16X;
kimuraYUKI 0:f1ca084bfe47 16 write(CONF1_REG ,conf1_set);
kimuraYUKI 0:f1ca084bfe47 17
kimuraYUKI 0:f1ca084bfe47 18 //PPR設定
kimuraYUKI 0:f1ca084bfe47 19 int abn_set = read(ABN);
kimuraYUKI 0:f1ca084bfe47 20 if(ppr < 0b1000)abn_set |= ppr;
kimuraYUKI 0:f1ca084bfe47 21 else abn_set |= PPR2048;
kimuraYUKI 0:f1ca084bfe47 22 write(ABN,abn_set);
kimuraYUKI 0:f1ca084bfe47 23 }
kimuraYUKI 0:f1ca084bfe47 24
kimuraYUKI 0:f1ca084bfe47 25
kimuraYUKI 0:f1ca084bfe47 26 int AS5601::getAngleAbsolute()
kimuraYUKI 0:f1ca084bfe47 27 {
kimuraYUKI 0:f1ca084bfe47 28 char cmd1=0x0E,cmd2=0x0F;
kimuraYUKI 0:f1ca084bfe47 29 int data=0;
kimuraYUKI 0:f1ca084bfe47 30
kimuraYUKI 0:f1ca084bfe47 31 data=this->read(cmd1) << 8;
kimuraYUKI 0:f1ca084bfe47 32 data=data+this->read(cmd2);
kimuraYUKI 0:f1ca084bfe47 33
kimuraYUKI 0:f1ca084bfe47 34 return data;
kimuraYUKI 0:f1ca084bfe47 35 }
kimuraYUKI 0:f1ca084bfe47 36
kimuraYUKI 0:f1ca084bfe47 37 float AS5601::getAngleDegrees()
kimuraYUKI 0:f1ca084bfe47 38 {
kimuraYUKI 0:f1ca084bfe47 39 return (((float)this->getAngleAbsolute()-offset) * 180) / 2048 ;
kimuraYUKI 0:f1ca084bfe47 40 }
kimuraYUKI 0:f1ca084bfe47 41
kimuraYUKI 0:f1ca084bfe47 42
kimuraYUKI 0:f1ca084bfe47 43 char AS5601::read(char address)
kimuraYUKI 0:f1ca084bfe47 44 {
kimuraYUKI 0:f1ca084bfe47 45 char retval;
kimuraYUKI 0:f1ca084bfe47 46 i2c.write(I2C_ADDR * 2, &address, 1);
kimuraYUKI 0:f1ca084bfe47 47 i2c.read(I2C_ADDR * 2, &retval, 1);
kimuraYUKI 0:f1ca084bfe47 48 return retval;
kimuraYUKI 0:f1ca084bfe47 49 }
kimuraYUKI 0:f1ca084bfe47 50
kimuraYUKI 0:f1ca084bfe47 51 int AS5601::write(char address, char data)
kimuraYUKI 0:f1ca084bfe47 52 {
kimuraYUKI 0:f1ca084bfe47 53 char buf[2];
kimuraYUKI 0:f1ca084bfe47 54 buf[0] = address;
kimuraYUKI 0:f1ca084bfe47 55 buf[1] = data;
kimuraYUKI 0:f1ca084bfe47 56 int val = i2c.write(I2C_ADDR * 2, buf, 2);
kimuraYUKI 0:f1ca084bfe47 57
kimuraYUKI 0:f1ca084bfe47 58 return val;
kimuraYUKI 0:f1ca084bfe47 59 }