<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=M+a+r+v+i+n</id>
		<title>RN-Wissen.de - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=M+a+r+v+i+n"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/M_a_r_v_i_n"/>
		<updated>2026-04-11T16:34:05Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Benutzer:M_a_r_v_i_n&amp;diff=14697</id>
		<title>Benutzer:M a r v i n</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Benutzer:M_a_r_v_i_n&amp;diff=14697"/>
				<updated>2009-04-03T09:26:50Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
 |'''RN Nickname:'''&lt;br /&gt;
 |[http://www.roboternetz.de/phpBB2/profile.php?mode=viewprofile&amp;amp;u=13045 m.a.r.v.i.n]&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Wohnort:'''&lt;br /&gt;
 |Berlin&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Website:'''&lt;br /&gt;
 |[http://www.asurowiki.de/index.php Asuro Wiki]&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=C%27t-Bot&amp;diff=10425</id>
		<title>C't-Bot</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=C%27t-Bot&amp;diff=10425"/>
				<updated>2007-03-19T09:21:30Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Technische Daten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:ctbot_6.jpg|right|thumb|c't-Bot]]&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Der c't-Bot ist ein Projekt der Computerzeitschrift c't aus dem Heise-Verlag. Neben dem realen Roboter gibt es zudem eine Simulation unter Java, den c't-Sim. Über seine UART kann auch der c't-Bot mit dem c't-Sim Daten austauschen.&lt;br /&gt;
&lt;br /&gt;
Der c't-Bot besteht aus einer kreisrunden Alu-Plattform in den Abmessungen einer CD (~12cm). Darauf sitzt die ebenfalls kreisrunde Grundplatine mit der Steuerung. Als Antrieb dienen 2 Faulhaber [[Getriebemotoren]], an denen jeweils ein Alu-Rad montiert ist. Als Stützrad besitzt der c't-Bot einen Teflon-Gleitpin. Das Gehirn des c't-Bots bildet ein [[AVR]] RISC [[ATmega32]] der Firma [[Atmel]].&lt;br /&gt;
Dieser verfügt über 32KB [[Flash]], 2KB RAM und 1KB [[EEPROM]] und wird mit 16MHz getaktet. Programmiert wird der c't-Bot in C. Als Entwicklungsumgebung wurde Eclipse gewählt, weil damit sowohl der c't-Bot in C, als auch der c't-Sim in Java unter einer Entwicklungsumgebung programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
An Sensoren besitzt der c't-Bot neben 2 [[Sensorarten#Sharp_GP2D12|Sharp GP2D12]] Distanzsensoren, 7 [[Sensorarten#CNY70|CNY70]] als Liniensensor, Abgrunddetektoren, Radencoder und Klappensensor, sowie einen optischen Maussensor zur Wegstreckenmessung. Zudem besitzt er noch zwei Lichtsensoren und eine Lichtschranke für die optionale Transportklappe. &lt;br /&gt;
&lt;br /&gt;
=== Technische Daten ===&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Mikrocontroller:'''&lt;br /&gt;
|Atmel AVR RISC [[ATmega32]] mit 16MHz&amp;lt;br&amp;gt;&lt;br /&gt;
32 kB [[Flash]]&amp;lt;br&amp;gt;&lt;br /&gt;
2 kB RAM&amp;lt;br&amp;gt;&lt;br /&gt;
1 kB [[EEPROM]]&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternativ:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Atmel AVR RISC [[ATmega644]] mit 16MHz&amp;lt;br&amp;gt;&lt;br /&gt;
64 kB [[Flash]]&amp;lt;br&amp;gt;&lt;br /&gt;
4 kB RAM&amp;lt;br&amp;gt;&lt;br /&gt;
2 kB [[EEPROM]]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|'''Sensoren:'''&lt;br /&gt;
|2 Distanzsensoren ([[Sensorarten#Sharp_GP2D12|Sharp GP2D12]])&amp;lt;br&amp;gt;&lt;br /&gt;
2 Abgrunddetektoren ([[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
1 Liniensensor (2 &amp;amp;times; [[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
2 Radencoder ([[Sensorarten#CNY70|CNY70]] mit Schmitt-Trigger), Auflösung 60 Impulse pro Rad-Umdrehung&amp;lt;br&amp;gt;&lt;br /&gt;
1 optischer Maussensor (Agilent A2610), Auflösung 400dpi in X- und Y-Richtung&amp;lt;br&amp;gt;&lt;br /&gt;
2 Lichtsensoren (LDR)&amp;lt;br&amp;gt;&lt;br /&gt;
1 Lichtschranke ([[Sensorarten#Distanzsensor_IS471F|Sharp ISF471]]) (für das Transportfach)&amp;lt;br&amp;gt;&lt;br /&gt;
1 Klappensensor ([[Sensorarten#CNY70|CNY70]]) (für die optionale Transportklappe)	&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''Aktoren:'''&lt;br /&gt;
|1 [[Getriebemotoren_Ansteuerung#Ansteuerung_mit_Treiber_IC_L293_D|LN293D]] Motortreiber&amp;lt;br&amp;gt;&lt;br /&gt;
2 Faulhaber [[Getriebemotoren]] 2619 006 SR mit 33:1 Untersetzung&amp;lt;br&amp;gt;&lt;br /&gt;
1 [[Servo]] (optional für die Transportklappe)&amp;lt;br&amp;gt;&lt;br /&gt;
8 LEDs über Porterweiterung&amp;lt;br&amp;gt;&lt;br /&gt;
8 Enable Leitungen über Porterweiterung, um einzelne Sensoren an-und abzuschalten&amp;lt;br&amp;gt;&lt;br /&gt;
1 LCD-Modul (optional) über Porterweiterung&lt;br /&gt;
|-&lt;br /&gt;
|'''Kommunikation:'''&lt;br /&gt;
|[[UART]] mit TTL Pegel (optional RS232-Modul, USB-Modul oder WLAN-Modul)&amp;lt;br&amp;gt;&lt;br /&gt;
Infrarot Empfänger für Fernbedienung&lt;br /&gt;
|-&lt;br /&gt;
|'''Schnittstellen:'''&lt;br /&gt;
|[[I2C|I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[SPI]]&lt;br /&gt;
|-&lt;br /&gt;
|'''Programmer:'''&lt;br /&gt;
|Standard [[ISP]] (6 oder 10 poliger Anschluß), oder seriell über [[Bootloader]] &lt;br /&gt;
|-&lt;br /&gt;
|'''Abessungen:'''&lt;br /&gt;
|(L &amp;amp;times; B &amp;amp;times; H) 120 &amp;amp;times; 120 &amp;amp;times; 120 mm&lt;br /&gt;
|-&lt;br /&gt;
|'''Stromversorgung:'''&lt;br /&gt;
|6 Volt für Motoren und Servos (ungeregelt), 5 Volt für Elektronik (geregelt)&amp;lt;br&amp;gt;&lt;br /&gt;
5 &amp;amp;times; AA Mignon-Batterien oder Akkus&amp;lt;br&amp;gt;&lt;br /&gt;
6V Steckernetzteil (Umschalter zwischen Netz- und Batteriebetrieb)&lt;br /&gt;
|-&lt;br /&gt;
|'''Gewicht:'''&lt;br /&gt;
|ca. 500 g (inkl. Akkus oder Batterien)&amp;lt;br&amp;gt; &lt;br /&gt;
ca. 600 g (inkl. LCD-Modul)&lt;br /&gt;
|-&lt;br /&gt;
|'''Vertrieb:'''&lt;br /&gt;
|Segor Electronics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Der Bausatz ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:ctbot_1.jpg||center|framed|Elektronik]]&lt;br /&gt;
[[Bild:ctbot_2.jpg||center|framed|Platinen]]&lt;br /&gt;
[[Bild:ctbot_3.jpg||center|framed|Mechanik]]&lt;br /&gt;
&lt;br /&gt;
=== Erweiterungen ===&lt;br /&gt;
&lt;br /&gt;
Folgende Erweiterungen für den c't-Bot wurden bereits realisiert:&lt;br /&gt;
&lt;br /&gt;
* LCD Modul mit 4 &amp;amp;times; 20 Zeichen&lt;br /&gt;
* RS232-Modul, &lt;br /&gt;
* USB-2-Bot Adapter,&lt;br /&gt;
* [[Sensorarten#SRF10_Ultraschallsensor|Ultraschall Sensor SRF10]]&lt;br /&gt;
* Transportklappe mit [[Servo]],&lt;br /&gt;
* WLAN Modul,&lt;br /&gt;
* SD/MMC-Card Erweiterung&lt;br /&gt;
&lt;br /&gt;
Folgende Erweiterung sind geplant:&lt;br /&gt;
&lt;br /&gt;
* Kamera-Modul mit [[Servo]]&lt;br /&gt;
&lt;br /&gt;
== Autor(en) ==&lt;br /&gt;
[[Benutzer:M_a_r_v_i_n|M_a_r_v_i_n]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[ATmega32]]&lt;br /&gt;
* [[avr-gcc]]&lt;br /&gt;
* [[Sensorarten]]&lt;br /&gt;
* [[Asuro]]&lt;br /&gt;
* [[Robotino]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.heise.de/ct c't Heise Verlag]&lt;br /&gt;
* [http://www.heise.de/ct/ftp/projekte/ct-bot/ c't-Bot und c't-Sim - Die Offizielle Projektseite]&lt;br /&gt;
* [http://wiki.ctbot.de/index.php c't-Bot Wiki]&lt;br /&gt;
* [http://www.ctbot.de c't-Bot Fan Forum]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewforum.php?f=46 Roboternetz Forum - c't Roboter Projekt]&lt;br /&gt;
* [http://www.segor.de Segor Electronics - Bauteile zum c't Bot]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=C%27t-Bot&amp;diff=10424</id>
		<title>C't-Bot</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=C%27t-Bot&amp;diff=10424"/>
				<updated>2007-03-19T09:15:57Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Technische Daten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:ctbot_6.jpg|right|thumb|c't-Bot]]&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Der c't-Bot ist ein Projekt der Computerzeitschrift c't aus dem Heise-Verlag. Neben dem realen Roboter gibt es zudem eine Simulation unter Java, den c't-Sim. Über seine UART kann auch der c't-Bot mit dem c't-Sim Daten austauschen.&lt;br /&gt;
&lt;br /&gt;
Der c't-Bot besteht aus einer kreisrunden Alu-Plattform in den Abmessungen einer CD (~12cm). Darauf sitzt die ebenfalls kreisrunde Grundplatine mit der Steuerung. Als Antrieb dienen 2 Faulhaber [[Getriebemotoren]], an denen jeweils ein Alu-Rad montiert ist. Als Stützrad besitzt der c't-Bot einen Teflon-Gleitpin. Das Gehirn des c't-Bots bildet ein [[AVR]] RISC [[ATmega32]] der Firma [[Atmel]].&lt;br /&gt;
Dieser verfügt über 32KB [[Flash]], 2KB RAM und 1KB [[EEPROM]] und wird mit 16MHz getaktet. Programmiert wird der c't-Bot in C. Als Entwicklungsumgebung wurde Eclipse gewählt, weil damit sowohl der c't-Bot in C, als auch der c't-Sim in Java unter einer Entwicklungsumgebung programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
An Sensoren besitzt der c't-Bot neben 2 [[Sensorarten#Sharp_GP2D12|Sharp GP2D12]] Distanzsensoren, 7 [[Sensorarten#CNY70|CNY70]] als Liniensensor, Abgrunddetektoren, Radencoder und Klappensensor, sowie einen optischen Maussensor zur Wegstreckenmessung. Zudem besitzt er noch zwei Lichtsensoren und eine Lichtschranke für die optionale Transportklappe. &lt;br /&gt;
&lt;br /&gt;
=== Technische Daten ===&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Mikrocontroller:'''&lt;br /&gt;
|Atmel AVR RISC [[ATmega32]] mit 16MHz&amp;lt;br&amp;gt;&lt;br /&gt;
32 kB [[Flash]]&amp;lt;br&amp;gt;&lt;br /&gt;
2 kB RAM&amp;lt;br&amp;gt;&lt;br /&gt;
1 kB [[EEPROM]]&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternativ:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Atmel AVR RISC [[ATmega644]] mit 16MHz&amp;lt;br&amp;gt;&lt;br /&gt;
64 kB [[Flash]]&amp;lt;br&amp;gt;&lt;br /&gt;
4 kB RAM&amp;lt;br&amp;gt;&lt;br /&gt;
2 kB [[EEPROM]]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|'''Sensoren:'''&lt;br /&gt;
|2 Distanzsensoren ([[Sensorarten#Sharp_GP2D12|Sharp GP2D12]])&amp;lt;br&amp;gt;&lt;br /&gt;
2 Absturzdetektoren ([[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
1 Liniensensor (2 &amp;amp;times; [[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
2 Radencoder ([[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
1 optischer Maussensor (Agilent A2610)&amp;lt;br&amp;gt;&lt;br /&gt;
2 Lichtsensoren (LDR)&amp;lt;br&amp;gt;&lt;br /&gt;
1 Lichtschranke ([[Sensorarten#Distanzsensor_IS471F|Sharp ISF471]]) (für das optionale Transportfach)&amp;lt;br&amp;gt;&lt;br /&gt;
1 Klappensensor ([[Sensorarten#CNY70|CNY70]]) (für das optionale Transportfach)	&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''Aktoren:'''&lt;br /&gt;
|1 [[Getriebemotoren_Ansteuerung#Ansteuerung_mit_Treiber_IC_L293_D|LN293D]] Motortreiber&amp;lt;br&amp;gt;&lt;br /&gt;
2 Faulhaber [[Getriebemotoren]] 2619 006 SR mit 33:1 Untersetzung&amp;lt;br&amp;gt;&lt;br /&gt;
1 [[Servo]] (optional für Transportfach)&amp;lt;br&amp;gt;&lt;br /&gt;
8 LEDs über Porterweiterung&amp;lt;br&amp;gt;&lt;br /&gt;
8 Enable Leitungen über Porterweiterung, um einzelne Sensoren an-und abzuschalten&amp;lt;br&amp;gt;&lt;br /&gt;
1 LCD-Modul (optional) über Porterweiterung&lt;br /&gt;
|-&lt;br /&gt;
|'''Kommunikation:'''&lt;br /&gt;
|[[UART]] mit TTL Pegel (optional RS232-Modul, USB-Modul oder WLAN-Modul)&amp;lt;br&amp;gt;&lt;br /&gt;
Infrarot Empfänger für Fernbedienung&lt;br /&gt;
|-&lt;br /&gt;
|'''Schnittstellen:'''&lt;br /&gt;
|[[I2C|I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[SPI]]&lt;br /&gt;
|-&lt;br /&gt;
|'''Programmer:'''&lt;br /&gt;
|Standard [[ISP]] (6 oder 10 poliger Anschluß), oder seriell über Bootloader &lt;br /&gt;
|-&lt;br /&gt;
|'''Abessungen:'''&lt;br /&gt;
|(L &amp;amp;times; B &amp;amp;times; H) 120 &amp;amp;times; 120 &amp;amp;times; 120 mm&lt;br /&gt;
|-&lt;br /&gt;
|'''Stromversorgung:'''&lt;br /&gt;
|6 Volt für Motoren und Servos (ungeregelt), 5 Volt für Elektronik (geregelt)&amp;lt;br&amp;gt;&lt;br /&gt;
5 &amp;amp;times; AA Mignon-Batterien oder Akkus&amp;lt;br&amp;gt;&lt;br /&gt;
6V Steckernetzteil (Umschalter zwischen Netz- und Batteriebetrieb)&lt;br /&gt;
|-&lt;br /&gt;
|'''Gewicht:'''&lt;br /&gt;
|ca. 500 g (inkl. Akkus oder Batterien)&amp;lt;br&amp;gt; &lt;br /&gt;
ca. 600 g (inkl. LCD-Modul)&lt;br /&gt;
|-&lt;br /&gt;
|'''Vertrieb:'''&lt;br /&gt;
|Segor Electronics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Der Bausatz ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:ctbot_1.jpg||center|framed|Elektronik]]&lt;br /&gt;
[[Bild:ctbot_2.jpg||center|framed|Platinen]]&lt;br /&gt;
[[Bild:ctbot_3.jpg||center|framed|Mechanik]]&lt;br /&gt;
&lt;br /&gt;
=== Erweiterungen ===&lt;br /&gt;
&lt;br /&gt;
Folgende Erweiterungen für den c't-Bot wurden bereits realisiert:&lt;br /&gt;
&lt;br /&gt;
* LCD Modul mit 4 &amp;amp;times; 20 Zeichen&lt;br /&gt;
* RS232-Modul, &lt;br /&gt;
* USB-2-Bot Adapter,&lt;br /&gt;
* [[Sensorarten#SRF10_Ultraschallsensor|Ultraschall Sensor SRF10]]&lt;br /&gt;
* Transportklappe mit [[Servo]],&lt;br /&gt;
* WLAN Modul,&lt;br /&gt;
* SD/MMC-Card Erweiterung&lt;br /&gt;
&lt;br /&gt;
Folgende Erweiterung sind geplant:&lt;br /&gt;
&lt;br /&gt;
* Kamera-Modul mit [[Servo]]&lt;br /&gt;
&lt;br /&gt;
== Autor(en) ==&lt;br /&gt;
[[Benutzer:M_a_r_v_i_n|M_a_r_v_i_n]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[ATmega32]]&lt;br /&gt;
* [[avr-gcc]]&lt;br /&gt;
* [[Sensorarten]]&lt;br /&gt;
* [[Asuro]]&lt;br /&gt;
* [[Robotino]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.heise.de/ct c't Heise Verlag]&lt;br /&gt;
* [http://www.heise.de/ct/ftp/projekte/ct-bot/ c't-Bot und c't-Sim - Die Offizielle Projektseite]&lt;br /&gt;
* [http://wiki.ctbot.de/index.php c't-Bot Wiki]&lt;br /&gt;
* [http://www.ctbot.de c't-Bot Fan Forum]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewforum.php?f=46 Roboternetz Forum - c't Roboter Projekt]&lt;br /&gt;
* [http://www.segor.de Segor Electronics - Bauteile zum c't Bot]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=C%27t-Bot&amp;diff=10423</id>
		<title>C't-Bot</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=C%27t-Bot&amp;diff=10423"/>
				<updated>2007-03-19T09:12:03Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Technische Daten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:ctbot_6.jpg|right|thumb|c't-Bot]]&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Der c't-Bot ist ein Projekt der Computerzeitschrift c't aus dem Heise-Verlag. Neben dem realen Roboter gibt es zudem eine Simulation unter Java, den c't-Sim. Über seine UART kann auch der c't-Bot mit dem c't-Sim Daten austauschen.&lt;br /&gt;
&lt;br /&gt;
Der c't-Bot besteht aus einer kreisrunden Alu-Plattform in den Abmessungen einer CD (~12cm). Darauf sitzt die ebenfalls kreisrunde Grundplatine mit der Steuerung. Als Antrieb dienen 2 Faulhaber [[Getriebemotoren]], an denen jeweils ein Alu-Rad montiert ist. Als Stützrad besitzt der c't-Bot einen Teflon-Gleitpin. Das Gehirn des c't-Bots bildet ein [[AVR]] RISC [[ATmega32]] der Firma [[Atmel]].&lt;br /&gt;
Dieser verfügt über 32KB [[Flash]], 2KB RAM und 1KB [[EEPROM]] und wird mit 16MHz getaktet. Programmiert wird der c't-Bot in C. Als Entwicklungsumgebung wurde Eclipse gewählt, weil damit sowohl der c't-Bot in C, als auch der c't-Sim in Java unter einer Entwicklungsumgebung programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
An Sensoren besitzt der c't-Bot neben 2 [[Sensorarten#Sharp_GP2D12|Sharp GP2D12]] Distanzsensoren, 7 [[Sensorarten#CNY70|CNY70]] als Liniensensor, Abgrunddetektoren, Radencoder und Klappensensor, sowie einen optischen Maussensor zur Wegstreckenmessung. Zudem besitzt er noch zwei Lichtsensoren und eine Lichtschranke für die optionale Transportklappe. &lt;br /&gt;
&lt;br /&gt;
=== Technische Daten ===&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Mikrocontroller:'''&lt;br /&gt;
|Atmel AVR RISC [[ATmega32]] mit 16MHz&amp;lt;br&amp;gt;&lt;br /&gt;
32 kB [[Flash]]&amp;lt;br&amp;gt;&lt;br /&gt;
2 kB RAM&amp;lt;br&amp;gt;&lt;br /&gt;
1 kB [[EEPROM]]&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternativ:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Atmel AVR RISC [[ATmega644]] mit 16MHz&amp;lt;br&amp;gt;&lt;br /&gt;
64 kB [[Flash]]&amp;lt;br&amp;gt;&lt;br /&gt;
4 kB RAM&amp;lt;br&amp;gt;&lt;br /&gt;
2 kB [[EEPROM]]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|'''Sensoren:'''&lt;br /&gt;
|2 Distanzsensoren ([[Sensorarten#Sharp_GP2D12|Sharp GP2D12]])&amp;lt;br&amp;gt;&lt;br /&gt;
2 Absturzdetektoren ([[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
1 Liniensensor (2 &amp;amp;times; [[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
2 Radencoder ([[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
1 optischer Maussensor (Agilent A2610)&amp;lt;br&amp;gt;&lt;br /&gt;
2 Lichtsensoren (LDR)&amp;lt;br&amp;gt;&lt;br /&gt;
1 Lichtschranke ([[Sensorarten#Distanzsensor_IS471F|Sharp ISF471]]) (für das optionale Transportfach)&amp;lt;br&amp;gt;&lt;br /&gt;
1 Klappensensor ([[Sensorarten#CNY70|CNY70]]) (für das optionale Transportfach)	&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''Aktoren:'''&lt;br /&gt;
|1 [[Getriebemotoren_Ansteuerung#Ansteuerung_mit_Treiber_IC_L293_D|LN293D]] Motortreiber&amp;lt;br&amp;gt;&lt;br /&gt;
2 Faulhaber [[Getriebemotoren]]&amp;lt;br&amp;gt;&lt;br /&gt;
1 [[Servo]] (optional für Transportfach)&amp;lt;br&amp;gt;&lt;br /&gt;
8 LEDs über Porterweiterung&amp;lt;br&amp;gt;&lt;br /&gt;
8 Enable Leitungen über Porterweiterung, um einzelne Sensoren an-und abzuschalten&amp;lt;br&amp;gt;&lt;br /&gt;
1 LCD-Modul (optional) über Porterweiterung&lt;br /&gt;
|-&lt;br /&gt;
|'''Kommunikation:'''&lt;br /&gt;
|[[UART]] mit TTL Pegel (optional RS232-Modul, USB-Modul oder WLAN-Modul)&amp;lt;br&amp;gt;&lt;br /&gt;
Infrarot Empfänger für Fernbedienung&lt;br /&gt;
|-&lt;br /&gt;
|'''Schnittstellen:'''&lt;br /&gt;
|[[I2C|I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[SPI]]&lt;br /&gt;
|-&lt;br /&gt;
|'''Programmer:'''&lt;br /&gt;
|Standard [[ISP]] 6pol oder 10polig, oder über Bootloader seriell &lt;br /&gt;
|-&lt;br /&gt;
|'''Abessungen:'''&lt;br /&gt;
|(L &amp;amp;times; B &amp;amp;times; H) 120 &amp;amp;times; 120 &amp;amp;times; 120 mm&lt;br /&gt;
|-&lt;br /&gt;
|'''Stromversorgung:'''&lt;br /&gt;
|6 Volt für Motoren und Servos (ungeregelt), 5 Volt für Elektronik (geregelt)&amp;lt;br&amp;gt;&lt;br /&gt;
5 &amp;amp;times; AA Mignon-Batterien oder Akkus&amp;lt;br&amp;gt;&lt;br /&gt;
6V Steckernetzteil (Umschalter zwischen Netz- und Batteriebetrieb)&lt;br /&gt;
|-&lt;br /&gt;
|'''Gewicht:'''&lt;br /&gt;
|ca. 500 g (inkl. Akkus oder Batterien)&amp;lt;br&amp;gt; &lt;br /&gt;
ca. 600 g (inkl. LCD-Modul)&lt;br /&gt;
|-&lt;br /&gt;
|'''Vertrieb:'''&lt;br /&gt;
|Segor Electronics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Der Bausatz ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:ctbot_1.jpg||center|framed|Elektronik]]&lt;br /&gt;
[[Bild:ctbot_2.jpg||center|framed|Platinen]]&lt;br /&gt;
[[Bild:ctbot_3.jpg||center|framed|Mechanik]]&lt;br /&gt;
&lt;br /&gt;
=== Erweiterungen ===&lt;br /&gt;
&lt;br /&gt;
Folgende Erweiterungen für den c't-Bot wurden bereits realisiert:&lt;br /&gt;
&lt;br /&gt;
* LCD Modul mit 4 &amp;amp;times; 20 Zeichen&lt;br /&gt;
* RS232-Modul, &lt;br /&gt;
* USB-2-Bot Adapter,&lt;br /&gt;
* [[Sensorarten#SRF10_Ultraschallsensor|Ultraschall Sensor SRF10]]&lt;br /&gt;
* Transportklappe mit [[Servo]],&lt;br /&gt;
* WLAN Modul,&lt;br /&gt;
* SD/MMC-Card Erweiterung&lt;br /&gt;
&lt;br /&gt;
Folgende Erweiterung sind geplant:&lt;br /&gt;
&lt;br /&gt;
* Kamera-Modul mit [[Servo]]&lt;br /&gt;
&lt;br /&gt;
== Autor(en) ==&lt;br /&gt;
[[Benutzer:M_a_r_v_i_n|M_a_r_v_i_n]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[ATmega32]]&lt;br /&gt;
* [[avr-gcc]]&lt;br /&gt;
* [[Sensorarten]]&lt;br /&gt;
* [[Asuro]]&lt;br /&gt;
* [[Robotino]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.heise.de/ct c't Heise Verlag]&lt;br /&gt;
* [http://www.heise.de/ct/ftp/projekte/ct-bot/ c't-Bot und c't-Sim - Die Offizielle Projektseite]&lt;br /&gt;
* [http://wiki.ctbot.de/index.php c't-Bot Wiki]&lt;br /&gt;
* [http://www.ctbot.de c't-Bot Fan Forum]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewforum.php?f=46 Roboternetz Forum - c't Roboter Projekt]&lt;br /&gt;
* [http://www.segor.de Segor Electronics - Bauteile zum c't Bot]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=C%27t-Bot&amp;diff=10422</id>
		<title>C't-Bot</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=C%27t-Bot&amp;diff=10422"/>
				<updated>2007-03-19T09:04:42Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Technische Daten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:ctbot_6.jpg|right|thumb|c't-Bot]]&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Der c't-Bot ist ein Projekt der Computerzeitschrift c't aus dem Heise-Verlag. Neben dem realen Roboter gibt es zudem eine Simulation unter Java, den c't-Sim. Über seine UART kann auch der c't-Bot mit dem c't-Sim Daten austauschen.&lt;br /&gt;
&lt;br /&gt;
Der c't-Bot besteht aus einer kreisrunden Alu-Plattform in den Abmessungen einer CD (~12cm). Darauf sitzt die ebenfalls kreisrunde Grundplatine mit der Steuerung. Als Antrieb dienen 2 Faulhaber [[Getriebemotoren]], an denen jeweils ein Alu-Rad montiert ist. Als Stützrad besitzt der c't-Bot einen Teflon-Gleitpin. Das Gehirn des c't-Bots bildet ein [[AVR]] RISC [[ATmega32]] der Firma [[Atmel]].&lt;br /&gt;
Dieser verfügt über 32KB [[Flash]], 2KB RAM und 1KB [[EEPROM]] und wird mit 16MHz getaktet. Programmiert wird der c't-Bot in C. Als Entwicklungsumgebung wurde Eclipse gewählt, weil damit sowohl der c't-Bot in C, als auch der c't-Sim in Java unter einer Entwicklungsumgebung programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
An Sensoren besitzt der c't-Bot neben 2 [[Sensorarten#Sharp_GP2D12|Sharp GP2D12]] Distanzsensoren, 7 [[Sensorarten#CNY70|CNY70]] als Liniensensor, Abgrunddetektoren, Radencoder und Klappensensor, sowie einen optischen Maussensor zur Wegstreckenmessung. Zudem besitzt er noch zwei Lichtsensoren und eine Lichtschranke für die optionale Transportklappe. &lt;br /&gt;
&lt;br /&gt;
=== Technische Daten ===&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Mikrocontroller:'''&lt;br /&gt;
|Atmel AVR RISC [[ATmega32]] mit 16MHz&amp;lt;br&amp;gt;&lt;br /&gt;
32 kB [[Flash]]&amp;lt;br&amp;gt;&lt;br /&gt;
2 kB RAM&amp;lt;br&amp;gt;&lt;br /&gt;
1 kB [[EEPROM]]&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternativ:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Atmel AVR RISC [[ATmega644]] mit 16MHz&amp;lt;br&amp;gt;&lt;br /&gt;
64 kB [[Flash]]&amp;lt;br&amp;gt;&lt;br /&gt;
4 kB RAM&amp;lt;br&amp;gt;&lt;br /&gt;
2 kB [[EEPROM]]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|'''Sensoren:'''&lt;br /&gt;
|2 Distanzsensoren ([[Sensorarten#Sharp_GP2D12|Sharp GP2D12]])&amp;lt;br&amp;gt;&lt;br /&gt;
2 Absturzdetektoren ([[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
1 Liniensensor (2 &amp;amp;times; [[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
2 Radencoder ([[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
1 optischer Maussensor (Agilent A2610)&amp;lt;br&amp;gt;&lt;br /&gt;
2 Lichtsensoren (LDR)&amp;lt;br&amp;gt;&lt;br /&gt;
1 Lichtschranke ([[Sensorarten#Distanzsensor_IS471F|Sharp ISF471]]) (für das optionale Transportfach)&amp;lt;br&amp;gt;&lt;br /&gt;
1 Klappensensor ([[Sensorarten#CNY70|CNY70]]) (für das optionale Transportfach)	&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''Aktoren:'''&lt;br /&gt;
|1 [[Getriebemotoren_Ansteuerung#Ansteuerung_mit_Treiber_IC_L293_D|LN293D]] Motortreiber&amp;lt;br&amp;gt;&lt;br /&gt;
2 Faulhaber [[Getriebemotoren]]&amp;lt;br&amp;gt;&lt;br /&gt;
1 [[Servo]] (optional für Transportfach)&amp;lt;br&amp;gt;&lt;br /&gt;
8 LEDs über Porterweiterung&amp;lt;br&amp;gt;&lt;br /&gt;
8 Enable Leitungen über Porterweiterung, um einzelne Sensoren an-und abzuschalten&amp;lt;br&amp;gt;&lt;br /&gt;
1 LCD-Modul (optional) über Porterweiterung&lt;br /&gt;
|-&lt;br /&gt;
|'''Kommunikation:'''&lt;br /&gt;
|[[UART]] mit TTL Pegel (optional RS232-Modul, USB-Modul oder WLAN-Modul)&amp;lt;br&amp;gt;&lt;br /&gt;
Infrarot Empfänger für Fernbedienung&lt;br /&gt;
|-&lt;br /&gt;
|'''Programmer:'''&lt;br /&gt;
|Standard [[ISP]] 6pol oder 10polig, oder über Bootloader seriell &lt;br /&gt;
|-&lt;br /&gt;
|'''Abessungen:'''&lt;br /&gt;
|(L &amp;amp;times; B &amp;amp;times; H) 120 &amp;amp;times; 120 &amp;amp;times; 120 mm&lt;br /&gt;
|-&lt;br /&gt;
|'''Stromversorgung:'''&lt;br /&gt;
|6 Volt für Motoren und Servos (ungeregelt), 5 Volt für Elektronik (geregelt)&amp;lt;br&amp;gt;&lt;br /&gt;
5 &amp;amp;times; AA Mignon-Batterien oder Akkus&amp;lt;br&amp;gt;&lt;br /&gt;
6V Steckernetzteil (Umschalter zwischen Netz- und Batteriebetrieb)&lt;br /&gt;
|-&lt;br /&gt;
|'''Gewicht:'''&lt;br /&gt;
|ca. 500 g (inkl. Akkus oder Batterien)&amp;lt;br&amp;gt; &lt;br /&gt;
ca. 600 g (inkl. LCD-Modul)&lt;br /&gt;
|-&lt;br /&gt;
|'''Vertrieb:'''&lt;br /&gt;
|Segor Electronics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Der Bausatz ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:ctbot_1.jpg||center|framed|Elektronik]]&lt;br /&gt;
[[Bild:ctbot_2.jpg||center|framed|Platinen]]&lt;br /&gt;
[[Bild:ctbot_3.jpg||center|framed|Mechanik]]&lt;br /&gt;
&lt;br /&gt;
=== Erweiterungen ===&lt;br /&gt;
&lt;br /&gt;
Folgende Erweiterungen für den c't-Bot wurden bereits realisiert:&lt;br /&gt;
&lt;br /&gt;
* LCD Modul mit 4 &amp;amp;times; 20 Zeichen&lt;br /&gt;
* RS232-Modul, &lt;br /&gt;
* USB-2-Bot Adapter,&lt;br /&gt;
* [[Sensorarten#SRF10_Ultraschallsensor|Ultraschall Sensor SRF10]]&lt;br /&gt;
* Transportklappe mit [[Servo]],&lt;br /&gt;
* WLAN Modul,&lt;br /&gt;
* SD/MMC-Card Erweiterung&lt;br /&gt;
&lt;br /&gt;
Folgende Erweiterung sind geplant:&lt;br /&gt;
&lt;br /&gt;
* Kamera-Modul mit [[Servo]]&lt;br /&gt;
&lt;br /&gt;
== Autor(en) ==&lt;br /&gt;
[[Benutzer:M_a_r_v_i_n|M_a_r_v_i_n]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[ATmega32]]&lt;br /&gt;
* [[avr-gcc]]&lt;br /&gt;
* [[Sensorarten]]&lt;br /&gt;
* [[Asuro]]&lt;br /&gt;
* [[Robotino]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.heise.de/ct c't Heise Verlag]&lt;br /&gt;
* [http://www.heise.de/ct/ftp/projekte/ct-bot/ c't-Bot und c't-Sim - Die Offizielle Projektseite]&lt;br /&gt;
* [http://wiki.ctbot.de/index.php c't-Bot Wiki]&lt;br /&gt;
* [http://www.ctbot.de c't-Bot Fan Forum]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewforum.php?f=46 Roboternetz Forum - c't Roboter Projekt]&lt;br /&gt;
* [http://www.segor.de Segor Electronics - Bauteile zum c't Bot]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=C%27t-Bot&amp;diff=10421</id>
		<title>C't-Bot</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=C%27t-Bot&amp;diff=10421"/>
				<updated>2007-03-19T08:58:22Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Erweiterungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:ctbot_6.jpg|right|thumb|c't-Bot]]&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Der c't-Bot ist ein Projekt der Computerzeitschrift c't aus dem Heise-Verlag. Neben dem realen Roboter gibt es zudem eine Simulation unter Java, den c't-Sim. Über seine UART kann auch der c't-Bot mit dem c't-Sim Daten austauschen.&lt;br /&gt;
&lt;br /&gt;
Der c't-Bot besteht aus einer kreisrunden Alu-Plattform in den Abmessungen einer CD (~12cm). Darauf sitzt die ebenfalls kreisrunde Grundplatine mit der Steuerung. Als Antrieb dienen 2 Faulhaber [[Getriebemotoren]], an denen jeweils ein Alu-Rad montiert ist. Als Stützrad besitzt der c't-Bot einen Teflon-Gleitpin. Das Gehirn des c't-Bots bildet ein [[AVR]] RISC [[ATmega32]] der Firma [[Atmel]].&lt;br /&gt;
Dieser verfügt über 32KB [[Flash]], 2KB RAM und 1KB [[EEPROM]] und wird mit 16MHz getaktet. Programmiert wird der c't-Bot in C. Als Entwicklungsumgebung wurde Eclipse gewählt, weil damit sowohl der c't-Bot in C, als auch der c't-Sim in Java unter einer Entwicklungsumgebung programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
An Sensoren besitzt der c't-Bot neben 2 [[Sensorarten#Sharp_GP2D12|Sharp GP2D12]] Distanzsensoren, 7 [[Sensorarten#CNY70|CNY70]] als Liniensensor, Abgrunddetektoren, Radencoder und Klappensensor, sowie einen optischen Maussensor zur Wegstreckenmessung. Zudem besitzt er noch zwei Lichtsensoren und eine Lichtschranke für die optionale Transportklappe. &lt;br /&gt;
&lt;br /&gt;
=== Technische Daten ===&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Mikrocontroller:'''&lt;br /&gt;
|Atmel AVR RISC [[ATmega32]] mit 16MHz&amp;lt;br&amp;gt;&lt;br /&gt;
32 kB [[Flash]]&amp;lt;br&amp;gt;&lt;br /&gt;
2 kB RAM&amp;lt;br&amp;gt;&lt;br /&gt;
1 kB [[EEPROM]]&lt;br /&gt;
|-&lt;br /&gt;
|'''Sensoren:'''&lt;br /&gt;
|2 Distanzsensoren ([[Sensorarten#Sharp_GP2D12|Sharp GP2D12]])&amp;lt;br&amp;gt;&lt;br /&gt;
2 Absturzdetektoren ([[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
1 Liniensensor (2 &amp;amp;times; [[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
2 Radencoder ([[Sensorarten#CNY70|CNY70]])&amp;lt;br&amp;gt;&lt;br /&gt;
1 optischer Maussensor (Agilent A2610)&amp;lt;br&amp;gt;&lt;br /&gt;
2 Lichtsensoren (LDR)&amp;lt;br&amp;gt;&lt;br /&gt;
1 Lichtschranke ([[Sensorarten#Distanzsensor_IS471F|Sharp ISF471]]) (für das optionale Transportfach)&amp;lt;br&amp;gt;&lt;br /&gt;
1 Klappensensor ([[Sensorarten#CNY70|CNY70]]) (für das optionale Transportfach)	&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''Aktoren:'''&lt;br /&gt;
|1 [[Getriebemotoren_Ansteuerung#Ansteuerung_mit_Treiber_IC_L293_D|LN293D]] Motortreiber&amp;lt;br&amp;gt;&lt;br /&gt;
2 Faulhaber [[Getriebemotoren]]&amp;lt;br&amp;gt;&lt;br /&gt;
1 [[Servo]] (optional für Transportfach)&amp;lt;br&amp;gt;&lt;br /&gt;
8 LEDs über Porterweiterung&amp;lt;br&amp;gt;&lt;br /&gt;
8 Enable Leitungen über Porterweiterung, um einzelne Sensoren an-und abzuschalten&amp;lt;br&amp;gt;&lt;br /&gt;
1 LCD-Modul (optional) über Porterweiterung&lt;br /&gt;
|-&lt;br /&gt;
|'''Kommunikation:'''&lt;br /&gt;
|[[UART]] mit TTL Pegel (optional RS232-Modul, USB-Modul oder Funk-Modul)&amp;lt;br&amp;gt;&lt;br /&gt;
Infrarot Empfänger für Fernbedienung&lt;br /&gt;
|-&lt;br /&gt;
|'''Programmer:'''&lt;br /&gt;
|empfohlen als Kombination USB-Programmer + mySmartUSB Flasher oder Standard [[ISP]]&lt;br /&gt;
|-&lt;br /&gt;
|'''Abessungen:'''&lt;br /&gt;
|(L &amp;amp;times; B &amp;amp;times; H) 120 &amp;amp;times; 120 &amp;amp;times; 120 mm&lt;br /&gt;
|-&lt;br /&gt;
|'''Stromversorgung:'''&lt;br /&gt;
|6 Volt für Motoren und Servos (ungeregelt), 5 Volt für Elektronik (geregelt)&amp;lt;br&amp;gt;&lt;br /&gt;
5 &amp;amp;times; AA Mignon-Batterien oder Akkus&amp;lt;br&amp;gt;&lt;br /&gt;
6V Steckernetzteil (Umschalter zwischen Netz- und Batteriebetrieb)&lt;br /&gt;
|-&lt;br /&gt;
|'''Gewicht:'''&lt;br /&gt;
|ca. 500 g (inkl. Akkus oder Batterien)&amp;lt;br&amp;gt; &lt;br /&gt;
ca. 600 g (inkl. LCD-Modul)&lt;br /&gt;
|-&lt;br /&gt;
|'''Vertrieb:'''&lt;br /&gt;
|Segor Electronics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Der Bausatz ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:ctbot_1.jpg||center|framed|Elektronik]]&lt;br /&gt;
[[Bild:ctbot_2.jpg||center|framed|Platinen]]&lt;br /&gt;
[[Bild:ctbot_3.jpg||center|framed|Mechanik]]&lt;br /&gt;
&lt;br /&gt;
=== Erweiterungen ===&lt;br /&gt;
&lt;br /&gt;
Folgende Erweiterungen für den c't-Bot wurden bereits realisiert:&lt;br /&gt;
&lt;br /&gt;
* LCD Modul mit 4 &amp;amp;times; 20 Zeichen&lt;br /&gt;
* RS232-Modul, &lt;br /&gt;
* USB-2-Bot Adapter,&lt;br /&gt;
* [[Sensorarten#SRF10_Ultraschallsensor|Ultraschall Sensor SRF10]]&lt;br /&gt;
* Transportklappe mit [[Servo]],&lt;br /&gt;
* WLAN Modul,&lt;br /&gt;
* SD/MMC-Card Erweiterung&lt;br /&gt;
&lt;br /&gt;
Folgende Erweiterung sind geplant:&lt;br /&gt;
&lt;br /&gt;
* Kamera-Modul mit [[Servo]]&lt;br /&gt;
&lt;br /&gt;
== Autor(en) ==&lt;br /&gt;
[[Benutzer:M_a_r_v_i_n|M_a_r_v_i_n]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[ATmega32]]&lt;br /&gt;
* [[avr-gcc]]&lt;br /&gt;
* [[Sensorarten]]&lt;br /&gt;
* [[Asuro]]&lt;br /&gt;
* [[Robotino]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.heise.de/ct c't Heise Verlag]&lt;br /&gt;
* [http://www.heise.de/ct/ftp/projekte/ct-bot/ c't-Bot und c't-Sim - Die Offizielle Projektseite]&lt;br /&gt;
* [http://wiki.ctbot.de/index.php c't-Bot Wiki]&lt;br /&gt;
* [http://www.ctbot.de c't-Bot Fan Forum]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewforum.php?f=46 Roboternetz Forum - c't Roboter Projekt]&lt;br /&gt;
* [http://www.segor.de Segor Electronics - Bauteile zum c't Bot]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=8527</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=8527"/>
				<updated>2006-08-12T22:20:54Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* BASCOM-AVR Programm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für &amp;amp;le;80 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
...&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung mit Busy(I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 7 Prozessor Ports benötigt. Die Abfrage des Busy Flags ist durch die Verdrahtung des R/W Pins möglich. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bitbusy_schem.png|center|thumb|600px|4-Bit Ansteuerung mit Busy]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode benötigt einer spezielle LCD Bibliothek, die 'lcd4busy.lib'. Leider müssen bei der Verwendung dieser Bibliothek alle Pins des LCD Modul an den selben Prozessor Port angeschlossen werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;lcd4busy.lib&amp;quot;   'ersetzt die Standard LCD Bibliothek&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 Const _lcdport = Portc&lt;br /&gt;
 Const _lcdddr = Ddrc&lt;br /&gt;
 Const _lcdin = Pinc&lt;br /&gt;
 Const _lcd_e = 1&lt;br /&gt;
 Const _lcd_rw = 2&lt;br /&gt;
 Const _lcd_rs = 3&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTC        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    4            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    5            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    6            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    7            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       3            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       2            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        1            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung ohne Busy(I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR, die die Standard LCD Library ersetzt. Dadurch können die gleichen Befehle zur Ansteuerung verwendet werden wie bei der Standard LCD Library. Das BASCOM-AVR Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portc.0       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portc.1       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:Lcdmodul_4bitbusy_schem.png&amp;diff=8526</id>
		<title>Datei:Lcdmodul 4bitbusy schem.png</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:Lcdmodul_4bitbusy_schem.png&amp;diff=8526"/>
				<updated>2006-08-12T22:18:20Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: LCD Ansteuerung 4-Bit Mode mit Busy Abfrage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LCD Ansteuerung 4-Bit Mode mit Busy Abfrage&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=8525</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=8525"/>
				<updated>2006-08-12T22:14:11Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* AVR-GCC Programm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für &amp;amp;le;80 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
...&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung mit Busy(I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 7 Prozessor Ports benötigt. Die Abfrage des Busy Flags ist durch die Verdrahtung des R/W Pins möglich. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bitbusy_schem.png|center|thumb|600px|4-Bit Ansteuerung mit Busy]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode benötigt einer spezielle LCD Bibliothek, die 'lcd4busy.lib'. Leider müssen bei der Verwendung dieser Bibliothek alle Pins des LCD Modul an den selben Prozessor Port angeschlossen werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
 $lib &amp;quot;lcd4busy.lib&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 Const _lcdport = Portc&lt;br /&gt;
 Const _lcdddr = Ddrc&lt;br /&gt;
 Const _lcdin = Pinc&lt;br /&gt;
 Const _lcd_e = 1&lt;br /&gt;
 Const _lcd_rw = 2&lt;br /&gt;
 Const _lcd_rs = 3&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTC        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    4            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    5            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    6            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    7            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       3            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       2            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        1            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung ohne Busy(I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR, die die Standard LCD Library ersetzt. Dadurch können die gleichen Befehle zur Ansteuerung verwendet werden wie bei der Standard LCD Library. Das BASCOM-AVR Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portc.0       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portc.1       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=8524</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=8524"/>
				<updated>2006-08-12T22:13:09Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* BASCOM-AVR Programm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für &amp;amp;le;80 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
...&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung mit Busy(I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 7 Prozessor Ports benötigt. Die Abfrage des Busy Flags ist durch die Verdrahtung des R/W Pins möglich. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bitbusy_schem.png|center|thumb|600px|4-Bit Ansteuerung mit Busy]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode benötigt einer spezielle LCD Bibliothek, die 'lcd4busy.lib'. Leider müssen bei der Verwendung dieser Bibliothek alle Pins des LCD Modul an den selben Prozessor Port angeschlossen werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
 $lib &amp;quot;lcd4busy.lib&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 Const _lcdport = Portc&lt;br /&gt;
 Const _lcdddr = Ddrc&lt;br /&gt;
 Const _lcdin = Pinc&lt;br /&gt;
 Const _lcd_e = 1&lt;br /&gt;
 Const _lcd_rw = 2&lt;br /&gt;
 Const _lcd_rs = 3&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTC        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       5            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        6            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung ohne Busy(I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR, die die Standard LCD Library ersetzt. Dadurch können die gleichen Befehle zur Ansteuerung verwendet werden wie bei der Standard LCD Library. Das BASCOM-AVR Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portc.0       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portc.1       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=8523</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=8523"/>
				<updated>2006-08-12T22:04:43Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: LCD 4Bit Mode mit Busy Abfrage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für &amp;amp;le;80 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
...&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung mit Busy(I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 7 Prozessor Ports benötigt. Die Abfrage des Busy Flags ist durch die Verdrahtung des R/W Pins möglich. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bitbusy_schem.png|center|thumb|600px|4-Bit Ansteuerung mit Busy]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode benötigt einer spezielle LCD Bibliothek, die 'lcd4busy.lib'. Leider müssen bei der Verwendung dieser Bibliothek alle Pins des LCD Modul an den selben Prozessor Port angeschlossen werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
 $lib &amp;quot;lcd4busy.lib&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 Const _lcdport = Portb&lt;br /&gt;
 Const _lcdddr = Ddrb&lt;br /&gt;
 Const _lcdin = Pinb&lt;br /&gt;
 Const _lcd_e = 1&lt;br /&gt;
 Const _lcd_rw = 2&lt;br /&gt;
 Const _lcd_rs = 3&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTC        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       5            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        6            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung ohne Busy(I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR, die die Standard LCD Library ersetzt. Dadurch können die gleichen Befehle zur Ansteuerung verwendet werden wie bei der Standard LCD Library. Das BASCOM-AVR Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portc.0       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portc.1       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Sensorarten&amp;diff=8522</id>
		<title>Sensorarten</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Sensorarten&amp;diff=8522"/>
				<updated>2006-08-12T20:57:00Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* CNY70 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Welche Sensorarten gibt es==&lt;br /&gt;
Damit sich ein Roboter in seiner Umgebung bewegen kann, ohne an Hindernisse anzustoßen, und damit er ein Ziel finden und ansteuern kann, muß er irgendwie seine Umwelt &amp;quot;wahrnehmen&amp;quot;. &lt;br /&gt;
Hauptanwendung für diese Informationen aus der Umwelt ist die [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
==Bumpers==&lt;br /&gt;
Als Bumpers bezeichnet man eine Art Stoßstange, die einen Mikro-Switch auslöst. &lt;br /&gt;
&lt;br /&gt;
[[Bild:microschalter.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Die Auswertung erfolgt am besten digital an einem Pin mit Pull-up Widerstand. Man kann den Eingang pollen (abfragen), aber auch einen Interrupt auslösen lassen. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Whiskers (Fühler)==&lt;br /&gt;
Das sind flexible Kunststoff-Streifen von ca. 10 cm Länge, eigentlich für Datenhandschuhe vorgesehen. Aber man kann sie auch als Fühler einsetzen, und daher auch für die Kollisions-Sensorik verwenden. Beim Verbiegen steigt der Widerstand an.  &lt;br /&gt;
&lt;br /&gt;
[[Bild:flexs_200.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Um zu messen, wird mit einem zweiten Widerstand ein Spannungsteiler aufgebaut, der dann mit einem Analog-Eingang einen Grad der Verbiegung erkennen läßt. Sie werden häufig auch Flexsensoren genannt. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Incremental-Geber==&lt;br /&gt;
Dienen zur Erfassung von Drehzahl bzw. der Messung von Wegstrecken&lt;br /&gt;
===Drehgeber Sharp GP1A30 und GP1A38===&lt;br /&gt;
&lt;br /&gt;
[[Bild:gp1a30.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Beim Sharp GP1A30 und GP1A38 handelt es sich um Gabellichtschranken mit inkrementaler Drehgeberfunktion. Beide sind im Grunde von den Anschlüssen identisch, lediglich kann GP1A38 noch etwas höhere Drehzahlen messen. Im Gegensatz zu herkömmlichen Gabellichtschranken können mit dieser sowohl Drehzahl als auch Drehrichtung ermittelt werden. Notwendig sind dafür nur 2 digitale Ports. Verzichtet man auf die Auswertung der Drehrichtung, reicht nur ein Port.&lt;br /&gt;
Der Sensor hat den Vorteil das die Signale bereits TTL kompatibel sind und direkt an ein Controllerboard angeschlossen werden können. Ein Beispielprogramm zu [[RN-Control]] findet man hier&lt;br /&gt;
&lt;br /&gt;
* [[Beispiel Drehzahlmessung mit RN-Control]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:GP1A30.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Auswertung inkrementaler Drehgeber ist recht einfach. Ein Ausgang liefert einen Impuls pro Markierung (Scheibe auf der Welle). Prüft man bei jedem Impuls (Flanke) noch gleichzeitig den aktuellen Pegel des zweiten Ausganges, so kann daraus die Drehrichtung abgeleitet werden. &lt;br /&gt;
&lt;br /&gt;
Der Signalverlauf an den Sensorausgängen ist phasenversetzt:&lt;br /&gt;
&lt;br /&gt;
[[Bild:inkremental1.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:drehgeber_an_rncontrol.gif|center|framed|Beispielschaltung wenn man lediglich die Drehzahl ohne Drehrichtung auswerten möchte. Als Widerstand hat sich 330 Ohm als gut erwiesen.]]&lt;br /&gt;
&lt;br /&gt;
==Optische Sensoren==&lt;br /&gt;
===Helligkeit=== &lt;br /&gt;
Die Hauptanwendung solcher Sensoren ist, den hellsten Fleck im Raum zu finden.&lt;br /&gt;
Dies ist auch Teil vieler Roboterwettbewerbe. (Robo Callenge (2002 sic!), 'Ein Platz an der Sonne')&lt;br /&gt;
&lt;br /&gt;
Solche Sensoren können einfache [[LDR]]s oder [[Photodioden]] bzw. [[Phototransistoren]] sein.&lt;br /&gt;
LDRs haben den Vorteil, dass sie relativ hoch aussteuern, der große Nachteil ist aber, dass diese Sensoren ziemlich Wärmeempfindlich und etwas träge.&lt;br /&gt;
Photodioden und Phototransistoren haben den Vorteil, dass sie sehr genau sind, aber nicht besonders hoch aussteuern. Diese sollte man evtl. über einen OpAmp verstärken.&lt;br /&gt;
&lt;br /&gt;
[[Bild:fotowiderstand.jpg|center|framed|Ein typischer Fotowiderstand]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:SFH300.jpg|center|framed|SFH300, ein typischer Phototransistor]]&lt;br /&gt;
&lt;br /&gt;
Die Suche nach dem Hellsten Fleck im Rraum ist wie ich finde ein gutes Einsteigerthema!&lt;br /&gt;
&lt;br /&gt;
===CNY70===&lt;br /&gt;
&lt;br /&gt;
Der CNY70 ist ein Foto-Reflex Optokoppler. In einem würfelförmigem Gehäuse befindet sich eine Infrarot LED als Sender und ein Infrarot Fototransistor als Empfänger. Damit kann auf kurze Entfernung (wenige Millimeter) das reflektierte Licht der IR-LED durch den IR-Fototransistor gemessen werden.  &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Bild:cny70.jpg|thumb|200px|CNY70]]&lt;br /&gt;
|[[Bild:cny70_pinout.jpg|framed|CNY70 Vishay Pinout]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Achtung:''' Es existiert auch noch ein CNY70 von Temic mit anderer Pinbelegung, dort ist der Fototransistor verdreht eingebaut.&lt;br /&gt;
&lt;br /&gt;
Der CNY70 eignet sich für eine Vielzahl von Sensoren. Z.B. als Liniensensor, Radencoder, Abgrunddetektor und Lichtschranke. Allerdings ist er empfindlich gegen Streulicht, da  das Licht der IR-LED nicht moduliert ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:cny70_schem1.gif|thumb|center|600px|CNY70 als Liniensensor]]&lt;br /&gt;
&lt;br /&gt;
Der Liniensensor benötigt 2 A/D Wandler Eingänge des Prozessors. Die CNY70 sollten so nah wie möglich in Bodennähe angebracht sein (1..3mm). Der P-Kanal FET BS250 dient als Schalter für die IR LEDs des CNY70. Damit spart man Strom, wenn der Liniensensor nicht benötigt wird. Allerdings wird dafür ein weiterer Prozessor Ausgang als Enable Signal benötigt. HIGH Pegel schaltet die Sensor LEDs aus, LOW Pegel ein.  Wird keine Enable Funktion gewünscht, läßt man den BS250 einfach weg und hängt die Vorwiderstände der Sensor LEDs direkt an VCC.&lt;br /&gt;
&lt;br /&gt;
[[Bild:cny70_schem2.gif|thumb|center|600px|CNY70 als Radencoder mit Schmitt-Trigger]]&lt;br /&gt;
&lt;br /&gt;
Die Radencoder benötigen zwei digitale Eingangsports des Prozessors. A/D Wandler sind nicht nötig, da die Schmitt-Trigger Gatter für saubere Logik Signale sorgen. Die CNY70 sollten so nah wie möglch an den Rädern sitzen (1..2mm). Die gewählten Widerstandswerte für R17/R19 bzw. R18/R20 sind optimiert für Radencoder die auf Transparentfolie gedruckt und auf Aluminium Räder aufgeklebt werden. Für Radencoder die auf Papier ausgedruckt werden, sind andere Widerstandswerte notwendig.&lt;br /&gt;
Der P-Kanal FET BS250 dient als Schalter für die IR LEDs des CNY70. Damit spart man Strom, wenn der Radencoder nicht benötigt wird. Allerdings wird dafür ein weiterer Prozessor Ausgang als Enable Signal benötigt. HIGH Pegel schaltet die Sensor LEDs aus, LOW Pegel ein. Wird keine Enable Funktion gewünscht, läßt man den BS250 einfach weg und hängt die Vorwiderstände der Sensor LEDs direkt an VCC.&lt;br /&gt;
&lt;br /&gt;
===Distanzsensor IS471F===&lt;br /&gt;
&lt;br /&gt;
IS471F - Hindernisserkennung mit Infrarot Distanzsensor&lt;br /&gt;
&lt;br /&gt;
Das hier vorgestellte IC IS471F erlaubt eine einfach und sogar recht preisgünstige Hinternisserkennung per Infarot. Dazu muß im wesentlichen nur noch eine Infrarot-Diode an das IC angeschlossen werden. Das modulierte Licht wird von einem Gegenstand direkt auf das IC zurückgeworfen und somit das Hinterniss erkannt. Tageslicht/Fremdlicht stört den IS471 überhaupt nicht, da das Licht mit einer bestimmten Frequenz moduliert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:is471.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der normale Schaltungsaufbau sieht also wie oben abgebildet aus! In der Praxis kann das dann in etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:is471beispiel.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das englische Datenblatt findet man im Roboternetz-Download-Bereich&lt;br /&gt;
&lt;br /&gt;
Die normale Reichweite ist in gewissen Grenzen abhängig von der Farbe des Hinternisses. In der Regel reicht es jedoch durchaus einige cm so das langsame Roboter durchaus sehr gut damit zurecht kommen. Durch besonders helle Infrarot LED´s und durch zusätzlich LED-Fassungen kann man die Reichweite erhöhen. Wem das noch nicht reicht, der kann über einen zusätzlichen Transistor die Strahlungsleistung der LED noch weiter erhöhen. &lt;br /&gt;
&lt;br /&gt;
[[Bild:is471verstaerkung.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
http://www.roboternetz.de/bilder/mehrereis471.gif&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sharp Infrarotsensoren===&lt;br /&gt;
&lt;br /&gt;
Sharp hat eine ganz interessante Serie von Bausteinen herausgebracht mit denen ein Roboter sogar recht genau Entfernungen messen kann. Das Messergebnis ist nahezu unabhängig von der Farbe und Helligkeit des gemessenen Objektes. Die Ansteuerung ist sehr einfach, der Sensorausgang kann zum Beispiel direkt an einen analogen Eingang eines Mikrocontrollers angeschlossen werden. Die Sensoren sind unter den Roboter-Bastlern weit verbreitet. &lt;br /&gt;
Bei vielen Händlern erhältlich kosten die Sensoren derzeit je nach Typ und Händlerspanne zwischen 13 bis 25 Euro.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bild:Sharpentfernungssensor.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oft werden selbst in kleinen Roboter-Projekten mehrere dieser Sensoren genutzt da sie nur einen äußerst engen Erfassungsbereich haben. Sie eignen sich daher sehr gut zur Vermessung einer Umgebung, insbesondere dann wenn Sie drehbar auf einem Servo montiert werden. Als Kollisionsschutz sind sie wegen dem engen Winkel nur bedingt geeignet, zu diesem Zweck eignen sich zum Beispiel Ultraschallsensoren besser.&lt;br /&gt;
Das Funktionsprinzip der Sensoren ist einfach. Der Sensor besteht aus Sender und Empfänger. Der Sender sendet einen Infrarot-Strahl aus, der vom Hindernis reflektiert wird. Je nach Entfernung trifft der reflektierte Strahl an einer unterschiedlichen Stelle auf den Empfänger (ein sog. Position Sensitive Device, PSD). Der Empfänger setzt den Auftreffpunkt in einen analogen Spannungswert um. Eine schöne Skizze dazu:  &lt;br /&gt;
&lt;br /&gt;
[[Bild:sharpfunktion.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Einige der beliebtesten Bausteine sind:'''&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D12==== &lt;br /&gt;
Distanz 10 - 80 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt&lt;br /&gt;
Dies ist der am häufigsten eingesetzte Sharp Typ bei mobilen Robotern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:GP2D12anschluss.gif|center]]&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2YA21YK==== &lt;br /&gt;
Distanz 10 - 80 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt &lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D120====&lt;br /&gt;
Distanz 4 - 30 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2Y0A02YK====&lt;br /&gt;
Distanz 20 - 150 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
http://www.shop.robotikhardware.de/shop/catalog/images/artikelbilder/sensoren/gp2y0a02yk_diagramm.gif&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D02====&lt;br /&gt;
Distanz 10 - 80 cm - Entfernung wird durch 8 Bit Digitalausgang übermittelt&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D150====&lt;br /&gt;
Distanz 3-30 cm - 1 Bit Schaltausgang  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datenblätter zu den oberen Sensoren findet man im Download-Bereich des Roboternetz, siehe unter [[#Weblinks]].&lt;br /&gt;
 &lt;br /&gt;
Um die analogen Spannung der Sensoren in eine Entfernung umzurechnen, kann man sich mit Hilfe des Datenblattes oder einfacher Probemessungen Tabellen erstellen, welche dann vom Controller zur Umsetzung genutzt werden.&lt;br /&gt;
Bequemer ist allerdings eine Näherungsformel:&lt;br /&gt;
&lt;br /&gt;
====Formel zur Entfernungsberechnung==== &lt;br /&gt;
 D = A/(X-B) &lt;br /&gt;
&lt;br /&gt;
 D ist die Entfernung &lt;br /&gt;
 X ist der Ausgabewert des Sensors &lt;br /&gt;
 A ist die Steigung der Kurve A/X &lt;br /&gt;
 B ist der Offset der Kurve &lt;br /&gt;
&lt;br /&gt;
Die Konstanten A und B ermittelt man am besten über zwei Probemessungen: &lt;br /&gt;
&lt;br /&gt;
D und X sind die Entfernung und der Ausgabewert der ersten Messung (z.B. bei 20 cm) &lt;br /&gt;
D' und X' sind die Entfernung und der Ausgabewert der zweiten Messung (z.B. bei 60 cm) &lt;br /&gt;
&lt;br /&gt;
 A = ((X' - X) * D' * D) /(D - D' ) &lt;br /&gt;
 B = (D' * X' - D * X) /(D' - D) &lt;br /&gt;
&lt;br /&gt;
====GP2D12 Messkurve====&lt;br /&gt;
&lt;br /&gt;
[[Bild:gpd12kurve.gif|center]]&lt;br /&gt;
&lt;br /&gt;
====GPD120 Messkurve====&lt;br /&gt;
&lt;br /&gt;
[[Bild:gpd120kurve.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Ultraschall Sensoren== &lt;br /&gt;
===Ultraschallsensoren SRF04===&lt;br /&gt;
Die Firma '''Devantech''' hat eine Serie von sehr günstigen und kleinen Ultraschallsensoren entwickelt, die sich im Bereich &amp;quot;autonome Robotersysteme&amp;quot; durchgesetzt haben. Sie sind sehr verbreitet, da sie auch für &amp;quot;Hobby-Robotiker&amp;quot; erschwinglich sind und es sich nicht lohnen würde vergleichbare Module selber zu bauen, da diese meistens ungenauer und teurer wären.&lt;br /&gt;
&lt;br /&gt;
Bekannt wurde die Serie durch den '''SRF04'''. Mit seinen kleinen Abmessungen, der niedrigen Stromaufnahme und der hohen Genauigkeit ist er für kleine Messaufgaben im Entfernungsbereich von 3cm bis 3m gut geeignet. Der SRF04 kann einen 3cm dicken Besenstiel in 2m Entfernung erkennen und wird durch ein [[PWM]]-Signal ausgewertet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf_04a.jpg]] [[Bild:srf_04.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ultraschallsensor SRF05===&lt;br /&gt;
Der Nachfolger des SRF04 ist der neuer SRF05. Er besitzt noch eine etwas höhere Reichweite bis 4 Meter. Zudem besitzt er neben dem kompatibel Mode zu SRF04 noch eine Betriebsart bei der er über einen einzigen Port (Pin) gesteuert wird. Das heißt sowohl der Start der Messung und das Ergebnis wird über die gleiche Leitung übertragen. [[Ultraschall SRF05 an RN-MiniControl|Programmbeispiel in Bascom]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Srf05mode1.jpg|center]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf05mode2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf05mode2diagram.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SRF08===&lt;br /&gt;
Die Alternative zu SRF04 und SRF05 ist der beliebte  '''SRF08''' und dessen Nachfolger '''SRF10''', der nun über den [[I2C]]-Bus ausgewertet werden kann und über eine Reichweite von 3cm bis 6m verfügt. Er hat eine noch kleinere Stromaufnahme und zusätzlich befindet sich auf der Platinenfront ein Fotowiderstand(LDR) dessen Lichtmesswerte sich ebenfalls über den [[I2C]]-Bus auswerten lassen. Durch den SRF08 wird es möglich auch bis zu 16 Mehrfachechos, von weiter hinten gelegenen Gegenständen, auszuwerten, die bei dem SRF04 ignoriert wurden. Über den [[I2C]]-Bus kann man die Messwerte in cm, zoll und in der Laufzeit µs auslesen und spart sich somit die externe Auswertung der Laufzeit, wie bei dem SRF04. Weiterhin können insgesamt 16 SRF08-Module an einen [[I2C]]-Bus angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf08_a.jpg]]  [[Bild:srf08_b.jpg]]&lt;br /&gt;
&lt;br /&gt;
===SRF08 Programmbeispiel===&lt;br /&gt;
SFR08 Programm Beispiel mit [[Bascom]]&lt;br /&gt;
Über die grundsätzliche Behandlung des [[I2C]]-Bus mit [[Bascom]] kann man [[I2C|hier]] nachlesen. &lt;br /&gt;
&lt;br /&gt;
 Const Sf08_adr_0 = &amp;amp;HE0             ' I2C Adresse&lt;br /&gt;
 Const Sf08_c_range = 100            ' Reichweite&lt;br /&gt;
 Const Sf08_c_gain = 1               ' Empfindlichkeit&lt;br /&gt;
&lt;br /&gt;
Die Adresse ist der Default-Wert für den Sensor, und kann eingestellt werden. &lt;br /&gt;
Range und Gain sind anzupassen, die angegeben Werte sind aber mal grundsätzlich verwendbar.&lt;br /&gt;
&lt;br /&gt;
'''Setup'''&lt;br /&gt;
Nach dem Reset sind einmal Range und Gain zu setzen.&lt;br /&gt;
&lt;br /&gt;
'''Setzen Range'''&lt;br /&gt;
&lt;br /&gt;
      I2cstart&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 2            ' register &amp;quot;range&amp;quot;&lt;br /&gt;
      I2cwbyte Sf08_c_range  &lt;br /&gt;
      I2cstop&lt;br /&gt;
 &lt;br /&gt;
'''Setzen Gain'''&lt;br /&gt;
&lt;br /&gt;
      I2cstart&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 1            ' register &amp;quot;gain&amp;quot;&lt;br /&gt;
      I2cwbyte Sf08_c_gain    &lt;br /&gt;
      I2cstop&lt;br /&gt;
&lt;br /&gt;
'''Abfrage Trigger'''&lt;br /&gt;
&lt;br /&gt;
Die Abfrage soll laut Beschreibung in zwei Schritten erfolgen, zwischen denen ca 70 mS gewartet werden soll. Diese Zeit braucht das Gerät zum Messen. &lt;br /&gt;
&lt;br /&gt;
'''Trigger'''  &lt;br /&gt;
      I2cstart&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 0            ' register &amp;quot;Trigger&amp;quot;&lt;br /&gt;
      I2cwbyte 81           ' Meßwert in Zentimetern&lt;br /&gt;
&lt;br /&gt;
      Waitms 70 &lt;br /&gt;
&lt;br /&gt;
'''Ergebnis abholen'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 DIM Lsb as Byte&lt;br /&gt;
 DIM Msb as Byte&lt;br /&gt;
 DIM IVal as word&lt;br /&gt;
&lt;br /&gt;
      I2cstart              ' Repeated Start&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 2            ' Meßwert US&lt;br /&gt;
&lt;br /&gt;
      I2cstart                 ' repeated Start&lt;br /&gt;
      I2cwbyte Sf08_adr_0 + 1  ' Device I2C Adresse READ!&lt;br /&gt;
      I2crbyte Msb , Ack      ' Bit 8-15&lt;br /&gt;
      I2crbyte Lsb , Nack     ' Bit 0-7&lt;br /&gt;
      I2cstop&lt;br /&gt;
&lt;br /&gt;
      Ival = Makeint(lsb , Msb) ' umwandeln in Word (16 Bit)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SRF10 Ultraschallsensor ===&lt;br /&gt;
SRF10 ist quasi der Nachfolger von SRF08. Er bietet die gleiche Leistung und ist sogar gegenüber Spannungschankungen noch etwas unempfindlicher als der Vorgänger. Der größte Vorteil besteht jedoch darin das er ca. 1/3 kleiner als sein Vorgänger ist.   &lt;br /&gt;
&lt;br /&gt;
[[Bild:srf10foto1.jpg]] [[Bild:srf10foto2.gif]]&lt;br /&gt;
&lt;br /&gt;
Die technischen Daten sind ähnlich:&lt;br /&gt;
* Betriebsspannung: 5V &lt;br /&gt;
* Stromaufnahme: ca. 3mA Standby, ca. 15mA während des Messens Frequenz: 40KHz &lt;br /&gt;
* Maximale Reichweite: 6 m &lt;br /&gt;
* Minimale Reichweite: 4 cm &lt;br /&gt;
* Messwerterfassung: intern, kein externer Controller zur Zeitmessung notwendig &lt;br /&gt;
* Interface: Standard – I2C (passend zu zahlreichen Controllerboards, z.B. RN-Control) &lt;br /&gt;
* Ausgabeformat: µs, cm oder Zoll &lt;br /&gt;
* Feature: Analogverstärkung 40 - 700 (einstellbar, 16 Stufen) &lt;br /&gt;
* Abmessungen: 32mm x 15mm x 10mm &lt;br /&gt;
* Hersteller: Devantech Ltd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[Ultraschall_SRF10_an_RN-Control|Programmbeispiel in Bascom]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf10ausbreitung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
=== Vergleichstabelle ===&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
{|{{Blaueschmaltabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |'''SRF10'''&lt;br /&gt;
 |'''SRF08'''&lt;br /&gt;
 |'''SRF05'''&lt;br /&gt;
 |'''SRF04'''&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Betr. Spannung'''&lt;br /&gt;
 |5V&lt;br /&gt;
 |5V&lt;br /&gt;
 |5V&lt;br /&gt;
 |5V&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Stromaufnahme'''&lt;br /&gt;
 |3mA typ,&amp;lt;br&amp;gt; 15mA max.&lt;br /&gt;
 |3mA typ,&amp;lt;br&amp;gt; 15mA max.&lt;br /&gt;
 |4mA typ,&amp;lt;br&amp;gt; 30mA max.&lt;br /&gt;
 |30mA typ,&amp;lt;br&amp;gt; 50mA max.&lt;br /&gt;
 |-&lt;br /&gt;
 |'''US Leistung'''&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Frequenz'''&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Bereich'''&lt;br /&gt;
 |72&amp;amp;ordm;&lt;br /&gt;
 |55&amp;amp;ordm;&lt;br /&gt;
 |55&amp;amp;ordm;&lt;br /&gt;
 |55&amp;amp;ordm;&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Reichweite'''&lt;br /&gt;
 |4cm - 6m&lt;br /&gt;
 |3cm - 6m&lt;br /&gt;
 |3cm - 4m&lt;br /&gt;
 |3cm - 3m&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Triggerimpuls'''&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 |10µs min.&lt;br /&gt;
 |10µs min.&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Abmessung in mm'''&lt;br /&gt;
 |32 x 15 x 10&lt;br /&gt;
 |43 x 20 x 17&lt;br /&gt;
 |43 x 20 x 17&lt;br /&gt;
 |43 x 20 x 17&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Interface'''&lt;br /&gt;
 |I2C&lt;br /&gt;
 |I2C&lt;br /&gt;
 |TTL Impuls&lt;br /&gt;
 |TTL Impuls&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Feature'''&lt;br /&gt;
 |Minimodul&lt;br /&gt;
 |Lichtsensor&lt;br /&gt;
 |SRF04 Modus&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Preis ca. *'''&lt;br /&gt;
 |44,00 €&lt;br /&gt;
 |44,00 €&lt;br /&gt;
 |22,00 €&lt;br /&gt;
 |25,00 €&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''*''' Der Preis dient nur zum vergleich untereinander, nicht als Referenz !&lt;br /&gt;
&lt;br /&gt;
==Kompaß== &lt;br /&gt;
===Kompaß-Modul CMPS03===&lt;br /&gt;
Laut der Doku ist diese Modul speziell für die Bedürnisse von Robotern gestaltet worden. Es mißt seine Lage relativ zum Erdmagnetfeld und liefert diesen Wert&lt;br /&gt;
* Als PWM-Signal &lt;br /&gt;
* Über I2C entweder 0-255 als Byte oder&lt;br /&gt;
* 0-3599 als 16-Bit Wert (MSB first)&lt;br /&gt;
&lt;br /&gt;
In der vorliegenden Doku ist eine fixe I2C-Adresse von 0xC0 angegeben. Was leider noch fehlt, sind Angaben, ob und wie diese Adresse geändert werden kann.&lt;br /&gt;
&lt;br /&gt;
Bei waagrechter Montage ist das also ein Kompaß, bei senkrechter Montage dieser Module kann man auch die Neigung in Nord-Süd-Richtung messen. Hierzu sind 2 Module nötig, die zueinander um 90° gedreht angeordnet sein müssen. Die Neigung in Ost-West-Richtung zu messen, ist dagegen leider nicht möglich.&lt;br /&gt;
&lt;br /&gt;
Das Ganze ist eine Anwendung des Philips-KMZ51 Magnet-Feld-Sensors mittels eines PIC16F872&lt;br /&gt;
&lt;br /&gt;
Gelegentlich sollte das Modul kalibriert werden. Das kann über den I2C-Bus, aber auch mittels einen Pins am Modul initiiert werden. Dann muß das Module langsam um 360 Grad gedreht werden. Dabei nimmt das Modul 4 Meßpunkte auf und speichert sie im EEPROM. &lt;br /&gt;
&lt;br /&gt;
Ein Beispielprogramm findet man hier:&lt;br /&gt;
* [[Bascom und Kompass CMPS03]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:cmps3pin.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
==Beschleunigung==&lt;br /&gt;
&lt;br /&gt;
Beschleunigungssensoren messen die Beschleunigung, die auf sie wirkt - wenn sie auf dem Tisch liegen, messen sie beispielsweise die Erdbeschleunigung von 1g. In einem Auto können weitere Beschleunigungen hinzukommen: Zur Seite beim Kurvenfahren, nach vorne oder hinten beim Beschleunigen, oder bei zügiger Fahrt über eine Bergkuppe auch mal welche in vertikaler Richtung.&amp;lt;br&amp;gt;&lt;br /&gt;
Beschleunigungssensoren sind meist mehrdimensional ausgelegt, so dass für mehrere Achsen ein Sensor verwendet werden kann.&lt;br /&gt;
&lt;br /&gt;
Anwendungen finden sie in ESP-Systemen in Autos, die u.a. über die Querbeschleunigung ausrechnen können, ob das Fahrzeug seitlich driftet oder gar schleudert.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine andere wichtige Aufgabe übernehmen sie zusammen mit Gyroskopen in Trägheitsnavigationssystemen, die dann sowohl die Lage im Raum als auch die Bewegung feststellen können.&lt;br /&gt;
&lt;br /&gt;
Moderne Piezo-Sensoren sind nur noch Chip-gross und können direkt in Schaltungen integriert werden.&lt;br /&gt;
&lt;br /&gt;
==Drehung==&lt;br /&gt;
&lt;br /&gt;
Um Drehungen zu messen, werden sogenannte Gyroskope, kurz &amp;quot;Gyros&amp;quot; verwendet. Typische Vertreter sind hier die ADXRS-Familie von Analog Devices. Diese sind allerdigs, anders als die Beschleunigungssensoren, meistens nur für eine Achse ausgelegt. Die Ausgabe erfolgt meist analog, jede Ausgangsspannung entspricht einer bestimmten Drehrate in °/Sekunde.&lt;br /&gt;
&lt;br /&gt;
Gemessen wird die Auswirkung der Corioleskraft auf zwei gleiche, in Bewegung gehaltene Massen. Diese schwingen radial, d.h. 90° verdreht zu der Achse, auf der die Drehung gemessen werden soll. Wird der Sensor um die Achse gedreht, ändert sich die Geschwindigkeit dieser Massen, da sie auf einer gedachten Scheibe abwechselnd nach innen und außen wandern. Je weiter sie außen sind, desto höher ist ihre Geschwindigkeit, je weiter innen, desto langsamer sind sie. Bei der Bewegung nach außen müssen sie also beschleunigt werden, andersherum genauso. Die dabei auftretenden Beschleunigungen werden mittels einiger Fühler gemessen, die einen Plattenkondensator bilden.&lt;br /&gt;
&lt;br /&gt;
Eine Anwendung sind im Flugmodellbau Gyro-&amp;quot;Taillocks&amp;quot;, die in Hubschraubern die Heckstabilität verbessern und ESP-Systeme in Autos, die u.a. durch die Messung der Gierrate, also der Drehung des Fahrzeugs um die Hochachse, feststellen können, ob das Fahrzeug seitlich driftet oder sogar schleudert.&lt;br /&gt;
&lt;br /&gt;
==Temperatur== &lt;br /&gt;
===NTCs===&lt;br /&gt;
===PTCs===&lt;br /&gt;
&lt;br /&gt;
PTCs sind Temperatursensoren, deren Widerstand sich mit steigender Temperatur erhöht. Dazu gehören&lt;br /&gt;
&lt;br /&gt;
*PT100, PT1000 etc.&lt;br /&gt;
*Die KTYxx-xxx Reihe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== KTY: Silizium Temperatursensoren ====&lt;br /&gt;
&lt;br /&gt;
Die KTY-Temperatursensoren sind verglichen mit anderen Temperatursensoren verhältnismäßig günstig, haben dafür aber auch mehr Nachteile.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Genauigkeit ist ziemlich eingeschränkt, weshalb die KTY-Temperatursensoren zuerst kalibriert werden sollten. Dies muss Schaltungstechnisch oder in Software erfolgen, eine eingebaute Kalibrierung gibt es nicht.&amp;lt;br&amp;gt;&lt;br /&gt;
Andererseits lassen sich mittels Oversampling sehr hoch aufgelöst Temperaturen messen, was aufgrund mittelmäßiger Linearität (auch nach der Linearisierung) aber nur bei der Messung kleiner Temperaturunterschiede empfehlenswert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Linearisiert werden die KTY an 5 Volt mit einem Reihenwiderstand von etwa 2,7 kOhm bis 3,3 kOhm.&lt;br /&gt;
&lt;br /&gt;
===Temperatur-Sensor LM75===&lt;br /&gt;
&lt;br /&gt;
[[Bild:lm75.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Dieser Chip von National Semiconductors kann die Umgebungstemperatur mit einer Genauigkeit von 0.5&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; Grad Celsius messen. Das angegebene Bereich ist -25&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; bis 100&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; C. Es wird zweierlei geboten:&lt;br /&gt;
* Ein Schaltausgang - Wenn man also z.B. einen Ventilator einschalten möchte&lt;br /&gt;
* I2C - Der obere Teil der Adresse ist fix 0x9n, die Bits 1-3 kann man mit Jumper einstellbar machen oder fest verdrahten. &lt;br /&gt;
&lt;br /&gt;
Durch einen einfachen I2C-Lesebefehl kann man die Temperatur einlesen (16-Bit), das Format ist allerdings etwas tricky. Das erste Byte (8-Bit) ist die Temperatur in ganzen Grad, als normales signed char, vom zweiten Byte gibt das MSB an, ob noch 0.5&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; '''dazuzuzählen''' sind (also auch, wenn vorne eine negative Zahl steht)  &lt;br /&gt;
&lt;br /&gt;
Der Grund ist der: die vorzeichenbehaftete 9-Bit Zahl, die da linksbündig in zwei Datenbytes übertragen wird, gibt eigentlich an, wieviel 0.5 Grad - Einheiten gemessen wurden. Rein rechnerisch wäre also Temperatur = Wert * 0.5, das müßte man aber als float durchführen oder erweitern&lt;br /&gt;
&lt;br /&gt;
===Programm-Beispiel für LM75===&lt;br /&gt;
Der LM75 wird über den [[I2C]]-Bus angesprochen&lt;br /&gt;
In BasCom, wo es ja keine signed char gibt, wird das Interpretieren auf sehr unterschiedliche Art empfohlen. &lt;br /&gt;
&lt;br /&gt;
Ich empfehle:&lt;br /&gt;
&lt;br /&gt;
 dim Ival as integer&lt;br /&gt;
 dim Msb as byte&lt;br /&gt;
 dim Lsb as byte&lt;br /&gt;
         I2cstart&lt;br /&gt;
         I2cwbyte &amp;amp;H91   ' Lese-adresse !  &lt;br /&gt;
         If Err = 1 Then&lt;br /&gt;
            I2cstop       ' kein ACK vom LM75 --&amp;gt; irgendein Fehler&lt;br /&gt;
            Ival = 9999   ' Zeichen, daß der Wert ungültig ist !&lt;br /&gt;
         Else&lt;br /&gt;
            I2crbyte Msb , Ack&lt;br /&gt;
            I2crbyte Lsb , Nack&lt;br /&gt;
            I2cstop&lt;br /&gt;
            If Msb.7 = 1 Then&lt;br /&gt;
               Ival = Makeint(msb , &amp;amp;HFF)   ' auffüllen mit den Vorzeichen bits&lt;br /&gt;
            Else&lt;br /&gt;
               Ival = Makeint(msb , &amp;amp;H00)   ' positiv, also bleibt es so&lt;br /&gt;
            End If&lt;br /&gt;
            Ival = Ival * 10                ' erweitern &lt;br /&gt;
            If Lsb.7 = 1 Then&lt;br /&gt;
              Ival = Ival + 5               ' fünf Zehntel Grad dazu &lt;br /&gt;
            End If&lt;br /&gt;
         End if&lt;br /&gt;
&lt;br /&gt;
das ergibt die Temperatur in Zehntel-Grad (Natürlich nur, wenn's keine Fehler gab).&lt;br /&gt;
&lt;br /&gt;
==Resistive Sensoren==&lt;br /&gt;
...&lt;br /&gt;
==Kapazitive Sensoren==&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für kapazitive Sensoren sind Luftfeuchtigkeitsmesser, die ihre Kapazität entsprechend der Luftfeuchtigkeit ändern. Das Auslesen der Kapazität kann prinzipiell über das Ausmessen von Ladekurven geschehen. Dies ist jedoch bei kleinen Kapazitäten nicht praktisch durchführbar, weshalb man in diesem Falle meist einen Schwingkreis baut, dessen Frequenz man dann misst und so dann zusammen mit der bekannten Induktivität der Spule die Kapazität des Kondensators ausrechnen kann.&lt;br /&gt;
&lt;br /&gt;
==Induktive Sensoren==&lt;br /&gt;
Induktiver Näherungsschalter&lt;br /&gt;
&lt;br /&gt;
Sensoren die ihre Induktivität entsprechend der Messgröße ändern können auch mit Hilfe eines Schwingkreises mit bekannter Kapazität ausgemessen werden.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Piezoelektrische Sensoren==&lt;br /&gt;
Hier ist ein Experiment dargestellt das die Funktion von Piezowandlern demonstriert.&lt;br /&gt;
&lt;br /&gt;
Drückt man auf eine längliche Glasplatte (Mikroskopträger Länge 76mm), die an den Enden auf je einem Piezo Wandler gelagert ist, dann ergeben sich Signale, die von den Kräften auf die Wandler abhängig sind. &lt;br /&gt;
&lt;br /&gt;
Die Summe der beiden Kräfte entspricht der Gesamtkraft. Das Verhältnis der beiden Kräfte entspricht dem Verhältnis der Abstände des Druckpunktes zum Wandler. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Piezowandler.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Versuch wurde mit der Frequenz von ca. 4Hz (0,5s/div) von einem Ende bis zum anderen auf die Platte gedrückt. (Tonleiter). Die Signale der beiden Wandler sind im Oszillogramm aufgetragen und die Folge der Druck-Positionen ist auf den ersten Blick schon mal nachvollziehbar.&lt;br /&gt;
&lt;br /&gt;
==PIR Passiv Infrarot Sensoren==&lt;br /&gt;
Hier handelt es sich um Passiv-Infrarot-Bewegungsmelder. Bewegungsmelder regieren beim Eintritt einer Person (Tier) in das Erfassungsfeld des Sensors. Die Anwendungsmöglichkeiten sind nahezu unbegrenzt, man kennt die Technik ja von vielen Terrassenlampen, welche sich beim vorbeigehen automatisch einschalten.&lt;br /&gt;
Reagiert wird also auf Die Körperwärme einer sich im Erfassungsfeld bewegenden Person.&lt;br /&gt;
[[Bild:pir.jpg|right]]&lt;br /&gt;
Zum Prinzip: &lt;br /&gt;
Wärmestrahlen, die einen Erfassungsvorgang auslösen, liegen im Infrarot-Bereich des Wellenspektrums. In diesem Bereich gibt der menschliche Körper seine Wärmestrahlung ab. Leuchtmittel wie Glüh- , Halogen- und Entladungslampen, die für eine Strahlung im sichtbaren Bereich um 0,555 μm entwickelt wurden, geben jedoch auch einen erheblichen Teil an Wärmestrahlung im Infrarot-Bereich ab.&lt;br /&gt;
Im Spektrum oberhalb des sichtbaren Licht, ab 0,780 μm, beginnt der Infrarot-Bereich. Die Wellenlänge&lt;br /&gt;
dieser IR-Strahlung ist abhängig von der Temperatur eines Körpers. Die Wärmestrahlung&lt;br /&gt;
des Menschen hat ihr Maximum zwischen 9 und 10 μm im Infrarot-Bereich.&lt;br /&gt;
Diese Tatsache nutzt der PIR Sensor mittels sogenannter pyroelektrischer IRDetektoren, welche eine hohe Empfindlichkeit im langwelligen Infrarot-Bereich aufweisen. Die Infrarot-&lt;br /&gt;
Strahlung verhält sich ähnlich wie sichtbares Licht. Sie kann reflektiert und durch Linsen&lt;br /&gt;
gebündelt werden.&lt;br /&gt;
Basis eines solchen IR-Detektors (Sensors) sind Lithium-Tantalatkristalle. Diese Kristalle erzeugen,&lt;br /&gt;
bei Wärmeänderung (positive oder negative Temperaturänderung), eine elektrische Spannung.&lt;br /&gt;
Die von den Kristallen abgegebene Spannung liegt im Bereich von einigen μV (μV = millionstel Volt) und ist von folgenden Bedingungen abhängig: &lt;br /&gt;
* Der Intensität der Wärmequelle (Temperatur und Größe)&lt;br /&gt;
* Dem Umgebungsmedium (Temperatur, unterschiedliche Luftfeuchtigkeit)&lt;br /&gt;
* Der Entfernung zwischen Wärmequelle und IR-Sensor&lt;br /&gt;
* Der Bewegungsgeschwindigkeit und Bewegungsrichtung der Wärmequelle&lt;br /&gt;
* Der Empfindlichkeit des PIR-Elementes (frequenzabhängiges Bandpaßverhalten mit Maximum bei ca. 0,1 Hz)&lt;br /&gt;
&lt;br /&gt;
Zur Unterdrückung von Einflüssen aus der Umgebung (übliche wetterbedingte Temperaturänderungen), sind in jedem Sensor 2 Kristalle antiparallel geschaltet. &lt;br /&gt;
Einer der Kristalle gibt, bei Auftreffen von Wärmestrahlung einen positiven, der andere einen negativen Spannungsimpuls ab. Wärmeänderungen die gleichzeitig und mit gleicher Intensität auf beide Kristalle einwirken lösen so keinen Erfassungsvorgang aus, denn die beiden Impulse heben sich gegenseitig auf. Dadurch ist ein Auslösen bei Wärmeänderungen der Umgebung weitgehend ausgeschlossen.&lt;br /&gt;
Anders verhält es sich bei schnellen Bewegungen. Die Lithiumtantalat-Kristalle geben, entsprechend&lt;br /&gt;
der Bewegung und der dadurch hervorgerufenen Wärmeänderung im Erfassungsfeld, ihre&lt;br /&gt;
Impulse zeitversetzt ab. Die beiden Impulse addieren sich zu einer Wechselgröße mit höherer&lt;br /&gt;
Signalamplitude. Dieses elektrische Ausgangssignalist proportional der Wärmeänderung und führt zur Meldung einer Bewegung.&lt;br /&gt;
&lt;br /&gt;
==Autoren==&lt;br /&gt;
* [[Benutzer:PicNick|PicNick]]&lt;br /&gt;
* [[Benutzer:Frank|Frank]] &lt;br /&gt;
* [[Benutzer:Dennis.strehl|Dennis.strehl]]&lt;br /&gt;
* [[Benutzer:Florian|Florian]]&lt;br /&gt;
* Topic&lt;br /&gt;
* [[Benutzer:Manf|Manf]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
* [[Sensoren]]&lt;br /&gt;
* [[Graycode]]&lt;br /&gt;
* [[Ultraschall SRF10 an RN-Control]]&lt;br /&gt;
* [[Ultraschall SRF05 an RN-MiniControl]]&lt;br /&gt;
* [[Bascom und Kompass CMPS03]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*[http://www.ikm.uni-karlsruhe.de/forschung/pzt_webseiten/de/grundlagen/pyro.html Piezoelektrische Sensoren]&lt;br /&gt;
*[http://www.roboternetz.de/phpBB2/dload.php?action=category&amp;amp;cat_id=2 Datenblätter im Download-Bereich des Roboternetz]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Robotikeinstieg]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Elektronik]]&lt;br /&gt;
[[Category:Sensoren]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Sensorarten&amp;diff=8504</id>
		<title>Sensorarten</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Sensorarten&amp;diff=8504"/>
				<updated>2006-08-07T20:04:20Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* CNY70 */  Typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Welche Sensorarten gibt es==&lt;br /&gt;
Damit sich ein Roboter in seiner Umgebung bewegen kann, ohne an Hindernisse anzustoßen, und damit er ein Ziel finden und ansteuern kann, muß er irgendwie seine Umwelt &amp;quot;wahrnehmen&amp;quot;. &lt;br /&gt;
Hauptanwendung für diese Informationen aus der Umwelt ist die [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
==Bumpers==&lt;br /&gt;
Als Bumpers bezeichnet man eine Art Stoßstange, die einen Mikro-Switch auslöst. &lt;br /&gt;
&lt;br /&gt;
[[Bild:microschalter.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Die Auswertung erfolgt am besten digital an einem Pin mit Pull-up Widerstand. Man kann den Eingang pollen (abfragen), aber auch einen Interrupt auslösen lassen. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Whiskers (Fühler)==&lt;br /&gt;
Das sind flexible Kunststoff-Streifen von ca. 10 cm Länge, eigentlich für Datenhandschuhe vorgesehen. Aber man kann sie auch als Fühler einsetzen, und daher auch für die Kollisions-Sensorik verwenden. Beim Verbiegen steigt der Widerstand an.  &lt;br /&gt;
&lt;br /&gt;
[[Bild:flexs_200.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Um zu messen, wird mit einem zweiten Widerstand ein Spannungsteiler aufgebaut, der dann mit einem Analog-Eingang einen Grad der Verbiegung erkennen läßt. Sie werden häufig auch Flexsensoren genannt. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Incremental-Geber==&lt;br /&gt;
Dienen zur Erfassung von Drehzahl bzw. der Messung von Wegstrecken&lt;br /&gt;
===Drehgeber Sharp GP1A30 und GP1A38===&lt;br /&gt;
&lt;br /&gt;
[[Bild:gp1a30.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Beim Sharp GP1A30 und GP1A38 handelt es sich um Gabellichtschranken mit inkrementaler Drehgeberfunktion. Beide sind im Grunde von den Anschlüssen identisch, lediglich kann GP1A38 noch etwas höhere Drehzahlen messen. Im Gegensatz zu herkömmlichen Gabellichtschranken können mit dieser sowohl Drehzahl als auch Drehrichtung ermittelt werden. Notwendig sind dafür nur 2 digitale Ports. Verzichtet man auf die Auswertung der Drehrichtung, reicht nur ein Port.&lt;br /&gt;
Der Sensor hat den Vorteil das die Signale bereits TTL kompatibel sind und direkt an ein Controllerboard angeschlossen werden können. Ein Beispielprogramm zu [[RN-Control]] findet man hier&lt;br /&gt;
&lt;br /&gt;
* [[Beispiel Drehzahlmessung mit RN-Control]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:GP1A30.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Auswertung inkrementaler Drehgeber ist recht einfach. Ein Ausgang liefert einen Impuls pro Markierung (Scheibe auf der Welle). Prüft man bei jedem Impuls (Flanke) noch gleichzeitig den aktuellen Pegel des zweiten Ausganges, so kann daraus die Drehrichtung abgeleitet werden. &lt;br /&gt;
&lt;br /&gt;
Der Signalverlauf an den Sensorausgängen ist phasenversetzt:&lt;br /&gt;
&lt;br /&gt;
[[Bild:inkremental1.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:drehgeber_an_rncontrol.gif|center|framed|Beispielschaltung wenn man lediglich die Drehzahl ohne Drehrichtung auswerten möchte. Als Widerstand hat sich 330 Ohm als gut erwiesen.]]&lt;br /&gt;
&lt;br /&gt;
==Optische Sensoren==&lt;br /&gt;
===Helligkeit=== &lt;br /&gt;
Die Hauptanwendung solcher Sensoren ist, den hellsten Fleck im Raum zu finden.&lt;br /&gt;
Dies ist auch Teil vieler Roboterwettbewerbe. (Robo Callenge (2002 sic!), 'Ein Platz an der Sonne')&lt;br /&gt;
&lt;br /&gt;
Solche Sensoren können einfache [[LDR]]s oder [[Photodioden]] bzw. [[Phototransistoren]] sein.&lt;br /&gt;
LDRs haben den Vorteil, dass sie relativ hoch aussteuern, der große Nachteil ist aber, dass diese Sensoren ziemlich Wärmeempfindlich und etwas träge.&lt;br /&gt;
Photodioden und Phototransistoren haben den Vorteil, dass sie sehr genau sind, aber nicht besonders hoch aussteuern. Diese sollte man evtl. über einen OpAmp verstärken.&lt;br /&gt;
&lt;br /&gt;
[[Bild:fotowiderstand.jpg|center|framed|Ein typischer Fotowiderstand]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:SFH300.jpg|center|framed|SFH300, ein typischer Phototransistor]]&lt;br /&gt;
&lt;br /&gt;
Die Suche nach dem Hellsten Fleck im Rraum ist wie ich finde ein gutes Einsteigerthema!&lt;br /&gt;
&lt;br /&gt;
===CNY70===&lt;br /&gt;
&lt;br /&gt;
Der CNY70 ist ein Foto-Reflex Optokoppler. In einem würfelförmigem Gehäuse befindet sich eine Infrarot LED als Sender und ein Infrarot Fototransistor als Empfänger. Damit kann auf kurze Entfernung (wenige Millimeter) das reflektierte Licht der IR-LED durch den IR-Fototransistor gemessen werden.  &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Bild:cny70.jpg|thumb|200px|CNY70]]&lt;br /&gt;
|[[Bild:cny70_pinout.jpg|framed|CNY70 Vishay Pinout]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Achtung:''' Es existiert auch noch ein CNY70 von Temic mit anderer Pinbelegung, dort ist der Fototransistor verdreht eingebaut.&lt;br /&gt;
&lt;br /&gt;
Der CNY70 eignet sich für eine Vielzahl von Sensoren. Z.B. als Liniensensor, Radencoder, Abgrunddetektor und Lichtschranke. Allerdings ist er empfindlich gegen Streulicht, da  das Licht der IR-LED nicht moduliert ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:cny70_schem1.gif|thumb|center|600px|CNY70 als Liniensensor]]&lt;br /&gt;
&lt;br /&gt;
Der Liniensensor benötigt 2 A/D Wandler Eingänge des Prozessors. Die CNY70 sollten so nah wie möglich in Bodennähe angebracht sein (1..3mm). Der P-Kanal FET BS250 dient als Schalter für die IR LEDs des CNY70. Damit spart man Strom, wenn der Liniensensor nicht benötigt wird. Allerdings wird dafür ein weiterer Prozessor Ausgang als Enable Signal benötigt. HIGH Pegel schaltet die Sensor LEDs aus, LOW Pegel ein.  Wird keine Enable Funktion gewünscht, läßt man den BS250 einfach weg und hängt die Sensor LEDs direkt an VCC.&lt;br /&gt;
&lt;br /&gt;
[[Bild:cny70_schem2.gif|thumb|center|600px|CNY70 als Radencoder mit Schmitt-Trigger]]&lt;br /&gt;
&lt;br /&gt;
Die Radencoder benötigen zwei digitale Eingangsports des Prozessors. A/D Wandler sind nicht nötig, da die Schmitt-Trigger Gatter für saubere Logik Signale sorgen. Die CNY70 sollten so nah wie möglch an den Rädern sitzen (1..2mm). Die gewählten Widerstandswerte für R17/R19 bzw. R18/R20 sind optimiert für Radencoder die auf Transparentfolie gedruckt und auf Aluminium Räder aufgeklebt werden. Für Radencoder die auf Papier ausgedruckt werden, sind andere Widerstandswerte notwendig.&lt;br /&gt;
Der P-Kanal FET BS250 dient als Schalter für die IR LEDs des CNY70. Damit spart man Strom, wenn der Radencoder nicht benötigt wird. Allerdings wird dafür ein weiterer Prozessor Ausgang als Enable Signal benötigt. HIGH Pegel schaltet die Sensor LEDs aus, LOW Pegel ein. Wird keine Enable Funktion gewünscht, läßt man den BS250 einfach weg und hängt die Sensor LEDs direkt an VCC.&lt;br /&gt;
&lt;br /&gt;
===Distanzsensor IS471F===&lt;br /&gt;
&lt;br /&gt;
IS471F - Hindernisserkennung mit Infrarot Distanzsensor&lt;br /&gt;
&lt;br /&gt;
Das hier vorgestellte IC IS471F erlaubt eine einfach und sogar recht preisgünstige Hinternisserkennung per Infarot. Dazu muß im wesentlichen nur noch eine Infrarot-Diode an das IC angeschlossen werden. Das modulierte Licht wird von einem Gegenstand direkt auf das IC zurückgeworfen und somit das Hinterniss erkannt. Tageslicht/Fremdlicht stört den IS471 überhaupt nicht, da das Licht mit einer bestimmten Frequenz moduliert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:is471.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der normale Schaltungsaufbau sieht also wie oben abgebildet aus! In der Praxis kann das dann in etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:is471beispiel.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das englische Datenblatt findet man im Roboternetz-Download-Bereich&lt;br /&gt;
&lt;br /&gt;
Die normale Reichweite ist in gewissen Grenzen abhängig von der Farbe des Hinternisses. In der Regel reicht es jedoch durchaus einige cm so das langsame Roboter durchaus sehr gut damit zurecht kommen. Durch besonders helle Infrarot LED´s und durch zusätzlich LED-Fassungen kann man die Reichweite erhöhen. Wem das noch nicht reicht, der kann über einen zusätzlichen Transistor die Strahlungsleistung der LED noch weiter erhöhen. &lt;br /&gt;
&lt;br /&gt;
[[Bild:is471verstaerkung.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
http://www.roboternetz.de/bilder/mehrereis471.gif&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sharp Infrarotsensoren===&lt;br /&gt;
&lt;br /&gt;
Sharp hat eine ganz interessante Serie von Bausteinen herausgebracht mit denen ein Roboter sogar recht genau Entfernungen messen kann. Das Messergebnis ist nahezu unabhängig von der Farbe und Helligkeit des gemessenen Objektes. Die Ansteuerung ist sehr einfach, der Sensorausgang kann zum Beispiel direkt an einen analogen Eingang eines Mikrocontrollers angeschlossen werden. Die Sensoren sind unter den Roboter-Bastlern weit verbreitet. &lt;br /&gt;
Bei vielen Händlern erhältlich kosten die Sensoren derzeit je nach Typ und Händlerspanne zwischen 13 bis 25 Euro.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bild:Sharpentfernungssensor.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oft werden selbst in kleinen Roboter-Projekten mehrere dieser Sensoren genutzt da sie nur einen äußerst engen Erfassungsbereich haben. Sie eignen sich daher sehr gut zur Vermessung einer Umgebung, insbesondere dann wenn Sie drehbar auf einem Servo montiert werden. Als Kollisionsschutz sind sie wegen dem engen Winkel nur bedingt geeignet, zu diesem Zweck eignen sich zum Beispiel Ultraschallsensoren besser.&lt;br /&gt;
Das Funktionsprinzip der Sensoren ist einfach. Der Sensor besteht aus Sender und Empfänger. Der Sender sendet einen Infrarot-Strahl aus, der vom Hindernis reflektiert wird. Je nach Entfernung trifft der reflektierte Strahl an einer unterschiedlichen Stelle auf den Empfänger (ein sog. Position Sensitive Device, PSD). Der Empfänger setzt den Auftreffpunkt in einen analogen Spannungswert um. Eine schöne Skizze dazu:  &lt;br /&gt;
&lt;br /&gt;
[[Bild:sharpfunktion.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Einige der beliebtesten Bausteine sind:'''&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D12==== &lt;br /&gt;
Distanz 10 - 80 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt&lt;br /&gt;
Dies ist der am häufigsten eingesetzte Sharp Typ bei mobilen Robotern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:GP2D12anschluss.gif|center]]&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2YA21YK==== &lt;br /&gt;
Distanz 10 - 80 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt &lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D120====&lt;br /&gt;
Distanz 4 - 30 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2Y0A02YK====&lt;br /&gt;
Distanz 20 - 150 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
http://www.shop.robotikhardware.de/shop/catalog/images/artikelbilder/sensoren/gp2y0a02yk_diagramm.gif&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D02====&lt;br /&gt;
Distanz 10 - 80 cm - Entfernung wird durch 8 Bit Digitalausgang übermittelt&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D150====&lt;br /&gt;
Distanz 3-30 cm - 1 Bit Schaltausgang  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datenblätter zu den oberen Sensoren findet man im Download-Bereich des Roboternetz, siehe unter [[#Weblinks]].&lt;br /&gt;
 &lt;br /&gt;
Um die analogen Spannung der Sensoren in eine Entfernung umzurechnen, kann man sich mit Hilfe des Datenblattes oder einfacher Probemessungen Tabellen erstellen, welche dann vom Controller zur Umsetzung genutzt werden.&lt;br /&gt;
Bequemer ist allerdings eine Näherungsformel:&lt;br /&gt;
&lt;br /&gt;
====Formel zur Entfernungsberechnung==== &lt;br /&gt;
 D = A/(X-B) &lt;br /&gt;
&lt;br /&gt;
 D ist die Entfernung &lt;br /&gt;
 X ist der Ausgabewert des Sensors &lt;br /&gt;
 A ist die Steigung der Kurve A/X &lt;br /&gt;
 B ist der Offset der Kurve &lt;br /&gt;
&lt;br /&gt;
Die Konstanten A und B ermittelt man am besten über zwei Probemessungen: &lt;br /&gt;
&lt;br /&gt;
D und X sind die Entfernung und der Ausgabewert der ersten Messung (z.B. bei 20 cm) &lt;br /&gt;
D' und X' sind die Entfernung und der Ausgabewert der zweiten Messung (z.B. bei 60 cm) &lt;br /&gt;
&lt;br /&gt;
 A = ((X' - X) * D' * D) /(D - D' ) &lt;br /&gt;
 B = (D' * X' - D * X) /(D' - D) &lt;br /&gt;
&lt;br /&gt;
====GP2D12 Messkurve====&lt;br /&gt;
&lt;br /&gt;
[[Bild:gpd12kurve.gif|center]]&lt;br /&gt;
&lt;br /&gt;
====GPD120 Messkurve====&lt;br /&gt;
&lt;br /&gt;
[[Bild:gpd120kurve.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Ultraschall Sensoren== &lt;br /&gt;
===Ultraschallsensoren SRF04===&lt;br /&gt;
Die Firma '''Devantech''' hat eine Serie von sehr günstigen und kleinen Ultraschallsensoren entwickelt, die sich im Bereich &amp;quot;autonome Robotersysteme&amp;quot; durchgesetzt haben. Sie sind sehr verbreitet, da sie auch für &amp;quot;Hobby-Robotiker&amp;quot; erschwinglich sind und es sich nicht lohnen würde vergleichbare Module selber zu bauen, da diese meistens ungenauer und teurer wären.&lt;br /&gt;
&lt;br /&gt;
Bekannt wurde die Serie durch den '''SRF04'''. Mit seinen kleinen Abmessungen, der niedrigen Stromaufnahme und der hohen Genauigkeit ist er für kleine Messaufgaben im Entfernungsbereich von 3cm bis 3m gut geeignet. Der SRF04 kann einen 3cm dicken Besenstiel in 2m Entfernung erkennen und wird durch ein [[PWM]]-Signal ausgewertet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf_04a.jpg]] [[Bild:srf_04.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ultraschallsensor SRF05===&lt;br /&gt;
Der Nachfolger des SRF04 ist der neuer SRF05. Er besitzt noch eine etwas höhere Reichweite bis 4 Meter. Zudem besitzt er neben dem kompatibel Mode zu SRF04 noch eine Betriebsart bei der er über einen einzigen Port (Pin) gesteuert wird. Das heißt sowohl der Start der Messung und das Ergebnis wird über die gleiche Leitung übertragen. [[Ultraschall SRF05 an RN-MiniControl|Programmbeispiel in Bascom]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Srf05mode1.jpg|center]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf05mode2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf05mode2diagram.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SRF08===&lt;br /&gt;
Die Alternative zu SRF04 und SRF05 ist der beliebte  '''SRF08''' und dessen Nachfolger '''SRF10''', der nun über den [[I2C]]-Bus ausgewertet werden kann und über eine Reichweite von 3cm bis 6m verfügt. Er hat eine noch kleinere Stromaufnahme und zusätzlich befindet sich auf der Platinenfront ein Fotowiderstand(LDR) dessen Lichtmesswerte sich ebenfalls über den [[I2C]]-Bus auswerten lassen. Durch den SRF08 wird es möglich auch bis zu 16 Mehrfachechos, von weiter hinten gelegenen Gegenständen, auszuwerten, die bei dem SRF04 ignoriert wurden. Über den [[I2C]]-Bus kann man die Messwerte in cm, zoll und in der Laufzeit µs auslesen und spart sich somit die externe Auswertung der Laufzeit, wie bei dem SRF04. Weiterhin können insgesamt 16 SRF08-Module an einen [[I2C]]-Bus angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf08_a.jpg]]  [[Bild:srf08_b.jpg]]&lt;br /&gt;
&lt;br /&gt;
===SRF08 Programmbeispiel===&lt;br /&gt;
SFR08 Programm Beispiel mit [[Bascom]]&lt;br /&gt;
Über die grundsätzliche Behandlung des [[I2C]]-Bus mit [[Bascom]] kann man [[I2C|hier]] nachlesen. &lt;br /&gt;
&lt;br /&gt;
 Const Sf08_adr_0 = &amp;amp;HE0             ' I2C Adresse&lt;br /&gt;
 Const Sf08_c_range = 100            ' Reichweite&lt;br /&gt;
 Const Sf08_c_gain = 1               ' Empfindlichkeit&lt;br /&gt;
&lt;br /&gt;
Die Adresse ist der Default-Wert für den Sensor, und kann eingestellt werden. &lt;br /&gt;
Range und Gain sind anzupassen, die angegeben Werte sind aber mal grundsätzlich verwendbar.&lt;br /&gt;
&lt;br /&gt;
'''Setup'''&lt;br /&gt;
Nach dem Reset sind einmal Range und Gain zu setzen.&lt;br /&gt;
&lt;br /&gt;
'''Setzen Range'''&lt;br /&gt;
&lt;br /&gt;
      I2cstart&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 2            ' register &amp;quot;range&amp;quot;&lt;br /&gt;
      I2cwbyte Sf08_c_range  &lt;br /&gt;
      I2cstop&lt;br /&gt;
 &lt;br /&gt;
'''Setzen Gain'''&lt;br /&gt;
&lt;br /&gt;
      I2cstart&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 1            ' register &amp;quot;gain&amp;quot;&lt;br /&gt;
      I2cwbyte Sf08_c_gain    &lt;br /&gt;
      I2cstop&lt;br /&gt;
&lt;br /&gt;
'''Abfrage Trigger'''&lt;br /&gt;
&lt;br /&gt;
Die Abfrage soll laut Beschreibung in zwei Schritten erfolgen, zwischen denen ca 70 mS gewartet werden soll. Diese Zeit braucht das Gerät zum Messen. &lt;br /&gt;
&lt;br /&gt;
'''Trigger'''  &lt;br /&gt;
      I2cstart&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 0            ' register &amp;quot;Trigger&amp;quot;&lt;br /&gt;
      I2cwbyte 81           ' Meßwert in Zentimetern&lt;br /&gt;
&lt;br /&gt;
      Waitms 70 &lt;br /&gt;
&lt;br /&gt;
'''Ergebnis abholen'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 DIM Lsb as Byte&lt;br /&gt;
 DIM Msb as Byte&lt;br /&gt;
 DIM IVal as word&lt;br /&gt;
&lt;br /&gt;
      I2cstart              ' Repeated Start&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 2            ' Meßwert US&lt;br /&gt;
&lt;br /&gt;
      I2cstart                 ' repeated Start&lt;br /&gt;
      I2cwbyte Sf08_adr_0 + 1  ' Device I2C Adresse READ!&lt;br /&gt;
      I2crbyte Msb , Ack      ' Bit 8-15&lt;br /&gt;
      I2crbyte Lsb , Nack     ' Bit 0-7&lt;br /&gt;
      I2cstop&lt;br /&gt;
&lt;br /&gt;
      Ival = Makeint(lsb , Msb) ' umwandeln in Word (16 Bit)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SRF10 Ultraschallsensor ===&lt;br /&gt;
SRF10 ist quasi der Nachfolger von SRF08. Er bietet die gleiche Leistung und ist sogar gegenüber Spannungschankungen noch etwas unempfindlicher als der Vorgänger. Der größte Vorteil besteht jedoch darin das er ca. 1/3 kleiner als sein Vorgänger ist.   &lt;br /&gt;
&lt;br /&gt;
[[Bild:srf10foto1.jpg]] [[Bild:srf10foto2.gif]]&lt;br /&gt;
&lt;br /&gt;
Die technischen Daten sind ähnlich:&lt;br /&gt;
* Betriebsspannung: 5V &lt;br /&gt;
* Stromaufnahme: ca. 3mA Standby, ca. 15mA während des Messens Frequenz: 40KHz &lt;br /&gt;
* Maximale Reichweite: 6 m &lt;br /&gt;
* Minimale Reichweite: 4 cm &lt;br /&gt;
* Messwerterfassung: intern, kein externer Controller zur Zeitmessung notwendig &lt;br /&gt;
* Interface: Standard – I2C (passend zu zahlreichen Controllerboards, z.B. RN-Control) &lt;br /&gt;
* Ausgabeformat: µs, cm oder Zoll &lt;br /&gt;
* Feature: Analogverstärkung 40 - 700 (einstellbar, 16 Stufen) &lt;br /&gt;
* Abmessungen: 32mm x 15mm x 10mm &lt;br /&gt;
* Hersteller: Devantech Ltd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[Ultraschall_SRF10_an_RN-Control|Programmbeispiel in Bascom]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf10ausbreitung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
=== Vergleichstabelle ===&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
{|{{Blaueschmaltabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |'''SRF10'''&lt;br /&gt;
 |'''SRF08'''&lt;br /&gt;
 |'''SRF05'''&lt;br /&gt;
 |'''SRF04'''&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Betr. Spannung'''&lt;br /&gt;
 |5V&lt;br /&gt;
 |5V&lt;br /&gt;
 |5V&lt;br /&gt;
 |5V&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Stromaufnahme'''&lt;br /&gt;
 |3mA typ,&amp;lt;br&amp;gt; 15mA max.&lt;br /&gt;
 |3mA typ,&amp;lt;br&amp;gt; 15mA max.&lt;br /&gt;
 |4mA typ,&amp;lt;br&amp;gt; 30mA max.&lt;br /&gt;
 |30mA typ,&amp;lt;br&amp;gt; 50mA max.&lt;br /&gt;
 |-&lt;br /&gt;
 |'''US Leistung'''&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Frequenz'''&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Bereich'''&lt;br /&gt;
 |72&amp;amp;ordm;&lt;br /&gt;
 |55&amp;amp;ordm;&lt;br /&gt;
 |55&amp;amp;ordm;&lt;br /&gt;
 |55&amp;amp;ordm;&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Reichweite'''&lt;br /&gt;
 |4cm - 6m&lt;br /&gt;
 |3cm - 6m&lt;br /&gt;
 |3cm - 4m&lt;br /&gt;
 |3cm - 3m&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Triggerimpuls'''&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 |10µs min.&lt;br /&gt;
 |10µs min.&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Abmessung in mm'''&lt;br /&gt;
 |32 x 15 x 10&lt;br /&gt;
 |43 x 20 x 17&lt;br /&gt;
 |43 x 20 x 17&lt;br /&gt;
 |43 x 20 x 17&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Interface'''&lt;br /&gt;
 |I2C&lt;br /&gt;
 |I2C&lt;br /&gt;
 |TTL Impuls&lt;br /&gt;
 |TTL Impuls&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Feature'''&lt;br /&gt;
 |Minimodul&lt;br /&gt;
 |Lichtsensor&lt;br /&gt;
 |SRF04 Modus&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Preis ca. *'''&lt;br /&gt;
 |44,00 €&lt;br /&gt;
 |44,00 €&lt;br /&gt;
 |22,00 €&lt;br /&gt;
 |25,00 €&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''*''' Der Preis dient nur zum vergleich untereinander, nicht als Referenz !&lt;br /&gt;
&lt;br /&gt;
==Kompaß== &lt;br /&gt;
===Kompaß-Modul CMPS03===&lt;br /&gt;
Laut der Doku ist diese Modul speziell für die Bedürnisse von Robotern gestaltet worden. Es mißt seine Lage relativ zum Erdmagnetfeld und liefert diesen Wert&lt;br /&gt;
* Als PWM-Signal &lt;br /&gt;
* Über I2C entweder 0-255 als Byte oder&lt;br /&gt;
* 0-3599 als 16-Bit Wert (MSB first)&lt;br /&gt;
&lt;br /&gt;
In der vorliegenden Doku ist eine fixe I2C-Adresse von 0xC0 angegeben. Was leider noch fehlt, sind Angaben, ob und wie diese Adresse geändert werden kann.&lt;br /&gt;
&lt;br /&gt;
Bei waagrechter Montage ist das also ein Kompaß, bei senkrechter Montage dieser Module kann man auch die Neigung in Nord-Süd-Richtung messen. Hierzu sind 2 Module nötig, die zueinander um 90° gedreht angeordnet sein müssen. Die Neigung in Ost-West-Richtung zu messen, ist dagegen leider nicht möglich.&lt;br /&gt;
&lt;br /&gt;
Das Ganze ist eine Anwendung des Philips-KMZ51 Magnet-Feld-Sensors mittels eines PIC16F872&lt;br /&gt;
&lt;br /&gt;
Gelegentlich sollte das Modul kalibriert werden. Das kann über den I2C-Bus, aber auch mittels einen Pins am Modul initiiert werden. Dann muß das Module langsam um 360 Grad gedreht werden. Dabei nimmt das Modul 4 Meßpunkte auf und speichert sie im EEPROM. &lt;br /&gt;
&lt;br /&gt;
Ein Beispielprogramm findet man hier:&lt;br /&gt;
* [[Bascom und Kompass CMPS03]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:cmps3pin.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
==Beschleunigung==&lt;br /&gt;
&lt;br /&gt;
Beschleunigungssensoren messen die Beschleunigung, die auf sie wirkt - wenn sie auf dem Tisch liegen, messen sie beispielsweise die Erdbeschleunigung von 1g. In einem Auto können weitere Beschleunigungen hinzukommen: Zur Seite beim Kurvenfahren, nach vorne oder hinten beim Beschleunigen, oder bei zügiger Fahrt über eine Bergkuppe auch mal welche in vertikaler Richtung.&amp;lt;br&amp;gt;&lt;br /&gt;
Beschleunigungssensoren sind meist mehrdimensional ausgelegt, so dass für mehrere Achsen ein Sensor verwendet werden kann.&lt;br /&gt;
&lt;br /&gt;
Anwendungen finden sie in ESP-Systemen in Autos, die u.a. über die Querbeschleunigung ausrechnen können, ob das Fahrzeug seitlich driftet oder gar schleudert.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine andere wichtige Aufgabe übernehmen sie zusammen mit Gyroskopen in Trägheitsnavigationssystemen, die dann sowohl die Lage im Raum als auch die Bewegung feststellen können.&lt;br /&gt;
&lt;br /&gt;
Moderne Piezo-Sensoren sind nur noch Chip-gross und können direkt in Schaltungen integriert werden.&lt;br /&gt;
&lt;br /&gt;
==Drehung==&lt;br /&gt;
&lt;br /&gt;
Um Drehungen zu messen, werden sogenannte Gyroskope, kurz &amp;quot;Gyros&amp;quot; verwendet. Typische Vertreter sind hier die ADXRS-Familie von Analog Devices. Diese sind allerdigs, anders als die Beschleunigungssensoren, meistens nur für eine Achse ausgelegt. Die Ausgabe erfolgt meist analog, jede Ausgangsspannung entspricht einer bestimmten Drehrate in °/Sekunde.&lt;br /&gt;
&lt;br /&gt;
Gemessen wird die Auswirkung der Corioleskraft auf zwei gleiche, in Bewegung gehaltene Massen. Diese schwingen radial, d.h. 90° verdreht zu der Achse, auf der die Drehung gemessen werden soll. Wird der Sensor um die Achse gedreht, ändert sich die Geschwindigkeit dieser Massen, da sie auf einer gedachten Scheibe abwechselnd nach innen und außen wandern. Je weiter sie außen sind, desto höher ist ihre Geschwindigkeit, je weiter innen, desto langsamer sind sie. Bei der Bewegung nach außen müssen sie also beschleunigt werden, andersherum genauso. Die dabei auftretenden Beschleunigungen werden mittels einiger Fühler gemessen, die einen Plattenkondensator bilden.&lt;br /&gt;
&lt;br /&gt;
Eine Anwendung sind im Flugmodellbau Gyro-&amp;quot;Taillocks&amp;quot;, die in Hubschraubern die Heckstabilität verbessern und ESP-Systeme in Autos, die u.a. durch die Messung der Gierrate, also der Drehung des Fahrzeugs um die Hochachse, feststellen können, ob das Fahrzeug seitlich driftet oder sogar schleudert.&lt;br /&gt;
&lt;br /&gt;
==Temperatur== &lt;br /&gt;
===NTCs===&lt;br /&gt;
===PTCs===&lt;br /&gt;
&lt;br /&gt;
PTCs sind Temperatursensoren, deren Widerstand sich mit steigender Temperatur erhöht. Dazu gehören&lt;br /&gt;
&lt;br /&gt;
*PT100, PT1000 etc.&lt;br /&gt;
*Die KTYxx-xxx Reihe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== KTY: Silizium Temperatursensoren ====&lt;br /&gt;
&lt;br /&gt;
Die KTY-Temperatursensoren sind verglichen mit anderen Temperatursensoren verhältnismäßig günstig, haben dafür aber auch mehr Nachteile.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Genauigkeit ist ziemlich eingeschränkt, weshalb die KTY-Temperatursensoren zuerst kalibriert werden sollten. Dies muss Schaltungstechnisch oder in Software erfolgen, eine eingebaute Kalibrierung gibt es nicht.&amp;lt;br&amp;gt;&lt;br /&gt;
Andererseits lassen sich mittels Oversampling sehr hoch aufgelöst Temperaturen messen, was aufgrund mittelmäßiger Linearität (auch nach der Linearisierung) aber nur bei der Messung kleiner Temperaturunterschiede empfehlenswert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Linearisiert werden die KTY an 5 Volt mit einem Reihenwiderstand von etwa 2,7 kOhm bis 3,3 kOhm.&lt;br /&gt;
&lt;br /&gt;
===Temperatur-Sensor LM75===&lt;br /&gt;
&lt;br /&gt;
[[Bild:lm75.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Dieser Chip von National Semiconductors kann die Umgebungstemperatur mit einer Genauigkeit von 0.5&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; Grad Celsius messen. Das angegebene Bereich ist -25&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; bis 100&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; C. Es wird zweierlei geboten:&lt;br /&gt;
* Ein Schaltausgang - Wenn man also z.B. einen Ventilator einschalten möchte&lt;br /&gt;
* I2C - Der obere Teil der Adresse ist fix 0x9n, die Bits 1-3 kann man mit Jumper einstellbar machen oder fest verdrahten. &lt;br /&gt;
&lt;br /&gt;
Durch einen einfachen I2C-Lesebefehl kann man die Temperatur einlesen (16-Bit), das Format ist allerdings etwas tricky. Das erste Byte (8-Bit) ist die Temperatur in ganzen Grad, als normales signed char, vom zweiten Byte gibt das MSB an, ob noch 0.5&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; '''dazuzuzählen''' sind (also auch, wenn vorne eine negative Zahl steht)  &lt;br /&gt;
&lt;br /&gt;
Der Grund ist der: die vorzeichenbehaftete 9-Bit Zahl, die da linksbündig in zwei Datenbytes übertragen wird, gibt eigentlich an, wieviel 0.5 Grad - Einheiten gemessen wurden. Rein rechnerisch wäre also Temperatur = Wert * 0.5, das müßte man aber als float durchführen oder erweitern&lt;br /&gt;
&lt;br /&gt;
===Programm-Beispiel für LM75===&lt;br /&gt;
Der LM75 wird über den [[I2C]]-Bus angesprochen&lt;br /&gt;
In BasCom, wo es ja keine signed char gibt, wird das Interpretieren auf sehr unterschiedliche Art empfohlen. &lt;br /&gt;
&lt;br /&gt;
Ich empfehle:&lt;br /&gt;
&lt;br /&gt;
 dim Ival as integer&lt;br /&gt;
 dim Msb as byte&lt;br /&gt;
 dim Lsb as byte&lt;br /&gt;
         I2cstart&lt;br /&gt;
         I2cwbyte &amp;amp;H91   ' Lese-adresse !  &lt;br /&gt;
         If Err = 1 Then&lt;br /&gt;
            I2cstop       ' kein ACK vom LM75 --&amp;gt; irgendein Fehler&lt;br /&gt;
            Ival = 9999   ' Zeichen, daß der Wert ungültig ist !&lt;br /&gt;
         Else&lt;br /&gt;
            I2crbyte Msb , Ack&lt;br /&gt;
            I2crbyte Lsb , Nack&lt;br /&gt;
            I2cstop&lt;br /&gt;
            If Msb.7 = 1 Then&lt;br /&gt;
               Ival = Makeint(msb , &amp;amp;HFF)   ' auffüllen mit den Vorzeichen bits&lt;br /&gt;
            Else&lt;br /&gt;
               Ival = Makeint(msb , &amp;amp;H00)   ' positiv, also bleibt es so&lt;br /&gt;
            End If&lt;br /&gt;
            Ival = Ival * 10                ' erweitern &lt;br /&gt;
            If Lsb.7 = 1 Then&lt;br /&gt;
              Ival = Ival + 5               ' fünf Zehntel Grad dazu &lt;br /&gt;
            End If&lt;br /&gt;
         End if&lt;br /&gt;
&lt;br /&gt;
das ergibt die Temperatur in Zehntel-Grad (Natürlich nur, wenn's keine Fehler gab).&lt;br /&gt;
&lt;br /&gt;
==Resistive Sensoren==&lt;br /&gt;
...&lt;br /&gt;
==Kapazitive Sensoren==&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für kapazitive Sensoren sind Luftfeuchtigkeitsmesser, die ihre Kapazität entsprechend der Luftfeuchtigkeit ändern. Das Auslesen der Kapazität kann prinzipiell über das Ausmessen von Ladekurven geschehen. Dies ist jedoch bei kleinen Kapazitäten nicht praktisch durchführbar, weshalb man in diesem Falle meist einen Schwingkreis baut, dessen Frequenz man dann misst und so dann zusammen mit der bekannten Induktivität der Spule die Kapazität des Kondensators ausrechnen kann.&lt;br /&gt;
&lt;br /&gt;
==Induktive Sensoren==&lt;br /&gt;
Induktiver Näherungsschalter&lt;br /&gt;
&lt;br /&gt;
Sensoren die ihre Induktivität entsprechend der Messgröße ändern können auch mit Hilfe eines Schwingkreises mit bekannter Kapazität ausgemessen werden.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Piezoelektrische Sensoren==&lt;br /&gt;
Hier ist ein Experiment dargestellt das die Funktion von Piezowandlern demonstriert.&lt;br /&gt;
&lt;br /&gt;
Drückt man auf eine längliche Glasplatte (Mikroskopträger Länge 76mm), die an den Enden auf je einem Piezo Wandler gelagert ist, dann ergeben sich Signale, die von den Kräften auf die Wandler abhängig sind. &lt;br /&gt;
&lt;br /&gt;
Die Summe der beiden Kräfte entspricht der Gesamtkraft. Das Verhältnis der beiden Kräfte entspricht dem Verhältnis der Abstände des Druckpunktes zum Wandler. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Piezowandler.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Versuch wurde mit der Frequenz von ca. 4Hz (0,5s/div) von einem Ende bis zum anderen auf die Platte gedrückt. (Tonleiter). Die Signale der beiden Wandler sind im Oszillogramm aufgetragen und die Folge der Druck-Positionen ist auf den ersten Blick schon mal nachvollziehbar.&lt;br /&gt;
&lt;br /&gt;
==PIR Passiv Infrarot Sensoren==&lt;br /&gt;
Hier handelt es sich um Passiv-Infrarot-Bewegungsmelder. Bewegungsmelder regieren beim Eintritt einer Person (Tier) in das Erfassungsfeld des Sensors. Die Anwendungsmöglichkeiten sind nahezu unbegrenzt, man kennt die Technik ja von vielen Terrassenlampen, welche sich beim vorbeigehen automatisch einschalten.&lt;br /&gt;
Reagiert wird also auf Die Körperwärme einer sich im Erfassungsfeld bewegenden Person.&lt;br /&gt;
[[Bild:pir.jpg|right]]&lt;br /&gt;
Zum Prinzip: &lt;br /&gt;
Wärmestrahlen, die einen Erfassungsvorgang auslösen, liegen im Infrarot-Bereich des Wellenspektrums. In diesem Bereich gibt der menschliche Körper seine Wärmestrahlung ab. Leuchtmittel wie Glüh- , Halogen- und Entladungslampen, die für eine Strahlung im sichtbaren Bereich um 0,555 μm entwickelt wurden, geben jedoch auch einen erheblichen Teil an Wärmestrahlung im Infrarot-Bereich ab.&lt;br /&gt;
Im Spektrum oberhalb des sichtbaren Licht, ab 0,780 μm, beginnt der Infrarot-Bereich. Die Wellenlänge&lt;br /&gt;
dieser IR-Strahlung ist abhängig von der Temperatur eines Körpers. Die Wärmestrahlung&lt;br /&gt;
des Menschen hat ihr Maximum zwischen 9 und 10 μm im Infrarot-Bereich.&lt;br /&gt;
Diese Tatsache nutzt der PIR Sensor mittels sogenannter pyroelektrischer IRDetektoren, welche eine hohe Empfindlichkeit im langwelligen Infrarot-Bereich aufweisen. Die Infrarot-&lt;br /&gt;
Strahlung verhält sich ähnlich wie sichtbares Licht. Sie kann reflektiert und durch Linsen&lt;br /&gt;
gebündelt werden.&lt;br /&gt;
Basis eines solchen IR-Detektors (Sensors) sind Lithium-Tantalatkristalle. Diese Kristalle erzeugen,&lt;br /&gt;
bei Wärmeänderung (positive oder negative Temperaturänderung), eine elektrische Spannung.&lt;br /&gt;
Die von den Kristallen abgegebene Spannung liegt im Bereich von einigen μV (μV = millionstel Volt) und ist von folgenden Bedingungen abhängig: &lt;br /&gt;
* Der Intensität der Wärmequelle (Temperatur und Größe)&lt;br /&gt;
* Dem Umgebungsmedium (Temperatur, unterschiedliche Luftfeuchtigkeit)&lt;br /&gt;
* Der Entfernung zwischen Wärmequelle und IR-Sensor&lt;br /&gt;
* Der Bewegungsgeschwindigkeit und Bewegungsrichtung der Wärmequelle&lt;br /&gt;
* Der Empfindlichkeit des PIR-Elementes (frequenzabhängiges Bandpaßverhalten mit Maximum bei ca. 0,1 Hz)&lt;br /&gt;
&lt;br /&gt;
Zur Unterdrückung von Einflüssen aus der Umgebung (übliche wetterbedingte Temperaturänderungen), sind in jedem Sensor 2 Kristalle antiparallel geschaltet. &lt;br /&gt;
Einer der Kristalle gibt, bei Auftreffen von Wärmestrahlung einen positiven, der andere einen negativen Spannungsimpuls ab. Wärmeänderungen die gleichzeitig und mit gleicher Intensität auf beide Kristalle einwirken lösen so keinen Erfassungsvorgang aus, denn die beiden Impulse heben sich gegenseitig auf. Dadurch ist ein Auslösen bei Wärmeänderungen der Umgebung weitgehend ausgeschlossen.&lt;br /&gt;
Anders verhält es sich bei schnellen Bewegungen. Die Lithiumtantalat-Kristalle geben, entsprechend&lt;br /&gt;
der Bewegung und der dadurch hervorgerufenen Wärmeänderung im Erfassungsfeld, ihre&lt;br /&gt;
Impulse zeitversetzt ab. Die beiden Impulse addieren sich zu einer Wechselgröße mit höherer&lt;br /&gt;
Signalamplitude. Dieses elektrische Ausgangssignalist proportional der Wärmeänderung und führt zur Meldung einer Bewegung.&lt;br /&gt;
&lt;br /&gt;
==Autoren==&lt;br /&gt;
* [[Benutzer:PicNick|PicNick]]&lt;br /&gt;
* [[Benutzer:Frank|Frank]] &lt;br /&gt;
* [[Benutzer:Dennis.strehl|Dennis.strehl]]&lt;br /&gt;
* [[Benutzer:Florian|Florian]]&lt;br /&gt;
* Topic&lt;br /&gt;
* [[Benutzer:Manf|Manf]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
* [[Sensoren]]&lt;br /&gt;
* [[Graycode]]&lt;br /&gt;
* [[Ultraschall SRF10 an RN-Control]]&lt;br /&gt;
* [[Ultraschall SRF05 an RN-MiniControl]]&lt;br /&gt;
* [[Bascom und Kompass CMPS03]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*[http://www.ikm.uni-karlsruhe.de/forschung/pzt_webseiten/de/grundlagen/pyro.html Piezoelektrische Sensoren]&lt;br /&gt;
*[http://www.roboternetz.de/phpBB2/dload.php?action=category&amp;amp;cat_id=2 Datenblätter im Download-Bereich des Roboternetz]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Robotikeinstieg]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Elektronik]]&lt;br /&gt;
[[Category:Sensoren]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Sensorarten&amp;diff=8503</id>
		<title>Sensorarten</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Sensorarten&amp;diff=8503"/>
				<updated>2006-08-07T19:59:43Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* CNY70 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Welche Sensorarten gibt es==&lt;br /&gt;
Damit sich ein Roboter in seiner Umgebung bewegen kann, ohne an Hindernisse anzustoßen, und damit er ein Ziel finden und ansteuern kann, muß er irgendwie seine Umwelt &amp;quot;wahrnehmen&amp;quot;. &lt;br /&gt;
Hauptanwendung für diese Informationen aus der Umwelt ist die [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
==Bumpers==&lt;br /&gt;
Als Bumpers bezeichnet man eine Art Stoßstange, die einen Mikro-Switch auslöst. &lt;br /&gt;
&lt;br /&gt;
[[Bild:microschalter.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Die Auswertung erfolgt am besten digital an einem Pin mit Pull-up Widerstand. Man kann den Eingang pollen (abfragen), aber auch einen Interrupt auslösen lassen. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Whiskers (Fühler)==&lt;br /&gt;
Das sind flexible Kunststoff-Streifen von ca. 10 cm Länge, eigentlich für Datenhandschuhe vorgesehen. Aber man kann sie auch als Fühler einsetzen, und daher auch für die Kollisions-Sensorik verwenden. Beim Verbiegen steigt der Widerstand an.  &lt;br /&gt;
&lt;br /&gt;
[[Bild:flexs_200.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Um zu messen, wird mit einem zweiten Widerstand ein Spannungsteiler aufgebaut, der dann mit einem Analog-Eingang einen Grad der Verbiegung erkennen läßt. Sie werden häufig auch Flexsensoren genannt. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Incremental-Geber==&lt;br /&gt;
Dienen zur Erfassung von Drehzahl bzw. der Messung von Wegstrecken&lt;br /&gt;
===Drehgeber Sharp GP1A30 und GP1A38===&lt;br /&gt;
&lt;br /&gt;
[[Bild:gp1a30.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Beim Sharp GP1A30 und GP1A38 handelt es sich um Gabellichtschranken mit inkrementaler Drehgeberfunktion. Beide sind im Grunde von den Anschlüssen identisch, lediglich kann GP1A38 noch etwas höhere Drehzahlen messen. Im Gegensatz zu herkömmlichen Gabellichtschranken können mit dieser sowohl Drehzahl als auch Drehrichtung ermittelt werden. Notwendig sind dafür nur 2 digitale Ports. Verzichtet man auf die Auswertung der Drehrichtung, reicht nur ein Port.&lt;br /&gt;
Der Sensor hat den Vorteil das die Signale bereits TTL kompatibel sind und direkt an ein Controllerboard angeschlossen werden können. Ein Beispielprogramm zu [[RN-Control]] findet man hier&lt;br /&gt;
&lt;br /&gt;
* [[Beispiel Drehzahlmessung mit RN-Control]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:GP1A30.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Auswertung inkrementaler Drehgeber ist recht einfach. Ein Ausgang liefert einen Impuls pro Markierung (Scheibe auf der Welle). Prüft man bei jedem Impuls (Flanke) noch gleichzeitig den aktuellen Pegel des zweiten Ausganges, so kann daraus die Drehrichtung abgeleitet werden. &lt;br /&gt;
&lt;br /&gt;
Der Signalverlauf an den Sensorausgängen ist phasenversetzt:&lt;br /&gt;
&lt;br /&gt;
[[Bild:inkremental1.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:drehgeber_an_rncontrol.gif|center|framed|Beispielschaltung wenn man lediglich die Drehzahl ohne Drehrichtung auswerten möchte. Als Widerstand hat sich 330 Ohm als gut erwiesen.]]&lt;br /&gt;
&lt;br /&gt;
==Optische Sensoren==&lt;br /&gt;
===Helligkeit=== &lt;br /&gt;
Die Hauptanwendung solcher Sensoren ist, den hellsten Fleck im Raum zu finden.&lt;br /&gt;
Dies ist auch Teil vieler Roboterwettbewerbe. (Robo Callenge (2002 sic!), 'Ein Platz an der Sonne')&lt;br /&gt;
&lt;br /&gt;
Solche Sensoren können einfache [[LDR]]s oder [[Photodioden]] bzw. [[Phototransistoren]] sein.&lt;br /&gt;
LDRs haben den Vorteil, dass sie relativ hoch aussteuern, der große Nachteil ist aber, dass diese Sensoren ziemlich Wärmeempfindlich und etwas träge.&lt;br /&gt;
Photodioden und Phototransistoren haben den Vorteil, dass sie sehr genau sind, aber nicht besonders hoch aussteuern. Diese sollte man evtl. über einen OpAmp verstärken.&lt;br /&gt;
&lt;br /&gt;
[[Bild:fotowiderstand.jpg|center|framed|Ein typischer Fotowiderstand]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:SFH300.jpg|center|framed|SFH300, ein typischer Phototransistor]]&lt;br /&gt;
&lt;br /&gt;
Die Suche nach dem Hellsten Fleck im Rraum ist wie ich finde ein gutes Einsteigerthema!&lt;br /&gt;
&lt;br /&gt;
===CNY70===&lt;br /&gt;
&lt;br /&gt;
Der CNY70 ist ein Foto-Reflex Optokoppler. In einem würfelförmigem Gehäuse befindet sich eine Infrarot LED als Sender und ein Infrarot Fototransistor als Empfänger. Damit kann auf kurze Entfernung (wenige Millimeter) das reflektierte Licht der IR-LED durch den IR-Fototransistor gemessen werden.  &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Bild:cny70.jpg|thumb|200px|CNY70]]&lt;br /&gt;
|[[Bild:cny70_pinout.jpg|framed|CNY70 Vishay Pinout]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Achtung:''' Es existiert auch noch ein CNY70 von Temic mit anderer Pinbelegung, dort ist der Fototransistor verdreht eingebaut.&lt;br /&gt;
&lt;br /&gt;
Der CNY70 eignet sich für eine Vielzahl von Sensoren. Z.B. als Liniensensor, Radencoder, Abgrunddetektor und Lichtschranke. Allerdings ist er empfindlich gegen Streulicht, da  das Licht der IR-LED nicht moduliert ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:cny70_schem1.gif|thumb|center|600px|CNY70 als Liniensensor]]&lt;br /&gt;
&lt;br /&gt;
Der Liniensensor benötigt 2 A/D Wandler Eingänge des Prozessors. Die CNY70 sollten so nah wie möglich in Bodennähe angebracht sein (1..3mm). Der P-Kanal FET BS250 dient als Schalter für die IR LEDs des CNY70. Damit spart man Strom, wenn der Liniensensor nicht benötigt wird. Allerdings wird dafür ein weiterer Prozessor Ausgang als Enable Siganl benötigt. HIGH Pegel schaltet die Sensor LEDs aus, LOW Pegel ein.  Wird keine Enable Funktion gewünscht läßt man den BS250 einfach weg und hängt die IR-LEDs direkt an VCC.&lt;br /&gt;
&lt;br /&gt;
[[Bild:cny70_schem2.gif|thumb|center|600px|CNY70 als Radencoder mit Schmitt-Trigger]]&lt;br /&gt;
&lt;br /&gt;
Die Radencoder benötigen zwei digitale Eingangsports des Prozessors. A/D Wandler sind nicht nötig, da die Schmitt-Trigger Gatter für saubere Logik Siganle sorgen. Die gewählten Widerstandswerte für R17/R19 bzw. R18/R20 sind optimiert für Radencoder die auf Transparentfolie gedruckt und auf Aluminium Räder aufgeklebt werden. Für Radencoder die auf Papier ausgedruckt werden, sind andere Widerstandswerte notwendig.&lt;br /&gt;
Der P-Kanal FET BS250 dient als Schalter für die IR LEDs des CNY70. Damit spart man Strom, wenn der Radencoder nicht benötigt wird. Allerdings wird dafür ein weiterer Prozessor Ausgang als Enable Signal benötigt. HIGH Pegel schaltet die Sensor LEDs aus, LOW Pegel ein. Wird keine Enable Funktion gewünscht läßt man den BS250 einfach weg und hängt die IR-LEDs direkt an VCC.&lt;br /&gt;
&lt;br /&gt;
===Distanzsensor IS471F===&lt;br /&gt;
&lt;br /&gt;
IS471F - Hindernisserkennung mit Infrarot Distanzsensor&lt;br /&gt;
&lt;br /&gt;
Das hier vorgestellte IC IS471F erlaubt eine einfach und sogar recht preisgünstige Hinternisserkennung per Infarot. Dazu muß im wesentlichen nur noch eine Infrarot-Diode an das IC angeschlossen werden. Das modulierte Licht wird von einem Gegenstand direkt auf das IC zurückgeworfen und somit das Hinterniss erkannt. Tageslicht/Fremdlicht stört den IS471 überhaupt nicht, da das Licht mit einer bestimmten Frequenz moduliert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:is471.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der normale Schaltungsaufbau sieht also wie oben abgebildet aus! In der Praxis kann das dann in etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:is471beispiel.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das englische Datenblatt findet man im Roboternetz-Download-Bereich&lt;br /&gt;
&lt;br /&gt;
Die normale Reichweite ist in gewissen Grenzen abhängig von der Farbe des Hinternisses. In der Regel reicht es jedoch durchaus einige cm so das langsame Roboter durchaus sehr gut damit zurecht kommen. Durch besonders helle Infrarot LED´s und durch zusätzlich LED-Fassungen kann man die Reichweite erhöhen. Wem das noch nicht reicht, der kann über einen zusätzlichen Transistor die Strahlungsleistung der LED noch weiter erhöhen. &lt;br /&gt;
&lt;br /&gt;
[[Bild:is471verstaerkung.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
http://www.roboternetz.de/bilder/mehrereis471.gif&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sharp Infrarotsensoren===&lt;br /&gt;
&lt;br /&gt;
Sharp hat eine ganz interessante Serie von Bausteinen herausgebracht mit denen ein Roboter sogar recht genau Entfernungen messen kann. Das Messergebnis ist nahezu unabhängig von der Farbe und Helligkeit des gemessenen Objektes. Die Ansteuerung ist sehr einfach, der Sensorausgang kann zum Beispiel direkt an einen analogen Eingang eines Mikrocontrollers angeschlossen werden. Die Sensoren sind unter den Roboter-Bastlern weit verbreitet. &lt;br /&gt;
Bei vielen Händlern erhältlich kosten die Sensoren derzeit je nach Typ und Händlerspanne zwischen 13 bis 25 Euro.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bild:Sharpentfernungssensor.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oft werden selbst in kleinen Roboter-Projekten mehrere dieser Sensoren genutzt da sie nur einen äußerst engen Erfassungsbereich haben. Sie eignen sich daher sehr gut zur Vermessung einer Umgebung, insbesondere dann wenn Sie drehbar auf einem Servo montiert werden. Als Kollisionsschutz sind sie wegen dem engen Winkel nur bedingt geeignet, zu diesem Zweck eignen sich zum Beispiel Ultraschallsensoren besser.&lt;br /&gt;
Das Funktionsprinzip der Sensoren ist einfach. Der Sensor besteht aus Sender und Empfänger. Der Sender sendet einen Infrarot-Strahl aus, der vom Hindernis reflektiert wird. Je nach Entfernung trifft der reflektierte Strahl an einer unterschiedlichen Stelle auf den Empfänger (ein sog. Position Sensitive Device, PSD). Der Empfänger setzt den Auftreffpunkt in einen analogen Spannungswert um. Eine schöne Skizze dazu:  &lt;br /&gt;
&lt;br /&gt;
[[Bild:sharpfunktion.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Einige der beliebtesten Bausteine sind:'''&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D12==== &lt;br /&gt;
Distanz 10 - 80 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt&lt;br /&gt;
Dies ist der am häufigsten eingesetzte Sharp Typ bei mobilen Robotern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:GP2D12anschluss.gif|center]]&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2YA21YK==== &lt;br /&gt;
Distanz 10 - 80 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt &lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D120====&lt;br /&gt;
Distanz 4 - 30 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2Y0A02YK====&lt;br /&gt;
Distanz 20 - 150 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
http://www.shop.robotikhardware.de/shop/catalog/images/artikelbilder/sensoren/gp2y0a02yk_diagramm.gif&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D02====&lt;br /&gt;
Distanz 10 - 80 cm - Entfernung wird durch 8 Bit Digitalausgang übermittelt&lt;br /&gt;
&lt;br /&gt;
====Sharp GP2D150====&lt;br /&gt;
Distanz 3-30 cm - 1 Bit Schaltausgang  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datenblätter zu den oberen Sensoren findet man im Download-Bereich des Roboternetz, siehe unter [[#Weblinks]].&lt;br /&gt;
 &lt;br /&gt;
Um die analogen Spannung der Sensoren in eine Entfernung umzurechnen, kann man sich mit Hilfe des Datenblattes oder einfacher Probemessungen Tabellen erstellen, welche dann vom Controller zur Umsetzung genutzt werden.&lt;br /&gt;
Bequemer ist allerdings eine Näherungsformel:&lt;br /&gt;
&lt;br /&gt;
====Formel zur Entfernungsberechnung==== &lt;br /&gt;
 D = A/(X-B) &lt;br /&gt;
&lt;br /&gt;
 D ist die Entfernung &lt;br /&gt;
 X ist der Ausgabewert des Sensors &lt;br /&gt;
 A ist die Steigung der Kurve A/X &lt;br /&gt;
 B ist der Offset der Kurve &lt;br /&gt;
&lt;br /&gt;
Die Konstanten A und B ermittelt man am besten über zwei Probemessungen: &lt;br /&gt;
&lt;br /&gt;
D und X sind die Entfernung und der Ausgabewert der ersten Messung (z.B. bei 20 cm) &lt;br /&gt;
D' und X' sind die Entfernung und der Ausgabewert der zweiten Messung (z.B. bei 60 cm) &lt;br /&gt;
&lt;br /&gt;
 A = ((X' - X) * D' * D) /(D - D' ) &lt;br /&gt;
 B = (D' * X' - D * X) /(D' - D) &lt;br /&gt;
&lt;br /&gt;
====GP2D12 Messkurve====&lt;br /&gt;
&lt;br /&gt;
[[Bild:gpd12kurve.gif|center]]&lt;br /&gt;
&lt;br /&gt;
====GPD120 Messkurve====&lt;br /&gt;
&lt;br /&gt;
[[Bild:gpd120kurve.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Ultraschall Sensoren== &lt;br /&gt;
===Ultraschallsensoren SRF04===&lt;br /&gt;
Die Firma '''Devantech''' hat eine Serie von sehr günstigen und kleinen Ultraschallsensoren entwickelt, die sich im Bereich &amp;quot;autonome Robotersysteme&amp;quot; durchgesetzt haben. Sie sind sehr verbreitet, da sie auch für &amp;quot;Hobby-Robotiker&amp;quot; erschwinglich sind und es sich nicht lohnen würde vergleichbare Module selber zu bauen, da diese meistens ungenauer und teurer wären.&lt;br /&gt;
&lt;br /&gt;
Bekannt wurde die Serie durch den '''SRF04'''. Mit seinen kleinen Abmessungen, der niedrigen Stromaufnahme und der hohen Genauigkeit ist er für kleine Messaufgaben im Entfernungsbereich von 3cm bis 3m gut geeignet. Der SRF04 kann einen 3cm dicken Besenstiel in 2m Entfernung erkennen und wird durch ein [[PWM]]-Signal ausgewertet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf_04a.jpg]] [[Bild:srf_04.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ultraschallsensor SRF05===&lt;br /&gt;
Der Nachfolger des SRF04 ist der neuer SRF05. Er besitzt noch eine etwas höhere Reichweite bis 4 Meter. Zudem besitzt er neben dem kompatibel Mode zu SRF04 noch eine Betriebsart bei der er über einen einzigen Port (Pin) gesteuert wird. Das heißt sowohl der Start der Messung und das Ergebnis wird über die gleiche Leitung übertragen. [[Ultraschall SRF05 an RN-MiniControl|Programmbeispiel in Bascom]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Srf05mode1.jpg|center]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf05mode2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf05mode2diagram.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SRF08===&lt;br /&gt;
Die Alternative zu SRF04 und SRF05 ist der beliebte  '''SRF08''' und dessen Nachfolger '''SRF10''', der nun über den [[I2C]]-Bus ausgewertet werden kann und über eine Reichweite von 3cm bis 6m verfügt. Er hat eine noch kleinere Stromaufnahme und zusätzlich befindet sich auf der Platinenfront ein Fotowiderstand(LDR) dessen Lichtmesswerte sich ebenfalls über den [[I2C]]-Bus auswerten lassen. Durch den SRF08 wird es möglich auch bis zu 16 Mehrfachechos, von weiter hinten gelegenen Gegenständen, auszuwerten, die bei dem SRF04 ignoriert wurden. Über den [[I2C]]-Bus kann man die Messwerte in cm, zoll und in der Laufzeit µs auslesen und spart sich somit die externe Auswertung der Laufzeit, wie bei dem SRF04. Weiterhin können insgesamt 16 SRF08-Module an einen [[I2C]]-Bus angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf08_a.jpg]]  [[Bild:srf08_b.jpg]]&lt;br /&gt;
&lt;br /&gt;
===SRF08 Programmbeispiel===&lt;br /&gt;
SFR08 Programm Beispiel mit [[Bascom]]&lt;br /&gt;
Über die grundsätzliche Behandlung des [[I2C]]-Bus mit [[Bascom]] kann man [[I2C|hier]] nachlesen. &lt;br /&gt;
&lt;br /&gt;
 Const Sf08_adr_0 = &amp;amp;HE0             ' I2C Adresse&lt;br /&gt;
 Const Sf08_c_range = 100            ' Reichweite&lt;br /&gt;
 Const Sf08_c_gain = 1               ' Empfindlichkeit&lt;br /&gt;
&lt;br /&gt;
Die Adresse ist der Default-Wert für den Sensor, und kann eingestellt werden. &lt;br /&gt;
Range und Gain sind anzupassen, die angegeben Werte sind aber mal grundsätzlich verwendbar.&lt;br /&gt;
&lt;br /&gt;
'''Setup'''&lt;br /&gt;
Nach dem Reset sind einmal Range und Gain zu setzen.&lt;br /&gt;
&lt;br /&gt;
'''Setzen Range'''&lt;br /&gt;
&lt;br /&gt;
      I2cstart&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 2            ' register &amp;quot;range&amp;quot;&lt;br /&gt;
      I2cwbyte Sf08_c_range  &lt;br /&gt;
      I2cstop&lt;br /&gt;
 &lt;br /&gt;
'''Setzen Gain'''&lt;br /&gt;
&lt;br /&gt;
      I2cstart&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 1            ' register &amp;quot;gain&amp;quot;&lt;br /&gt;
      I2cwbyte Sf08_c_gain    &lt;br /&gt;
      I2cstop&lt;br /&gt;
&lt;br /&gt;
'''Abfrage Trigger'''&lt;br /&gt;
&lt;br /&gt;
Die Abfrage soll laut Beschreibung in zwei Schritten erfolgen, zwischen denen ca 70 mS gewartet werden soll. Diese Zeit braucht das Gerät zum Messen. &lt;br /&gt;
&lt;br /&gt;
'''Trigger'''  &lt;br /&gt;
      I2cstart&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 0            ' register &amp;quot;Trigger&amp;quot;&lt;br /&gt;
      I2cwbyte 81           ' Meßwert in Zentimetern&lt;br /&gt;
&lt;br /&gt;
      Waitms 70 &lt;br /&gt;
&lt;br /&gt;
'''Ergebnis abholen'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 DIM Lsb as Byte&lt;br /&gt;
 DIM Msb as Byte&lt;br /&gt;
 DIM IVal as word&lt;br /&gt;
&lt;br /&gt;
      I2cstart              ' Repeated Start&lt;br /&gt;
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse&lt;br /&gt;
      I2cwbyte 2            ' Meßwert US&lt;br /&gt;
&lt;br /&gt;
      I2cstart                 ' repeated Start&lt;br /&gt;
      I2cwbyte Sf08_adr_0 + 1  ' Device I2C Adresse READ!&lt;br /&gt;
      I2crbyte Msb , Ack      ' Bit 8-15&lt;br /&gt;
      I2crbyte Lsb , Nack     ' Bit 0-7&lt;br /&gt;
      I2cstop&lt;br /&gt;
&lt;br /&gt;
      Ival = Makeint(lsb , Msb) ' umwandeln in Word (16 Bit)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SRF10 Ultraschallsensor ===&lt;br /&gt;
SRF10 ist quasi der Nachfolger von SRF08. Er bietet die gleiche Leistung und ist sogar gegenüber Spannungschankungen noch etwas unempfindlicher als der Vorgänger. Der größte Vorteil besteht jedoch darin das er ca. 1/3 kleiner als sein Vorgänger ist.   &lt;br /&gt;
&lt;br /&gt;
[[Bild:srf10foto1.jpg]] [[Bild:srf10foto2.gif]]&lt;br /&gt;
&lt;br /&gt;
Die technischen Daten sind ähnlich:&lt;br /&gt;
* Betriebsspannung: 5V &lt;br /&gt;
* Stromaufnahme: ca. 3mA Standby, ca. 15mA während des Messens Frequenz: 40KHz &lt;br /&gt;
* Maximale Reichweite: 6 m &lt;br /&gt;
* Minimale Reichweite: 4 cm &lt;br /&gt;
* Messwerterfassung: intern, kein externer Controller zur Zeitmessung notwendig &lt;br /&gt;
* Interface: Standard – I2C (passend zu zahlreichen Controllerboards, z.B. RN-Control) &lt;br /&gt;
* Ausgabeformat: µs, cm oder Zoll &lt;br /&gt;
* Feature: Analogverstärkung 40 - 700 (einstellbar, 16 Stufen) &lt;br /&gt;
* Abmessungen: 32mm x 15mm x 10mm &lt;br /&gt;
* Hersteller: Devantech Ltd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[Ultraschall_SRF10_an_RN-Control|Programmbeispiel in Bascom]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:srf10ausbreitung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
=== Vergleichstabelle ===&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
{|{{Blaueschmaltabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |'''SRF10'''&lt;br /&gt;
 |'''SRF08'''&lt;br /&gt;
 |'''SRF05'''&lt;br /&gt;
 |'''SRF04'''&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Betr. Spannung'''&lt;br /&gt;
 |5V&lt;br /&gt;
 |5V&lt;br /&gt;
 |5V&lt;br /&gt;
 |5V&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Stromaufnahme'''&lt;br /&gt;
 |3mA typ,&amp;lt;br&amp;gt; 15mA max.&lt;br /&gt;
 |3mA typ,&amp;lt;br&amp;gt; 15mA max.&lt;br /&gt;
 |4mA typ,&amp;lt;br&amp;gt; 30mA max.&lt;br /&gt;
 |30mA typ,&amp;lt;br&amp;gt; 50mA max.&lt;br /&gt;
 |-&lt;br /&gt;
 |'''US Leistung'''&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |100 – 150mW&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Frequenz'''&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |40kHz&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Bereich'''&lt;br /&gt;
 |72&amp;amp;ordm;&lt;br /&gt;
 |55&amp;amp;ordm;&lt;br /&gt;
 |55&amp;amp;ordm;&lt;br /&gt;
 |55&amp;amp;ordm;&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Reichweite'''&lt;br /&gt;
 |4cm - 6m&lt;br /&gt;
 |3cm - 6m&lt;br /&gt;
 |3cm - 4m&lt;br /&gt;
 |3cm - 3m&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Triggerimpuls'''&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 |10µs min.&lt;br /&gt;
 |10µs min.&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Abmessung in mm'''&lt;br /&gt;
 |32 x 15 x 10&lt;br /&gt;
 |43 x 20 x 17&lt;br /&gt;
 |43 x 20 x 17&lt;br /&gt;
 |43 x 20 x 17&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Interface'''&lt;br /&gt;
 |I2C&lt;br /&gt;
 |I2C&lt;br /&gt;
 |TTL Impuls&lt;br /&gt;
 |TTL Impuls&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Feature'''&lt;br /&gt;
 |Minimodul&lt;br /&gt;
 |Lichtsensor&lt;br /&gt;
 |SRF04 Modus&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Preis ca. *'''&lt;br /&gt;
 |44,00 €&lt;br /&gt;
 |44,00 €&lt;br /&gt;
 |22,00 €&lt;br /&gt;
 |25,00 €&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''*''' Der Preis dient nur zum vergleich untereinander, nicht als Referenz !&lt;br /&gt;
&lt;br /&gt;
==Kompaß== &lt;br /&gt;
===Kompaß-Modul CMPS03===&lt;br /&gt;
Laut der Doku ist diese Modul speziell für die Bedürnisse von Robotern gestaltet worden. Es mißt seine Lage relativ zum Erdmagnetfeld und liefert diesen Wert&lt;br /&gt;
* Als PWM-Signal &lt;br /&gt;
* Über I2C entweder 0-255 als Byte oder&lt;br /&gt;
* 0-3599 als 16-Bit Wert (MSB first)&lt;br /&gt;
&lt;br /&gt;
In der vorliegenden Doku ist eine fixe I2C-Adresse von 0xC0 angegeben. Was leider noch fehlt, sind Angaben, ob und wie diese Adresse geändert werden kann.&lt;br /&gt;
&lt;br /&gt;
Bei waagrechter Montage ist das also ein Kompaß, bei senkrechter Montage dieser Module kann man auch die Neigung in Nord-Süd-Richtung messen. Hierzu sind 2 Module nötig, die zueinander um 90° gedreht angeordnet sein müssen. Die Neigung in Ost-West-Richtung zu messen, ist dagegen leider nicht möglich.&lt;br /&gt;
&lt;br /&gt;
Das Ganze ist eine Anwendung des Philips-KMZ51 Magnet-Feld-Sensors mittels eines PIC16F872&lt;br /&gt;
&lt;br /&gt;
Gelegentlich sollte das Modul kalibriert werden. Das kann über den I2C-Bus, aber auch mittels einen Pins am Modul initiiert werden. Dann muß das Module langsam um 360 Grad gedreht werden. Dabei nimmt das Modul 4 Meßpunkte auf und speichert sie im EEPROM. &lt;br /&gt;
&lt;br /&gt;
Ein Beispielprogramm findet man hier:&lt;br /&gt;
* [[Bascom und Kompass CMPS03]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:cmps3pin.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
==Beschleunigung==&lt;br /&gt;
&lt;br /&gt;
Beschleunigungssensoren messen die Beschleunigung, die auf sie wirkt - wenn sie auf dem Tisch liegen, messen sie beispielsweise die Erdbeschleunigung von 1g. In einem Auto können weitere Beschleunigungen hinzukommen: Zur Seite beim Kurvenfahren, nach vorne oder hinten beim Beschleunigen, oder bei zügiger Fahrt über eine Bergkuppe auch mal welche in vertikaler Richtung.&amp;lt;br&amp;gt;&lt;br /&gt;
Beschleunigungssensoren sind meist mehrdimensional ausgelegt, so dass für mehrere Achsen ein Sensor verwendet werden kann.&lt;br /&gt;
&lt;br /&gt;
Anwendungen finden sie in ESP-Systemen in Autos, die u.a. über die Querbeschleunigung ausrechnen können, ob das Fahrzeug seitlich driftet oder gar schleudert.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine andere wichtige Aufgabe übernehmen sie zusammen mit Gyroskopen in Trägheitsnavigationssystemen, die dann sowohl die Lage im Raum als auch die Bewegung feststellen können.&lt;br /&gt;
&lt;br /&gt;
Moderne Piezo-Sensoren sind nur noch Chip-gross und können direkt in Schaltungen integriert werden.&lt;br /&gt;
&lt;br /&gt;
==Drehung==&lt;br /&gt;
&lt;br /&gt;
Um Drehungen zu messen, werden sogenannte Gyroskope, kurz &amp;quot;Gyros&amp;quot; verwendet. Typische Vertreter sind hier die ADXRS-Familie von Analog Devices. Diese sind allerdigs, anders als die Beschleunigungssensoren, meistens nur für eine Achse ausgelegt. Die Ausgabe erfolgt meist analog, jede Ausgangsspannung entspricht einer bestimmten Drehrate in °/Sekunde.&lt;br /&gt;
&lt;br /&gt;
Gemessen wird die Auswirkung der Corioleskraft auf zwei gleiche, in Bewegung gehaltene Massen. Diese schwingen radial, d.h. 90° verdreht zu der Achse, auf der die Drehung gemessen werden soll. Wird der Sensor um die Achse gedreht, ändert sich die Geschwindigkeit dieser Massen, da sie auf einer gedachten Scheibe abwechselnd nach innen und außen wandern. Je weiter sie außen sind, desto höher ist ihre Geschwindigkeit, je weiter innen, desto langsamer sind sie. Bei der Bewegung nach außen müssen sie also beschleunigt werden, andersherum genauso. Die dabei auftretenden Beschleunigungen werden mittels einiger Fühler gemessen, die einen Plattenkondensator bilden.&lt;br /&gt;
&lt;br /&gt;
Eine Anwendung sind im Flugmodellbau Gyro-&amp;quot;Taillocks&amp;quot;, die in Hubschraubern die Heckstabilität verbessern und ESP-Systeme in Autos, die u.a. durch die Messung der Gierrate, also der Drehung des Fahrzeugs um die Hochachse, feststellen können, ob das Fahrzeug seitlich driftet oder sogar schleudert.&lt;br /&gt;
&lt;br /&gt;
==Temperatur== &lt;br /&gt;
===NTCs===&lt;br /&gt;
===PTCs===&lt;br /&gt;
&lt;br /&gt;
PTCs sind Temperatursensoren, deren Widerstand sich mit steigender Temperatur erhöht. Dazu gehören&lt;br /&gt;
&lt;br /&gt;
*PT100, PT1000 etc.&lt;br /&gt;
*Die KTYxx-xxx Reihe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== KTY: Silizium Temperatursensoren ====&lt;br /&gt;
&lt;br /&gt;
Die KTY-Temperatursensoren sind verglichen mit anderen Temperatursensoren verhältnismäßig günstig, haben dafür aber auch mehr Nachteile.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Genauigkeit ist ziemlich eingeschränkt, weshalb die KTY-Temperatursensoren zuerst kalibriert werden sollten. Dies muss Schaltungstechnisch oder in Software erfolgen, eine eingebaute Kalibrierung gibt es nicht.&amp;lt;br&amp;gt;&lt;br /&gt;
Andererseits lassen sich mittels Oversampling sehr hoch aufgelöst Temperaturen messen, was aufgrund mittelmäßiger Linearität (auch nach der Linearisierung) aber nur bei der Messung kleiner Temperaturunterschiede empfehlenswert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Linearisiert werden die KTY an 5 Volt mit einem Reihenwiderstand von etwa 2,7 kOhm bis 3,3 kOhm.&lt;br /&gt;
&lt;br /&gt;
===Temperatur-Sensor LM75===&lt;br /&gt;
&lt;br /&gt;
[[Bild:lm75.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Dieser Chip von National Semiconductors kann die Umgebungstemperatur mit einer Genauigkeit von 0.5&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; Grad Celsius messen. Das angegebene Bereich ist -25&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; bis 100&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; C. Es wird zweierlei geboten:&lt;br /&gt;
* Ein Schaltausgang - Wenn man also z.B. einen Ventilator einschalten möchte&lt;br /&gt;
* I2C - Der obere Teil der Adresse ist fix 0x9n, die Bits 1-3 kann man mit Jumper einstellbar machen oder fest verdrahten. &lt;br /&gt;
&lt;br /&gt;
Durch einen einfachen I2C-Lesebefehl kann man die Temperatur einlesen (16-Bit), das Format ist allerdings etwas tricky. Das erste Byte (8-Bit) ist die Temperatur in ganzen Grad, als normales signed char, vom zweiten Byte gibt das MSB an, ob noch 0.5&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; '''dazuzuzählen''' sind (also auch, wenn vorne eine negative Zahl steht)  &lt;br /&gt;
&lt;br /&gt;
Der Grund ist der: die vorzeichenbehaftete 9-Bit Zahl, die da linksbündig in zwei Datenbytes übertragen wird, gibt eigentlich an, wieviel 0.5 Grad - Einheiten gemessen wurden. Rein rechnerisch wäre also Temperatur = Wert * 0.5, das müßte man aber als float durchführen oder erweitern&lt;br /&gt;
&lt;br /&gt;
===Programm-Beispiel für LM75===&lt;br /&gt;
Der LM75 wird über den [[I2C]]-Bus angesprochen&lt;br /&gt;
In BasCom, wo es ja keine signed char gibt, wird das Interpretieren auf sehr unterschiedliche Art empfohlen. &lt;br /&gt;
&lt;br /&gt;
Ich empfehle:&lt;br /&gt;
&lt;br /&gt;
 dim Ival as integer&lt;br /&gt;
 dim Msb as byte&lt;br /&gt;
 dim Lsb as byte&lt;br /&gt;
         I2cstart&lt;br /&gt;
         I2cwbyte &amp;amp;H91   ' Lese-adresse !  &lt;br /&gt;
         If Err = 1 Then&lt;br /&gt;
            I2cstop       ' kein ACK vom LM75 --&amp;gt; irgendein Fehler&lt;br /&gt;
            Ival = 9999   ' Zeichen, daß der Wert ungültig ist !&lt;br /&gt;
         Else&lt;br /&gt;
            I2crbyte Msb , Ack&lt;br /&gt;
            I2crbyte Lsb , Nack&lt;br /&gt;
            I2cstop&lt;br /&gt;
            If Msb.7 = 1 Then&lt;br /&gt;
               Ival = Makeint(msb , &amp;amp;HFF)   ' auffüllen mit den Vorzeichen bits&lt;br /&gt;
            Else&lt;br /&gt;
               Ival = Makeint(msb , &amp;amp;H00)   ' positiv, also bleibt es so&lt;br /&gt;
            End If&lt;br /&gt;
            Ival = Ival * 10                ' erweitern &lt;br /&gt;
            If Lsb.7 = 1 Then&lt;br /&gt;
              Ival = Ival + 5               ' fünf Zehntel Grad dazu &lt;br /&gt;
            End If&lt;br /&gt;
         End if&lt;br /&gt;
&lt;br /&gt;
das ergibt die Temperatur in Zehntel-Grad (Natürlich nur, wenn's keine Fehler gab).&lt;br /&gt;
&lt;br /&gt;
==Resistive Sensoren==&lt;br /&gt;
...&lt;br /&gt;
==Kapazitive Sensoren==&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für kapazitive Sensoren sind Luftfeuchtigkeitsmesser, die ihre Kapazität entsprechend der Luftfeuchtigkeit ändern. Das Auslesen der Kapazität kann prinzipiell über das Ausmessen von Ladekurven geschehen. Dies ist jedoch bei kleinen Kapazitäten nicht praktisch durchführbar, weshalb man in diesem Falle meist einen Schwingkreis baut, dessen Frequenz man dann misst und so dann zusammen mit der bekannten Induktivität der Spule die Kapazität des Kondensators ausrechnen kann.&lt;br /&gt;
&lt;br /&gt;
==Induktive Sensoren==&lt;br /&gt;
Induktiver Näherungsschalter&lt;br /&gt;
&lt;br /&gt;
Sensoren die ihre Induktivität entsprechend der Messgröße ändern können auch mit Hilfe eines Schwingkreises mit bekannter Kapazität ausgemessen werden.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Piezoelektrische Sensoren==&lt;br /&gt;
Hier ist ein Experiment dargestellt das die Funktion von Piezowandlern demonstriert.&lt;br /&gt;
&lt;br /&gt;
Drückt man auf eine längliche Glasplatte (Mikroskopträger Länge 76mm), die an den Enden auf je einem Piezo Wandler gelagert ist, dann ergeben sich Signale, die von den Kräften auf die Wandler abhängig sind. &lt;br /&gt;
&lt;br /&gt;
Die Summe der beiden Kräfte entspricht der Gesamtkraft. Das Verhältnis der beiden Kräfte entspricht dem Verhältnis der Abstände des Druckpunktes zum Wandler. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Piezowandler.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Versuch wurde mit der Frequenz von ca. 4Hz (0,5s/div) von einem Ende bis zum anderen auf die Platte gedrückt. (Tonleiter). Die Signale der beiden Wandler sind im Oszillogramm aufgetragen und die Folge der Druck-Positionen ist auf den ersten Blick schon mal nachvollziehbar.&lt;br /&gt;
&lt;br /&gt;
==PIR Passiv Infrarot Sensoren==&lt;br /&gt;
Hier handelt es sich um Passiv-Infrarot-Bewegungsmelder. Bewegungsmelder regieren beim Eintritt einer Person (Tier) in das Erfassungsfeld des Sensors. Die Anwendungsmöglichkeiten sind nahezu unbegrenzt, man kennt die Technik ja von vielen Terrassenlampen, welche sich beim vorbeigehen automatisch einschalten.&lt;br /&gt;
Reagiert wird also auf Die Körperwärme einer sich im Erfassungsfeld bewegenden Person.&lt;br /&gt;
[[Bild:pir.jpg|right]]&lt;br /&gt;
Zum Prinzip: &lt;br /&gt;
Wärmestrahlen, die einen Erfassungsvorgang auslösen, liegen im Infrarot-Bereich des Wellenspektrums. In diesem Bereich gibt der menschliche Körper seine Wärmestrahlung ab. Leuchtmittel wie Glüh- , Halogen- und Entladungslampen, die für eine Strahlung im sichtbaren Bereich um 0,555 μm entwickelt wurden, geben jedoch auch einen erheblichen Teil an Wärmestrahlung im Infrarot-Bereich ab.&lt;br /&gt;
Im Spektrum oberhalb des sichtbaren Licht, ab 0,780 μm, beginnt der Infrarot-Bereich. Die Wellenlänge&lt;br /&gt;
dieser IR-Strahlung ist abhängig von der Temperatur eines Körpers. Die Wärmestrahlung&lt;br /&gt;
des Menschen hat ihr Maximum zwischen 9 und 10 μm im Infrarot-Bereich.&lt;br /&gt;
Diese Tatsache nutzt der PIR Sensor mittels sogenannter pyroelektrischer IRDetektoren, welche eine hohe Empfindlichkeit im langwelligen Infrarot-Bereich aufweisen. Die Infrarot-&lt;br /&gt;
Strahlung verhält sich ähnlich wie sichtbares Licht. Sie kann reflektiert und durch Linsen&lt;br /&gt;
gebündelt werden.&lt;br /&gt;
Basis eines solchen IR-Detektors (Sensors) sind Lithium-Tantalatkristalle. Diese Kristalle erzeugen,&lt;br /&gt;
bei Wärmeänderung (positive oder negative Temperaturänderung), eine elektrische Spannung.&lt;br /&gt;
Die von den Kristallen abgegebene Spannung liegt im Bereich von einigen μV (μV = millionstel Volt) und ist von folgenden Bedingungen abhängig: &lt;br /&gt;
* Der Intensität der Wärmequelle (Temperatur und Größe)&lt;br /&gt;
* Dem Umgebungsmedium (Temperatur, unterschiedliche Luftfeuchtigkeit)&lt;br /&gt;
* Der Entfernung zwischen Wärmequelle und IR-Sensor&lt;br /&gt;
* Der Bewegungsgeschwindigkeit und Bewegungsrichtung der Wärmequelle&lt;br /&gt;
* Der Empfindlichkeit des PIR-Elementes (frequenzabhängiges Bandpaßverhalten mit Maximum bei ca. 0,1 Hz)&lt;br /&gt;
&lt;br /&gt;
Zur Unterdrückung von Einflüssen aus der Umgebung (übliche wetterbedingte Temperaturänderungen), sind in jedem Sensor 2 Kristalle antiparallel geschaltet. &lt;br /&gt;
Einer der Kristalle gibt, bei Auftreffen von Wärmestrahlung einen positiven, der andere einen negativen Spannungsimpuls ab. Wärmeänderungen die gleichzeitig und mit gleicher Intensität auf beide Kristalle einwirken lösen so keinen Erfassungsvorgang aus, denn die beiden Impulse heben sich gegenseitig auf. Dadurch ist ein Auslösen bei Wärmeänderungen der Umgebung weitgehend ausgeschlossen.&lt;br /&gt;
Anders verhält es sich bei schnellen Bewegungen. Die Lithiumtantalat-Kristalle geben, entsprechend&lt;br /&gt;
der Bewegung und der dadurch hervorgerufenen Wärmeänderung im Erfassungsfeld, ihre&lt;br /&gt;
Impulse zeitversetzt ab. Die beiden Impulse addieren sich zu einer Wechselgröße mit höherer&lt;br /&gt;
Signalamplitude. Dieses elektrische Ausgangssignalist proportional der Wärmeänderung und führt zur Meldung einer Bewegung.&lt;br /&gt;
&lt;br /&gt;
==Autoren==&lt;br /&gt;
* [[Benutzer:PicNick|PicNick]]&lt;br /&gt;
* [[Benutzer:Frank|Frank]] &lt;br /&gt;
* [[Benutzer:Dennis.strehl|Dennis.strehl]]&lt;br /&gt;
* [[Benutzer:Florian|Florian]]&lt;br /&gt;
* Topic&lt;br /&gt;
* [[Benutzer:Manf|Manf]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
* [[Sensoren]]&lt;br /&gt;
* [[Graycode]]&lt;br /&gt;
* [[Ultraschall SRF10 an RN-Control]]&lt;br /&gt;
* [[Ultraschall SRF05 an RN-MiniControl]]&lt;br /&gt;
* [[Bascom und Kompass CMPS03]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*[http://www.ikm.uni-karlsruhe.de/forschung/pzt_webseiten/de/grundlagen/pyro.html Piezoelektrische Sensoren]&lt;br /&gt;
*[http://www.roboternetz.de/phpBB2/dload.php?action=category&amp;amp;cat_id=2 Datenblätter im Download-Bereich des Roboternetz]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Robotikeinstieg]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Elektronik]]&lt;br /&gt;
[[Category:Sensoren]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7870</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7870"/>
				<updated>2006-06-08T15:06:31Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* AVR-GCC Programm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für &amp;amp;le;80 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
...&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTC        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       6            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        5            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR, die die Standard LCD Library ersetzt. Dadurch können die gleichen Befehle zur Ansteuerung verwendet werden wie bei der Standard LCD Library. Das BASCOM-AVR Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portc.0       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portc.1       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7869</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7869"/>
				<updated>2006-06-08T15:05:56Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* AVR-GCC Programm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für &amp;amp;le;80 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
...&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTC        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       6            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        5            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR, die die Standard LCD Library ersetzt. Dadurch können die gleichen Befehle zur Ansteuerung verwendet werden wie bei der Standard LCD Library. Das BASCOM-AVR Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portc.0       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portc.1       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7868</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7868"/>
				<updated>2006-06-08T13:46:51Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* AVR-GCC Programm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für &amp;amp;le;80 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTA        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       5            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        6            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTC        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       6            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        5            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR, die die Standard LCD Library ersetzt. Dadurch können die gleichen Befehle zur Ansteuerung verwendet werden wie bei der Standard LCD Library. Das BASCOM-AVR Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portc.0       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portc.1       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7867</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7867"/>
				<updated>2006-06-08T13:46:24Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* AVR-GCC Programm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für &amp;amp;le;80 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTA        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       5            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        6            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTC        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       6            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        5            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR, die die Standard LCD Library ersetzt. Dadurch können die gleichen Befehle zur Ansteuerung verwendet werden wie bei der Standard LCD Library. Das BASCOM-AVR Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portc.0       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portc.1       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7866</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7866"/>
				<updated>2006-06-08T13:44:12Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für &amp;amp;le;80 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTA        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       5            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        6            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTC        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       6            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        5            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR, die die Standard LCD Library ersetzt. Dadurch können die gleichen Befehle zur Ansteuerung verwendet werden wie bei der Standard LCD Library. Das BASCOM-AVR Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portc.0       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portc.1       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7865</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7865"/>
				<updated>2006-06-08T13:42:48Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* BASCOM Programm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTA        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       5            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        6            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTC        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       6            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        5            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR, die die Standard LCD Library ersetzt. Dadurch können die gleichen Befehle zur Ansteuerung verwendet werden wie bei der Standard LCD Library. Das BASCOM-AVR Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portc.0       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portc.1       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7864</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7864"/>
				<updated>2006-06-08T13:37:14Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTA        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       5            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        6            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
#if LCD_IO_MODE&lt;br /&gt;
/**&lt;br /&gt;
 *  @name Definitions for 4-bit IO mode&lt;br /&gt;
 *  Change LCD_PORT if you want to use a different port for the LCD pins.&lt;br /&gt;
 *&lt;br /&gt;
 *  The four LCD data lines and the three control lines RS, RW, E can be on the &lt;br /&gt;
 *  same port or on different ports. &lt;br /&gt;
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on&lt;br /&gt;
 *  different ports. &lt;br /&gt;
 *&lt;br /&gt;
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it&lt;br /&gt;
 *  is possible to connect these data lines in different order or even on different&lt;br /&gt;
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.&lt;br /&gt;
 *  &lt;br /&gt;
 */&lt;br /&gt;
#define LCD_PORT         PORTC        /**&amp;lt; port for the LCD lines   */&lt;br /&gt;
#define LCD_DATA0_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 0 */&lt;br /&gt;
#define LCD_DATA1_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 1 */&lt;br /&gt;
#define LCD_DATA2_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 2 */&lt;br /&gt;
#define LCD_DATA3_PORT   LCD_PORT     /**&amp;lt; port for 4bit data bit 3 */&lt;br /&gt;
#define LCD_DATA0_PIN    0            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    1            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    2            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    3            /**&amp;lt; pin for 4bit data bit 3  */&lt;br /&gt;
#define LCD_RS_PORT      LCD_PORT     /**&amp;lt; port for RS line         */&lt;br /&gt;
#define LCD_RS_PIN       4            /**&amp;lt; pin  for RS line         */&lt;br /&gt;
#define LCD_RW_PORT      LCD_PORT     /**&amp;lt; port for RW line         */&lt;br /&gt;
#define LCD_RW_PIN       6            /**&amp;lt; pin  for RW line         */&lt;br /&gt;
#define LCD_E_PORT       LCD_PORT     /**&amp;lt; port for Enable line     */&lt;br /&gt;
#define LCD_E_PIN        5            /**&amp;lt; pin  for Enable line     */&lt;br /&gt;
&lt;br /&gt;
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \&lt;br /&gt;
      defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \&lt;br /&gt;
      defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)&lt;br /&gt;
/*&lt;br /&gt;
 *  memory mapped mode is only supported when the device has an external data memory interface&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */&lt;br /&gt;
#define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */&lt;br /&gt;
#define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */&lt;br /&gt;
#else&lt;br /&gt;
#error &amp;quot;external data memory interface not available for this device, use 4-bit IO port mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portc.0       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portc.1       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7857</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7857"/>
				<updated>2006-06-08T10:06:54Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7856</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7856"/>
				<updated>2006-06-08T10:05:06Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Befehlsübersicht */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM Adresse&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |Schreib Daten&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |Lese Daten&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7855</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7855"/>
				<updated>2006-06-08T10:03:50Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM address&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |write data&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |read data&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}} &lt;br /&gt;
|-{{Hintergrund1}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7854</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7854"/>
				<updated>2006-06-08T09:58:46Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|- {{Hintergrund1}} &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM address&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |write data&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |read data&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{||{{Blauetabelle}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|- {{Hintergrund1}} &lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7836</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7836"/>
				<updated>2006-06-08T08:43:36Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|- &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM address&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |write data&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |read data&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{||{{Blauetabelle}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 4000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           2     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    16     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      0         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen sind für obiges Beispile in der Header Datei lcd.h vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for MCU Clock Frequency&lt;br /&gt;
 *  Adapt the MCU clock frequency in Hz to your target. &lt;br /&gt;
 */&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @name  Definition for LCD controller type&lt;br /&gt;
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_CONTROLLER_KS0073 0  /**&amp;lt; Use 0 for HD44780 controller, 1 for KS0073 controller */&lt;br /&gt;
&lt;br /&gt;
/** &lt;br /&gt;
 *  @name  Definitions for Display Size &lt;br /&gt;
 *  Change these definitions to adapt setting to your display&lt;br /&gt;
 */&lt;br /&gt;
#define LCD_LINES           4     /**&amp;lt; number of visible lines of the display */&lt;br /&gt;
#define LCD_DISP_LENGTH    20     /**&amp;lt; visibles characters per line of the display */&lt;br /&gt;
#define LCD_LINE_LENGTH  0x40     /**&amp;lt; internal line length of the display    */&lt;br /&gt;
#define LCD_START_LINE1  0x00     /**&amp;lt; DDRAM address of first char of line 1 */&lt;br /&gt;
#define LCD_START_LINE2  0x40     /**&amp;lt; DDRAM address of first char of line 2 */&lt;br /&gt;
#define LCD_START_LINE3  0x14     /**&amp;lt; DDRAM address of first char of line 3 */&lt;br /&gt;
#define LCD_START_LINE4  0x54     /**&amp;lt; DDRAM address of first char of line 4 */&lt;br /&gt;
#define LCD_WRAP_LINES      0     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&lt;br /&gt;
#define LCD_IO_MODE      1         /**&amp;lt; 0: memory mapped mode, 1: IO port mode */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht das Programmbeispiel in AVR-GCC aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    /* Initialisiere Display, Cursor aus */&lt;br /&gt;
    lcd_init(LCD_DISP_ON);&lt;br /&gt;
&lt;br /&gt;
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */&lt;br /&gt;
    lcd_clrscr();&lt;br /&gt;
        &lt;br /&gt;
    /* String auf Display anzeigen */&lt;br /&gt;
    lcd_puts(&amp;quot;Hello world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Quellcode_C]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7834</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7834"/>
				<updated>2006-06-08T08:31:54Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: LCD-Modul wurde nach LCD-Modul am AVR verschoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|- &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM address&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |write data&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |read data&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{||{{Blauetabelle}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul&amp;diff=7835</id>
		<title>LCD-Modul</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul&amp;diff=7835"/>
				<updated>2006-06-08T08:31:54Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: LCD-Modul wurde nach LCD-Modul am AVR verschoben: treffendere Beschreibung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[LCD-Modul am AVR]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7833</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7833"/>
				<updated>2006-06-08T08:29:09Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* 8-Bit Ansteuerung (Busmode) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|- &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM address&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |write data&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |read data&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{||{{Blauetabelle}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Busmode Ansteuerung funktioniert nur bei AVR Prozessoren mit externem Bus Interface. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. Der Busmode empfiehlt sich, wenn man in der Applikation auch externen Speicher verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7832</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7832"/>
				<updated>2006-06-08T08:24:56Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* LCD Controller HD44780 kompatible */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HD44780 kompatibler LCD Controller===&lt;br /&gt;
&lt;br /&gt;
Der HD44780 LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|- &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei f&amp;lt;sub&amp;gt;osc&amp;lt;/sub&amp;gt;=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf den Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Setzt die Cursor Bewegungsrichtung (I/D), spezifiziert das Display zu schieben (S). Diese Operationen werden während des Daten lesen/schreiben durchgeführt.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) Cursor blinken (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungsrichtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM address&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |write data&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |read data&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
* DDRAM = Display Data RAM.&lt;br /&gt;
* CGRAM = Character Generator RAM.&lt;br /&gt;
* DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
* * = egal.&lt;br /&gt;
&lt;br /&gt;
{||{{Blauetabelle}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Display nicht shieben&lt;br /&gt;
|1 = Display schieben&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Befehle werden akzeptiert &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Die Anbindung erfolgt dabei häufig im Bus Mode auch memory-mapped Mode genannt. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren (mit externem Bus-Interface), z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7830</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7830"/>
				<updated>2006-06-08T08:16:19Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Befehlsübersicht */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LCD Controller HD44780 kompatible===&lt;br /&gt;
&lt;br /&gt;
Der LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|- &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei fosc=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Sets cursor move direction (I/D), specifies to shift the display (S). These operations are performed during data read/write.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) blinken des Zeichens an der Cursor Position (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungs Richtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=6 |CGRAM Adresse&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|colspan=7 |DDRAM Adresse&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|colspan=7 |CGRAM / DDRAM address&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|colspan=8 |write data&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|colspan=8 |read data&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
- DDRAM = Display Data RAM.&lt;br /&gt;
- CGRAM = Character Generator RAM.&lt;br /&gt;
- DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
- * = Don't care.&lt;br /&gt;
&lt;br /&gt;
{||{{Blauetabelle}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Kein display shift&lt;br /&gt;
|1 = Display shift&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = akzeptiert Befehle &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Die Anbindung erfolgt dabei häufig im Bus Mode auch memory-mapped Mode genannt. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren (mit externem Bus-Interface), z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7828</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7828"/>
				<updated>2006-06-08T08:10:54Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Befehlsübersicht */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LCD Controller HD44780 kompatible===&lt;br /&gt;
&lt;br /&gt;
Der LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|- &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei fosc=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Clear Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Sets cursor move direction (I/D), specifies to shift the display (S). These operations are performed during data read/write.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display on/off Control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) blinken des Zeichens an der Cursor Position (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungs Richtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|CGRAM Adresse&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM Address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DDRAM Adresse&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|CGRAM / DDRAM address&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Liest das Busy-flag (BF), welches anzeigt das interne Operationen ausgeführt werden, und liest den CGRAM oder DDRAM Adress Zeiger Inhalt.&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|write data&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|Schreibt Daten zum CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|read data&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|Liest Daten vom CGRAM oder DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
- DDRAM = Display Data RAM.&lt;br /&gt;
- CGRAM = Character Generator RAM.&lt;br /&gt;
- DDRAM Adresse entspricht der Cursor Position.&lt;br /&gt;
- * = Don't care.&lt;br /&gt;
&lt;br /&gt;
{||{{Blauetabelle}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Erniedrige Cursor Position&lt;br /&gt;
|1 = Erhöhe Cursor Position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = Kein display shift&lt;br /&gt;
|1 = Display shift&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display aus&lt;br /&gt;
|1 = Display an&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor aus&lt;br /&gt;
|1 = Cursor an&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blinken aus&lt;br /&gt;
|1 = Cursor blinken an&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Bewege Cursor&lt;br /&gt;
|1 = Schiebe Display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Schiebe nach links&lt;br /&gt;
|1 = Schiebe nach rechts&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit Interface&lt;br /&gt;
|1 = 8-bit Interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 oder 1/11 Duty (1 Zeile)&lt;br /&gt;
|1 = 1/16 Duty (2 Zeilen)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 Punkte&lt;br /&gt;
|1 = 5x10 Punkte&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = akzeptiert Befehle &lt;br /&gt;
|1 = Interne Operation wird ausgeführt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Die Anbindung erfolgt dabei häufig im Bus Mode auch memory-mapped Mode genannt. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren (mit externem Bus-Interface), z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7824</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7824"/>
				<updated>2006-06-07T21:03:35Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LCD Controller HD44780 kompatible===&lt;br /&gt;
&lt;br /&gt;
Der LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|- &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei fosc=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Lösche Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Sets cursor move direction (I/D), specifies to shift the display (S). These operations are performed during data read/write.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display an/aus Steuerung&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) blinken des Zeichens an der Cursor Position (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display verschieben&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungs Richtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Funktion setzen&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Setzen der CGRAM Addresse&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|CGRAM Adresse&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Seten DDRAM Adresse&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DDRAM Adresse&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|CGRAM / DDRAM address&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Reads Busy-flag (BF) indicating internal operation is being performed and reads CGRAM or DDRAM address counter contents (depending on previous instruction).&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|write data&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|Writes data to CGRAM or DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|read data&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|Reads data from CGRAM or DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
- DDRAM = Display Data RAM.&lt;br /&gt;
- CGRAM = Character Generator RAM.&lt;br /&gt;
- DDRAM address corresponds to cursor position.&lt;br /&gt;
- * = Don't care.&lt;br /&gt;
- ** = Based on Fosc = 250kHz.&lt;br /&gt;
&lt;br /&gt;
{||{{Blauetabelle}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Decrement cursor position&lt;br /&gt;
|1 = Increment cursor position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = No display shift&lt;br /&gt;
|1 = Display shift&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display off&lt;br /&gt;
|1 = Display on&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor off&lt;br /&gt;
|1 = Cursor on&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blink off&lt;br /&gt;
|1 = Cursor blink on&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Move cursor&lt;br /&gt;
|1 = Shift display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Shift left&lt;br /&gt;
|1 = Shift right&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit interface&lt;br /&gt;
|1 = 8-bit interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 or 1/11 Duty (1 line)&lt;br /&gt;
|1 = 1/16 Duty (2 lines)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 dots&lt;br /&gt;
|1 = 5x10 dots&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Can accept instruction&lt;br /&gt;
|1 = Internal operation in progress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Die Anbindung erfolgt dabei häufig im Bus Mode auch memory-mapped Mode genannt. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren (mit externem Bus-Interface), z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7823</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7823"/>
				<updated>2006-06-07T21:02:36Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LCD Controller HD44780 kompatible===&lt;br /&gt;
&lt;br /&gt;
Der LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|- &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei fosc=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
|Lösche Display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Löscht das Display und setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor Home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|setzt den Cursor auf das Anfang der 1. Zeile (Addresse 0)&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Sets cursor move direction (I/D), specifies to shift the display (S). These operations are performed during data read/write.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display an/aus Steuerung&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Schaltet an/aus: das gesamte Display (D), Den Cursor (C) blinken des Zeichens an der Cursor Position (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/Display verschieben&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Setzt Cursor Bewegung oder Display Bewegung (S/C), Bewegungs Richtung (R/L)&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Funktion setzen&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Einstellen der Schnittstellen Datenlänge (DL), Anzahl Display Zeilen (N) und Zeichen Font (F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Setzen der CGRAM Addresse&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|CGRAM Adresse&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Setzen der CGRAM Adresse. CGRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Seten DDRAM Adresse&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DDRAM Adresse&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Setzen der DDRAM Adresse. DDRAM Daten werden gesendet und empfangen nach dem setzen.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|CGRAM / DDRAM address&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Reads Busy-flag (BF) indicating internal operation is being performed and reads CGRAM or DDRAM address counter contents (depending on previous instruction).&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|write data&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|Writes data to CGRAM or DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|read data&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|Reads data from CGRAM or DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
- DDRAM = Display Data RAM.&lt;br /&gt;
- CGRAM = Character Generator RAM.&lt;br /&gt;
- DDRAM address corresponds to cursor position.&lt;br /&gt;
- * = Don't care.&lt;br /&gt;
- ** = Based on Fosc = 250kHz.&lt;br /&gt;
&lt;br /&gt;
{||{{Blauetabelle}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Decrement cursor position&lt;br /&gt;
|1 = Increment cursor position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = No display shift&lt;br /&gt;
|1 = Display shift&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display off&lt;br /&gt;
|1 = Display on&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor off&lt;br /&gt;
|1 = Cursor on&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blink off&lt;br /&gt;
|1 = Cursor blink on&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Move cursor&lt;br /&gt;
|1 = Shift display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Shift left&lt;br /&gt;
|1 = Shift right&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit interface&lt;br /&gt;
|1 = 8-bit interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 or 1/11 Duty (1 line)&lt;br /&gt;
|1 = 1/16 Duty (2 lines)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 dots&lt;br /&gt;
|1 = 5x10 dots&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Can accept instruction&lt;br /&gt;
|1 = Internal operation in progress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Die Anbindung erfolgt dabei häufig im Bus Mode auch memory-mapped Mode genannt. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren (mit externem Bus-Interface), z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Die lcdlibrary von Peter Fleury unterstützt den 8-Bit Bus Mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Die lcdlibrary von Peter Fleury unterstützt auch den 4-Bit I/O Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7822</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7822"/>
				<updated>2006-06-07T20:50:11Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Befehlsübersicht */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LCD Controller HD44780 kompatible===&lt;br /&gt;
&lt;br /&gt;
Der LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
Zudem enthält der Controller zwei Register.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|- &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei fosc=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
| Clear display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Clears display and returns cursor to the home position (address 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
| Cursor home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|Returns cursor to home position (address 0). Also returns display being shifted to the original position. DDRAM contents remains unchanged.&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Sets cursor move direction (I/D), specifies to shift the display (S). These operations are performed during data read/write.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display On/Off control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Sets On/Off of all display (D), cursor On/Off (C) and blink of cursor position character (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Sets cursor-move or display-shift (S/C), shift direction (R/L). DDRAM contents remains unchanged.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Sets interface data length (DL), number of display line (N) and character font(F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|CGRAM address&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Sets the CGRAM address. CGRAM data is sent and received after this setting.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DDRAM address&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Sets the DDRAM address. DDRAM data is sent and received after this setting.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|CGRAM / DDRAM address&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Reads Busy-flag (BF) indicating internal operation is being performed and reads CGRAM or DDRAM address counter contents (depending on previous instruction).&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|write data&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|Writes data to CGRAM or DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|read data&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|Reads data from CGRAM or DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
- DDRAM = Display Data RAM.&lt;br /&gt;
- CGRAM = Character Generator RAM.&lt;br /&gt;
- DDRAM address corresponds to cursor position.&lt;br /&gt;
- * = Don't care.&lt;br /&gt;
- ** = Based on Fosc = 250kHz.&lt;br /&gt;
&lt;br /&gt;
{||{{Blauetabelle}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Decrement cursor position&lt;br /&gt;
|1 = Increment cursor position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = No display shift&lt;br /&gt;
|1 = Display shift&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display off&lt;br /&gt;
|1 = Display on&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor off&lt;br /&gt;
|1 = Cursor on&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blink off&lt;br /&gt;
|1 = Cursor blink on&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Move cursor&lt;br /&gt;
|1 = Shift display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Shift left&lt;br /&gt;
|1 = Shift right&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit interface&lt;br /&gt;
|1 = 8-bit interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 or 1/11 Duty (1 line)&lt;br /&gt;
|1 = 1/16 Duty (2 lines)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 dots&lt;br /&gt;
|1 = 5x10 dots&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Can accept instruction&lt;br /&gt;
|1 = Internal operation in progress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Die Anbindung erfolgt dabei häufig im Bus Mode auch memory-mapped Mode genannt. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren (mit externem Bus-Interface), z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Die lcdlibrary von Peter Fleury unterstützt den 8-Bit Bus Mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Die lcdlibrary von Peter Fleury unterstützt auch den 4-Bit I/O Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7821</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7821"/>
				<updated>2006-06-07T20:47:56Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein kompatibler Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 8 &amp;amp;times; 1, 8 &amp;amp;times; 2, 16 &amp;amp;times; 1, 16 &amp;amp;times; 2, 20 &amp;amp;times; 2, 20 &amp;amp;times; 4, 40 &amp;amp;times; 2 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann benötigt das Display 2 Controller und verhält sich nach außen zur  Ansteuerung, wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 8&amp;amp;times;1 bis 20&amp;amp;times;4 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LCD Controller HD44780 kompatible===&lt;br /&gt;
&lt;br /&gt;
Der LCD Controller besitzt 3 Speicher. Den DDRAM (Display Data RAM) Darin werden die anzuzeigenden Daten geschrieben.&lt;br /&gt;
Der CGROM (Character Generator ROM) enthält die Zeichen in Form von 5x8 oder 5x10 Punktmatrizen. &lt;br /&gt;
Im CGRAM (Character Generator RAM) können acht benutzerdefinierte Zeichen 5x8 Pixel oder vier 5x10 Pixel abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
Zudem enthält der Controller zwei Register.&lt;br /&gt;
&lt;br /&gt;
====Befehlsübersicht==== &lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|- &lt;br /&gt;
|'''Befehl'''&lt;br /&gt;
| '''RS'''&lt;br /&gt;
| '''R/W'''&lt;br /&gt;
| '''DB7'''&lt;br /&gt;
| '''DB6'''&lt;br /&gt;
| '''DB5'''&lt;br /&gt;
| '''DB4'''&lt;br /&gt;
| '''DB3'''&lt;br /&gt;
| '''DB2'''&lt;br /&gt;
| '''DB1'''&lt;br /&gt;
| '''DB0'''&lt;br /&gt;
| '''Beschreibung'''&lt;br /&gt;
| '''Ausführungszeit bei fosc=250kHz'''&lt;br /&gt;
|- &lt;br /&gt;
| Clear display&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Clears display and returns cursor to the home position (address 0).&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
| Cursor home&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|*&lt;br /&gt;
|Returns cursor to home position (address 0). Also returns display being shifted to the original position. DDRAM contents remains unchanged.&lt;br /&gt;
|1.64mS&lt;br /&gt;
|- &lt;br /&gt;
|Entry mode set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|I/D&lt;br /&gt;
|S&lt;br /&gt;
|Sets cursor move direction (I/D), specifies to shift the display (S). These operations are performed during data read/write.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Display On/Off control&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|D&lt;br /&gt;
|C&lt;br /&gt;
|B&lt;br /&gt;
|Sets On/Off of all display (D), cursor On/Off (C) and blink of cursor position character (B).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Cursor/display shift&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|S/C&lt;br /&gt;
|R/L&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Sets cursor-move or display-shift (S/C), shift direction (R/L). DDRAM contents remains unchanged.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Function set&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DL&lt;br /&gt;
|N&lt;br /&gt;
|F&lt;br /&gt;
|*&lt;br /&gt;
|*&lt;br /&gt;
|Sets interface data length (DL), number of display line (N) and character font(F).&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set CGRAM address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|CGRAM address&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Sets the CGRAM address. CGRAM data is sent and received after this setting.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Set DDRAM address&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|DDRAM address&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Sets the DDRAM address. DDRAM data is sent and received after this setting.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read busy-flag and address counter&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|BF&lt;br /&gt;
|CGRAM / DDRAM address&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|A&lt;br /&gt;
|Reads Busy-flag (BF) indicating internal operation is being performed and reads CGRAM or DDRAM address counter contents (depending on previous instruction).&lt;br /&gt;
|0uS&lt;br /&gt;
|- &lt;br /&gt;
|Write to CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|write data&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|Writes data to CGRAM or DDRAM.&lt;br /&gt;
|40uS&lt;br /&gt;
|- &lt;br /&gt;
|Read from CGRAM or DDRAM&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|read data&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|D&lt;br /&gt;
|Reads data from CGRAM or DDRAM.&lt;br /&gt;
|40uS&amp;lt;/tbody&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
- DDRAM = Display Data RAM.&lt;br /&gt;
- CGRAM = Character Generator RAM.&lt;br /&gt;
- DDRAM address corresponds to cursor position.&lt;br /&gt;
- * = Don't care.&lt;br /&gt;
- ** = Based on Fosc = 250kHz.&lt;br /&gt;
&lt;br /&gt;
{||{{Blauetabelle}} &lt;br /&gt;
|'''Bit Name'''&lt;br /&gt;
|'''Einstellung / Status'''&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|I/D&lt;br /&gt;
|0 = Decrement cursor position&lt;br /&gt;
|1 = Increment cursor position&lt;br /&gt;
|- &lt;br /&gt;
|S&lt;br /&gt;
|0 = No display shift&lt;br /&gt;
|1 = Display shift&lt;br /&gt;
|- &lt;br /&gt;
|D&lt;br /&gt;
|0 = Display off&lt;br /&gt;
|1 = Display on&lt;br /&gt;
|- &lt;br /&gt;
|C&lt;br /&gt;
|0 = Cursor off&lt;br /&gt;
|1 = Cursor on&lt;br /&gt;
|- &lt;br /&gt;
|B&lt;br /&gt;
|0 = Cursor blink off&lt;br /&gt;
|1 = Cursor blink on&lt;br /&gt;
|- &lt;br /&gt;
|S/C&lt;br /&gt;
|0 = Move cursor&lt;br /&gt;
|1 = Shift display&lt;br /&gt;
|- &lt;br /&gt;
|R/L&lt;br /&gt;
|0 = Shift left&lt;br /&gt;
|1 = Shift right&lt;br /&gt;
|- &lt;br /&gt;
|DL&lt;br /&gt;
|0 = 4-bit interface&lt;br /&gt;
|1 = 8-bit interface&lt;br /&gt;
|- &lt;br /&gt;
|N&lt;br /&gt;
|0 = 1/8 or 1/11 Duty (1 line)&lt;br /&gt;
|1 = 1/16 Duty (2 lines)&lt;br /&gt;
|- &lt;br /&gt;
|F&lt;br /&gt;
|0 = 5x7 dots&lt;br /&gt;
|1 = 5x10 dots&lt;br /&gt;
|- &lt;br /&gt;
|BF&lt;br /&gt;
|0 = Can accept instruction&lt;br /&gt;
|1 = Internal operation in progress&amp;lt;/tbody&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Die Anbindung erfolgt dabei häufig im Bus Mode auch memory-mapped Mode genannt. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren (mit externem Bus-Interface), z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Die lcdlibrary von Peter Fleury unterstützt den 8-Bit Bus Mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Die lcdlibrary von Peter Fleury unterstützt auch den 4-Bit I/O Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7806</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7806"/>
				<updated>2006-06-07T08:00:53Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens der HD44780 von Hitachi oder ein quasi kompatibler Controller wie z.B der KS077 zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 1 &amp;amp;times; 8, 2 &amp;amp;times; 8, 1 &amp;amp;times; 16, 2 &amp;amp;times; 16, 2 &amp;amp;times; 20, 4 &amp;amp;times; 20, 2 &amp;amp;times; 40 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann besteht das Display aus 2 Controllern und verhält sich nach der Ansteuerung wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 1&amp;amp;times;8 bis 4&amp;amp;times;20 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LCD Controller===&lt;br /&gt;
&lt;br /&gt;
TODO...&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Die Anbindung erfolgt dabei häufig im Bus Mode auch memory-mapped Mode genannt. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren (mit externem Bus-Interface), z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
 $lcd = &amp;amp;HC000       'Adresse LCD Daten&lt;br /&gt;
 $lcdrs = &amp;amp;H8000     'Adresse LCD Register select&lt;br /&gt;
&lt;br /&gt;
 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode&lt;br /&gt;
 Config Lcd = 16 * 2 'wir verwenden ein 16 x 2 Zeichen Display&lt;br /&gt;
&lt;br /&gt;
 Cls                 'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;  'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Die lcdlibrary von Peter Fleury unterstützt den 8-Bit Bus Mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 ' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 &lt;br /&gt;
 Cls                   'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1          'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;    'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
Die lcdlibrary von Peter Fleury unterstützt auch den 4-Bit I/O Mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7798</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7798"/>
				<updated>2006-06-06T19:41:23Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Text-Displays */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens HD44780 oder kompatible Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Displaygrößen sind: 1 &amp;amp;times; 8, 2 &amp;amp;times; 8, 1 &amp;amp;times; 16, 2 &amp;amp;times; 16, 2 &amp;amp;times; 20, 4 &amp;amp;times; 20, 2 &amp;amp;times; 40 Zeichen Displays (Spalten &amp;amp;times; Zeilen). Hat das Display mehr als 80 Zeichen, dann besteht das Display aus 2 Controllern und verhält sich nach der Ansteuerung wie 2 Displays (zusätzliche Enable Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 1&amp;amp;times;8 bis 4&amp;amp;times;20 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|---&lt;br /&gt;
|15&lt;br /&gt;
|GND BL&lt;br /&gt;
|Masse Hintergrundbeleuchtung&lt;br /&gt;
|---&lt;br /&gt;
|16&lt;br /&gt;
|VCC BL&lt;br /&gt;
|Spannungsversorgung Hintergrundbeleuchtung, mit Vorwiderstand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Die Anbindung erfolgt dabei häufig im Bus Mode auch memory-mapped Mode genannt. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren (mit externem Bus-Interface), z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
 TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
Die lcdlibrary von Peter Fleury unterstützt den 8-Bit Bus Mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 Config Lcdbus = 4&lt;br /&gt;
 &lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7797</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7797"/>
				<updated>2006-06-06T19:23:34Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens HD44780 oder kompatible Controller zum Einsatz. Dieser Controller unterstützt Displays mit bis zu 80 Zeichen. Gängige Dispalygrößen sind: 1 &amp;amp;times; 8, 2 &amp;amp;times; 8, 1 &amp;amp;times; 16, 2 &amp;amp;times; 16, 2 &amp;amp;times; 20, 2 &amp;amp;times; 40 Zeichen Displays (Spalten x Zeilen). Hat das Display mehr als 80 Zeichen, dann besteht das Display aus 2 Controllern und verhält sich nach der Ansteuerung wie 2 Displays (zusätzliche Enbale Leitung)     &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung für 1&amp;amp;times;8 bis 4&amp;amp;times;20 Zeichen Displays===&lt;br /&gt;
&lt;br /&gt;
Text-Displays verfügen über einen über genormte 14 Anschluß Pins (LCD-Module mit Backlight über 16 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt. Entweder sind die Anschlüsse in einer Reihe (1 &amp;amp;times; 14(16)) oder zweireihig (2 &amp;amp;times; 7(8)) herausgeführt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|---&lt;br /&gt;
|15&lt;br /&gt;
|GND BL&lt;br /&gt;
|Masse Hintergrundbeleuchtung&lt;br /&gt;
|---&lt;br /&gt;
|16&lt;br /&gt;
|VCC BL&lt;br /&gt;
|Spannungsversorgung Hintergrundbeleuchtung, mit Vorwiderstand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung (Busmode)===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Die Anbindung erfolgt dabei häufig im Bus Mode auch memory-mapped Mode genannt. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren (mit externem Bus-Interface), z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 8-Bit Bus Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;8515def.dat&amp;quot;&lt;br /&gt;
 $crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
 TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
Die lcdlibrary von Peter Fleury unterstützt den 8-Bit Bus Mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung (I/O Mode)===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen, dann ist aber keine Busy-Bit Abfrage möglich.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 Config Lcdbus = 4&lt;br /&gt;
 &lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das BASCOM Programm für diese Ansteuerung ist nicht ganz so einfach, da es nicht von der BASCOM Library unterstützt wird. Die Routinen zum Ansprechen des Displays muß man selbst coden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
====BASCOM Programm====&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  TODO....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings ist die serielle Schnittstelle bei Mikrocontrollern oft schon mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7786</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7786"/>
				<updated>2006-06-06T09:13:21Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle und damit, ob das einfallende Licht reflektiert oder absorbiert wird.&lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens HD44780 oder kompatible Controller zum Einsatz.&lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung===&lt;br /&gt;
&lt;br /&gt;
Die meisten Text-Display verfügen über eine identisch belegte Anschlußbelegung und verfügen über 16 Anschluß Pins (LCD-Module ohne Backlight über 14 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|---&lt;br /&gt;
|15&lt;br /&gt;
|GND BL&lt;br /&gt;
|Masse Hintergrundbeleuchtung&lt;br /&gt;
|---&lt;br /&gt;
|16&lt;br /&gt;
|VCC BL&lt;br /&gt;
|Spannungsversorgung Hintergrundbeleuchtung, mit Vorwiderstand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Die Anbindung erfolgt dabei im memory-mapped Mode. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung. Quelle: Peter Fleury]]&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart ist sicher die 4-Bit Ansteuerung. Dabei werden die Display-Daten Nibble-weise in den Display Speicher übertragen. Das ist zwar etwas langsamer als im 8-Bit Mode, das spielt aber kaum eine Rolle. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man dabei einfach auf GND legen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 Config Lcdbus = 4&lt;br /&gt;
 &lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits (PC5) weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Nur 2 Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Ebenfalls nur 2 Pins zur Ansteuerung benötigt die Lösung. Allerdings iss die serielle Schnittstelle bei Mikrocontrollern bereits mit anderen Aufgaben belegt. Deshalb befindet sich meistens noch zusätzlich eine I&amp;amp;sup2;C-Bus Schnittstelle zur Ansteuerung auf dem Modul.&lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit RS232 oder I&amp;amp;sup2;C-Bus Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
* [http://jump.to/fleury Peter Fleury's Homepage] - Interfacing a HD44780 Based LCD to an AVR, LCD library for HD44870 based LCD's&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m a r v i n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7783</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7783"/>
				<updated>2006-06-05T22:04:10Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssigkristall-Anzeige. Flüssigkristalle sind organische Verbindungen, die Eigenschaften von Flüssigkeiten und Festkörpern besitzen. Zwischen zwei Glasplatten mit Polarisationsfiltern schwimmen die Flüssigkristalle. Durh Anlegen einer Wechselspannung ändert sich die Polarisationsebene der Flüssigkristalle. Das &lt;br /&gt;
&lt;br /&gt;
Bei einem LCD-Modul befindet sich neben dem LCD auch ein Controller zur Ansteuerung des LCDs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. Bei Text-LCDs kommen meistens HD44780 oder kompatible Controller zum Einsatz.&lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung===&lt;br /&gt;
&lt;br /&gt;
Die meisten Text-Display verfügen über eine identisch belegte Anschlußbelegung und verfügen über 16 Anschluß Pins (LCD-Module ohne Backlight über 14 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|---&lt;br /&gt;
|15&lt;br /&gt;
|GND BL&lt;br /&gt;
|Masse Hintergrundbeleuchtung&lt;br /&gt;
|---&lt;br /&gt;
|16&lt;br /&gt;
|VCC BL&lt;br /&gt;
|Spannungsversorgung Hintergrundbeleuchtung, mit Vorwiderstand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Bei dieser Ansteuerung werden 10 Prozessor Ports benötigt. Die Anbindung erfolgt dabei im memory-mapped Mode. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart iSt sicher die 4-Bit Ansteuerung. Für diese Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man einfach auf GND legen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 Config Lcdbus = 4&lt;br /&gt;
 &lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Die wenigsten Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Displays mit RS232 Ansteuerung sind teuerer als Displays mit Parallel Ansteuerung. Dafür bieten sie meistens noch &lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit serieller Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2;C LCD and Keyboard library&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m_a_r_v_i_n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7778</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7778"/>
				<updated>2006-06-05T19:23:44Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|350px|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssig-Kristall-Anzeige.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung===&lt;br /&gt;
&lt;br /&gt;
Die meisten Text-Display verfügen über eine identisch belegte Anschlußbelegung und verfügen über 16 Anschluß Pins (LCD-Module ohne Backlight über 14 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|---&lt;br /&gt;
|15&lt;br /&gt;
|GND BL&lt;br /&gt;
|Masse Hintergrundbeleuchtung&lt;br /&gt;
|---&lt;br /&gt;
|16&lt;br /&gt;
|VCC BL&lt;br /&gt;
|Spannungsversorgung Hintergrundbeleuchtung, mit Vorwiderstand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Bei dieser Ansteuerung werden 10 Prozessor Ports benötigt. Die Anbindung erfolgt dabei im memory-mapped Mode. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart sit sicher die 4-Bit Ansteuerung. Man spart gegenüber der 8-Bit Ansteuerung 4 Prozessor-Ports und kommt ohne zusätzliche Bauteile aus (abgesehen vom Poti zur Kontrastregelung). Bei dieser Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man einfach auf GND legen, man will das Display schließlich nur schreiben, niemals lesen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit Mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4   'wir verwenden ein 4 x 20 Zeichen Display&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 Config Lcdbus = 4&lt;br /&gt;
 &lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Die wenigsten Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;   'ersetzt die Standard LCD Library&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40   'I2C Adresse &lt;br /&gt;
 Config Scl = Portd.6       'I2C SCL Pin&lt;br /&gt;
 Config Sda = Portd.7       'I2C SDA Pin&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128               'LCDim 4-Bit Mode betreiben&lt;br /&gt;
&lt;br /&gt;
 Cls                'loesche das LCD Display&lt;br /&gt;
 Locate 1 , 1       'Cursor auf 1 Zeile, 1 Spalte &lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'String auf Display anzeigen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Displays mit RS232 Ansteuerung sind teuerer als Displays mit Parallel Ansteuerung. Dafür bieten sie meistens noch &lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit serieller Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2C LCD and Keyboard library&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m_a_r_v_i_n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7777</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7777"/>
				<updated>2006-06-05T19:18:57Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* 8-Bit Ansteuerung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssig-Kristall-Anzeige.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung===&lt;br /&gt;
&lt;br /&gt;
Die meisten Text-Display verfügen über eine identisch belegte Anschlußbelegung und verfügen über 16 Anschluß Pins (LCD-Module ohne Backlight über 14 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|---&lt;br /&gt;
|15&lt;br /&gt;
|GND BL&lt;br /&gt;
|Masse Hintergrundbeleuchtung&lt;br /&gt;
|---&lt;br /&gt;
|16&lt;br /&gt;
|VCC BL&lt;br /&gt;
|Spannungsversorgung Hintergrundbeleuchtung, mit Vorwiderstand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Bei dieser Ansteuerung werden 10 Prozessor Ports benötigt. Die Anbindung erfolgt dabei im memory-mapped Mode. Diesen Mode unterstützen allerdings nur die wenigsten Atmel AVR Prozessoren, z.B. der AT90S8515 und ATmega128. &lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart sit sicher die 4-Bit Ansteuerung. Man spart gegenüber der 8-Bit Ansteuerung 4 Prozessor-Ports und kommt ohne zusätzliche Bauteile aus (abgesehen vom Poti zur Kontrastregelung). Bei dieser Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man einfach auf GND legen, man will das Display schließlich nur schreiben, niemals lesen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit Mode.&lt;br /&gt;
&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 Config Lcdbus = 4&lt;br /&gt;
 &lt;br /&gt;
 Cls&lt;br /&gt;
 Locate 1 , 1&lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Die wenigsten Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40&lt;br /&gt;
 Config Scl = Portd.6&lt;br /&gt;
 Config Sda = Portd.7&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128&lt;br /&gt;
&lt;br /&gt;
 Cls 'clear the LCD display&lt;br /&gt;
 Locate 1 , 1&lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'display this at the top line&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Displays mit RS232 Ansteuerung sind teuerer als Displays mit Parallel Ansteuerung. Dafür bieten sie meistens noch &lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit serieller Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2C LCD and Keyboard library&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m_a_r_v_i_n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:Lcdmodul_i2c_schem.png&amp;diff=7772</id>
		<title>Datei:Lcdmodul i2c schem.png</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:Lcdmodul_i2c_schem.png&amp;diff=7772"/>
				<updated>2006-06-05T15:09:48Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: LCD-Modul I2C Ansteuerung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LCD-Modul I2C Ansteuerung&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:Lcdmodul_4bit_schem.png&amp;diff=7771</id>
		<title>Datei:Lcdmodul 4bit schem.png</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:Lcdmodul_4bit_schem.png&amp;diff=7771"/>
				<updated>2006-06-05T15:08:55Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: LCD-Modul Ansteuerung 4-Bit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LCD-Modul Ansteuerung 4-Bit&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:Lcdmodul_8bit_schem.png&amp;diff=7770</id>
		<title>Datei:Lcdmodul 8bit schem.png</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:Lcdmodul_8bit_schem.png&amp;diff=7770"/>
				<updated>2006-06-05T15:08:20Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: LCD-Modul Ansteuerung 8-Bit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LCD-Modul Ansteuerung 8-Bit&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:Lcdmodul_2.jpg&amp;diff=7769</id>
		<title>Datei:Lcdmodul 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:Lcdmodul_2.jpg&amp;diff=7769"/>
				<updated>2006-06-05T15:07:35Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: LCD Modul 4x20 Zeichen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LCD Modul 4x20 Zeichen&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7768</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7768"/>
				<updated>2006-06-05T13:18:23Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Ansteuerung über Porterweiterung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssig-Kristall-Anzeige.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung===&lt;br /&gt;
&lt;br /&gt;
Die meisten Text-Display verfügen über eine identisch belegte Anschlußbelegung und verfügen über 16 Anschluß Pins (LCD-Module ohne Backlight über 14 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|---&lt;br /&gt;
|15&lt;br /&gt;
|GND BL&lt;br /&gt;
|Masse Hintergrundbeleuchtung&lt;br /&gt;
|---&lt;br /&gt;
|16&lt;br /&gt;
|VCC BL&lt;br /&gt;
|Spannungsversorgung Hintergrundbeleuchtung, mit Vorwiderstand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Bei dieser Ansteuerung werden 10 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man einfach auf GND legen, man will das Display schließlich nur schreiben, niemals lesen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart sit sicher die 4-Bit Ansteuerung. Man spart gegenüber der 8-Bit Ansteuerung 4 Prozessor-Ports und kommt ohne zusätzliche Bauteile aus (abgesehen vom Poti zur Kontrastregelung). Bei dieser Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man einfach auf GND legen, man will das Display schließlich nur schreiben, niemals lesen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit Mode.&lt;br /&gt;
&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 Config Lcdbus = 4&lt;br /&gt;
 &lt;br /&gt;
 Cls&lt;br /&gt;
 Locate 1 , 1&lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein wie dem 74HC595 lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits weg, sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Die wenigsten Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40&lt;br /&gt;
 Config Scl = Portd.6&lt;br /&gt;
 Config Sda = Portd.7&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128&lt;br /&gt;
&lt;br /&gt;
 Cls 'clear the LCD display&lt;br /&gt;
 Locate 1 , 1&lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'display this at the top line&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Displays mit RS232 Ansteuerung sind teuerer als Displays mit Parallel Ansteuerung. Dafür bieten sie meistens noch &lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit serieller Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2C LCD and Keyboard library&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m_a_r_v_i_n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7767</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7767"/>
				<updated>2006-06-05T13:15:12Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Ansteuerung über I&amp;amp;sup2;C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssig-Kristall-Anzeige.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung===&lt;br /&gt;
&lt;br /&gt;
Die meisten Text-Display verfügen über eine identisch belegte Anschlußbelegung und verfügen über 16 Anschluß Pins (LCD-Module ohne Backlight über 14 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|---&lt;br /&gt;
|15&lt;br /&gt;
|GND BL&lt;br /&gt;
|Masse Hintergrundbeleuchtung&lt;br /&gt;
|---&lt;br /&gt;
|16&lt;br /&gt;
|VCC BL&lt;br /&gt;
|Spannungsversorgung Hintergrundbeleuchtung, mit Vorwiderstand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Bei dieser Ansteuerung werden 10 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man einfach auf GND legen, man will das Display schließlich nur schreiben, niemals lesen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart sit sicher die 4-Bit Ansteuerung. Man spart gegenüber der 8-Bit Ansteuerung 4 Prozessor-Ports und kommt ohne zusätzliche Bauteile aus (abgesehen vom Poti zur Kontrastregelung). Bei dieser Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man einfach auf GND legen, man will das Display schließlich nur schreiben, niemals lesen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit Mode.&lt;br /&gt;
&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 Config Lcdbus = 4&lt;br /&gt;
 &lt;br /&gt;
 Cls&lt;br /&gt;
 Locate 1 , 1&lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits weg sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Die wenigsten Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird als I&amp;amp;sup2;C Porterweiterungs IC der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Diese Ansteuerung basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40&lt;br /&gt;
 Config Scl = Portd.6&lt;br /&gt;
 Config Sda = Portd.7&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128&lt;br /&gt;
&lt;br /&gt;
 Cls 'clear the LCD display&lt;br /&gt;
 Locate 1 , 1&lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'display this at the top line&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Displays mit RS232 Ansteuerung sind teuerer als Displays mit Parallel Ansteuerung. Dafür bieten sie meistens noch &lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit serieller Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2C LCD and Keyboard library&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m_a_r_v_i_n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7766</id>
		<title>LCD-Modul am AVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=7766"/>
				<updated>2006-06-05T13:14:01Z</updated>
		
		<summary type="html">&lt;p&gt;M a r v i n: /* Ansteuerung über I&amp;amp;sup2C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle|m_a_r_v_i_n}}&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_2.jpg|right|thumb|LCD-Modul]]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
LCD ist eine Abkürzung und bedeutet '''''L'''iquid '''C'''rystal '''D'''isplay''. Übersetzt bedeutet dies Flüssig-Kristall-Anzeige.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text-Displays==&lt;br /&gt;
&lt;br /&gt;
Text-Displays kommen wegen der problemlosen Anbindung in Mikrocontroller Projekten wie Robotern am häufigsten zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
===Anschlußbelegung===&lt;br /&gt;
&lt;br /&gt;
Die meisten Text-Display verfügen über eine identisch belegte Anschlußbelegung und verfügen über 16 Anschluß Pins (LCD-Module ohne Backlight über 14 Pins). Lediglich bei der Backlight Versorgungsspannung und Polung kann es Unterschiede geben. Im Zweifelsfall hilft hier der Blick ins Datenblatt.&lt;br /&gt;
&lt;br /&gt;
{|{{Blauetabelle}}&lt;br /&gt;
|'''Pin'''&lt;br /&gt;
|'''Bezeichnung'''&lt;br /&gt;
|'''Beschreibung''' &lt;br /&gt;
|---&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|Masse&lt;br /&gt;
|---&lt;br /&gt;
|2 &lt;br /&gt;
|VCC&lt;br /&gt;
|Spannungsversorgung +5V&lt;br /&gt;
|---&lt;br /&gt;
|3&lt;br /&gt;
|VEE&lt;br /&gt;
|Kontrast Poti 0..0,5V&lt;br /&gt;
|--- &lt;br /&gt;
|4&lt;br /&gt;
|RS&lt;br /&gt;
|Register Select, 1=Daten schreiben / 0=Kommando senden.&lt;br /&gt;
|---  &lt;br /&gt;
|5&lt;br /&gt;
|R/W&lt;br /&gt;
|1=Read / 0=Write zum lesen / schreiben in das Display RAM &lt;br /&gt;
|---&lt;br /&gt;
|6&lt;br /&gt;
|Enable&lt;br /&gt;
|Fallende Flanke -&amp;gt; Übertragen des Kommandos oder der Daten, H-Pegel -&amp;gt; Lesen von Daten aus dem Display&lt;br /&gt;
|---&lt;br /&gt;
|7 &lt;br /&gt;
|DB0 &lt;br /&gt;
|Datenbus Bit0 LSB&lt;br /&gt;
|---&lt;br /&gt;
|8&lt;br /&gt;
|DB1&lt;br /&gt;
|Datenbus Bit1&lt;br /&gt;
|---&lt;br /&gt;
|9&lt;br /&gt;
|DB2&lt;br /&gt;
|Datenbus Bit2&lt;br /&gt;
|---&lt;br /&gt;
|10&lt;br /&gt;
|DB3&lt;br /&gt;
|Datenbus Bit3&lt;br /&gt;
|---&lt;br /&gt;
|11&lt;br /&gt;
|DB4&lt;br /&gt;
|Datenbus Bit4&lt;br /&gt;
|---&lt;br /&gt;
|12&lt;br /&gt;
|DB5&lt;br /&gt;
|Datenbus Bit5&lt;br /&gt;
|---&lt;br /&gt;
|13&lt;br /&gt;
|DB6&lt;br /&gt;
|Datenbus Bit6&lt;br /&gt;
|---&lt;br /&gt;
|14&lt;br /&gt;
|DB7&lt;br /&gt;
|Datenbus Bit7 MSB&lt;br /&gt;
|---&lt;br /&gt;
|15&lt;br /&gt;
|GND BL&lt;br /&gt;
|Masse Hintergrundbeleuchtung&lt;br /&gt;
|---&lt;br /&gt;
|16&lt;br /&gt;
|VCC BL&lt;br /&gt;
|Spannungsversorgung Hintergrundbeleuchtung, mit Vorwiderstand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===8-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Für die 8-Bit Ansteuerung werden die meisten Prozessor-Ports benötigt. Da Prozessor-Ports normalerweise rar sind ist diese Anbindung sicher nicht die erste Wahl. Bei dieser Ansteuerung werden 10 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man einfach auf GND legen, man will das Display schließlich nur schreiben, niemals lesen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_8bit_schem.png|center|thumb|600px|8-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
===4-Bit Ansteuerung===&lt;br /&gt;
&lt;br /&gt;
Mit die häufigste Anbindungsart sit sicher die 4-Bit Ansteuerung. Man spart gegenüber der 8-Bit Ansteuerung 4 Prozessor-Ports und kommt ohne zusätzliche Bauteile aus (abgesehen vom Poti zur Kontrastregelung). Bei dieser Ansteuerung werden 6 Prozessor Ports benötigt. Die R/W Leitung des Displays kann man einfach auf GND legen, man will das Display schließlich nur schreiben, niemals lesen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_4bit_schem.png|center|thumb|600px|4-Bit Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit Mode.&lt;br /&gt;
&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
&lt;br /&gt;
 Config Lcd = 20 * 4&lt;br /&gt;
 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4&lt;br /&gt;
 Config Lcdbus = 4&lt;br /&gt;
 &lt;br /&gt;
 Cls&lt;br /&gt;
 Locate 1 , 1&lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über Porterweiterung===&lt;br /&gt;
&lt;br /&gt;
Mit einem Porterweiterungs Baustein lassen sich weitere Prozessor-Ports einsparen. Diese Lösung kommt mit 4 Prozessor Ports aus, läßt man die Abfrage des Busy-Bits weg sogar nur mit 3 Prozessor Ports. Trotzdem wird das Display im 8-Bit Mode betrieben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_portexp_schem.png|center|thumb|600px|Ansteuerung über Porterweiterung]]&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über I&amp;amp;sup2;C===&lt;br /&gt;
&lt;br /&gt;
Die wenigsten Prozessor Ports benötigt man bei der I&amp;amp;sup2;C-Ansteuerung. Dazu wird ein I&amp;amp;sup2;C Porterweiterungs IC wie der PCF8574P benötigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:lcdmodul_i2c_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
Diese Anwendung hier basiert auf der Application Note AN#118 von MCS electronics. Dazu gibt es auch eine fertige Library zu BASCOM-AVR. damit können die gleichen Befehle zur Ansteuerung verwendet werden. Das BASCOM Programm, um das LCD-Modul über I&amp;amp;sup2;C anzusprechen, sieht dann so aus.&lt;br /&gt;
&lt;br /&gt;
 $lib &amp;quot;Lcd_i2c.lib&amp;quot;&lt;br /&gt;
 Const Pcf8574_lcd = &amp;amp;H40&lt;br /&gt;
 Config Scl = Portd.6&lt;br /&gt;
 Config Sda = Portd.7&lt;br /&gt;
 Dim _lcd_e As Byte&lt;br /&gt;
 _lcd_e = 128&lt;br /&gt;
&lt;br /&gt;
 Cls 'clear the LCD display&lt;br /&gt;
 Locate 1 , 1&lt;br /&gt;
 Lcd &amp;quot;Hello world.&amp;quot; 'display this at the top line&lt;br /&gt;
&lt;br /&gt;
===Ansteuerung über RS232===&lt;br /&gt;
&lt;br /&gt;
Displays mit RS232 Ansteuerung sind teuerer als Displays mit Parallel Ansteuerung. Dafür bieten sie meistens noch &lt;br /&gt;
&lt;br /&gt;
==Graphik-Displays==&lt;br /&gt;
&lt;br /&gt;
In Mikrocontroller Anwendungen seltener anzutreffen sind Grafik-Displays. Da der Aufwand hier um einiges höher ist (jeder Pixel ist einzeln anzusteuern), kommen in der Praxis nur Grafik-Displays mit serieller Ansteuerung zum Einsatz. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom_und_LCD%27s|BASCOM und LCD's]]&lt;br /&gt;
* [[Portexpander_am_AVR|Portexpander am AVR]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[I2C|I&amp;amp;sup2;C-Bus]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mcselec.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=82&amp;amp;Itemid=57 MCS electronics AN #118] - I&amp;amp;sup2C LCD and Keyboard library&lt;br /&gt;
&lt;br /&gt;
==Autore(en)==&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:m_a_r_v_i_n|m_a_r_v_i_n]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;/div&gt;</summary>
		<author><name>M a r v i n</name></author>	</entry>

	</feed>