Jim Cooke
/
Hat_Board_v5_1
Slight Mod
Fork of Hat_Board_v5 by
Diff: main.cpp
- Revision:
- 0:34bad5aca893
- Child:
- 1:2efeed26d93a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Mar 20 02:50:57 2014 +0000 @@ -0,0 +1,131 @@ +//Hat Board Test by James Cooke 3/18/2014 +//Goal of program: read and output data from LIS3DH accelerometer +//Started with Si_4088_PC working program: able to get data from Si1142 on new hat board + +// Check PS_ADC_COUNTER. It's probably wrong. + +#include "mbed.h" +#include "SI_LIS.h" +#include <time.h> + +DigitalOut myled3(LED3); +DigitalOut myled4(LED4); +Serial pc(USBTX,USBRX); +DigitalIn int_pin(p8); +Timer t; + +int reading_IR,reading_660,LSB,MSB; +char rx_data[4]; +char accel_2_data[2]; +char temp_val; +char accel_data; // for getting 8-bit value from accelerometer +short int temp_dataX; // short int: 16 bits. This allows easy negative results +short int temp_dataY; // short int: 16 bits. This allows easy negative results +short int temp_dataZ; // short int: 16 bits. This allows easy negative results + +/* From AccelWaveForms +In Loop: + Get_Accel_Register(0x2A, LIS_Addr); //Y Data Low + LSB = Accel_Data; + Get_Accel_Register(0x2B, LIS_Addr); //Y Data High + MSB = Accel_Data; + temp_dataY = (MSB * 256) + LSB; + + Get_Accel_Register(0x2C, LIS_Addr); //Z Data Low + LSB = Accel_Data; + Get_Accel_Register(0x2D, LIS_Addr); //Z Data High + MSB = Accel_Data; + temp_dataZ = (MSB * 256) + LSB; +*/ + +int main() +{ + unsigned char LowB_IR,HighB_IR,LowB_660,HighB_660; + char Reg_Val = 0x00; + char Reg_Num; + + myled4 = 0; // ODD: if this line not included, there is a compiler "internal error" + pc.baud(230400); + i2c_start(); //sets i2c bus at 400,000. Also set by photodiode setup/reset + + Reg_Num = 0x20; // CTRL_REG1 + Reg_Val = 0x57; // Nib 1 of 0101: Normal mode, 100 Hz; Nib 2 of 0111: Normal mode, XYZ enabled + Init_Accel (Reg_Num, Reg_Val); + + wait(0.050); // Delay needed, or 2nd write doesn't work + + Reg_Num = 0x21; // CTRL_REG2 + Reg_Val = 0xA0; // 7-6 10: Normal filter mode; 5-4 10: Cut off freq; 3-0 0000: bypass interrupts + // High-pass filter bits 5-4: @ 100 Hz: 00 - 2Hz 01 - 1Hz 10- 0.5Hz 11- 0.2Hz + Init_Accel (Reg_Num, Reg_Val); + wait(0.050); // Delay needed? + + pc.printf ("Hello\n"); + + Get_Accel_Register (0x0F); + pc.printf ("I am: %x",accel_data); //in hex + + while (1) { + Get_Accel_Register(0x28); //X Data Low + LSB = accel_data; + Get_Accel_Register(0x29); //X Data High + MSB = accel_data; + temp_dataX = (MSB * 256) + LSB; + pc.printf ("%d ",temp_dataX); + + Get_Accel_Register_2 (0x28); + LSB = accel_2_data[0]; + MSB = accel_2_data[1]; + temp_dataX = (MSB * 256) + LSB; + pc.printf ("%d\n",temp_dataX); + +/* +void Get_Accel_Register_2 (char Reg_Num) // Read 2 registers +{ + char reg; + reg = Reg_Num; + i2c.write((LIS_Addr << 1) & 0xFE, ®, 1); + i2c.read((LIS_Addr << 1) | 0x01, accel_2_data, 2); +} +*/ + wait(0.02); + } + /* + restart(); + wait_ms(30); + command (PS_AUTO); //start measuring + wait (0.5); + + while(1) { + if(!int_pin) { + + myled3 = !myled3; // LED on mbed, to follow along + + // t.reset(); + // t.start(); + write_reg(IRQ_STATUS,0x04); // clear the interrupt. + + read_reg2(PS1_DATA0); + LowB_IR = rx_data[0]; + HighB_IR = rx_data[1]; + + LowB_660 = rx_data[2]; + HighB_660 = rx_data[3]; + + reading_IR = (HighB_IR * 256) + LowB_IR; + reading_660 = (HighB_660 * 256) + LowB_660; + + pc.printf ("%d,%d\n", reading_IR,reading_660); + } + } + */ + +} +/* +Notes on RJ-45: Pin 1: Vcc Pin 2: GND Pin 3: SDA > 9 on 4088 + Pin 4: SCL >> 10 on 4088 Pin 6: INT > 8 on 4088 + +Bluetooth: Tx on 4088: Pin 37 >> RX Rx on 4088: Pin 31 >> TX +PC COMM port on Square board: 12 + +*/ \ No newline at end of file