Files
IronOS/workspace/ts100/src/MMA8652FC.c
Ben V. Brown 0b26e669af Merge Dev into mainline (#1)
* Removing USB
Need to refine the drive to the iron tip

* Update README.md

* * Rewrite all code from scratch
* Only kept settings
* New font
* New PID
* New Menus
* Use Hardware I2C
* Faster System
* Better Heating Time
* No USB
* Full Menu System
2016-09-30 00:27:55 +10:00

44 lines
1.4 KiB
C

/*
* MMA8652FC.*
* Files for the built in accelerometer from NXP.
* This sets the unit up in motion detection mode with an interrupt on movement
* This interrupt is fed to PB5 which catches it via EXTI5
*
* http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8652FC.pdf
*
* EXTI Motion config setup values lifted from AN4070from NXP
*
* Ben V. Brown - <ralim@ralimtek.com>
*/
#include <stdio.h>
#include "Bios.h"
#include "MMA8652FC.h"
#include "I2C.h"
void I2C_RegisterWrite(uint8_t reg, uint8_t data) {
u8 tx_data[2];
tx_data[0] = reg;
tx_data[1] = data;
I2C_PageWrite(tx_data, 2, DEVICE_ADDR);
}
uint8_t I2C_RegisterRead(uint8_t reg) {
u8 tx_data[3];
tx_data[0] = reg;
I2C_PageRead(tx_data, 1, DEVICE_ADDR, reg);
return tx_data[0];
}
void StartUp_Accelerometer(void) {
I2C_RegisterWrite(CTRL_REG2, 0); //Normal mode
I2C_RegisterWrite( CTRL_REG2, 0x40); // Reset all registers to POR values
delayMs(2); // ~1ms delay
I2C_RegisterWrite(FF_MT_CFG_REG, 0x78); // Enable motion detection for X and Y axis, latch enabled
I2C_RegisterWrite(FF_MT_THS_REG, 0x0F); // Set threshold
I2C_RegisterWrite(FF_MT_COUNT_REG, 0x01); // Set debounce to 100ms
I2C_RegisterWrite( CTRL_REG4, 0x04); // Enable motion interrupt
I2C_RegisterWrite( CTRL_REG5, 0x04);// Route motion interrupts to INT1 ->PB5 ->EXTI
I2C_RegisterWrite( CTRL_REG1, 0x19); // ODR=100 Hz, Active mode
}