Skip to content

Possible UNO R4 compatability issue #48

@caternuson

Description

@caternuson

More info in this forum thread:
https://forums.adafruit.com/viewtopic.php?t=220309

Test sketch to use for demonstrating the issue:

/*********************************************************
This is a library for the MPR121 12-channel Capacitive touch sensor

Designed specifically to work with the MPR121 Breakout in the Adafruit shop 
  ----> https://www.adafruit.com/products/

These sensors use I2C communicate, at least 2 pins are required 
to interface

Adafruit invests time and resources providing this open source code, 
please support Adafruit and open-source hardware by purchasing 
products from Adafruit!

Written by Limor Fried/Ladyada for Adafruit Industries.  
BSD license, all text above must be included in any redistribution
**********************************************************/

#include <Wire.h>
#include "Adafruit_MPR121.h"

#ifndef _BV
#define _BV(bit) (1 << (bit)) 
#endif

// You can have up to 4 on one i2c bus but one is enough for testing!
Adafruit_MPR121 cap = Adafruit_MPR121();

// Keeps track of the last pins touched
// so we know when buttons are 'released'
uint16_t lasttouched = 0;
uint16_t currtouched = 0;

void setup() {
  Serial.begin(9600);

  while (!Serial) { // needed to keep leonardo/micro from starting too fast!
    delay(10);
  }
  
  Serial.println("Adafruit MPR121 Capacitive Touch sensor test"); 
  
  // Default address is 0x5A, if tied to 3.3V its 0x5B
  // If tied to SDA its 0x5C and if SCL then 0x5D
  if (!cap.begin(0x5A)) {
    Serial.println("MPR121 not found, check wiring?");
    while (1);
  }
  Serial.println("MPR121 found!");

  // adding the next line per this forum thread: https://forums.adafruit.com/viewtopic.php?t=220309
  cap.setAutoconfig(true);
}

void loop() {
  // Get the currently touched pads
  currtouched = cap.touched();
  
  for (uint8_t i=0; i<12; i++) {
    // it if *is* touched and *wasnt* touched before, alert!
    if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) {
      Serial.print(i); Serial.println(" touched");
    }
    // if it *was* touched and now *isnt*, alert!
    if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) {
      Serial.print(i); Serial.println(" released");
    }
  }

  // reset our state
  lasttouched = currtouched;

  // comment out this line for detailed data from the sensor!
  // return;
  
  // debugging info, what
  Serial.print("\t\t\t\t\t\t\t\t\t\t\t\t\t 0x"); Serial.println(cap.touched(), HEX);
  Serial.print("Filt: ");
  for (uint8_t i=0; i<12; i++) {
    Serial.print(cap.filteredData(i)); Serial.print("\t");
  }
  Serial.println();
  Serial.print("Base: ");
  for (uint8_t i=0; i<12; i++) {
    Serial.print(cap.baselineData(i)); Serial.print("\t");
  }
  Serial.println();
  
  // put a delay so it isn't overwhelming
  delay(100);
}

Different setups seem to experience the issue more readily than others. Commenting out the delay(100); in the loop() also seems to make the issue show up faster.

The issue appears as saturated values in the reported touch values:

Filt: 696	538	356	274	712	715	716	716	720	720	722	713	
Base: 704	700	716	708	712	712	716	716	716	716	720	712	
0 touched
4 released
													 0xF
Filt: 591	437	296	256	713	716	717	717	720	719	722	714	
Base: 704	700	716	708	712	712	716	716	716	716	720	712	
4 touched
5 touched
6 touched
7 touched
8 touched
9 touched
10 touched
11 touched
													 0xFFF
Filt: 65535	65535	65535	65535	65535	65535	65535	65535	65535	65535	65535	65535	
Base: 1020	1020	1020	1020	1020	1020	1020	1020	1020	1020	1020	1020	
													 0xFFF
Filt: 65535	65535	65535	65535	65535	65535	65535	65535	65535	65535	65535	65535	
Base: 1020	1020	1020	1020	1020	1020	1020	1020	1020	1020	1020	1020	
													 0xFFF
Filt: 65535	65535	65535	65535	65535	65535	65535	65535	65535	65535	65535	65535	
Base: 1020	1020	1020	1020	1020	1020	1020	1020	1020	1020	1020	1020

Additionally - the MPR121 seems to be stuck at this point. The LED attached to the INT pin becomes stuck on. And the MPR121 is generally unresponsive.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions