Quantcast
Channel: MEL PICBASIC Forum
Viewing all articles
Browse latest Browse all 4745

Newhaven 4x40 LCD, issues!

$
0
0
For the past few days I’ve been working with a Newhaven 4x40 Character LCD. The Newhaven NHD-0440WH-ATMI-JT has duel ST7066U controllers. I have written an Initializing routine outlined in the datasheet but “NOTHING”. No cursor, no characters, “NADA”. I have tried PBP LCDOUT using E1 only, no luck here either. Even if that worked I am not sure how to handle E1 & E2 in the LCDOUT command. Can a port assinment DEFINE such as LCD_EBIT be changed with use of the bas. file, PORTL?

Blinky light routine works fine. Any Ideas anyone?

The datasheet reads as if the LCD is in fact two (2x40) LCD’s
16F886 at 4Mhz
I tried to slow the 16F886 to 2Mhz, OSCCON=$50 but PBP didn’t like it.

LCD pinout -------- 16F886 Pin#
1. DB7……..PortA.7……….9
2. DB6……..PortA.6……….10
3. DB5……..PortA.5……….7
4. DB4……..PortA.4……….6
5. DB3……..PortA.3……….5
6. DB2……..PortA.2……….4
7. DB1……..PortA.1……….3
8. DB0……..PortA.0……….2
9. E1………..PortC.0……….11
10. R/W…..PortC.3……….14
11. RS……..PortC.2……….13
12. Vo…….….Center pin 20k pot – 0.5V
13. Vss…….…GND
14. Vdd……...5v
15. E2………...PortC.1……...12
16. NC…….….GND
17. LCD+……100 ohm to 5V
18. LCD-…….GND
Code:


;16F886
@ DEVICE MCLR_OFF,BOD_OFF,WDT_ON,LVP_OFF
define osc 4
OSCCON=$60              ;70=8MHz, 60=4MHz, 50=2MHz, 40=1MHz.
ANSEL=$00
ADCON0=$00
CM1CON0= 0
CM2CON0= 0
ANSELH=$00
PortA=0
PortB=0
PortC=0
TrisA=0
TrisB=0
TrisC=0

'Constents
Wakeup        CON $30
FunctionSet  CON $38    ;Function Set = 8bit mode; 2-line; 5x8
DisplayON    CON $0C    ;Turn on display; no cursor
DisplayOnBcursCON $0F ;display on with blinking cursor
DisplayOFF    CON $08    ;Turn off display
EntryMode    CON $06    ;Entry mode cursor increment
ClearDisp    CON $01    ;Clear display
Home          CON $02    ;cursor set to home position


'Variables
Avar var byte
Bvar var byte
Cvar var byte
Dvar var byte
LED  Var PORTB.1

E1  var PORTC.0  ;top 2 lines of display
E2  var PORTC.1  ;bottom 2 lines of display
RS  var PORTC.2
RW  var PortC.3

'EEPROM
Data @0, " Hello World line1  " '20bites
Data @20," Hello World line2  " '20bites address C0h  E1
Data @40," Hello World line3  " '20bites
Data @60," Hello World line4  " '20bites address C0h  E2

Start:
    goto Main

Blinky:
        led =0
        for Avar=1 to 4
        toggle led
        pause 500
        toggle led
        pause 500
        next avar       
        return

;INIT_LCD_SUBS
Command1:                              'command sub for upper 2 lines
        PortA=Cvar
        Rs=0
        RW=0
        E1=1
        pause 5
        E1=0
        return
       
Command2:                              'command sub for lower2 lines
        PortA=Cvar
        Rs=0
        RW=0
        E2=1
        pause 5
        E2=0
        return
       
Writedata1:                                'Write to upper 2 lines
        PortA=Cvar
        Rs=1
        RW=0
        E1=1
        pause 5
        E1=0
        return
       
Writedata2:                                'Write to lower 2 lines
        PortA=Cvar
        Rs=1
        RW=0
        E2=1
        pause 5
        E2=0
        return
       
TestBusyFlag1:                            'waits until BF is clear to return
        PortA=$FF
        Rs=0
        RW=1
        E1=1
RBF: 
        @nop
        @ BTFSC    PortA.7
        goto RBF
        Rs=1     
        RW=0       
        E1=0       
        return       


INIT_LCD:
'Wakeup
        Cvar = Wakeup
        gosub Command1
        gosub Command2
        pause 2       
'Wakeup
        Cvar = Wakeup
        gosub Command1
        gosub Command2
        pause 2
'Wakeup
        Cvar = Wakeup
        gosub Command1
        gosub Command2
        pause 2
;FunctionSet                                  ;Function Set = 8bit mode; 2-line; 5x8
        Cvar = FunctionSet
        gosub Command1
        gosub Command2
        pause 2
       
'Display Off
        cvar = DisplayOFF
        gosub Command1
        gosub Command2
        pause 2
'Display Clear
        Cvar = ClearDisp
        gosub Command1
        gosub Command2
        pause 2
'Entry Mode Set                                  ;Entry mode cursor increment
        cvar = EntryMode
        gosub Command1
        gosub Command2
        pause 2
'Display On       
        cvar = DisplayOnBcurs                ;Turn on display; with blinking cusor
        gosub Command1
        gosub Command2
        pause 2     
        return
       
   
       
Main:                            'Write "Hello World"           
        GOSUB Blinky
        GOSUB INIT_LCD
                       
Message_line1:
        Cvar=Home            ;Set DDRam address for line 1
        gosub Command1
        avar = 0                ;starting address of EEprom first message
        Bvar = Avar + 20
        WHILE Avar < Bvar 
        read Avar, Cvar   
        Avar = Avar + 1
        gosub Writedata1    ;write Cvar(contents of EEProm character) to LCD
        pause 100
        WEND

Marktime:
        toggle led
        pause 1000
        toggle led
        pause 1000
        goto Marktime

    end

Attached Images

Viewing all articles
Browse latest Browse all 4745

Trending Articles