What mpr121 library works with teensy 3.2?

Status
Not open for further replies.

jrdarrah

Well-known member
I'm trying to compile a sketch using the teensy i2c library and mpr121 and I get a bunch of errors. To eliminate any extraneous causes, I've netted down the sketch to this

#include <i2c_t3.h> //teency i2c library
#include "mpr121.h" //MPR121 register definitions
void setup() {
}

void loop() {
}

that generates the following errors which may be caused by the inclusion of the i2c.h inside the MPR121Q library. I want to use the SparkFun mpr121 breakout board due to the physical layout. The wires to the touch sensors need to terminate on a board such as this and then communicate with the teensy over I2C. Has anyone gotten this to work on a teensy 3.2? If so, how did you get pas the errors.


In file included from C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:27:0:

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h: In function 'i2cInit':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:102:6: error: 'TWCR' undeclared (first use in this function)

sbi(TWCR, TWEN); // Enable TWI

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:53:28: note: in definition of macro 'sbi'

#define sbi(var, mask) ((var) |= (uint8_t)(1 << mask))

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:102:6: note: each undeclared identifier is reported only once for each function it appears in

sbi(TWCR, TWEN); // Enable TWI

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:53:28: note: in definition of macro 'sbi'

#define sbi(var, mask) ((var) |= (uint8_t)(1 << mask))

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:102:12: error: 'TWEN' undeclared (first use in this function)

sbi(TWCR, TWEN); // Enable TWI

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:53:51: note: in definition of macro 'sbi'

#define sbi(var, mask) ((var) |= (uint8_t)(1 << mask))

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h: In function 'i2cSetBitrate':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:110:6: error: 'TWSR' undeclared (first use in this function)

cbi(TWSR, TWPS0);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:54:28: note: in definition of macro 'cbi'

#define cbi(var, mask) ((var) &= (uint8_t)~(1 << mask))

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:110:12: error: 'TWPS0' undeclared (first use in this function)

cbi(TWSR, TWPS0);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:54:52: note: in definition of macro 'cbi'

#define cbi(var, mask) ((var) &= (uint8_t)~(1 << mask))

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:111:12: error: 'TWPS1' undeclared (first use in this function)

cbi(TWSR, TWPS1);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:54:52: note: in definition of macro 'cbi'

#define cbi(var, mask) ((var) &= (uint8_t)~(1 << mask))

^

In file included from C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:26:0:

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:117:7: error: 'TWBR' undeclared (first use in this function)

outb(TWBR, bitrate_div);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\defs.h:31:27: note: in definition of macro 'outb'

#define outb(addr, data) addr = (data)

^

In file included from C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:27:0:

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h: In function 'i2cSendStart':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:56:21: error: 'DDRC' undeclared (first use in this function)

#define WRITE_sda() DDRC = DDRC | 0b00010000 //SDA must be output when writing

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:122:2: note: in expansion of macro 'WRITE_sda'

WRITE_sda();

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:124:2: error: 'TWCR' undeclared (first use in this function)

TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:124:13: error: 'TWINT' undeclared (first use in this function)

TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:124:24: error: 'TWSTA' undeclared (first use in this function)

TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:124:35: error: 'TWEN' undeclared (first use in this function)

TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h: In function 'i2cSendStop':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:130:9: error: 'TWCR' undeclared (first use in this function)

TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:130:20: error: 'TWINT' undeclared (first use in this function)

TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:130:31: error: 'TWEN' undeclared (first use in this function)

TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:130:41: error: 'TWSTO' undeclared (first use in this function)

TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h: In function 'i2cWaitForComplete':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:138:15: error: 'TWCR' undeclared (first use in this function)

while ((!(TWCR & (1<<TWINT))) && (i < 90))

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:138:26: error: 'TWINT' undeclared (first use in this function)

while ((!(TWCR & (1<<TWINT))) && (i < 90))

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h: In function 'i2cSendByte':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:56:21: error: 'DDRC' undeclared (first use in this function)

#define WRITE_sda() DDRC = DDRC | 0b00010000 //SDA must be output when writing

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:146:2: note: in expansion of macro 'WRITE_sda'

WRITE_sda();

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:148:2: error: 'TWDR' undeclared (first use in this function)

TWDR = data;

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:150:2: error: 'TWCR' undeclared (first use in this function)

TWCR = (1<<TWINT)|(1<<TWEN);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:150:13: error: 'TWINT' undeclared (first use in this function)

TWCR = (1<<TWINT)|(1<<TWEN);

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:150:24: error: 'TWEN' undeclared (first use in this function)

TWCR = (1<<TWINT)|(1<<TWEN);

^

In file included from C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:26:0:

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h: In function 'i2cReceiveByte':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:159:8: error: 'TWCR' undeclared (first use in this function)

outb(TWCR, (inb(TWCR)&TWCR_CMD_MASK)|BV(TWINT)|BV(TWEA));

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\defs.h:31:27: note: in definition of macro 'outb'

#define outb(addr, data) addr = (data)

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:159:43: error: 'TWINT' undeclared (first use in this function)

outb(TWCR, (inb(TWCR)&TWCR_CMD_MASK)|BV(TWINT)|BV(TWEA));

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\defs.h:31:35: note: in definition of macro 'outb'

#define outb(addr, data) addr = (data)

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:159:40: note: in expansion of macro 'BV'

outb(TWCR, (inb(TWCR)&TWCR_CMD_MASK)|BV(TWINT)|BV(TWEA));

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:159:53: error: 'TWEA' undeclared (first use in this function)

outb(TWCR, (inb(TWCR)&TWCR_CMD_MASK)|BV(TWINT)|BV(TWEA));

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\defs.h:31:35: note: in definition of macro 'outb'

#define outb(addr, data) addr = (data)

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:159:50: note: in expansion of macro 'BV'

outb(TWCR, (inb(TWCR)&TWCR_CMD_MASK)|BV(TWINT)|BV(TWEA));

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h: In function 'i2cGetReceivedByte':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:171:14: error: 'TWDR' undeclared (first use in this function)

return( inb(TWDR) );

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\defs.h:34:23: note: in definition of macro 'inb'

#define inb(addr) (addr)

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h: In function 'i2cGetStatus':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:177:14: error: 'TWSR' undeclared (first use in this function)

return( inb(TWSR) );

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\defs.h:34:23: note: in definition of macro 'inb'

#define inb(addr) (addr)

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c: In function 'main':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:69:2: error: 'for' loop initial declarations are only allowed in C99 mode

for (int i = 0; i < 5; i++)

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:69:2: note: use option -std=c99 or -std=gnu99 to compile your code

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c: In function 'mpr121Read':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:112:6: error: 'TWCR' undeclared (first use in this function)

cbi(TWCR, TWEN); // Disable TWI

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:35:28: note: in definition of macro 'cbi'

#define cbi(var, mask) ((var) &= (uint8_t)~(1 << mask))

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:112:12: error: 'TWEN' undeclared (first use in this function)

cbi(TWCR, TWEN); // Disable TWI

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:35:52: note: in definition of macro 'cbi'

#define cbi(var, mask) ((var) &= (uint8_t)~(1 << mask))

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c: In function 'checkInterrupt':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:204:7: error: 'PIND' undeclared (first use in this function)

if ((PIND & (1<<2)) == 0)

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c: In function 'ioinit':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:217:2: error: 'DDRB' undeclared (first use in this function)

DDRB = 0b01100000; //PORTB4, B5 output

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:218:5: error: 'DDRC' undeclared (first use in this function)

DDRC = 0b00010011; //PORTC4 (SDA), PORTC5 (SCL), PORTC all others are inputs

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:219:5: error: 'DDRD' undeclared (first use in this function)

DDRD = 0b11111010; //PORTD (RX on PD0), IRQ on PD2

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:220:2: error: 'PORTC' undeclared (first use in this function)

PORTC = 0b00110000; //pullups on the I2C bus

^

In file included from C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:27:0:

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h: In function 'i2cGetReceivedByte':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:172:1: warning: control reaches end of non-void function [-Wreturn-type]

}

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h: In function 'i2cGetStatus':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\i2c.h:178:1: warning: control reaches end of non-void function [-Wreturn-type]

}

^

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c: In function 'checkInterrupt':

C:\Users\jrdarrah\Documents\Arduino\libraries\MPR121Q\main.c:208:1: warning: control reaches end of non-void function [-Wreturn-type]

}

^

Error compiling for board Teensy 3.2 / 3.1.
 
That seems to be written for ATMEL-MCUs ("AVR") - A lot of work to translate it to "Teensy3".
But - it is a Touch-sensor, right ?

It is much easier to use the Teensy-touch capability. It is builtin. No extra chip needed.
 
Last edited:
For me having the touch sensor connectors off the processor board is a plus due to the physical aspects of the project. I printed off the MPR121 library and the i2c_t3.h to see if I can modify the MPR121 library to use the teensy i2c library. Not knowing how has never stopped me before. Onward then...
 
I think I figured out my mistake. The library I added MPR121Q had the definitions I needed but it also had a main.c example program that was getting folded into my sketch. I renamed it, the hex file, and the makefile. By changing the the includes to this
//#include <defs.h>
//#include <types.h>

#include "mpr121.h"
// #include <Wire.h>
#include <i2c_t3.h>
I was able to get the sparkfun mpr121 breakout board example sketch to compile. Now to hook up the breakout to my Teensy 3.2 so I can see if it works. Sorry for the confusion. I'm still building my skills with the C language so I'll chalk this up to a learning experience.
 
That seems to be written for ATMEL-MCUs ("AVR") - A lot of work to translate it to "Teensy3".
But - it is a Touch-sensor, right ?

It is much easier to use the Teensy-touch capability. It is builtin. No extra chip needed.

When I used it, interrupts were hosed , I had previously set up a timer interrupt, and it never got called

What does this library do to interrupts?
 
When I used it, interrupts were hosed , I had previously set up a timer interrupt, and it never got called

What does this library do to interrupts?

I think I got you confused. not the MPR12 library , but a Teensy 3.2 pin operating as a capacitive sensor made the interrupts fail
 
Status
Not open for further replies.
Back
Top