Lab 3b: LCD Parallel Interface - PMP I/O Control
Download This Document
1. Objectives
Identify the PIC32 processor pins used for the
LCD interface.
Implement
LCD control using the PIC32 Parallel Master Port (PMP).
Understand handshaking requirements for interfacing two systems operating at differing clock speeds.
2. Basic Knowledge
-
-
How to write a computer program using the
C language.
-
3. Equipment List
3.1. Hardware
-
-
Workstation computer running Windows 10 or higher, MAC
OS, or Linux
In addition, we suggest the following instruments:
-
3.2. Software:
The following programs must be installed on your development workstation:
-
-
-
-
4. Project Takeaways
How to implement a bi-directional parallel I/O interface.
How to use delays to control signal timing.
How to manage
ASCII text strings.
5. Fundamental Concepts
Microprocessors are the core element in an embedded system. Most embedded applications need resources or capability not available in the microprocessor. The additional capability can be provided by specialty electronic devices. Computer communications is necessary to exchange data between the microprocessor with these devices. The communications interface is provided using serial or parallel inputs and outputs. Parallel I/O implies multiple input/output operations at the same time whereas serial I/O implies single bit data exchanges. Whether the communications interface is serial or parallel, handshaking is required to coordinate the data exchange activity.
6. Problem Statement
Develop and test a collection of functions that allow text to be placed at any position on a parallel I/O character LCD following the DFD and CFD models presented in Unit 3. The LCD_puts function is required to process the ASCII control characters, which are described in Table 8.1.
Character Liquid Crystal Displays (LCD) are low-cost electronic devices that are capable of generating visual displays consisting of alphanumeric characters and graphical symbols commonly used for embedded system human machine interfaces (HMI). Many suppliers of LCD devices are based on the Hitachi HD44780 LCD controller, and hence have a common hardware and software interface. Some LCD devices have serial interfaces that use UART, I2C, and SPI communications1). These protocols are covered in Unit 4. Other LCD devices use interfaces consisting of four or eight data lines and three control lines2). Although the LCDs that use a serial interface require fewer processor I/O pins, the display controller IC is still based on the Hitachi HD44780, which uses 8 or 11 I/O pins. Hence, the serial LCD devices have an on-board microprocessor that translates the serial communications instructions to parallel I/O.
The handshaking required to successfully communicate with the LCD on the Basys MX3 is representative of many common parallel interfaces.
8. Lab 3a
8.1. Requirements
All
LCD interface pin control will use PMP interface as described in the Unit 3 text.
Write a library of functions to provide general capability to display strings of text, characters, and numbers at specified positions on the
LCD display.
All
LCD control sequences must meet the strict timing requirements for the following operations:
Initialize the
LCD using the recommended sequence of instructions to write specific codes to the
LCD at specified intervals, shown in the control flow diagram of Fig. B.2.
Position the cursor in the display space (Line 1 or Line 2) where the next character is to be displayed.
Write function(s) that write
ASCII control and display data to the Display Data Ram (DDRAM).
Translate the
ASCII control characters into one or more C instructions for the
LCD as detailed in Table 8.1.
Write functions that write
ASCII character data to the Display Data Ram (DDRAM).
Write a function that will write a single
ASCII encoded character to the display.
Write a function that will write a string (array) of
ASCII encoded characters to the display.
Using the following program, develop a test project that will verify that the function
LCD_puts(byte *str); correctly displays an array of
ASCII text and control characters.
char test_str[] = “ User generated test string”;
int main(void)
{
hardware_setup(void); // Initialize the LCD IO pins
LCD_init(); // Initialize LCD
while(1)
{
LCD_puts(test_str); // Display the text string
DelayMs(1000); // Delay 1 second
LCDWrite(0x01); // Clear LCD
}
}
Write an application program for the Basys MX3 processor board that achieves the following:
Initializes a loop counter to a value of zero.
Displays your name on the first line.
Repositions the cursor to the beginning of the second line and displays the text “Lab 3b.”
Repositions the cursor to the eighth character position of the second line.
Displays the value of the loop counter.
Increments the loop counter.
Delays one second before repeating steps d through g.
Table 8.1. LCD controls.
ASCII Character | Hex
Code | LCD Code | Action |
LF | 0x0A | 0x01 | Line Feed: Clears the line where the cursor is positioned and places the cursor at left position on that line |
CR | 0x0F | 0x02 | Return: Places the cursor at left position on the line where the cursor is positioned without clearing display |
TAB | 0x09 | | Moves cursor position 4 places to the right. If this action places the cursor beyond the end of Line 1, the cursor will be placed at the start of Line 2. |
FF | 0x0C | 0x01 | Form Feed: Clears display and places the cursor at left position on top line |
8.2. Design Phase
Generate a project in MPLAB X.
Copy the config.bits file to the project directory.
Open three new C files: main.c, lcd.c, and swdelay.c.
Open two new header files: lcd.h and swdelay.h.
Generate the contents of the main.c file for the initialization code and the infinite loop.
In swdelay.c, generate a function prototype for the msDelay(unsigned int dly); function.
Copy the software delay function from Unit 2, Listing 7.3 to swdelay.c.
In lcd.h, generate function prototypes for the five
LCD functions shown in Fig. B.1.
Generate the code for the five
LCD functions in lcd.c.
8.3. Construction Phase
Write a problem statement that lists the requirements.
Determine what elements of the Basys MX3 board will be used.
List the processor hardware resources that you will be using in this design.
Generate a data flow diagram that identifies tasks (functions) and the information that needs to be passed between these tasks.
Using the DFD and the multiple CFDs shown in Appendix B, develop and test the functions that will initialize the
LCD and display single characters and a string of characters. You should use the? software delay function used in Lab 1b.
8.3. Construction Phase
Write a problem statement that lists the requirements.
Determine what elements of the Basys MX3 board will be used.
List the processor hardware resources that you will be using in this design.
Generate a data flow diagram that identifies tasks (functions) and the information that needs to be passed between these tasks.
Using the DFD and the multiple CFDs shown in Appendix B, develop and test the functions that will initialize the
LCD and display single characters and a string of characters. You should use the software delay function used in Lab 1b.
8.4. Testing
Demonstrate that the test program developed for requirement 4 executes correctly using the test string “\0141234\0115678\0119ABC\r”.
Demonstrate that the test program developed for requirement 5 executes correctly.
9. Questions
What are the advantages of using the PMP interface over the bit-banging interface?
What are the advantages of using the bit-banging interface over the PMP interface?
How would the
LCD display be affected if the application described above is combined with an application that uses interrupts?
What is the maximum rate at which characters can be written to the
LCD?
10. References
Appendix A: Basys MX3 Schematic Drawings
Figure A.1. LCD connection schematic diagram for Labs 3a and 3b.
Appendix B: LCD Code Concept Maps
Figure B.1. Data flow diagram for the LCD control.
Figure B.2. Control flow diagram for the LCD initialization.
Figure B.3. Control flow diagram for LCD Write operation using bit-banging.
Figure B.4. Control flow diagram for LCD Write operation using bit-banging.
Figure B.5. LCD display character control flow diagram.
Back to Unit 3
Back to Lab 3a
Go to Unit 4 Part 1