Hi All!
I'm having trouble achieving I2C communication with Sparkfun's MPR121 I2C capacitive touch sensor breakout board.
I've used the breakout board (and code) many times before with the Arduino, but for some reason I can't get it to work with the MSP430G2553 and Energia.
I'm using an MPR121 library found at http://bildr.org/201...mpr121_arduino/ to help with register configuration.
My code is download from MPR121library.
I'm trying to print the output from the touch sensor to the serial monitor and same thing is showing up,even i haven't touch it.After that nothing more can show up ,no matter i touch or not.
THIS IS MY MONITOR PRHINT EVERTIME
pi touched
ched
pin 7 was just touched
pin 8 was just touched
pin 9 was just touched
pin 10 was just touched
pin 11 was just touched
ched
pin 7 was just touched
pin 8 was just touched
pin 9 was just touched
pin 10 was just touched
pin 11 was just touched
pin 0 was just touched
pin 1 was just touched
pin 2 was just touched
pin 3 was just touched
pin 4 was just touched
pin 5 was just touched
pin 6 was just touched
pin 7 was just touched
pin 8 was just touched
pin 9 was just touched
pin 10 was just touched
pin 11 was just touched
THIS IS MY CODE
#include "mpr121.h"
#include <Wire.h>
int irqpin = 2; // Digital 2
boolean touchStates[12]; //to keep track of the previous touch states
void setup(){
pinMode(irqpin, INPUT);
digitalWrite(irqpin, HIGH); //enable pullup resistor
Serial.begin(9600);
Wire.begin();
mpr121_setup();
}
void loop(){
readTouchInputs();
}
void readTouchInputs(){
if(!checkInterrupt()){
//read the touch state from the MPR121
Wire.requestFrom(0x5A,2); //0x5C or 0x5A
byte LSB = Wire.read();
byte MSB = Wire.read();
uint16_t touched = ((MSB << 8) | LSB); //16bits that make up the touch states
for (int i=0; i < 12; i++){ // Check what electrodes were pressed
if(touched & (1<<i)){
if(touchStates == 0){
- //pin i was just touched*
- Serial.print("pin ");*
- Serial.print(i);*
- Serial.println(" was just touched");*
_ }else if(touchStates == 1){_
* //pin i is still being touched*
* } *
_ touchStates = 1;
}else{
if(touchStates == 1){
* Serial.print("pin ");
Serial.print(i);
Serial.println(" is no longer being touched");*_
* //pin i is no longer being touched*
* }*
_ touchStates = 0;
* }*_
* }*
* }*
}
void mpr121_setup(void){
* set_register(0x5A, ELE_CFG, 0x00);*
* // Section A - Controls filtering when data is > baseline.*
* set_register(0x5A, MHD_R, 0x01);
set_register(0x5A, NHD_R, 0x01);
set_register(0x5A, NCL_R, 0x00);
set_register(0x5A, FDL_R, 0x00);
_ // Section B - Controls filtering when data is < baseline._
set_register(0x5A, MHD_F, 0x01);
set_register(0x5A, NHD_F, 0x01);
set_register(0x5A, NCL_F, 0xFF);
set_register(0x5A, FDL_F, 0x02);*
* // Section C - Sets touch and release thresholds for each electrode*
* set_register(0x5A, ELE0_T, TOU_THRESH);
set_register(0x5A, ELE0_R, REL_THRESH);*
* set_register(0x5A, ELE1_T, TOU_THRESH);
set_register(0x5A, ELE1_R, REL_THRESH);*
* set_register(0x5A, ELE2_T, TOU_THRESH);
set_register(0x5A, ELE2_R, REL_THRESH);*
* set_register(0x5A, ELE3_T, TOU_THRESH);
set_register(0x5A, ELE3_R, REL_THRESH);*
* set_register(0x5A, ELE4_T, TOU_THRESH);
set_register(0x5A, ELE4_R, REL_THRESH);*
* set_register(0x5A, ELE5_T, TOU_THRESH);
set_register(0x5A, ELE5_R, REL_THRESH);*
* set_register(0x5A, ELE6_T, TOU_THRESH);
set_register(0x5A, ELE6_R, REL_THRESH);*
* set_register(0x5A, ELE7_T, TOU_THRESH);
set_register(0x5A, ELE7_R, REL_THRESH);*
* set_register(0x5A, ELE8_T, TOU_THRESH);
set_register(0x5A, ELE8_R, REL_THRESH);*
* set_register(0x5A, ELE9_T, TOU_THRESH);
set_register(0x5A, ELE9_R, REL_THRESH);*
* set_register(0x5A, ELE10_T, TOU_THRESH);
set_register(0x5A, ELE10_R, REL_THRESH);*
* set_register(0x5A, ELE11_T, TOU_THRESH);
set_register(0x5A, ELE11_R, REL_THRESH);*
* // Section D*
* // Set the Filter Configuration*
* // Set ESI2*
* set_register(0x5A, FIL_CFG, 0x04);*
* // Section E*
* // Electrode Configuration*
* // Set ELE_CFG to 0x00 to return to standby mode*
* set_register(0x5A, ELE_CFG, 0x0C); // Enables all 12 Electrodes*
* // Section F*
* // Enable Auto Config and auto Reconfig*
/set_register(0x5A, ATO_CFG0, 0x0B);
set_register(0x5A, ATO_CFGU, 0xC9); // USL = (Vdd-0.7)/vdd256 = 0xC9 @3.3V set_register(0x5A, ATO_CFGL, 0x82); // LSL = 0.65USL = 0x82 @3.3V
set_register(0x5A, ATO_CFGT, 0xB5);/ // Target = 0.9*USL = 0xB5 @3.3V
* set_register(0x5A, ELE_CFG, 0x0C);*
}
boolean checkInterrupt(void){
* return digitalRead(irqpin);*
}
void set_register(int address, unsigned char r, unsigned char v){
* Wire.beginTransmission(address);*
* Wire.write(r);*
* Wire.write(v);*
* Wire.endTransmission();*
}
i know maybe this is a simple question. Sry for i'm a Arduino beginner.