From bf6233669d8193970ec75225a2ee7e81133fa616 Mon Sep 17 00:00:00 2001 From: Niclas Finne Date: Wed, 30 May 2012 20:31:22 +0200 Subject: [PATCH] Added base class for accelerometers --- se/sics/mspsim/chip/Accelerometer.java | 82 ++++++++++++++++++++++++++ se/sics/mspsim/chip/MMA7260QT.java | 58 ++++++++---------- 2 files changed, 105 insertions(+), 35 deletions(-) create mode 100644 se/sics/mspsim/chip/Accelerometer.java diff --git a/se/sics/mspsim/chip/Accelerometer.java b/se/sics/mspsim/chip/Accelerometer.java new file mode 100644 index 0000000..c567448 --- /dev/null +++ b/se/sics/mspsim/chip/Accelerometer.java @@ -0,0 +1,82 @@ +/** + * Copyright (c) 2012, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of MSPSim. + * + */ +package se.sics.mspsim.chip; + +import se.sics.mspsim.core.Chip; +import se.sics.mspsim.core.MSP430Core; + +/** + * @author Niclas Finne + * + */ +public abstract class Accelerometer extends Chip { + + protected double x, y, z; + + protected Accelerometer(String id, MSP430Core cpu) { + super(id, "Accelerometer", cpu); + } + + protected Accelerometer(String id, String name, MSP430Core cpu) { + super(id, name, cpu); + } + + public void setX(double x) { + this.x = x; + } + + public double getX() { + return x; + } + + public void setY(double y) { + this.y = y; + } + + public double getY() { + return y; + } + + public void setZ(double z) { + this.z = z; + } + + public double getZ() { + return z; + } + + public void setPosition(double x, double y, double z) { + setX(x); + setY(y); + setZ(z); + } + +} diff --git a/se/sics/mspsim/chip/MMA7260QT.java b/se/sics/mspsim/chip/MMA7260QT.java index 063a607..cc0e4b3 100644 --- a/se/sics/mspsim/chip/MMA7260QT.java +++ b/se/sics/mspsim/chip/MMA7260QT.java @@ -39,13 +39,12 @@ */ package se.sics.mspsim.chip; -import se.sics.mspsim.core.Chip; import se.sics.mspsim.core.MSP430Core; /** * MMA7260QT - 1.5g-6g Three Axis Low-g Micromachined Accelerometer */ -public class MMA7260QT extends Chip { +public class MMA7260QT extends Accelerometer { public static final int MODE_SLEEP = 0x00; public static final int MODE_ACTIVE = 0x01; @@ -56,52 +55,36 @@ public class MMA7260QT extends Chip { 1.5f, 2, 4, 6 }; - private int x = 4095, y = 2715, z = 2715; private int gSelect = 0; public MMA7260QT(MSP430Core cpu) { - super("MMA7260QT", "Accelerometer", cpu); + super("MMA7260QT", cpu); setModeNames(MODE_NAMES); setMode(MODE_SLEEP); + + // Set initial state: x=4094, y=2715, z=2715 + setPosition(1.0, -0.0156, -0.0156); + } + + private int convertToADC(double x) { + if (x > 1.0) { + x = 1.0; + } else if (x < -1.0) { + x = -1.0; + } + return 2047 + (int) (x * 2047); } public int getADCX() { - int v = getX(); - return v > 4095 ? 4095 : v; + return convertToADC(getX()); } public int getADCY() { - int v = getY(); - return v > 4095 ? 4095 : v; + return convertToADC(getY()); } public int getADCZ() { - int v = getZ(); - return v > 4095 ? 4095 : v; - } - - public void setX(int x) { - this.x = x; - } - - public int getX() { - return x; - } - - public void setY(int y) { - this.y = y; - } - - public int getY() { - return y; - } - - public void setZ(int z) { - this.z = z; - } - - public int getZ() { - return z; + return convertToADC(getZ()); } public int getSensitivity() { @@ -116,21 +99,26 @@ public class MMA7260QT extends Chip { this.gSelect = gSelect & 0x03; } + @Override public void setMode(int mode) { super.setMode(mode); } + @Override public int getModeMax() { return MODE_NAMES.length; } + @Override public String info() { return "Mode: " + getModeName(getMode()) + " Sensitivity: " + getSensitivityAsString() - + " [x=" + getADCX() + ",y=" + getADCY() + ",z=" + getADCZ() + ']'; + + String.format(" [x=%.2f (%d),y=%.2f (%d),z=%.2f (%d)]", + getX(), getADCX(), getY(), getADCY(), getZ(), getADCZ()); } /* currently just return the gSelect as configuration */ + @Override public int getConfiguration(int parameter) { return gSelect; }