Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Michael_L

Pages: 1 2 [3] 4 5 ... 24
31
TFTs / Re: Backlight brightness with TFT displays (5" and 7")
« on: July 21, 2015, 07:19:42 AM »
The LEDs on the 5" display draw more current and are brighter, and therefore need more power.
The display doesn't "need" twice the brightness, that is just its typical brightness rating.  As Saurabh stated, you may reduce the backlight current, thus reducing power and effectively reducing the brightness.  Yes, the display will still look good, just not as bright.  Of course this is highly dependent on your application.  If you are using the display indoors, there should be no issues, however if trying to use the display outdoors in sunlight, you would not want to reduce the brightness.
Yes, the 7" display will be bright enough with the specified power ratings, we wouldn't sell it if it wasn't   ;)

If you would like to evaluate these displays, we offer whole kits to allow for quick and easy evaluation of our products.  If you are interested in this, please email nhtech@newhavendisplay.com with your inquiry, and we can help get you a list of parts you would need for the kit.

32
OLEDs / Re: Mouser Oled
« on: July 17, 2015, 01:19:35 PM »
The display you are trying to use is a 3.3V display.  It requires 3.3V for VDD and logic to function properly.  The Arduino Uno is a 5V MCU board.  Yes, there is a 3.3V pin on the board, however all other logic signals on the board are TTL (0V / 5V).  So as you may be connecting the display's VDD signal to the Arduino's 3.3V pin, every other display pin you connect will receive 5V, which is over the maximum specified voltage allowed for the display, as indicated in the datasheet.  Therefore, to use this color OLED, you need a 3.3V MCU, or a modification to the Arduino Uno to make it provide 3.3V logic, hence the previous voltage regulator replacement option.  Another way is to use a level shifter IC between the Arduino and the display.

The pin connections are shown in the example code.  Please also note this example code is just a reference, and does not imply this display must be used with an Arduino Uno.  We have chose to release example code for the Arduino Uno simply because it is a low cost, easy to use, MCU board that is very popular for projects and prototyping.  If you have used any other MCU platforms (preferably 3.3V MCUs), you may use this display with it, and port the C code accordingly.

The Arduino Pro Mini 5V board still has the same issue of not being a 3.3V MCU.  It will send TTL signals (5V) on all of the data and control lines of the display.  I believe there is a version of the Arduino Pro Mini that is 3.3V, so if you have or can obtain one of those, that would be recommended.

To get the display to work with your Arduino Uno, you need to either:

1)  replace the voltage regulator on the Arduino Uno with a 3.3V regualtor (such as an LM1117/AME1117/AP1117), and when powering the Arduino + display, you must use the DC jack power input, not the USB.

or

2)  use a level shifter IC.  Here are the level shifters used for this particular program example:
     http://www.ti.com/product/sn74lvc4245a

33
Those voltages you are seeing on those pins are what would be present if just applying power (VDD) and ground (VSS) to the display. You should have higher voltages on these pins if the display was initialized properly.  Have you verified your I2C communication?  Are you receiving ACKs from the display?  Have you successfully used your MCU's I2C bus with any other devices?

34
TFTs / Re: NHD-1.8-128160EF-CTXI-FT Wakeup from sleep
« on: July 07, 2015, 01:57:29 PM »
The resistive touch panel is completely separate from the display's controller.  Therefore, you can interpret touches even when the display is in sleep mode, because the 4 lines for the resistive touch panel are independent from the display, and fed directly into your Semtech touch controller.

35
The display will not work without the capacitors on those lines.

36
TFTs / Re: Writing Character strings to NHD-1.8-128160EF-CTXI#
« on: July 02, 2015, 08:08:46 AM »
Yes, you would need to do exactly what you have described in your last statement.  You need a font table in your program, and then you need a function that draws each character pixel by pixel based off the font table.  Similar to below:

Code: [Select]
unsigned char Ascii_1[97][5]={     // Refer to "Times New Roman" Font Database...
                        //   Basic Characters
    {0xFF,0xFF,0xFF,0xFF,0xFF},     //   (  0)    - 0x0000 Empty set
    {0x00,0x00,0x4F,0x00,0x00},     //   (  1)  ! - 0x0021 Exclamation Mark
    {0x00,0x07,0x00,0x07,0x00},     //   (  2)  " - 0x0022 Quotation Mark
    {0x14,0x7F,0x14,0x7F,0x14},     //   (  3)  # - 0x0023 Number Sign
    {0x24,0x2A,0x7F,0x2A,0x12},     //   (  4)  $ - 0x0024 Dollar Sign
    {0x23,0x13,0x08,0x64,0x62},     //   (  5)  % - 0x0025 Percent Sign
    {0x36,0x49,0x55,0x22,0x50},     //   (  6)  & - 0x0026 Ampersand
    {0x00,0x05,0x03,0x00,0x00},     //   (  7)  ' - 0x0027 Apostrophe
    {0x00,0x1C,0x22,0x41,0x00},     //   (  8)  ( - 0x0028 Left Parenthesis
    {0x00,0x41,0x22,0x1C,0x00},     //   (  9)  ) - 0x0029 Right Parenthesis
    {0x14,0x08,0x3E,0x08,0x14},     //   ( 10)  * - 0x002A Asterisk
    {0x08,0x08,0x3E,0x08,0x08},     //   ( 11)  + - 0x002B Plus Sign
    {0x00,0x50,0x30,0x00,0x00},     //   ( 12)  , - 0x002C Comma
    {0x08,0x08,0x08,0x08,0x08},     //   ( 13)  - - 0x002D Hyphen-Minus
    {0x00,0x60,0x60,0x00,0x00},     //   ( 14)  . - 0x002E Full Stop
    {0x20,0x10,0x08,0x04,0x02},     //   ( 15)  / - 0x002F Solidus
    {0x3E,0x51,0x49,0x45,0x3E},     //   ( 16)  0 - 0x0030 Digit Zero
    {0x00,0x42,0x7F,0x40,0x00},     //   ( 17)  1 - 0x0031 Digit One
    {0x42,0x61,0x51,0x49,0x46},     //   ( 18)  2 - 0x0032 Digit Two
    {0x21,0x41,0x45,0x4B,0x31},     //   ( 19)  3 - 0x0033 Digit Three
    {0x18,0x14,0x12,0x7F,0x10},     //   ( 20)  4 - 0x0034 Digit Four
    {0x27,0x45,0x45,0x45,0x39},     //   ( 21)  5 - 0x0035 Digit Five
    {0x3C,0x4A,0x49,0x49,0x30},     //   ( 22)  6 - 0x0036 Digit Six
    {0x01,0x71,0x09,0x05,0x03},     //   ( 23)  7 - 0x0037 Digit Seven
    {0x36,0x49,0x49,0x49,0x36},     //   ( 24)  8 - 0x0038 Digit Eight
    {0x06,0x49,0x49,0x29,0x1E},     //   ( 25)  9 - 0x0039 Dight Nine
    {0x00,0x36,0x36,0x00,0x00},     //   ( 26)  : - 0x003A Colon
    {0x00,0x56,0x36,0x00,0x00},     //   ( 27)  ; - 0x003B Semicolon
    {0x08,0x14,0x22,0x41,0x00},     //   ( 28)  < - 0x003C Less-Than Sign
    {0x14,0x14,0x14,0x14,0x14},     //   ( 29)  = - 0x003D Equals Sign
    {0x00,0x41,0x22,0x14,0x08},     //   ( 30)  > - 0x003E Greater-Than Sign
    {0x02,0x01,0x51,0x09,0x06},     //   ( 31)  ? - 0x003F Question Mark
    {0x32,0x49,0x79,0x41,0x3E},     //   ( 32)  @ - 0x0040 Commercial At
    {0x7E,0x11,0x11,0x11,0x7E},     //   ( 33)  A - 0x0041 Latin Capital Letter A
    {0x7F,0x49,0x49,0x49,0x36},     //   ( 34)  B - 0x0042 Latin Capital Letter B
    {0x3E,0x41,0x41,0x41,0x22},     //   ( 35)  C - 0x0043 Latin Capital Letter C
    {0x7F,0x41,0x41,0x22,0x1C},     //   ( 36)  D - 0x0044 Latin Capital Letter D
    {0x7F,0x49,0x49,0x49,0x41},     //   ( 37)  E - 0x0045 Latin Capital Letter E
    {0x7F,0x09,0x09,0x09,0x01},     //   ( 38)  F - 0x0046 Latin Capital Letter F
    {0x3E,0x41,0x49,0x49,0x7A},     //   ( 39)  G - 0x0047 Latin Capital Letter G
    {0x7F,0x08,0x08,0x08,0x7F},     //   ( 40)  H - 0x0048 Latin Capital Letter H
    {0x00,0x41,0x7F,0x41,0x00},     //   ( 41)  I - 0x0049 Latin Capital Letter I
    {0x20,0x40,0x41,0x3F,0x01},     //   ( 42)  J - 0x004A Latin Capital Letter J
    {0x7F,0x08,0x14,0x22,0x41},     //   ( 43)  K - 0x004B Latin Capital Letter K
    {0x7F,0x40,0x40,0x40,0x40},     //   ( 44)  L - 0x004C Latin Capital Letter L
    {0x7F,0x02,0x0C,0x02,0x7F},     //   ( 45)  M - 0x004D Latin Capital Letter M
    {0x7F,0x04,0x08,0x10,0x7F},     //   ( 46)  N - 0x004E Latin Capital Letter N
    {0x3E,0x41,0x41,0x41,0x3E},     //   ( 47)  O - 0x004F Latin Capital Letter O
    {0x7F,0x09,0x09,0x09,0x06},     //   ( 48)  P - 0x0050 Latin Capital Letter P
    {0x3E,0x41,0x51,0x21,0x5E},     //   ( 49)  Q - 0x0051 Latin Capital Letter Q
    {0x7F,0x09,0x19,0x29,0x46},     //   ( 50)  R - 0x0052 Latin Capital Letter R
    {0x46,0x49,0x49,0x49,0x31},     //   ( 51)  S - 0x0053 Latin Capital Letter S
    {0x01,0x01,0x7F,0x01,0x01},     //   ( 52)  T - 0x0054 Latin Capital Letter T
    {0x3F,0x40,0x40,0x40,0x3F},     //   ( 53)  U - 0x0055 Latin Capital Letter U
    {0x1F,0x20,0x40,0x20,0x1F},     //   ( 54)  V - 0x0056 Latin Capital Letter V
    {0x3F,0x40,0x38,0x40,0x3F},     //   ( 55)  W - 0x0057 Latin Capital Letter W
    {0x63,0x14,0x08,0x14,0x63},     //   ( 56)  X - 0x0058 Latin Capital Letter X
    {0x07,0x08,0x70,0x08,0x07},     //   ( 57)  Y - 0x0059 Latin Capital Letter Y
    {0x61,0x51,0x49,0x45,0x43},     //   ( 58)  Z - 0x005A Latin Capital Letter Z
    {0x00,0x7F,0x41,0x41,0x00},     //   ( 59)  [ - 0x005B Left Square Bracket
    {0x02,0x04,0x08,0x10,0x20},     //   ( 60)  \ - 0x005C Reverse Solidus
    {0x00,0x41,0x41,0x7F,0x00},     //   ( 61)  ] - 0x005D Right Square Bracket
    {0x04,0x02,0x01,0x02,0x04},     //   ( 62)  ^ - 0x005E Circumflex Accent
    {0x40,0x40,0x40,0x40,0x40},     //   ( 63)  _ - 0x005F Low Line
    {0x01,0x02,0x04,0x00,0x00},     //   ( 64)  ` - 0x0060 Grave Accent
    {0x20,0x54,0x54,0x54,0x78},     //   ( 65)  a - 0x0061 Latin Small Letter A
    {0x7F,0x48,0x44,0x44,0x38},     //   ( 66)  b - 0x0062 Latin Small Letter B
    {0x38,0x44,0x44,0x44,0x20},     //   ( 67)  c - 0x0063 Latin Small Letter C
    {0x38,0x44,0x44,0x48,0x7F},     //   ( 68)  d - 0x0064 Latin Small Letter D
    {0x38,0x54,0x54,0x54,0x18},     //   ( 69)  e - 0x0065 Latin Small Letter E
    {0x08,0x7E,0x09,0x01,0x02},     //   ( 70)  f - 0x0066 Latin Small Letter F
    {0x06,0x49,0x49,0x49,0x3F},     //   ( 71)  g - 0x0067 Latin Small Letter G
    {0x7F,0x08,0x04,0x04,0x78},     //   ( 72)  h - 0x0068 Latin Small Letter H
    {0x00,0x44,0x7D,0x40,0x00},     //   ( 73)  i - 0x0069 Latin Small Letter I
    {0x20,0x40,0x44,0x3D,0x00},     //   ( 74)  j - 0x006A Latin Small Letter J
    {0x7F,0x10,0x28,0x44,0x00},     //   ( 75)  k - 0x006B Latin Small Letter K
    {0x00,0x41,0x7F,0x40,0x00},     //   ( 76)  l - 0x006C Latin Small Letter L
    {0x7C,0x04,0x18,0x04,0x7C},     //   ( 77)  m - 0x006D Latin Small Letter M
    {0x7C,0x08,0x04,0x04,0x78},     //   ( 78)  n - 0x006E Latin Small Letter N
    {0x38,0x44,0x44,0x44,0x38},     //   ( 79)  o - 0x006F Latin Small Letter O
    {0x7C,0x14,0x14,0x14,0x08},     //   ( 80)  p - 0x0070 Latin Small Letter P
    {0x08,0x14,0x14,0x18,0x7C},     //   ( 81)  q - 0x0071 Latin Small Letter Q
    {0x7C,0x08,0x04,0x04,0x08},     //   ( 82)  r - 0x0072 Latin Small Letter R
    {0x48,0x54,0x54,0x54,0x20},     //   ( 83)  s - 0x0073 Latin Small Letter S
    {0x04,0x3F,0x44,0x40,0x20},     //   ( 84)  t - 0x0074 Latin Small Letter T
    {0x3C,0x40,0x40,0x20,0x7C},     //   ( 85)  u - 0x0075 Latin Small Letter U
    {0x1C,0x20,0x40,0x20,0x1C},     //   ( 86)  v - 0x0076 Latin Small Letter V
    {0x3C,0x40,0x30,0x40,0x3C},     //   ( 87)  w - 0x0077 Latin Small Letter W
    {0x44,0x28,0x10,0x28,0x44},     //   ( 88)  x - 0x0078 Latin Small Letter X
    {0x0C,0x50,0x50,0x50,0x3C},     //   ( 89)  y - 0x0079 Latin Small Letter Y
    {0x44,0x64,0x54,0x4C,0x44},     //   ( 90)  z - 0x007A Latin Small Letter Z
    {0x00,0x08,0x36,0x41,0x00},     //   ( 91)  { - 0x007B Left Curly Bracket
    {0x00,0x00,0x7F,0x00,0x00},     //   ( 92)  | - 0x007C Vertical Line
    {0x00,0x41,0x36,0x08,0x00},     //   ( 93)  } - 0x007D Right Curly Bracket
    {0x02,0x01,0x02,0x04,0x02},     //   ( 94)  ~ - 0x007E Tilde
    {0x08,0x0C,0x0E,0x0C,0x08},     //   ( 95)  upward facing triangle/arrow
    {0x08,0x18,0x38,0x18,0x08},     //   ( 96)  downward facing triangle/arrow
};
void LCD_Text2x(unsigned int row, unsigned int column, unsigned char letter, unsigned int color)
{
    int i, j=1;
    int count;
    unsigned char mask = 0x80;

    for (i=0;i<16;i++)//each character is 8 px tall (x2 = 16px tall)
    {
        Set_Column_Address((column>>8),column,0x00,0xEF);
        Set_Page_Address((row>>8),row,0x01,0x3F);
        comm_out(0x2C);
        digitalWrite(RS, HIGH);
        for(count=0;count<10;count++)//each character is 5px wide (x2 = 10px wide)
        {
            if((Ascii_1[letter][(count/2)] & mask) == mask)
            {
                LCD_Pixel(color);   //text color
            }
            else
            {
                LCD_Pixel(WHITE);  //background color
            }
        }
        row++;
        if((j%2)==0)
        {
            mask = mask >> 1;
        }
        j++;
   }
}

Please note this is simply one example of accomplishing this.  For different style fonts, larger text, etc. you will need to write code to accommodate.

37
Below is some example code for that display with the Arduino Mega:
Code: [Select]
#include <Wire.h>

int RES = 22;
int ASDA = 20;
int ASCL = 21;

unsigned char text1[]={"  Newhaven Display  "};
unsigned char text2[]={"____NHD-C0220BiZ____"};
unsigned char text3[]={"    May 28, 2015    "};
unsigned char text4[]={"   Michael LaVine   "};
unsigned char text5[]={"ACK TEST -- 11111111"};

const char slave2w = 0x3C;  //3E for CiZ (0x7C shifted over 1 bit)  //3C for BiZ (0x78 shifted over 1 bit)
const char comsend = 0x00;
const char datasend = 0x40;
const char line2 = 0xC0;

void show(unsigned char *text)
{
  int n, d;
  d=0x00;
  Wire.beginTransmission(slave2w);
  Wire.write(datasend);
  for(n=0;n<20;n++)
  {
    Wire.write(*text);
    ++text;
  }
 
  while(Wire.endTransmission());
}

void nextline(void)
{
  Wire.beginTransmission(slave2w);
  Wire.write(comsend);
  Wire.write(line2);
  while(Wire.endTransmission());
}

void cleardisplay(void)
{
  Wire.beginTransmission(slave2w);
  Wire.write(comsend);
  Wire.write(0x01);
  while(Wire.endTransmission());
}

void CiZ_init()
{
  Wire.beginTransmission(slave2w);
  Wire.write(comsend);
  Wire.write(0x39);
  delay(1);
  Wire.write(0x14);
  Wire.write(0x70);
  Wire.write(0x5E);
  Wire.write(0x6D);
  Wire.write(0x0C);
  Wire.write(0x01);
  Wire.write(0x06);
  while(Wire.endTransmission());
}

void setup()
{
  pinMode(RES, OUTPUT);
  pinMode(ASCL, OUTPUT);
  pinMode(ASDA, OUTPUT);
  digitalWrite(RES, HIGH);
  //delay(10);
  //digitalWrite(ASCL, LOW);
  //digitalWrite(ASDA, LOW);
  //delay(10);
  Wire.begin();
  delay(10);
  CiZ_init();
  delay(5);
}

void loop()
{
  show(text5);
  nextline();
  show(text2);
  delay(1500);
  cleardisplay();
  delay(2);

  show(text3);
  nextline();
  show(text4);
  delay(1500);
  cleardisplay();
  delay(2);
}

As for the backlight pins, K-R/G/B and A, these are the cathodes and anode, respectively.  The wiring diagram shows the anode A connected to power (upward facing triangle) and the cathodes are shown connected to ground (downwards facing triangles).

As for the I2C lines, you need pull-ups (typically 10kOhm) for them to work.

Lastly, if possible, try using non-electrolytic caps (not polarized) for pins 6-8.

38
Evaluation Tools / Re: Re-programming the Firmware on the Eval board
« on: July 01, 2015, 04:29:02 PM »
The TF model uses a different controller, and therefore that selection will not work for the current EF models.  You would need to update the firmware to the latest file as described in my previous post.  As for the images, once the NHDev board is updated, you can just rename them using EF in the file name in place of TF.

39
Evaluation Tools / Re: Re-programming the Firmware on the Eval board
« on: June 30, 2015, 04:38:35 PM »
This board's typical use is for quick and easy evaluation of our displays, however if you wish to program it, you will need a compiler (we use Keil ÁVision4 IDE) and a JTAG programmer (we use the ULINK2).  You will also need to download the files from our website (http://www.newhavendisplay.com/nhdev/NHDev_Downloads.php) and load them onto the board using a program like ÁVision.

Also, a couple of notes:

1)      The Dev board needs to have power applied to it (not powered by
JTAG)

2)      The Dev board code disables the JTAG after a second of power, so
when loading the code you must hold the board in reset and program
immediately after letting off the reset button.

3)      Target is STM32F103RE.

40
Character LCDs / Re: Repalcing NHD-0420D3Z-FL-GBW v1.0 with v3
« on: June 16, 2015, 02:21:56 PM »
It is possible this will work, depending on your current timing.  The V3 firmware is more robust, but has longer execution times for each command.  Delays may need to be added after send commands / data to the display.

41
The timing should be correct, as it is from the controller IC manufacturer's datasheet.  Have you confirmed this timing on a scope?

42
Character LCDs / Re: Transistor Q1 on NHD-042003DZ-FL-GBW
« on: June 04, 2015, 09:34:43 AM »
If the part number is NHD-0420D3Z-FL-GBW, Q1 will be MMBT4401 or equivalent.

43
It seems there is some issue with your software or board.  I have just tested this display with an Arduino with the following code, and coded it to not allow for the program to continue if there is no ACK.  All characters are displayed properly.  See code below:

Code: [Select]
#include <Wire.h>

int RES = 22;
int ASDA = 20;
int ASCL = 21;

unsigned char text1[]={"  Newhaven Display  "};
unsigned char text2[]={"____NHD-C0220BiZ____"};
unsigned char text3[]={"    May 28, 2015    "};
unsigned char text4[]={"   Michael LaVine   "};
unsigned char text5[]={"ACK TEST -- 11111111"};

const char slave2w = 0x3C;  //3E for CiZ (0x7C shifted over 1 bit)  //3C for BiZ (0x78 shifted over 1 bit)
const char comsend = 0x00;
const char datasend = 0x40;
const char line2 = 0xC0;

void show(unsigned char *text)
{
  int n, d;
  d=0x00;
  Wire.beginTransmission(slave2w);
  Wire.write(datasend);
  for(n=0;n<20;n++)
  {
    Wire.write(*text);
    ++text;
  }
 
  while(Wire.endTransmission());
}

void nextline(void)
{
  Wire.beginTransmission(slave2w);
  Wire.write(comsend);
  Wire.write(line2);
  while(Wire.endTransmission());
}

void cleardisplay(void)
{
  Wire.beginTransmission(slave2w);
  Wire.write(comsend);
  Wire.write(0x01);
  while(Wire.endTransmission());
}

void CiZ_init()
{
  Wire.beginTransmission(slave2w);
  Wire.write(comsend);
  Wire.write(0x39);
  delay(1);
  Wire.write(0x14);
  Wire.write(0x70);
  Wire.write(0x5E);
  Wire.write(0x6D);
  Wire.write(0x0C);
  Wire.write(0x01);
  Wire.write(0x06);
  while(Wire.endTransmission());
}

void setup()
{
  pinMode(RES, OUTPUT);
  pinMode(ASCL, OUTPUT);
  pinMode(ASDA, OUTPUT);
  digitalWrite(RES, HIGH);
  //delay(10);
  //digitalWrite(ASCL, LOW);
  //digitalWrite(ASDA, LOW);
  //delay(10);
  Wire.begin();
  delay(10);
  CiZ_init();
  delay(5);
}

void loop()
{
  show(text5);
  nextline();
  show(text2);
  delay(1500);
  cleardisplay();
  delay(2);

  show(text3);
  nextline();
  show(text4);
  delay(1500);
  cleardisplay();
  delay(2);
}

Note - the Wire.endTransmission() function will only return a 0 if it receives an ACK.

44
Thanks for the information.  Do you have any other displays to try?  Are the any other devices present on the I2C bus?  If so, can you isolate the display?  With your current I2C setup, can you communicate with any other devices and receive all ACKs correctly?  As I've said I haven't heard of this previously, so it is a new, and fairly odd issue.
Please confirm the above, and if all else fails please either contact quality@newhavendisplay.com to setup an RMA to return the display back to us for analysis.  If you prefer a quicker alternative, you may purchase another display from our website or our distributors such as DigiKey or Mouser and run your test again.

Pages: 1 2 [3] 4 5 ... 24