たけし みわ
/
y_KXP84_I2C
main.cpp@0:bc64cc811377, 2012-06-17 (annotated)
- Committer:
- esmiwa
- Date:
- Sun Jun 17 01:16:54 2012 +0000
- Revision:
- 0:bc64cc811377
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
esmiwa | 0:bc64cc811377 | 1 | #include "mbed.h" |
esmiwa | 0:bc64cc811377 | 2 | #include "TextLCD.h" |
esmiwa | 0:bc64cc811377 | 3 | |
esmiwa | 0:bc64cc811377 | 4 | // Accelerometer KXP-84 I2C Mode Register |
esmiwa | 0:bc64cc811377 | 5 | //#define X_H 0x00 |
esmiwa | 0:bc64cc811377 | 6 | //#define X_L 0x01 |
esmiwa | 0:bc64cc811377 | 7 | |
esmiwa | 0:bc64cc811377 | 8 | // slave adress 0011 000X X: 0 send 1 receve |
esmiwa | 0:bc64cc811377 | 9 | |
esmiwa | 0:bc64cc811377 | 10 | DigitalOut reset(p11); |
esmiwa | 0:bc64cc811377 | 11 | DigitalIn ff(p12); |
esmiwa | 0:bc64cc811377 | 12 | DigitalIn mot(p13); |
esmiwa | 0:bc64cc811377 | 13 | DigitalOut sign(LED1); |
esmiwa | 0:bc64cc811377 | 14 | |
esmiwa | 0:bc64cc811377 | 15 | TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, e, d4-d7 |
esmiwa | 0:bc64cc811377 | 16 | |
esmiwa | 0:bc64cc811377 | 17 | I2C i2c(p9, p10); // sda, scl |
esmiwa | 0:bc64cc811377 | 18 | |
esmiwa | 0:bc64cc811377 | 19 | |
esmiwa | 0:bc64cc811377 | 20 | int main() { |
esmiwa | 0:bc64cc811377 | 21 | char cmd[1]; |
esmiwa | 0:bc64cc811377 | 22 | char data[6]; |
esmiwa | 0:bc64cc811377 | 23 | int x,y,z; |
esmiwa | 0:bc64cc811377 | 24 | int dx,dy,dz; |
esmiwa | 0:bc64cc811377 | 25 | //reset=0; |
esmiwa | 0:bc64cc811377 | 26 | i2c.frequency(400000); |
esmiwa | 0:bc64cc811377 | 27 | //CTRL_REGB |
esmiwa | 0:bc64cc811377 | 28 | i2c.start(); |
esmiwa | 0:bc64cc811377 | 29 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 30 | i2c.write(0x30); |
esmiwa | 0:bc64cc811377 | 31 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 32 | *cmd=0x06; |
esmiwa | 0:bc64cc811377 | 33 | i2c.write(0x0B,cmd,1); |
esmiwa | 0:bc64cc811377 | 34 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 35 | i2c.stop(); |
esmiwa | 0:bc64cc811377 | 36 | //CTRL_REGC |
esmiwa | 0:bc64cc811377 | 37 | i2c.start(); |
esmiwa | 0:bc64cc811377 | 38 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 39 | i2c.write(0x30); |
esmiwa | 0:bc64cc811377 | 40 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 41 | *cmd=0x00; |
esmiwa | 0:bc64cc811377 | 42 | i2c.write(0x0A,cmd,1); |
esmiwa | 0:bc64cc811377 | 43 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 44 | i2c.stop(); |
esmiwa | 0:bc64cc811377 | 45 | //FF_INT |
esmiwa | 0:bc64cc811377 | 46 | i2c.start(); |
esmiwa | 0:bc64cc811377 | 47 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 48 | i2c.write(0x30); |
esmiwa | 0:bc64cc811377 | 49 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 50 | *cmd=0x14; |
esmiwa | 0:bc64cc811377 | 51 | i2c.write(0x06,cmd,1); |
esmiwa | 0:bc64cc811377 | 52 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 53 | i2c.stop(); |
esmiwa | 0:bc64cc811377 | 54 | //FF_DELAY |
esmiwa | 0:bc64cc811377 | 55 | i2c.start(); |
esmiwa | 0:bc64cc811377 | 56 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 57 | i2c.write(0x30); |
esmiwa | 0:bc64cc811377 | 58 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 59 | *cmd=0x14; |
esmiwa | 0:bc64cc811377 | 60 | i2c.write(0x07,cmd,1); |
esmiwa | 0:bc64cc811377 | 61 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 62 | i2c.stop(); |
esmiwa | 0:bc64cc811377 | 63 | //MOT_INT |
esmiwa | 0:bc64cc811377 | 64 | i2c.start(); |
esmiwa | 0:bc64cc811377 | 65 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 66 | i2c.write(0x30); |
esmiwa | 0:bc64cc811377 | 67 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 68 | *cmd=0x4D; |
esmiwa | 0:bc64cc811377 | 69 | i2c.write(0x08,cmd,1); |
esmiwa | 0:bc64cc811377 | 70 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 71 | i2c.stop(); |
esmiwa | 0:bc64cc811377 | 72 | //MOT_DELAYC |
esmiwa | 0:bc64cc811377 | 73 | i2c.start(); |
esmiwa | 0:bc64cc811377 | 74 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 75 | i2c.write(0x30); |
esmiwa | 0:bc64cc811377 | 76 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 77 | *cmd=0x14; |
esmiwa | 0:bc64cc811377 | 78 | i2c.write(0x09,cmd,1); |
esmiwa | 0:bc64cc811377 | 79 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 80 | i2c.stop(); |
esmiwa | 0:bc64cc811377 | 81 | |
esmiwa | 0:bc64cc811377 | 82 | //data_OUT |
esmiwa | 0:bc64cc811377 | 83 | lcd.locate(0,0);lcd.printf(" x y z"); |
esmiwa | 0:bc64cc811377 | 84 | while(1){ |
esmiwa | 0:bc64cc811377 | 85 | i2c.start(); |
esmiwa | 0:bc64cc811377 | 86 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 87 | i2c.write(0x30); |
esmiwa | 0:bc64cc811377 | 88 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 89 | i2c.write(0x00); |
esmiwa | 0:bc64cc811377 | 90 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 91 | i2c.read(0x30,data,6); |
esmiwa | 0:bc64cc811377 | 92 | wait_us(1); |
esmiwa | 0:bc64cc811377 | 93 | i2c.stop(); |
esmiwa | 0:bc64cc811377 | 94 | |
esmiwa | 0:bc64cc811377 | 95 | dx=data[0]<<4 | data[1]>>4; |
esmiwa | 0:bc64cc811377 | 96 | dy=data[2]<<4 | data[3]>>4; |
esmiwa | 0:bc64cc811377 | 97 | dz=data[4]<<4 | data[5]>>4; |
esmiwa | 0:bc64cc811377 | 98 | |
esmiwa | 0:bc64cc811377 | 99 | if(dx>2048)x=dx-2048; |
esmiwa | 0:bc64cc811377 | 100 | else x=dx; |
esmiwa | 0:bc64cc811377 | 101 | if(dy>2048)y=dy-2048; |
esmiwa | 0:bc64cc811377 | 102 | else y=dy; |
esmiwa | 0:bc64cc811377 | 103 | if(dz>2048)z=dz-2048; |
esmiwa | 0:bc64cc811377 | 104 | else z=dz; |
esmiwa | 0:bc64cc811377 | 105 | |
esmiwa | 0:bc64cc811377 | 106 | lcd.locate(0,1);;lcd.printf("%5d%5d%5d",x,y,z); |
esmiwa | 0:bc64cc811377 | 107 | wait_ms(10); |
esmiwa | 0:bc64cc811377 | 108 | } |
esmiwa | 0:bc64cc811377 | 109 | } |