Lucifer
Posts: 2
Joined: Thu Jan 12, 2017 12:56 am

Lcd display

Thu Jan 12, 2017 11:05 pm

I have a 16x2 LCD display (a bit like the one from adafruit) with i2c and I can get it to display messages I input into the python code and then run. I was wondering if anyone had created a piece of python code that would allow me to type a message and have it instantly displayed on the display.

DirkS
Posts: 10371
Joined: Tue Jun 19, 2012 9:46 pm
Location: Essex, UK

Re: Lcd display

Thu Jan 12, 2017 11:10 pm


Lucifer
Posts: 2
Joined: Thu Jan 12, 2017 12:56 am

Re: Lcd display

Thu Jan 12, 2017 11:43 pm

No, I want to display everything I type on the LCD. type a message and have it instantly displayed on the display.

User avatar
DougieLawson
Posts: 39296
Joined: Sun Jun 16, 2013 11:19 pm
Location: A small cave in deepest darkest Basingstoke, UK
Contact: Website Twitter

Re: Lcd display

Fri Jan 13, 2017 2:33 pm

Try this program to check whether your 16x2 LCD is working and wired correctly.

Code: Select all

#!/usr/bin/python
import smbus
import time

I2C_ADDR  = 0x27 # I2C device address
LCD_WIDTH = 16   # Maximum characters per line

LCD_CHR = 1 # Mode - Sending data
LCD_CMD = 0 # Mode - Sending command

LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line
LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line

LCD_BACKLIGHT  = 0x08  # On

ENABLE = 0b00000100 # Enable bit

E_PULSE = 0.0005
E_DELAY = 0.0005

bus = smbus.SMBus(1) # Rev 2 Pi uses 1

def lcd_init():
  lcd_byte(0x33,LCD_CMD) # 110011 Initialise
  lcd_byte(0x32,LCD_CMD) # 110010 Initialise
  lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
  lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off
  lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
  lcd_byte(0x01,LCD_CMD) # 000001 Clear display
  time.sleep(E_DELAY)

def lcd_byte(bits, mode):
  bits_high = mode | (bits & 0xF0) | LCD_BACKLIGHT
  bits_low = mode | ((bits<<4) & 0xF0) | LCD_BACKLIGHT
  print '{0:8b}'.format(bits_high)
  bus.write_byte(I2C_ADDR, bits_high)
  lcd_toggle_enable(bits_high)
  print '{0:8b}'.format(bits_low)
  bus.write_byte(I2C_ADDR, bits_low)
  lcd_toggle_enable(bits_low)

def lcd_toggle_enable(bits):
  time.sleep(E_DELAY)
  bus.write_byte(I2C_ADDR, (bits | ENABLE))
  time.sleep(E_PULSE)
  bus.write_byte(I2C_ADDR,(bits & ~ENABLE))
  time.sleep(E_DELAY)

def lcd_string(message,line):
  message = message.ljust(LCD_WIDTH," ")
  lcd_byte(line, LCD_CMD)
  for i in range(LCD_WIDTH):
    lcd_byte(ord(message[i]),LCD_CHR)

def main():
  lcd_init()
  while True:

    lcd_string("Line1 ---16CHARS",LCD_LINE_1)
    lcd_string("I2C LCD         ",LCD_LINE_2)

    time.sleep(3)

    # Send some more text
    lcd_string(">         Line1 ",LCD_LINE_1)
    lcd_string(">        I2C LCD",LCD_LINE_2)

    time.sleep(3)

if __name__ == '__main__':

  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    lcd_byte(0x01, LCD_CMD)

You should be able to modify that program to accept input and display it on your LCD.
Note: Any requirement to use a crystal ball or mind reading will result in me ignoring your question.

Criticising any questions is banned on this forum.

Any DMs sent on Twitter will be answered next month.
All non-medical doctors are on my foes list.

RDS
Posts: 776
Joined: Tue Oct 06, 2015 8:17 am
Location: Lancashire, UK

Re: Lcd display

Tue Mar 21, 2017 5:18 pm

DougieLawson wrote:Try this program to check whether your 16x2 LCD is working and wired correctly ...
Dougie, I know you posted it a few months ago but I cannot get this program to work on Python 3, or is it a Python 2 program?

scotty101
Posts: 3958
Joined: Fri Jun 08, 2012 6:03 pm

Re: Lcd display

Tue Mar 21, 2017 5:38 pm

Looks like python2 given the missing parenthesis for print

Code: Select all

print '{0:8b}'.format(bits_high)
Electronic and Computer Engineer
Pi Interests: Home Automation, IOT, Python and Tkinter

RDS
Posts: 776
Joined: Tue Oct 06, 2015 8:17 am
Location: Lancashire, UK

Re: Lcd display

Tue Mar 21, 2017 5:45 pm

scotty101 wrote:Looks like python2 given the missing parenthesis for print.
Yes that is what I thought but I have added those and still cannot get it to work. Having said that though, I have a 20 x 4 LCD so that could now be why. Just wanted to eliminate one thing at a time. Thanks.

scotty101
Posts: 3958
Joined: Fri Jun 08, 2012 6:03 pm

Re: Lcd display

Tue Mar 21, 2017 5:52 pm

Any other error messages?

Does i2cdetect find the display?
Electronic and Computer Engineer
Pi Interests: Home Automation, IOT, Python and Tkinter

RDS
Posts: 776
Joined: Tue Oct 06, 2015 8:17 am
Location: Lancashire, UK

Re: Lcd display

Tue Mar 21, 2017 7:18 pm

@scotty101
Thank you for your reply.

Yes, sudo i2cdetect -y 1, does detect the display and outputs the following:

Code: Select all

    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3f 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --    


When I run the program in Python 2, it gives the following output, so it seems to run so far (by printing 111000 and then 1000) before reporting errors

Code: Select all

  111000
    1000

Traceback (most recent call last):
  File "/home/pi/I2C Python 2 program.py", line 79, in <module>
    lcd_byte(0x01, LCD_CMD)
  File "/home/pi/I2C Python 2 program.py", line 38, in lcd_byte
    bus.write_byte(I2C_ADDR, bits_high)
IOError: [Errno 5] Input/output error

scotty101
Posts: 3958
Joined: Fri Jun 08, 2012 6:03 pm

Re: Lcd display

Tue Mar 21, 2017 7:53 pm

Does running the script with 'sudo python your_script.py' make any difference.
Electronic and Computer Engineer
Pi Interests: Home Automation, IOT, Python and Tkinter

RDS
Posts: 776
Joined: Tue Oct 06, 2015 8:17 am
Location: Lancashire, UK

Re: Lcd display

Tue Mar 21, 2017 8:24 pm

@scotty101,
I am not familiar with that program. Is it something I need to download from somewhere.

scotty101
Posts: 3958
Joined: Fri Jun 08, 2012 6:03 pm

Re: Lcd display

Tue Mar 21, 2017 9:25 pm

No..

It is standard. It is a command that elevates the permissions of your program.
Electronic and Computer Engineer
Pi Interests: Home Automation, IOT, Python and Tkinter

User avatar
DougieLawson
Posts: 39296
Joined: Sun Jun 16, 2013 11:19 pm
Location: A small cave in deepest darkest Basingstoke, UK
Contact: Website Twitter

Re: Lcd display

Tue Mar 21, 2017 9:55 pm

You need a quick tweak to my sample python2 program
Change

Code: Select all

I2C_ADDR  = 0x27 # I2C device address
to

Code: Select all

I2C_ADDR  = 0x3F # I2C device address
Note: Any requirement to use a crystal ball or mind reading will result in me ignoring your question.

Criticising any questions is banned on this forum.

Any DMs sent on Twitter will be answered next month.
All non-medical doctors are on my foes list.

RDS
Posts: 776
Joined: Tue Oct 06, 2015 8:17 am
Location: Lancashire, UK

Re: Lcd display

Tue Mar 21, 2017 10:19 pm

DougieLawson wrote:You need a quick tweak to my sample python2 program
Thank you. That has made a difference but although there are now no errors, it has just produced a (seemingly) never ending list of binary? on the screen but nothing on the LCD. The following is just a small sample and it was continuing until I pressed CTRL-C.

I was expecting an output as indicated in the last few lines of your program.

Have I done something wrong?

Code: Select all

  111000
  111000
  111000
  101000
    1000
 1101000
    1000
11001000
  101000
10001000
    1000
   11000
10001000

User avatar
DougieLawson
Posts: 39296
Joined: Sun Jun 16, 2013 11:19 pm
Location: A small cave in deepest darkest Basingstoke, UK
Contact: Website Twitter

Re: Lcd display

Tue Mar 21, 2017 11:11 pm

That stuff is just some debugging to show the bits that are being sent to the LCD.

The more important test involves a pair of MK I eyeballs and the LCD you're trying to drive.
Note: Any requirement to use a crystal ball or mind reading will result in me ignoring your question.

Criticising any questions is banned on this forum.

Any DMs sent on Twitter will be answered next month.
All non-medical doctors are on my foes list.

RDS
Posts: 776
Joined: Tue Oct 06, 2015 8:17 am
Location: Lancashire, UK

Re: Lcd display

Tue Mar 21, 2017 11:38 pm

DougieLawson wrote:The more important test involves a pair of MK I eyeballs and the LCD you're trying to drive.
Ha Ha,
Yes I had those but a simple adjustment of the pot on the back of the I2C unit has enabled the screen to go from completely blank to displaying the necessary lines!
Thank you.

Return to “Troubleshooting”