Hello World mittels LCD-Display
In diesem Kapitel wird gezeigt, wie man ein LCD-Display an den Arduino anschließt und dieses per Atmel Studio anspricht.
Dazu muss in Atmel Studio für das LCD-Display eine Bibliothek heruntergeladen und implementiert werden. Eine Anleitung dazu ist bereits im Kapitel "Atmel Studio 7 -> Bibliotheken in ein Projekt einbinden" verfasst. Alternativ kann auch die zip-Datei am Artikelende heruntergeladen werden, diese beinhaltet die benötigte LCD-Bibliothek bereits.
Das in diesem Beispiel verwendete Display ist das 1602A LCD Display, das folgende Pin Belegung besitzt:
Abb.: Vorderseite LCD Display; Quelle: BBS2 Wolfsburg
VSS - Masse
VDD - Spannungsversorgung der Logik (5V)
V0 - Spannungsversorgung für das LCD-Modul (Kontrasteinstellungen per Potentiometer)
RS - Register Select Signal
RW - Lese/Schreibemodus (High/Low)
E - Data Enable
D4, D5, D6, D7 - Datenbus (4 Bit Modus)
A - Anode der LED Hintergrundbeleuchtung
K - Kathode der LED Hintergrundbeleuchtung
Will man den 8 Bit Modus verwenden, muss zudem die Pins D0, D1, D2, D3 am Mikrocontroller angeschlossen werden. Der Unterschied, beim 8 Bit Modus kann ein ganzes Byte pro Zugriff übertragen werden. Beim 4 Bit Modus benötigt man zwei Zugriffe. Im Ersten Zugriff werden die oberen vier (auch Nibble) genannt und im Zweiten Zugriff die unteren vier übertragen. Vorteil, beim 4 Bit Modus ergibt sich eine Ersparnis von 4 digitalen Pins, die anderweitig verwendet werden können. In diesem Beispiel wird der 4 Bit Modus angewandt.
Die Pins müssen wie folgt angeschlossen werden:
LCD |
Bezeichnung |
Atmega 328P / Steckplatine |
---|---|---|
1 | VSS | GND |
2 | VDD | 5V |
3 | V0 | Potentiometer (10k) |
4 | RS | PD4 |
5 | RW | GND |
6 | E | PD5 |
7 | D0 |
- |
8 | D1 |
- |
9 | D2 | - |
10 | D3 | - |
11 | D4 | PD0 |
12 | D5 | PD1 |
13 | D6 | PD2 |
14 | D7 | PD3 |
15 |
A | Widerstand (+) |
16 | K | GND (-) |
Da nun die Pinbelegung des LCD-Displays bekannt ist, kann der Aufbau der Hardware erfolgen:
Abb.: Aufbau LCD Display; Quelle: BBS2 Wolfsburg
(Potentiometer mit 10 kΩ, Widerstand mit 220 Ω, Pin 1 liegt auf der linken Seite des Displays)
Quelle der LCD-Bibliothek: https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung#Datei_lcd-routines.h
Zum Download: lcd-routines.zip
Wichtige Funktionen:
void lcd_init() - Initialisiert das Display (muss am Anfang des Displays aufgerufen werden)
void lcd_clear() - Sendet den Befehl zum Löschen des Displays
void lcd_data() - Sendet ein Byte an das LCD-Display
void lcd_string() - Sendet einen String an das LCD-Display
void lcd_home() - Setzt den Cursor an Spalte 1, Zeile 1
void lcd_setcursor(x,y) - Setzt den Cursor an Spalte x, Zeile y
Quellcode:
#include <avr/io.h>
#include "lcd-routines.h"
int main(void)
{
//Initialisierung des LCD-Displays
lcd_init();
//Text in einzelnen Zeichen ausgeben
lcd_data('T');
lcd_data('e');
lcd_data('s');
lcd_data('t');
//Cursor in die zweite Zeile verschieben
lcd_setcursor(0, 2);
//Text als String ausgeben
lcd_string("Hello World!");
while(1)
{
}
}
Bevor der Quellcode hochgeladen wird, muss in der lcd-routines.h bei F_CPU noch die Taktfrequenz des Arduino richtig eingetragen werden (Zeile 12). Beim Arduino Uno ist dies 16 000 000 Herz.
Abb.: Header Datei LCD Routines; Quelle: BBS2 Wolfsburg
Durch drehen am Potentiometer lässt sich der Kontrast des LCD-Displays so verstellen, dass auf ihm der geschrieben Text zu lesen ist: