TEENSY - V-tone a Roland/Boss amp and EQ knob-box tweaker

Started by gumtown, August 27, 2015, 12:51:36 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Elantric


whippinpost91850

Man, truly awesome  Where is the thumbs up smiley when you need it!

gumtown

Here is the schematic for the simpler MK I version.
It really is quite minimal in component count, not too difficult or expensive to build at all.
The hex bin file for the Arduino Teensy LC is included, attached below (needs to be unzipped),
and the loader to upload it into the chip.
https://www.pjrc.com/teensy/loader.html

Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

Elantric

#28
Thanks Gumtown

Couple thoughts :
1 )  unless this is generated by the Teensy LC,  Im not seeing the source of the +3.3V power Rail.

2 ) typical convention for capacitor reference designators is C1, C2, C3 etc.
while Y1, Y2, Y3, is typically used when naming crystal resonators.


But very clean circuit and minimal parts !

sixeight

Quote from: Elantric on September 16, 2015, 07:23:00 AM
Couple thoughts :
1 )  unless this is generated by the Teensy LC,  Im not seeing the source of the +3.3V power rail

3.3 volts is provided by the Teensy.

I guess you could leave out the pull up resistors by enabling the internal pullup resistors on port 4 and 5.
Shouldn't the pullup resistors be on port 18 and 19. Afaik the i2c bus does not work without them.

gumtown

The Schematic is magically fixed.
I used a free download of DesignSpark 7.1, first time use, things like I.C.s I couldn't find so I used a rectangular box.
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

gumtown

I am under way with Version 2 of the project,
using 3 x 20x4 LCD displays and 12 rotary encoders, each with a push button action.
I am now using the Arduino Teensy 3.2 micro controller for it's extra program memory space.

The multiplexing of the 12 rotary encoders has been a little challenging, but I am getting there, requiring the addition of 36 diodes.
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

sixeight


sixeight

#33
Hi Gumtown,

I am about to be playing with multiple displays as well. Maybe this bit of code is something useful for you as well. It is an array of displays:

#define NUMBER_OF_DISPLAYS 3
//Declare an array of LiquidCrystal objects, each with the same pin settings, just a different i2c address
LiquidCrystal_I2C lcd[NUMBER_OF_DISPLAYS] = {
  LiquidCrystal_I2C (0x20, EN_PIN, RW_PIN, RS_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN),
  LiquidCrystal_I2C (0x21, EN_PIN, RW_PIN, RS_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN),
  LiquidCrystal_I2C (0x22, EN_PIN, RW_PIN, RS_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN)
};


And include in the setup code:

  for (uint8_t i = 0; i < NUMBER_OF_DISPLAYS; i++) {
    lcd[i].begin (16, 2);
    lcd[i].setBacklightPin(BACKLIGHT_PIN, POSITIVE);
    lcd[i].setBacklight(HIGH); //switch on the backlight
  }

gumtown

This is what I have been using, including custom characters for and animated V-Tone logo on startup

Quote
#define I2C_ADDR1    0x3F // LCD1 Address [A0=open   A1=open   A2=open  ]
#define I2C_ADDR2    0x3D // LCD2 Address [A0=open   A1=closed A2=open  ]
#define I2C_ADDR3    0x3B // LCD3 Address [A0=open   A1=open   A2=closed]
#define BACKLIGHT_PIN 3
#define EN_PIN  2
#define RW_PIN  1
#define RS_PIN  0
#define D4_PIN  4
#define D5_PIN  5
#define D6_PIN  6
#define D7_PIN  7

LiquidCrystal_I2C  lcd1(I2C_ADDR1, EN_PIN, RW_PIN, RS_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN);
LiquidCrystal_I2C  lcd2(I2C_ADDR2, EN_PIN, RW_PIN, RS_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN);
LiquidCrystal_I2C  lcd3(I2C_ADDR3, EN_PIN, RW_PIN, RS_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN);

// define custom character set (gliphs)
byte custom_0[8] = { 0b01111, 0b11111, 0b11111, 0b11111, 0b00011, 0b00011, 0b00001, 0b00000 };
byte custom_1[8] = { 0b00000, 0b10000, 0b11000, 0b11000, 0b11100, 0b11100, 0b11110, 0b11110 };
byte custom_2[8] = { 0b00000, 0b00001, 0b00011, 0b00011, 0b00111, 0b00111, 0b01111, 0b01111 };
byte custom_3[8] = { 0b11110, 0b11111, 0b11111, 0b11110, 0b11000, 0b11000, 0b10000, 0b00000 };
byte custom_4[8] = { 0b11110, 0b11110, 0b01110, 0b01110, 0b00111, 0b00111, 0b00011, 0b00001 };
byte custom_5[8] = { 0b01111, 0b01111, 0b01110, 0b01110, 0b11100, 0b11100, 0b11000, 0b10000 };
byte custom_6[8] = { 0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000 };
byte custom_7[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111 };
byte custom_8[8] = { 0b00001, 0b00011, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111 };
byte custom_9[8] = { 0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00011, 0b00001 };
byte custom_A[8] = { 0b10000, 0b11000, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100 };
byte custom_B[8] = { 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11000, 0b10000 };
byte custom_C[8] = { 0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111 };
byte custom_D[8] = { 0b01110, 0b11111, 0b10001, 0b10111, 0b10111, 0b10001, 0b11111, 0b01110 };

String lcd1_previous_message;
String lcd2_previous_message;
String lcd3_previous_message;
String clear_10char = String("          ");


void setup_LCD_control()
{

  //lcd1.createChar(0, smiley);
 
  lcd1.begin (20, 4); //  LCD1 is 20x4
  lcd2.begin (20, 4); //  LCD2 is 20x4
  lcd3.begin (20, 4); //  LCD3 is 20x4

  lcd1.createChar(0, custom_0);  // load custom characters in LCD CGRAM
  lcd1.createChar(1, custom_1);
  lcd1.createChar(2, custom_2);
  lcd1.createChar(3, custom_3);
  lcd1.createChar(4, custom_4);
  lcd1.createChar(5, custom_5);
  lcd1.createChar(6, custom_6);
  lcd1.createChar(7, custom_D);
 
  lcd2.createChar(0, custom_6);
  lcd2.createChar(1, custom_7);
  lcd2.createChar(2, custom_8);
  lcd2.createChar(3, custom_9);
  lcd2.createChar(4, custom_A);
  lcd2.createChar(5, custom_B);
  lcd2.createChar(6, custom_C);
  lcd2.createChar(7, custom_1);

  lcd1.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  lcd1.setBacklight(HIGH);
  lcd1.home (); // go home
  lcd2.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  lcd2.setBacklight(HIGH);
  lcd2.home (); // go home
  lcd3.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  lcd3.setBacklight(HIGH);
  lcd3.home (); // go home
  lcd1.write(byte(0));                  // Show LCD1 startup  Vtone logo
  lcd1.write(1);
  lcd1.write(2);
  lcd1.write(3);
  lcd1.write(byte(6));
  lcd1.write(byte(6));
  lcd1.write(byte(6));
  lcd1.write(byte(6));
  lcd1.write(byte(6));
  lcd1.write(byte(6));
  lcd1.write(byte(6));
  lcd1.write(byte(6));
  lcd1.write(byte(6));
  lcd1.write(byte(6));
  lcd1.write(byte(6));
  lcd1.write(byte(6));
  lcd1.setCursor (0, 1);
  lcd1.write(254);                 
  lcd1.write(4);
  lcd1.write(5);
  lcd1.write(254);
 
  lcd2.setCursor (5, 0);  //position 5 line 1
  lcd2.write(byte(0));    //T
  lcd2.write(255);        //T
  lcd2.write(byte(0));    //T
  lcd2.write(2);          //O
  lcd2.write(byte(0));    //O
  lcd2.write(4);          //O
  lcd2.write(2);          //N         
  lcd2.write(7);          //N
  lcd2.write(4);          //N
  lcd2.write(255);        //E
  lcd2.write(6);          //E
 
  lcd2.setCursor (5, 1);  //position 5 line 2
  lcd2.write(254);        // bottom half of the TONE text
  lcd2.write(255);
  lcd2.write(254);
  lcd2.write(3);
  lcd2.write(1);
  lcd2.write(5); 
  lcd2.write(3);
  lcd2.write(254);
  lcd2.write(5); 
  lcd2.write(255);
  lcd2.write(1);

for(int scr=0; scr<4; ++scr){
    lcd1.scrollDisplayRight();  // nice little scrolling animation :)
    delay(50);
    lcd1.scrollDisplayRight();
    delay(50);
    lcd2.scrollDisplayLeft();
    delay(50);
    lcd1.scrollDisplayRight();
    delay(50);
  };
  lcd2.scrollDisplayLeft();
 
  lcd1.setCursor (6, 0);
  lcd1.write(7);
  lcd1.print(" 2015");
  display_parameter(1, 1, 6, "by Gumtown");
  lcd3.print("a midi controler");         
  //display_parameter(2, 1, 0, "for the");
  delay(2000);
}


and
Here is the start up screen
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

sixeight

I had seen the code on Github. Nice to see the startup screen.

I am happy with the code for the array. For vcontroller V2 I am looking at 13 displays. Then it is great to be able to use an index...