Simple LCD code not working!...WHY?


Closed Thread
Results 1 to 8 of 8

Hybrid View

  1. #1


    Did you find this post helpful? Yes | No

    Default HI

    Hi jellis00

    Do you see blocks on the LCD ?
    What's this line in your code?
    Code:
    'DEFINE SHOWDITIAL 1'
    shouldn't it be showdigital ?
    Next .. which port is your LCD connected to ?
    If it's on PORTB like your code shows then your TRIS statement is set in the wrong direction.
    You have
    Code:
    TRISB =%11111111
    which should actually be
    Code:
    TRISB=%00000000
    since you are sending to the LCD so the port should be set for output.
    A nice way to remember it is that the number one looks like an i (I) which stands for Input and a zero (0 ) stands for output :-)

    I feel you frustration by the way.
    I spent many a night trying to get mine working :-)
    If you like you are welcome to follow my example and then head back to yours once it's working and trouble-shoot the problem !
    So probably the easiest is to just get it working and then trouble shoot. I used PORTD by the way :-)
    By the way I have an 18F4520 (very similar)

    Your problems could be a few things .. like a pause 1000 ( 1 second delay) before your code , giving time for the LCD to 'warm up' or initialize and so forth.

    So I'll attach a schematic just wire it the same way and then just cut and paste my code and compile it and program your pic with it.
    Here's my code
    Code:
    '*************************************
    'Keypress display on LCD and TX to wherever
    '*************************************
    
    'Ocsillator selections here
            OSCCON = $70            'Int CLK 8MHz
            OSCTUNE.6 = 1           'PLL 4x
            ADCON1= %00001111       '$0F = disable A/D converter
            cmcon   =   7 
            INTCON2.7 = 0     'switch pull-ups ON
    'END of oscillator selections
      'timer/oscillator defines 
            DEFINE OSC 32            '4x 8MHz
    'END of timer/oscillator defines
    
    'Port IO directions and presets for port pins begin here
    'TRISX = %76543210   << tris bit order numbering
    'TRISA = %11111111       'All pins are inputs
    ' Define port pins as inputs and outputs ...
            TRISA  = %00000000 'example only - TRISB = %00001111 ;Make B4-B7 outputs, B0-B3 inputs, 
            TRISB = %11111111  'for 4x4 keypad all input
            TRISC = %10010000
            TRISD = %00000000
            TRISE.0 = 0
            TRISE.1 = 0
            TRISE.2 = 0
    'End of Port IO directions and presets for port pins begin here
    
                       
    'variables begin here
            LED var PORTd.0   ' Alias PORTD.0 to LED
    'end of variables
    
    'LCD defines begin here   
            DEFINE LCD_BITS 4 	'defines the number of data interface lines (4 or 8) 
            DEFINE LCD_DREG PORTD 	'defines the port where data lines are connected to
            DEFINE LCD_DBIT 4 	'defines the position of data lines for 4-bit interface (0 or 4)
            DEFINE LCD_RSREG PORTD 	'defines the port where RS line is connected to
            DEFINE LCD_RSBIT 2 	'defines the pin where RS line is connected to 
            DEFINE LCD_EREG PORTD 	'defines the port where E line is connected to 
            DEFINE LCD_EBIT 3 	'defines the pin where E line is connected 
            'DEFINE LCD_RWREG 0 	'defines the port where R/W line is connected to (set to 0 if not used)
            'DEFINE LCD_RWBIT 0 	'defines the pin where R/W line is connected to (set to 0 if not used)
            DEFINE LCD_COMMANDUS 2000 	'defines the delay after LCDOUT statement 
            DEFINE LCD_DATAUS 200 		'delay in micro seconds
    'END of LCD DEFINES
    
    'includes begin here
     INCLUDE "modedefs.bas"
    'end of includes
    
    'Main code begins here       
    
            Pause 2000       ' Wait for LCD to startup
            
    test:                                                         
            lcdout $fe,1 'clear lcd screen
            lcdout "hello world !"
    
    
            high LED '  LED on
            Pause 1000       ' Delay for .5 seconds
    	low led 'LED off
             Pause 1000       ' Delay for .5 seconds
    goto test
    end
    I used an LED on port D.0 as you can see, change the port to where your LED is connected. Get 1 blinking first then start playing with more :-)

    Schematic here
    [/HTML]http://www.picbasic.co.uk/forum/showthread.php?t=12179[/HTML]
    All the best ..good luck

    Kind regards

    Dennis
    Last edited by Dennis; - 29th November 2009 at 01:57.

  2. #2


    Did you find this post helpful? Yes | No

    Default code for your LCD setup ;-)

    Hi jellis

    I have altered the code to suit your LCD.
    Code:
    '*************************************
    'Keypress display on LCD and TX to wherever
    '*************************************
    
    'Ocsillator selections here
            OSCCON = $70            'Int CLK 8MHz
            OSCTUNE.6 = 1           'PLL 4x
            ADCON1= %00001111       '$0F = disable A/D converter
            cmcon   =   7 
            INTCON2.7 = 0     'switch pull-ups ON
    'END of oscillator selections
      'timer/oscillator defines 
            DEFINE OSC 32            '4x 8MHz
    'END of timer/oscillator defines
    
    'Port IO directions and presets for port pins begin here
    'TRISX = %76543210   << tris bit order numbering
    'TRISA = %11111111       'All pins are inputs
    ' Define port pins as inputs and outputs ...
            TRISA  = %00000000 'example only - TRISB = %00001111 ;Make B4-B7 outputs, B0-B3 inputs, 
            TRISB = %00000000 'all output
            TRISC = %10010000 'C4 and C7 input
            TRISD = %00000000 'all output
            TRISE.0 = 0 'output
            TRISE.1 = 0 'output
            TRISE.2 = 0 'output
    'End of Port IO directions and presets for port pins begin here
    
                       
    'variables begin here
            LED var PORTd.0   ' Alias PORTD.0 to LED
    'end of variables
    
    'LCD defines begin here   
            DEFINE LCD_BITS 4 	'defines the number of data interface lines (4 or 8) 
            DEFINE LCD_DREG PORTB 	'defines the port where data lines are connected to
            DEFINE LCD_DBIT 4 	'defines the position of data lines for 4-bit interface (0 or 4)
            DEFINE LCD_RSREG PORTB 	'defines the port where RS line is connected to
            DEFINE LCD_RSBIT 2 	'defines the pin where RS line is connected to 
            DEFINE LCD_EREG PORTB 	'defines the port where E line is connected to 
            DEFINE LCD_EBIT 3 	'defines the pin where E line is connected 
            'DEFINE LCD_RWREG 0 	'defines the port where R/W line is connected to (set to 0 if not used)
            'DEFINE LCD_RWBIT 0 	'defines the pin where R/W line is connected to (set to 0 if not used)
            DEFINE LCD_COMMANDUS 2000 	'defines the delay after LCDOUT statement 
            DEFINE LCD_DATAUS 200 		'delay in micro seconds
    'END of LCD DEFINES
    
    'includes begin here
     INCLUDE "modedefs.bas"
    'end of includes
    
    'Main code begins here       
    
            Pause 2000       ' Wait for LCD to startup
            
    test:                                                         
            lcdout $fe,1 'clear lcd screen
            lcdout "hello world !"
    
    
            high LED '  LED on
            Pause 1000       ' Delay for .5 seconds
    	low led 'LED off
             Pause 1000       ' Delay for .5 seconds
    goto test
    end
    Please make sure you have an LED wired to PORTD.0 or change the variable in your code to suit your setup.

    Apparently most LCD issues are because of bad wiring (I can vouch for it, I messed up many a time too)
    So please check and double check your wiring.
    Probably easiest is to follow the schematic i referred you to and just substitute (or even better just redraw it) to suit your PIC

    Also check out the diagram here which I made and has proved very useful as a reference for my project and experiments.

    Good luck

    Kind regards
    Dennis
    Attached Images Attached Images  

  3. #3
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Dennis View Post
    Do you see blocks on the LCD ?
    Yes, I do see the blocks when I turn the contrast up. Does that give any hints as to what is going wrong?

    What's this line in your code?
    Code:
    'DEFINE SHOWDITIAL 1'
    shouldn't it be showdigital ?
    Yes...my typo...which I have fixed.
    Next .. which port is your LCD connected to ?
    If it's on PORTB like your code shows then your TRIS statement is set in the wrong direction.
    You have
    Code:
    TRISB =%11111111
    which should actually be
    Code:
    TRISB=%00000000
    since you are sending to the LCD so the port should be set for output.
    A nice way to remember it is that the number one looks like an i (I) which stands for Input and a zero (0 ) stands for output :-)
    I knew better and must have had a senior moment....but fixed this.

    Your problems could be a few things .. like a pause 1000 ( 1 second delay) before your code , giving time for the LCD to 'warm up' or initialize and so forth.
    Changed it to 1000.

    After all of above changes it still doesn't display and info.

    Here's my code
    I will take a close look at your code versus mine and see if I can figure out where I went wrong and get back to you. Thanks for your inputs!

Similar Threads

  1. Loop with two motor and 2 sensors
    By MrRoboto in forum mel PIC BASIC
    Replies: 4
    Last Post: - 9th December 2008, 00:40
  2. My LCD code is not working...
    By kvrajasekar in forum mel PIC BASIC
    Replies: 2
    Last Post: - 7th December 2008, 06:41
  3. Making Program Code Space your playground...
    By Melanie in forum Code Examples
    Replies: 15
    Last Post: - 19th July 2008, 09:26
  4. LCD issue with EasyPIC5
    By manwolf in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 15th June 2008, 10:17
  5. having problems with Hantronix 20x4 lcd
    By Rhatidbwoy in forum mel PIC BASIC Pro
    Replies: 16
    Last Post: - 22nd December 2005, 13:22

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts