We will use an attiny2313 AVR microcontroller to display strings on an HD44780 LCD (4-bit mode).
482 bytes of flash written. Using internal oscillator.
## Connections
+-----------------------------------+----------------+ | HD44780 LCD | attiny2313 MCU | +-----------------------------------+----------------+ | PIN 1 (GND) | | | PIN 2 (+5V) | | | PIN 3 (contrast/GND) | | | PIN 4 (reg select) | PIN 2 (PD0) | | PIN 5 (R/W) | PIN 3 (PD1) | | PIN 6 (Enable) | PIN 6 (PD2) | | PIN 7 | | | PIN 8 | | | PIN 9 | | | PIN 10 | | | PIN 11 | PIN 12 (PB0) | | PIN 12 | PIN 13 (PB1) | | PIN 13 | PIN 14 (PB2) | | PIN 14 | PIN 15 (PB3) | | PIN 15 (220 Omhs resistor to +5V) | | | PIN 16 (GND) | | +-----------------------------------+----------------+
## Firmware
We will include in our code the LCD library by Peter Fleury (http://homepage.hispeed.ch/peterfleury/avr-software.html#libs).
lcd.h – setting ports and 4-bit mode
line 128:
#if LCD_IO_MODE #ifndef LCD_PORT #define LCD_PORT PORTB /**< port for the LCD lines */ #endif #ifndef LCD_DATA0_PORT #define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */ #endif #ifndef LCD_DATA1_PORT #define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */ #endif #ifndef LCD_DATA2_PORT #define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */ #endif #ifndef LCD_DATA3_PORT #define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */ #endif #ifndef LCD_DATA0_PIN #define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */ #endif #ifndef LCD_DATA1_PIN #define LCD_DATA1_PIN 1 /**< pin for 4bit data bit 1 */ #endif #ifndef LCD_DATA2_PIN #define LCD_DATA2_PIN 2 /**< pin for 4bit data bit 2 */ #endif #ifndef LCD_DATA3_PIN #define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */ #endif #ifndef LCD_RS_PORT #define LCD_RS_PORT PORTD /**< port for RS line */ #endif #ifndef LCD_RS_PIN #define LCD_RS_PIN 0 /**< pin for RS line */ #endif #ifndef LCD_RW_PORT #define LCD_RW_PORT PORTD /**< port for RW line */ #endif #ifndef LCD_RW_PIN #define LCD_RW_PIN 1 /**< pin for RW line */ #endif #ifndef LCD_E_PORT #define LCD_E_PORT PORTD /**< port for Enable line */ #endif #ifndef LCD_E_PIN #define LCD_E_PIN 2 /**< pin for Enable line */ #endif
and in line 241:
#define LCD_FUNCTION_8BIT 0 /* DB4: set 8BIT mode (0->4BIT mode) */
main.c:
/* dthlabs.com - July 22, 2017 */
#define F_CPU 1000000 // CPU frequency
#include <stdlib.h>
#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h"
#include "lcd.c"
int main(void) {
lcd_init(LCD_DISP_ON);
lcd_clrscr();
lcd_puts(" dthlabs.com\n");
lcd_puts(" tech blog");
}
github repo: https://github.com/xdth/AVR_HD44780LCD