I am totally embarrassed to tell everyone I found the problem....and it was one of my own making. I had an intermittent trace on the PCB between the MCU pin and the LCD's R/W pin. I wouldn't have found this if Darrel Taylor hadn't sent me a manual initialization routine that (as he said) if the LCD didn't work with it, it never would. When it didn't work it forced me to go back aqnd re-verify the PCB interfaces to the LCD. I had done this before but somehow missed the bad R/W interconnect....I suppose it was intermittenly working at the time.
At any rate, I totally appreciate all the good advice I received on this thread. The people that support this forum are the best.
As a small token of "give back" I am posting my final code for the routine that now works with the NEWHAVEN displays. I highly recommend them...they are low cost ($8.25 ea) and even though they don't require a backlight their reflectance performance gives a very readable display in even low light conditions....plus their tech support is outstanding.
Here is code for initializing their 2x8 LCD modules...they have one for 5vdc operation and one for 3vdc operation that has exactly the same physical and electrical interfaces...and both at $8.25.
InitializeDisplay: ' Subroutine to initialize NEWHAVEN NHD-0208AZ-RN-YBW
'================= ' 2x8 LCD2X8 LCD display
' Blink LED_GRN twice to indicate entered IntializeDisplay
For i = 0 to 1
HIGH LED_GRN
Pause 500
LOW LED_GRN
PAUSE 500
Next
' LCD DEFINES FOR USING 2x8 LCD with PortA
DEFINE LCD_DREG PORTA ' Use PORTA for LCD Data
DEFINE LCD_DBIT 0 ' Use lower(4) 4 bits of PORTA
' PORTA.0 thru PORTA.3 connect to
' LCD DB4 thru LCD DB-7 respectively
DEFINE LCD_RSREG PORTA ' PORTA for RegisterSelect (RS) bit
DEFINE LCD_RSBIT 4 ' PORTA.4 pin for LCD's RS line
DEFINE LCD_RWREG PORTC ' LCD read/write port
DEFINE LCD_RWBIT 2 ' LCD read/write bit
DEFINE LCD_EREG PORTA ' PORTA for Enable (E) bit
DEFINE LCD_EBIT 5 ' PORTA.5 pin for LCD's E line
DEFINE LCD_BITS 4 ' Using 4-bit bus
DEFINE LCD_LINES 2 ' Using 2 line Display
DEFINE LCD_COMMANDUS 10000' Command Delay (uS)
DEFINE LCD_DATAUS 100 ' Data Delay (uS)
' DEFINE LCD Control Constants
Line1 CON 128 ' Point to beginning of line 1 ($80)
Line2 CON 192 ' Point to beginning of line 2 ($C0)
' Test the LCD during initialization
LCDOut $fe,1:FLAGS=0:Pause 250 ' Clear Display
LCDOut $fe,Line1,"LCD TEST" ' Display on 1st line
Pause 500
LCDOut $fe,Line2,"Power On!" ' Display on 2nd line
PAUSE 1000
Return
Bookmarks