Jim Cooke
/
Hat_Board_v5_1
Slight Mod
Fork of Hat_Board_v5 by
main.cpp@0:34bad5aca893, 2014-03-20 (annotated)
- Committer:
- drnow
- Date:
- Thu Mar 20 02:50:57 2014 +0000
- Revision:
- 0:34bad5aca893
- Child:
- 1:2efeed26d93a
works with x
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
drnow | 0:34bad5aca893 | 1 | //Hat Board Test by James Cooke 3/18/2014 |
drnow | 0:34bad5aca893 | 2 | //Goal of program: read and output data from LIS3DH accelerometer |
drnow | 0:34bad5aca893 | 3 | //Started with Si_4088_PC working program: able to get data from Si1142 on new hat board |
drnow | 0:34bad5aca893 | 4 | |
drnow | 0:34bad5aca893 | 5 | // Check PS_ADC_COUNTER. It's probably wrong. |
drnow | 0:34bad5aca893 | 6 | |
drnow | 0:34bad5aca893 | 7 | #include "mbed.h" |
drnow | 0:34bad5aca893 | 8 | #include "SI_LIS.h" |
drnow | 0:34bad5aca893 | 9 | #include <time.h> |
drnow | 0:34bad5aca893 | 10 | |
drnow | 0:34bad5aca893 | 11 | DigitalOut myled3(LED3); |
drnow | 0:34bad5aca893 | 12 | DigitalOut myled4(LED4); |
drnow | 0:34bad5aca893 | 13 | Serial pc(USBTX,USBRX); |
drnow | 0:34bad5aca893 | 14 | DigitalIn int_pin(p8); |
drnow | 0:34bad5aca893 | 15 | Timer t; |
drnow | 0:34bad5aca893 | 16 | |
drnow | 0:34bad5aca893 | 17 | int reading_IR,reading_660,LSB,MSB; |
drnow | 0:34bad5aca893 | 18 | char rx_data[4]; |
drnow | 0:34bad5aca893 | 19 | char accel_2_data[2]; |
drnow | 0:34bad5aca893 | 20 | char temp_val; |
drnow | 0:34bad5aca893 | 21 | char accel_data; // for getting 8-bit value from accelerometer |
drnow | 0:34bad5aca893 | 22 | short int temp_dataX; // short int: 16 bits. This allows easy negative results |
drnow | 0:34bad5aca893 | 23 | short int temp_dataY; // short int: 16 bits. This allows easy negative results |
drnow | 0:34bad5aca893 | 24 | short int temp_dataZ; // short int: 16 bits. This allows easy negative results |
drnow | 0:34bad5aca893 | 25 | |
drnow | 0:34bad5aca893 | 26 | /* From AccelWaveForms |
drnow | 0:34bad5aca893 | 27 | In Loop: |
drnow | 0:34bad5aca893 | 28 | Get_Accel_Register(0x2A, LIS_Addr); //Y Data Low |
drnow | 0:34bad5aca893 | 29 | LSB = Accel_Data; |
drnow | 0:34bad5aca893 | 30 | Get_Accel_Register(0x2B, LIS_Addr); //Y Data High |
drnow | 0:34bad5aca893 | 31 | MSB = Accel_Data; |
drnow | 0:34bad5aca893 | 32 | temp_dataY = (MSB * 256) + LSB; |
drnow | 0:34bad5aca893 | 33 | |
drnow | 0:34bad5aca893 | 34 | Get_Accel_Register(0x2C, LIS_Addr); //Z Data Low |
drnow | 0:34bad5aca893 | 35 | LSB = Accel_Data; |
drnow | 0:34bad5aca893 | 36 | Get_Accel_Register(0x2D, LIS_Addr); //Z Data High |
drnow | 0:34bad5aca893 | 37 | MSB = Accel_Data; |
drnow | 0:34bad5aca893 | 38 | temp_dataZ = (MSB * 256) + LSB; |
drnow | 0:34bad5aca893 | 39 | */ |
drnow | 0:34bad5aca893 | 40 | |
drnow | 0:34bad5aca893 | 41 | int main() |
drnow | 0:34bad5aca893 | 42 | { |
drnow | 0:34bad5aca893 | 43 | unsigned char LowB_IR,HighB_IR,LowB_660,HighB_660; |
drnow | 0:34bad5aca893 | 44 | char Reg_Val = 0x00; |
drnow | 0:34bad5aca893 | 45 | char Reg_Num; |
drnow | 0:34bad5aca893 | 46 | |
drnow | 0:34bad5aca893 | 47 | myled4 = 0; // ODD: if this line not included, there is a compiler "internal error" |
drnow | 0:34bad5aca893 | 48 | pc.baud(230400); |
drnow | 0:34bad5aca893 | 49 | i2c_start(); //sets i2c bus at 400,000. Also set by photodiode setup/reset |
drnow | 0:34bad5aca893 | 50 | |
drnow | 0:34bad5aca893 | 51 | Reg_Num = 0x20; // CTRL_REG1 |
drnow | 0:34bad5aca893 | 52 | Reg_Val = 0x57; // Nib 1 of 0101: Normal mode, 100 Hz; Nib 2 of 0111: Normal mode, XYZ enabled |
drnow | 0:34bad5aca893 | 53 | Init_Accel (Reg_Num, Reg_Val); |
drnow | 0:34bad5aca893 | 54 | |
drnow | 0:34bad5aca893 | 55 | wait(0.050); // Delay needed, or 2nd write doesn't work |
drnow | 0:34bad5aca893 | 56 | |
drnow | 0:34bad5aca893 | 57 | Reg_Num = 0x21; // CTRL_REG2 |
drnow | 0:34bad5aca893 | 58 | Reg_Val = 0xA0; // 7-6 10: Normal filter mode; 5-4 10: Cut off freq; 3-0 0000: bypass interrupts |
drnow | 0:34bad5aca893 | 59 | // High-pass filter bits 5-4: @ 100 Hz: 00 - 2Hz 01 - 1Hz 10- 0.5Hz 11- 0.2Hz |
drnow | 0:34bad5aca893 | 60 | Init_Accel (Reg_Num, Reg_Val); |
drnow | 0:34bad5aca893 | 61 | wait(0.050); // Delay needed? |
drnow | 0:34bad5aca893 | 62 | |
drnow | 0:34bad5aca893 | 63 | pc.printf ("Hello\n"); |
drnow | 0:34bad5aca893 | 64 | |
drnow | 0:34bad5aca893 | 65 | Get_Accel_Register (0x0F); |
drnow | 0:34bad5aca893 | 66 | pc.printf ("I am: %x",accel_data); //in hex |
drnow | 0:34bad5aca893 | 67 | |
drnow | 0:34bad5aca893 | 68 | while (1) { |
drnow | 0:34bad5aca893 | 69 | Get_Accel_Register(0x28); //X Data Low |
drnow | 0:34bad5aca893 | 70 | LSB = accel_data; |
drnow | 0:34bad5aca893 | 71 | Get_Accel_Register(0x29); //X Data High |
drnow | 0:34bad5aca893 | 72 | MSB = accel_data; |
drnow | 0:34bad5aca893 | 73 | temp_dataX = (MSB * 256) + LSB; |
drnow | 0:34bad5aca893 | 74 | pc.printf ("%d ",temp_dataX); |
drnow | 0:34bad5aca893 | 75 | |
drnow | 0:34bad5aca893 | 76 | Get_Accel_Register_2 (0x28); |
drnow | 0:34bad5aca893 | 77 | LSB = accel_2_data[0]; |
drnow | 0:34bad5aca893 | 78 | MSB = accel_2_data[1]; |
drnow | 0:34bad5aca893 | 79 | temp_dataX = (MSB * 256) + LSB; |
drnow | 0:34bad5aca893 | 80 | pc.printf ("%d\n",temp_dataX); |
drnow | 0:34bad5aca893 | 81 | |
drnow | 0:34bad5aca893 | 82 | /* |
drnow | 0:34bad5aca893 | 83 | void Get_Accel_Register_2 (char Reg_Num) // Read 2 registers |
drnow | 0:34bad5aca893 | 84 | { |
drnow | 0:34bad5aca893 | 85 | char reg; |
drnow | 0:34bad5aca893 | 86 | reg = Reg_Num; |
drnow | 0:34bad5aca893 | 87 | i2c.write((LIS_Addr << 1) & 0xFE, ®, 1); |
drnow | 0:34bad5aca893 | 88 | i2c.read((LIS_Addr << 1) | 0x01, accel_2_data, 2); |
drnow | 0:34bad5aca893 | 89 | } |
drnow | 0:34bad5aca893 | 90 | */ |
drnow | 0:34bad5aca893 | 91 | wait(0.02); |
drnow | 0:34bad5aca893 | 92 | } |
drnow | 0:34bad5aca893 | 93 | /* |
drnow | 0:34bad5aca893 | 94 | restart(); |
drnow | 0:34bad5aca893 | 95 | wait_ms(30); |
drnow | 0:34bad5aca893 | 96 | command (PS_AUTO); //start measuring |
drnow | 0:34bad5aca893 | 97 | wait (0.5); |
drnow | 0:34bad5aca893 | 98 | |
drnow | 0:34bad5aca893 | 99 | while(1) { |
drnow | 0:34bad5aca893 | 100 | if(!int_pin) { |
drnow | 0:34bad5aca893 | 101 | |
drnow | 0:34bad5aca893 | 102 | myled3 = !myled3; // LED on mbed, to follow along |
drnow | 0:34bad5aca893 | 103 | |
drnow | 0:34bad5aca893 | 104 | // t.reset(); |
drnow | 0:34bad5aca893 | 105 | // t.start(); |
drnow | 0:34bad5aca893 | 106 | write_reg(IRQ_STATUS,0x04); // clear the interrupt. |
drnow | 0:34bad5aca893 | 107 | |
drnow | 0:34bad5aca893 | 108 | read_reg2(PS1_DATA0); |
drnow | 0:34bad5aca893 | 109 | LowB_IR = rx_data[0]; |
drnow | 0:34bad5aca893 | 110 | HighB_IR = rx_data[1]; |
drnow | 0:34bad5aca893 | 111 | |
drnow | 0:34bad5aca893 | 112 | LowB_660 = rx_data[2]; |
drnow | 0:34bad5aca893 | 113 | HighB_660 = rx_data[3]; |
drnow | 0:34bad5aca893 | 114 | |
drnow | 0:34bad5aca893 | 115 | reading_IR = (HighB_IR * 256) + LowB_IR; |
drnow | 0:34bad5aca893 | 116 | reading_660 = (HighB_660 * 256) + LowB_660; |
drnow | 0:34bad5aca893 | 117 | |
drnow | 0:34bad5aca893 | 118 | pc.printf ("%d,%d\n", reading_IR,reading_660); |
drnow | 0:34bad5aca893 | 119 | } |
drnow | 0:34bad5aca893 | 120 | } |
drnow | 0:34bad5aca893 | 121 | */ |
drnow | 0:34bad5aca893 | 122 | |
drnow | 0:34bad5aca893 | 123 | } |
drnow | 0:34bad5aca893 | 124 | /* |
drnow | 0:34bad5aca893 | 125 | Notes on RJ-45: Pin 1: Vcc Pin 2: GND Pin 3: SDA > 9 on 4088 |
drnow | 0:34bad5aca893 | 126 | Pin 4: SCL >> 10 on 4088 Pin 6: INT > 8 on 4088 |
drnow | 0:34bad5aca893 | 127 | |
drnow | 0:34bad5aca893 | 128 | Bluetooth: Tx on 4088: Pin 37 >> RX Rx on 4088: Pin 31 >> TX |
drnow | 0:34bad5aca893 | 129 | PC COMM port on Square board: 12 |
drnow | 0:34bad5aca893 | 130 | |
drnow | 0:34bad5aca893 | 131 | */ |