underconstrained
Member
I'm looking for some guidance on writing to LCD screens. I am running an adafruit 16x02 screen on newer Teensy boards (see test examples below)
1.) LiquidCrystalFast seems to yield poor results with the 3.6 and 4.0. Are any updates planned, and/or is this more of an issue with the LCD hardware itself being too "slow"?
2.) I have a similar screen with the Adafruit LCD backpack (I2C & SPI) that I am testing with underwhelming results https://learn.adafruit.com/i2c-spi-lcd-backpack/overview. Is this also a "slow" screen issue? I understand that I am also reducing the number of pins to transmit the data, but shouldn't I2C and SPI communication be MUCH faster than was getting without the backpack? Are there better libraries out there (as far as speed goes) other than the Adafruit_LiquidCrystal?
3.) Are there other "minimal" screens out there that can be written to more quickly with the 3.6 or 4.0 that might cost more, but save some development time? I'd like to get to 1ms to send 32 characters. At the moment, this is more of an exercise than something critical to any particular program. In general I like the idea of being able to display real time status of the system/program using something other than a few indicator LEDs, and being able to do it in the sub millisecond range.
4.) Level shifters such as the https://www.adafruit.com/product/757 shouldn't be a big factor in slowing down communications to the point that I'm seeing below, correct?
Here is where I'm at with my testing using relevant code from the Benchmark example included with LiquidCrystalFast
Arduino Uno
standard 16x2 lcd
LiquidCrytstal = 386 milliseconds
LiquidCrystalFast = 213 millisecs
Uno with Adafruit LCD backpack via i2c
Adafruit_LiquidCrystal = 2032 milliseconds
Uno with Adafruit LCD backpack via SPI
Adafruit_LiquidCrystal = 2495 milliseconds
TeensyLC - Adafruit_LiquidCrystal = 766 milliseconds
The following Teensys were tested with bidirectional level shifters (Adafruit PID 757) on RS,RW,EN,D4-D7 pins or the correct i2c/SPI pins
Teensy LC
LiquidCrystal = 295 milliseconds
LiquidCrystalFast = 70 milliseconds
Adafruit_LiquidCrystal = 766 milliseconds with Adafruit LCD backpack via SPI
Adafruit_LiquidCrystal = 4885 milliseconds with Adafruit LCD backpack via i2c
Teensy3.6
LiquidCrystal = 274 milliseconds
LiquidCrystalFast = around 650-750 milliseconds (inconsistant!)
Adafruit_LiquidCrystal = 360 milliseconds with Adafruit LCD backpack via SPI
Adafruit_LiquidCrystal = 4366 milliseconds with Adafruit LCD backpack via i2c
Teensy 4.0
LiquidCrystal = 271 milliseconds
LiquidCrystalFast = gives me garbage characters
Adafruit_LiquidCrystal = 298 milliseconds with Adafruit LCD backpack via SPI
Adafruit_LiquidCrystal = 4530 milliseconds with Adafruit LCD backpack via i2c
Regards,
1.) LiquidCrystalFast seems to yield poor results with the 3.6 and 4.0. Are any updates planned, and/or is this more of an issue with the LCD hardware itself being too "slow"?
2.) I have a similar screen with the Adafruit LCD backpack (I2C & SPI) that I am testing with underwhelming results https://learn.adafruit.com/i2c-spi-lcd-backpack/overview. Is this also a "slow" screen issue? I understand that I am also reducing the number of pins to transmit the data, but shouldn't I2C and SPI communication be MUCH faster than was getting without the backpack? Are there better libraries out there (as far as speed goes) other than the Adafruit_LiquidCrystal?
3.) Are there other "minimal" screens out there that can be written to more quickly with the 3.6 or 4.0 that might cost more, but save some development time? I'd like to get to 1ms to send 32 characters. At the moment, this is more of an exercise than something critical to any particular program. In general I like the idea of being able to display real time status of the system/program using something other than a few indicator LEDs, and being able to do it in the sub millisecond range.
4.) Level shifters such as the https://www.adafruit.com/product/757 shouldn't be a big factor in slowing down communications to the point that I'm seeing below, correct?
Here is where I'm at with my testing using relevant code from the Benchmark example included with LiquidCrystalFast
Arduino Uno
standard 16x2 lcd
LiquidCrytstal = 386 milliseconds
LiquidCrystalFast = 213 millisecs
Uno with Adafruit LCD backpack via i2c
Adafruit_LiquidCrystal = 2032 milliseconds
Uno with Adafruit LCD backpack via SPI
Adafruit_LiquidCrystal = 2495 milliseconds
TeensyLC - Adafruit_LiquidCrystal = 766 milliseconds
The following Teensys were tested with bidirectional level shifters (Adafruit PID 757) on RS,RW,EN,D4-D7 pins or the correct i2c/SPI pins
Teensy LC
LiquidCrystal = 295 milliseconds
LiquidCrystalFast = 70 milliseconds
Adafruit_LiquidCrystal = 766 milliseconds with Adafruit LCD backpack via SPI
Adafruit_LiquidCrystal = 4885 milliseconds with Adafruit LCD backpack via i2c
Teensy3.6
LiquidCrystal = 274 milliseconds
LiquidCrystalFast = around 650-750 milliseconds (inconsistant!)
Adafruit_LiquidCrystal = 360 milliseconds with Adafruit LCD backpack via SPI
Adafruit_LiquidCrystal = 4366 milliseconds with Adafruit LCD backpack via i2c
Teensy 4.0
LiquidCrystal = 271 milliseconds
LiquidCrystalFast = gives me garbage characters
Adafruit_LiquidCrystal = 298 milliseconds with Adafruit LCD backpack via SPI
Adafruit_LiquidCrystal = 4530 milliseconds with Adafruit LCD backpack via i2c
Regards,