Yuki Kimura / AS5601
Committer:
kimuraYUKI
Date:
Wed Nov 27 15:10:17 2019 +0000
Revision:
0:f1ca084bfe47
Child:
1:81d37343e965
first commit

Who changed what in which revision?

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