Problems using multiple NeoTrellis Tiles on Teensy 4.1

Hello everyone,

I'm trying to build Step sequencer with Teensy 4.1 and NeoTrellis. I'm stuk at the second step...
I am having trouble getting the NeoTrellis to work with more than one 4x4 tile.
I used the basic example from the seesaw library and it worked like a charm, now I'm using the basic example from the multiTrellis folder and I'm completely stuck.
I have 5 tiles connected in a row, I soldered the adresses as follows (1: no solder, 2: A0, 3: A1, 4: A0+A1, 5: A2), I added the addresses in the code (see below). When I run the code I get "failed to begin trellis" over serial. If I comment out the additional addresses and adjust X_DIM I can get one tile working, but not 2 or more.
Can there be an issue with the electronics or am I missing something very basic in the code? I connected sda and scl via the 4-channel I2C-safe Bi-directional Logic Level Converter - BSS138 from adafruit, so the level conversion shouldn't be a problem.

I hope you can help me!

Best regards,

Benni

/* This example shows basic usage of the
MultiTrellis object controlling an array of
NeoTrellis boards

As is this example shows use of two NeoTrellis boards
connected together with the leftmost board having the
default I2C address of 0x2E, and the rightmost board
having the address of 0x2F (the A0 jumper is soldered)
*/

#include "Adafruit_NeoTrellis.h"

#define Y_DIM 4 //number of rows of key
#define X_DIM 20 //number of columns of keys

//create a matrix of trellis panels
Adafruit_NeoTrellis t_array[Y_DIM/4][X_DIM/4] = {
  
  { Adafruit_NeoTrellis(0x2E), Adafruit_NeoTrellis(0x2F), Adafruit_NeoTrellis(0x30), Adafruit_NeoTrellis(0x31), Adafruit_NeoTrellis(0x32)}
  
};

/*
If you were using a 2x2 array of NeoTrellis boards, the above lines would be:

#define Y_DIM 8 //number of rows of key
#define X_DIM 8 //number of columns of keys

//create a matrix of trellis panels
Adafruit_NeoTrellis t_array[Y_DIM/4][X_DIM/4] = {
  
  { Adafruit_NeoTrellis(0x2E), Adafruit_NeoTrellis(0x2F) },

  { Adafruit_NeoTrellis(LOWER_LEFT_I2C_ADDR), Adafruit_NeoTrellis(LOWER_RIGHT_I2C_ADDR) }
  
};
*/

//pass this matrix to the multitrellis object
Adafruit_MultiTrellis trellis((Adafruit_NeoTrellis *)t_array, Y_DIM/4, X_DIM/4);

// Input a value 0 to 255 to get a color value.
// The colors are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return seesaw_NeoPixel::Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return seesaw_NeoPixel::Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return seesaw_NeoPixel::Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  return 0;
}

//define a callback for key presses
TrellisCallback blink(keyEvent evt){
  
  if(evt.bit.EDGE == SEESAW_KEYPAD_EDGE_RISING)
    trellis.setPixelColor(evt.bit.NUM, Wheel(map(evt.bit.NUM, 0, X_DIM*Y_DIM, 0, 255))); //on rising
  else if(evt.bit.EDGE == SEESAW_KEYPAD_EDGE_FALLING)
    trellis.setPixelColor(evt.bit.NUM, 0); //off falling
    
  trellis.show();
  return 0;
}

void setup() {
  Serial.begin(9600);
  //while(!Serial) delay(1);

  if(!trellis.begin()){
    Serial.println("failed to begin trellis");
    while(1) delay(1);
  }

  /* the array can be addressed as x,y or with the key number */
  for(int i=0; i<Y_DIM*X_DIM; i++){
      trellis.setPixelColor(i, Wheel(map(i, 0, X_DIM*Y_DIM, 0, 255))); //addressed with keynum
      trellis.show();
      delay(50);
  }
  
  for(int y=0; y<Y_DIM; y++){
    for(int x=0; x<X_DIM; x++){
      //activate rising and falling edges on all keys
      trellis.activateKey(x, y, SEESAW_KEYPAD_EDGE_RISING, true);
      trellis.activateKey(x, y, SEESAW_KEYPAD_EDGE_FALLING, true);
      trellis.registerCallback(x, y, blink);
      trellis.setPixelColor(x, y, 0x000000); //addressed with x,y
      trellis.show(); //show all LEDs
      delay(50);
    }
  }
Serial.println("loaded setup");
}

void loop() {
  trellis.read();
  delay(20);
  Serial.println("loop");
}

Did you run the i2c bus scanner sketch to verify all the addresses are correct? I would check each one individually before chaining them together.

Hey,
Thank you for the quick reply! Unfortunately I didn't check the address individually and I already soldered everything together :confused:
Is there a way to check the addresses for all the tiles?

yes, just run the i2c bus scanner with all of them together. You should still get 5 individual addresses if everything is set up correctly.
https://playground.arduino.cc/Main/I2cScanner/

Thank you so much! I only get four addresses, the second board doesn't respond to the I2c scanner. I tried the example with the four addresses that responded and that works. But I don't knwo why the second board doens't work...
The third NeoTrellis is connected through the second, so the solder connections shouldn't be the problem. The solder blob on the address pad doen't look fishy either and I tested it with a multimeter.

either your 5th board has the same address as one of the other boards or isn't working. It may be time to remove some solder and test in isolation.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.