<?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=Rgf</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=Rgf"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/Rgf"/>
		<updated>2026-04-12T08:26:59Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21489</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21489"/>
				<updated>2012-12-03T12:32:23Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
[[Bild:r8s01.jpg|thumb|Luna-IDE]]&lt;br /&gt;
[[Bild:r8s02.jpg|thumb|Disassembler]]&lt;br /&gt;
[[Bild:r8s03.jpg|thumb|LCD-Zeichenditor]]&lt;br /&gt;
[[Bild:r8s04.jpg|thumb|GLCD-Pictureeditor]]&lt;br /&gt;
[[Bild:r8s05.jpg|thumb|GLCD-Fonteditor]]&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte, moderne Basic- oder Pascal-ähnliche Programmiersprache, deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen orientiert. Sie ist mit einer durchdachten und verständlichen Syntax ausgestattet, bietet jedoch im Gegensatz zu einfacheren Basic-Sprachen wie z.Bsp. BASCOM, wesentlich komplexere Möglichkeiten auf technischer Augenhöhe mit Pascal und C/C++. Sie eignet sich damit für die effiziente und zeitsparende Entwicklung von kleinen bis hin zu großen, anspruchsvollen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
Luna besteht aus integrierter Entwicklungsumgebung, einem Präprozessor, Compiler und Assembler. Software kann wahlweise in der IDE oder in einem normalen Texteditor geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die IDE bietet hierbei zusätzlich zu den allgemein wünschenswerten Funktionen wie Syntaxfärbung, automatischer Einrückung, Strukturierung von Bedingungen inklusive Ein- und Ausklappfunktion, eine direkte Unterstützung der in Luna abgebildeten Hardware und Software-Objekte bzw. -Klassen der einzelnen AVR Controller. Zusätzlich sind ein Bibliothekseditor, Verzeichnis der Controller-Defines und weitere nützliche Werkzeuge vorhanden.&lt;br /&gt;
&lt;br /&gt;
Das erzeugte Binary und die Ausführungsgeschwindigkeit sind von der Größe her vergleichbar mit existierenden Hochsprachen wie z.Bsp. C/C++. Es gibt keine Beschränkung bei der Tiefe von Ausdrücken wie z.Bsp. in BASCOM. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (dynamische Strings oder Speicherblöcke), Speicherstrukturen, dynamische Objekte, selbst erstellbare Klassen und Datenstrukturen. &lt;br /&gt;
&lt;br /&gt;
Die AVR-spezifischen Code-Teile sind quelloffen und vollständig in Assembler geschrieben. &lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
Luna bietet eine vollwertige, kostenlose Entwicklungsumgebung mit Compiler, Präprozessor, Assembler und Disassembler. Zusätzlich ist ein Library-Browser/Editor integriert, mit dem man die Standardbbliotheksfunktionen des Compilers einsehen und editieren kann (Assembler). Luna ist zudem für Windows, Linux und Mac-OS verfügbar.&lt;br /&gt;
&lt;br /&gt;
Es sind sehr umfangreiche Befehle und Funktionen zur Stringmanipulation, Speicherverwaltung, Bitmanipulation, Arithmetik (inklusive einer Fließkommaarithmetik) uvm. implementiert.&lt;br /&gt;
&lt;br /&gt;
[http://avr.myluna.de/doku.php?id=de:befehlsuebersicht Der Befehlssatz von Luna]&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zur „normalen“ rein prozeduralen Programmierung, sind bei der objektbasierten/objektorientierten Programmierung sogutwie alle Elemente der Programmiersprache in bestimmte Strukturen zusammengefasst. Diese Struktur beeinflusst auch die Art und Weise der Syntax, also wie man eine gewünschte Funktionalität schriftlich ausdrückt.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte „Klasse“ (die Basisklasse) implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt. Die davon abgebildeten Objekte erben die Eigenschaften bzw. Attribute dieser Basisklasse, sodass beispielsweise bestimmte Methoden und Eigenschaften nur dann zugänglich sind, wenn sie in der übergeordneten Klasse (in diesem Fall der Controller) vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Luna unterstützt [http://de.wikipedia.org/wiki/Klasse_%28Programmierung%29 Klassen], womit Module und in sich geschlossene Codebereiche erstellt werden können.&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Version]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:beispiel-sourcen Beispiel-Sourcen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: helloworld.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 16               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21488</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21488"/>
				<updated>2012-12-03T12:30:40Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
[[Bild:r8s01.jpg|thumb|Luna-IDE]]&lt;br /&gt;
[[Bild:r8s02.jpg|thumb|Disassembler]]&lt;br /&gt;
[[Bild:r8s03.jpg|thumb|LCD-Zeichenditor]]&lt;br /&gt;
[[Bild:r8s04.jpg|thumb|GLCD-Pictureeditor]]&lt;br /&gt;
[[Bild:r8s05.jpg|thumb|GLCD-Fonteditor]]&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte, moderne Basic- oder Pascal-ähnliche Programmiersprache, deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen orientiert. Sie ist mit einer durchdachten und verständlichen Syntax ausgestattet, bietet jedoch im Gegensatz zu einfacheren Basic-Sprachen wie z.Bsp. BASCOM, wesentlich komplexere Möglichkeiten auf technischer Augenhöhe mit Pascal und C/C++. Sie eignet sich damit für die effiziente und zeitsparende Entwicklung von kleinen bis hin zu großen, anspruchsvollen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
Luna besteht aus integrierter Entwicklungsumgebung, einem Präprozessor, Compiler und Assembler. Software kann wahlweise in der IDE oder in einem normalen Texteditor geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die IDE bietet hierbei zusätzlich zu den allgemein wünschenswerten Funktionen wie Syntaxfärbung, automatischer Einrückung, Strukturierung von Bedingungen inklusive Ein- und Ausklappfunktion, eine direkte Unterstützung der in Luna abgebildeten Hardware und Software-Objekte bzw. -Klassen der einzelnen AVR Controller. Zusätzlich sind ein Bibliothekseditor, Verzeichnis der Controller-Defines und weitere nützliche Werkzeuge vorhanden.&lt;br /&gt;
&lt;br /&gt;
Das erzeugte Binary und die Ausführungsgeschwindigkeit sind von der Größe her vergleichbar mit existierenden Hochsprachen wie z.Bsp. C/C++. Es gibt keine Beschränkung bei der Tiefe von Ausdrücken wie z.Bsp. in BASCOM. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (dynamische Strings oder Speicherblöcke), Speicherstrukturen, dynamische Objekte, selbst erstellbare Klassen und Datenstrukturen. &lt;br /&gt;
&lt;br /&gt;
Die AVR-spezifischen Code-Teile sind quelloffen und vollständig in Assembler geschrieben. &lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
Luna bietet eine vollwertige, kostenlose Entwicklungsumgebung mit Compiler, Präprozessor, Assembler und Disassembler. Zusätzlich ist ein Library-Browser/Editor integriert, mit dem man die Standardbbliotheksfunktionen des Compilers einsehen und editieren kann (Assembler). Luna ist zudem für Windows, Linux und Mac-OS verfügbar.&lt;br /&gt;
&lt;br /&gt;
Es sind sehr umfangreiche Befehle und Funktionen zur Stringmanipulation, Speicherverwaltung, Bitmanipulation, Arithmetik (inklusive einer Fließkommaarithmetik) uvm. implementiert.&lt;br /&gt;
&lt;br /&gt;
[http://avr.myluna.de/doku.php?id=de:befehlsuebersicht Der Befehlssatz von Luna]&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zur „normalen“ rein prozeduralen Programmierung, sind bei der objektbasierten/objektorientierten Programmierung sogutwie alle Elemente der Programmiersprache in bestimmte Strukturen zusammengefasst. Diese Struktur beeinflusst auch die Art und Weise der Syntax, also wie man eine gewünschte Funktionalität schriftlich ausdrückt.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte „Klasse“ (die Basisklasse) implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt. Die davon abgebildeten Objekte erben die Eigenschaften bzw. Attribute dieser Basisklasse, sodass beispielsweise bestimmte Methoden und Eigenschaften nur dann zugänglich sind, wenn sie in der übergeordneten Klasse (in diesem Fall der Controller) vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Luna unterstützt damit das [http://de.wikipedia.org/wiki/Klasse_%28Programmierung%29], womit Module und in sich geschlossene Codebereiche erstellt werden können.&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Version]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:beispiel-sourcen Beispiel-Sourcen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: helloworld.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 16               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21487</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21487"/>
				<updated>2012-12-03T12:27:45Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
[[Bild:r8s01.jpg|thumb|Luna-IDE]]&lt;br /&gt;
[[Bild:r8s02.jpg|thumb|Disassembler]]&lt;br /&gt;
[[Bild:r8s03.jpg|thumb|LCD-Zeichenditor]]&lt;br /&gt;
[[Bild:r8s04.jpg|thumb|GLCD-Pictureeditor]]&lt;br /&gt;
[[Bild:r8s05.jpg|thumb|GLCD-Fonteditor]]&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte, moderne Basic- oder Pascal-ähnliche Programmiersprache, deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen orientiert. Sie ist mit einer durchdachten und verständlichen Syntax ausgestattet, bietet jedoch im Gegensatz zu einfacheren Basic-Sprachen wie z.Bsp. BASCOM, wesentlich komplexere Möglichkeiten auf technischer Augenhöhe mit Pascal und C/C++. Sie eignet sich damit für die effiziente und zeitsparende Entwicklung von kleinen bis hin zu großen, anspruchsvollen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
Luna besteht aus integrierter Entwicklungsumgebung, einem Präprozessor, Compiler und Assembler. Software kann wahlweise in der IDE oder in einem normalen Texteditor geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die IDE bietet hierbei zusätzlich zu den allgemein wünschenswerten Funktionen wie Syntaxfärbung, automatischer Einrückung, Strukturierung von Bedingungen inklusive Ein- und Ausklappfunktion, eine direkte Unterstützung der in Luna abgebildeten Hardware und Software-Objekte bzw. -Klassen der einzelnen AVR Controller. Zusätzlich sind ein Bibliothekseditor, Verzeichnis der Controller-Defines und weitere nützliche Werkzeuge vorhanden.&lt;br /&gt;
&lt;br /&gt;
Das erzeugte Binary und die Ausführungsgeschwindigkeit sind von der Größe her vergleichbar mit existierenden Hochsprachen wie z.Bsp. C/C++. Es gibt keine Beschränkung bei der Tiefe von Ausdrücken wie z.Bsp. in BASCOM. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (dynamische Strings oder Speicherblöcke), Speicherstrukturen, dynamische Objekte, selbst erstellbare Klassen und Datenstrukturen. &lt;br /&gt;
&lt;br /&gt;
Die AVR-spezifischen Code-Teile sind quelloffen und vollständig in Assembler geschrieben. &lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
Luna bietet eine vollwertige, kostenlose Entwicklungsumgebung mit Compiler, Präprozessor, Assembler und Disassembler. Zusätzlich ist ein Library-Browser/Editor integriert, mit dem man die Standardbbliotheksfunktionen des Compilers einsehen und editieren kann (Assembler). Luna ist zudem für Windows, Linux und Mac-OS verfügbar.&lt;br /&gt;
&lt;br /&gt;
Es sind sehr umfangreiche Befehle und Funktionen zur Stringmanipulation, Speicherverwaltung, Bitmanipulation, Arithmetik (inklusive einer Fließkommaarithmetik) uvm. implementiert.&lt;br /&gt;
&lt;br /&gt;
[http://avr.myluna.de/doku.php?id=de:befehlsuebersicht Der Befehlssatz von Luna]&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zur „normalen“ rein prozeduralen Programmierung, sind bei der objektbasierten/objektorientierten Programmierung sogutwie alle Elemente der Programmiersprache in bestimmte Strukturen zusammengefasst. Diese Struktur beeinflusst auch die Art und Weise der Syntax, also wie man eine gewünschte Funktionalität schriftlich ausdrückt.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte „Klasse“ (die Basisklasse) implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt. Die davon abgebildeten Objekte erben die Eigenschaften bzw. Attribute dieser Basisklasse, sodass beispielsweise bestimmte Methoden und Eigenschaften nur dann zugänglich sind, wenn sie in der übergeordneten Klasse (in diesem Fall der Controller) vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Luna unterstützt damit das [[Klassenmodell]], womit Module und in sich geschlossene Codebereiche erstellt werden können.&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Version]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:beispiel-sourcen Beispiel-Sourcen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: helloworld.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 16               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21486</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21486"/>
				<updated>2012-12-03T12:25:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
[[Bild:r8s01.jpg|thumb|Luna-IDE]]&lt;br /&gt;
[[Bild:r8s02.jpg|thumb|Disassembler]]&lt;br /&gt;
[[Bild:r8s03.jpg|thumb|LCD-Zeichenditor]]&lt;br /&gt;
[[Bild:r8s04.jpg|thumb|GLCD-Pictureeditor]]&lt;br /&gt;
[[Bild:r8s05.jpg|thumb|GLCD-Fonteditor]]&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte, moderne Basic- oder Pascal-ähnliche Programmiersprache, deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen orientiert. Sie ist mit einer durchdachten und verständlichen Syntax ausgestattet, bietet jedoch im Gegensatz zu einfacheren Basic-Sprachen wie z.Bsp. BASCOM, wesentlich komplexere Möglichkeiten auf technischer Augenhöhe mit Pascal und C/C++. Sie eignet sich damit für die effiziente und zeitsparende Entwicklung von kleinen bis hin zu großen, anspruchsvollen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
Luna besteht aus integrierter Entwicklungsumgebung, einem Präprozessor, Compiler und Assembler. Software kann wahlweise in der IDE oder in einem normalen Texteditor geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die IDE bietet hierbei zusätzlich zu den allgemein wünschenswerten Funktionen wie Syntaxfärbung, automatischer Einrückung, Strukturierung von Bedingungen inklusive Ein- und Ausklappfunktion, eine direkte Unterstützung der in Luna abgebildeten Hardware und Software-Objekte bzw. -Klassen der einzelnen AVR Controller. Zusätzlich sind ein Bibliothekseditor, Verzeichnis der Controller-Defines und weitere nützliche Werkzeuge vorhanden.&lt;br /&gt;
&lt;br /&gt;
Das erzeugte Binary und die Ausführungsgeschwindigkeit sind von der Größe her vergleichbar mit existierenden Hochsprachen wie z.Bsp. C/C++. Es gibt keine Beschränkung bei der Tiefe von Ausdrücken wie z.Bsp. in BASCOM. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (dynamische Strings oder Speicherblöcke), Speicherstrukturen, dynamische Objekte, selbst erstellbare Klassen und Datenstrukturen. &lt;br /&gt;
&lt;br /&gt;
Die AVR-spezifischen Code-Teile sind quelloffen und vollständig in Assembler geschrieben. &lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
Luna bietet eine vollwertige, kostenlose Entwicklungsumgebung mit Compiler, Präprozessor, Assembler und Disassembler. Zusätzlich ist ein Library-Browser/Editor integriert, mit dem man die Standardbbliotheksfunktionen des Compilers einsehen und editieren kann (Assembler). Luna ist zudem für Windows, Linux und Mac-OS verfügbar.&lt;br /&gt;
&lt;br /&gt;
Es sind sehr umfangreiche Befehle und Funktionen zur Stringmanipulation, Speicherverwaltung, Bitmanipulation, Arithmetik (inklusive einer Fließkommaarithmetik) uvm. implementiert.&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zur „normalen“ rein prozeduralen Programmierung, sind bei der objektbasierten/objektorientierten Programmierung sogutwie alle Elemente der Programmiersprache in bestimmte Strukturen zusammengefasst. Diese Struktur beeinflusst auch die Art und Weise der Syntax, also wie man eine gewünschte Funktionalität schriftlich ausdrückt.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte „Klasse“ (die Basisklasse) implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt. Die davon abgebildeten Objekte erben die Eigenschaften bzw. Attribute dieser Basisklasse, sodass beispielsweise bestimmte Methoden und Eigenschaften nur dann zugänglich sind, wenn sie in der übergeordneten Klasse (in diesem Fall der Controller) vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Luna unterstützt damit das [[Klassenmodell]], womit Module und in sich geschlossene Codebereiche erstellt werden können.&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Version]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:beispiel-sourcen Beispiel-Sourcen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: helloworld.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 16               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21485</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21485"/>
				<updated>2012-12-03T12:24:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
[[Bild:r8s01.jpg|thumb|Luna-IDE]]&lt;br /&gt;
[[Bild:r8s02.jpg|thumb|Disassembler]]&lt;br /&gt;
[[Bild:r8s03.jpg|thumb|LCD-Zeichenditor]]&lt;br /&gt;
[[Bild:r8s04.jpg|thumb|GLCD-Pictureeditor]]&lt;br /&gt;
[[Bild:r8s05.jpg|thumb|GLCD-Fonteditor]]&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte, moderne Basic- oder Pascal-ähnliche Programmiersprache, deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen orientiert. Sie ist mit einer durchdachten und verständlichen Syntax ausgestattet, bietet jedoch im Gegensatz zu einfacheren Basic-Sprachen wie z.Bsp. BASCOM, **wesentlich** komplexere Möglichkeiten auf technischer Augenhöhe mit Pascal und C/C++. Sie eignet sich damit für die effiziente und zeitsparende Entwicklung von kleinen bis hin zu großen, anspruchsvollen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
Luna besteht aus integrierter Entwicklungsumgebung, einem Präprozessor, Compiler und Assembler. Software kann wahlweise in der IDE oder in einem normalen Texteditor geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die IDE bietet hierbei zusätzlich zu den allgemein wünschenswerten Funktionen wie Syntaxfärbung, automatischer Einrückung, Strukturierung von Bedingungen inklusive Ein- und Ausklappfunktion, eine direkte Unterstützung der in Luna abgebildeten Hardware und Software-Objekte bzw. -Klassen der einzelnen AVR Controller. Zusätzlich sind ein Bibliothekseditor, Verzeichnis der Controller-Defines und weitere nützliche Werkzeuge vorhanden.&lt;br /&gt;
&lt;br /&gt;
Das erzeugte Binary und die Ausführungsgeschwindigkeit sind von der Größe her vergleichbar mit existierenden Hochsprachen wie z.Bsp. C/C++. Es gibt keine Beschränkung bei der Tiefe von Ausdrücken wie z.Bsp. in BASCOM. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (dynamische Strings oder Speicherblöcke), Speicherstrukturen, dynamische Objekte, selbst erstellbare Klassen und Datenstrukturen. &lt;br /&gt;
&lt;br /&gt;
Die AVR-spezifischen Code-Teile sind quelloffen und vollständig in Assembler geschrieben. &lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
Luna bietet eine vollwertige, kostenlose Entwicklungsumgebung mit Compiler, Präprozessor, Assembler und Disassembler. Zusätzlich ist ein Library-Browser/Editor integriert, mit dem man die Standardbbliotheksfunktionen des Compilers einsehen und editieren kann (Assembler). Luna ist zudem für Windows, Linux und Mac-OS verfügbar.&lt;br /&gt;
&lt;br /&gt;
Es sind sehr umfangreiche Befehle und Funktionen zur Stringmanipulation, Speicherverwaltung, Bitmanipulation, Arithmetik (inklusive einer Fließkommaarithmetik) uvm. implementiert.&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zur „normalen“ rein prozeduralen Programmierung, sind bei der objektbasierten/objektorientierten Programmierung sogutwie alle Elemente der Programmiersprache in bestimmte Strukturen zusammengefasst. Diese Struktur beeinflusst auch die Art und Weise der Syntax, also wie man eine gewünschte Funktionalität schriftlich ausdrückt.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte „Klasse“ (die Basisklasse) implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt. Die davon abgebildeten Objekte erben die Eigenschaften bzw. Attribute dieser Basisklasse, sodass beispielsweise bestimmte Methoden und Eigenschaften nur dann zugänglich sind, wenn sie in der übergeordneten Klasse (in diesem Fall der Controller) vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Luna unterstützt damit das [[Klassenmodell]], womit Module und in sich geschlossene Codebereiche erstellt werden können.&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Version]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:beispiel-sourcen Beispiel-Sourcen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: helloworld.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 16               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:R8s05.jpg&amp;diff=21484</id>
		<title>Datei:R8s05.jpg</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:R8s05.jpg&amp;diff=21484"/>
				<updated>2012-12-03T12:14:57Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:R8s04.jpg&amp;diff=21483</id>
		<title>Datei:R8s04.jpg</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:R8s04.jpg&amp;diff=21483"/>
				<updated>2012-12-03T12:14:37Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:R8s03.jpg&amp;diff=21482</id>
		<title>Datei:R8s03.jpg</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:R8s03.jpg&amp;diff=21482"/>
				<updated>2012-12-03T12:14:00Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:R8s02.jpg&amp;diff=21481</id>
		<title>Datei:R8s02.jpg</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:R8s02.jpg&amp;diff=21481"/>
				<updated>2012-12-03T12:13:30Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: LunaAVR Disassembler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LunaAVR Disassembler&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:R8s01.jpg&amp;diff=21480</id>
		<title>Datei:R8s01.jpg</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:R8s01.jpg&amp;diff=21480"/>
				<updated>2012-12-03T12:12:31Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: LunaAVR IDE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LunaAVR IDE&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21479</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=21479"/>
				<updated>2012-12-03T12:11:23Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
[[Bild:r8s01.jpg|thumb|Luna-IDE]]&lt;br /&gt;
[[Bild:r8s02.jpg|thumb|Disassembler]]&lt;br /&gt;
[[Bild:r8s03.jpg|thumb|LCD-Zeichenditor]]&lt;br /&gt;
[[Bild:r8s04.jpg|thumb|GLCD-Pictureeditor]]&lt;br /&gt;
[[Bild:r8s05.jpg|thumb|GLCD-Fonteditor]]&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte, moderne Basic-ähnliche Programmiersprache, deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen wie z.Bsp. RealStudio® orientiert. Sie ist mit einer einfach zu erlernenden Syntax ausgestattet und eignet sich für die effiziente und zeitsparende Entwicklung von kleinen bis großen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
Luna erhebt nicht den Anspruch andere Programmiersprachen zu ersetzen. Vielmehr soll das Angebot an freien Entwicklungswerkzeugen bereichert werden. Luna ist ein privat initiiertes Projekt und kostenlos.&lt;br /&gt;
&lt;br /&gt;
Luna besteht aus integrierter Entwicklungsumgebung, einem Präprozessor, Compiler und Assembler. Software kann wahlweise in der IDE oder in einem normalen Texteditor geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die IDE bietet hierbei zusätzlich zu den allgemein wünschenswerten Funktionen wie Syntaxfärbung, automatischer Einrückung, Strukturierung von Bedingungen inklusive Ein- und Ausklappfunktion eine direkte Unterstützung der in Luna abgebildeten Hardware und Software-Objekte bzw. -Klassen der einzelnen AVR Controller.&lt;br /&gt;
&lt;br /&gt;
Das erzeugte Binary und die Ausführungsgeschwindigkeit sind von der Größe her vergleichbar mit existierenden Hochsprachen wie z.Bsp. C/C++. Es gibt keine Beschränkung bei der Tiefe von Ausdrücken wie z.Bsp. in BASCOM. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (dynamische Strings oder Speicherblöcke), Speicherstrukturen, dynamische Objekte, selbst erstellbare Klassen und Datenstrukturen. &lt;br /&gt;
&lt;br /&gt;
Die AVR-spezifischen Code-Teile sind quelloffen und vollständig in Assembler geschrieben. &lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
Luna bietet eine vollwertige Entwicklungsumgebung mit Compiler, präprozessore, Assembler und Disassembler. Zusätzlich ist ein Library-Browser/Editor integriert, mit dem man die Standardbbliotheksfunktionen des Compilers einsehen und editieren kann (Assembler).&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zur „normalen“ rein prozeduralen Programmierung, sind bei der objektbasierten/objektorientierten Programmierung sogutwie alle Elemente der Programmiersprache in bestimmte Strukturen zusammengefasst. Diese Struktur beeinflusst auch die Art und Weise der Syntax, also wie man eine gewünschte Funktionalität schriftlich ausdrückt.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte „Klasse“ (die Basisklasse) implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt. Die davon abgebildeten Objekte erben die Eigenschaften bzw. Attribute dieser Basisklasse, sodass beispielsweise bestimmte Methoden und Eigenschaften nur dann zugänglich sind, wenn sie in der übergeordneten Klasse (in diesem Fall der Controller) vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Version]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:beispiel-sourcen Beispiel-Sourcen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: helloworld.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 16               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=HEX-Datei&amp;diff=21478</id>
		<title>HEX-Datei</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=HEX-Datei&amp;diff=21478"/>
				<updated>2012-12-03T11:44:57Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die sogenannte '''Hex-Datei''' (auch Intel-Hex-Format) wird von einigen [[Compiler]]n als Ausgabedatei erzeugt (z.B. [[Bascom|Bascom Basic]]). Die HEX-Datei enthält das compilierte Programm in binärer Form und wird verwendet, wenn es in den [[Mikrocontroller]] übertragen werden soll.&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel soll hauptsächlich auf die für die Mikrocontrollerprogrammierung (davon für [[AVR]]) wichtigen Infos eingegangen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Was hat es damit auf sich? ===&lt;br /&gt;
&lt;br /&gt;
* Wird von der Programmiersoftware verwendet zum Übertragen des Codes in den Controller (flashen)&lt;br /&gt;
* Hex steht als Abkürzung für Hexadezimal&lt;br /&gt;
* In der Datei kommen nur die druckbaren (ASCII-)Zeichen 0-9, A-F, : und Leerzeichen vor und könnte deshalb mit jedem Texteditor geöffnet und bearbeitet werden&lt;br /&gt;
* In jeder Zeile ist eine Prüfsumme angefügt zum einfachen Erkennen von Übertragungsfehlern&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Historisches ==&lt;br /&gt;
&lt;br /&gt;
Ein von Intel eingeführtes Dateiformat zum besseren Verarbeiten binärer Daten.&lt;br /&gt;
Ursprünglich war das Format wegen des 16Bit-Adressraumes bis max. 64 KByte Daten ausgelegt. Erst später wurde durch Hinzufügen weiterer ''[[#Datensatz-Typen|Datensatz-Typen]]'' der Adressraum erweitert.&lt;br /&gt;
Unter Anlehnung an die Struktur der Intel-CPUs wurden die zusätzlichen Datensatz-Typen für 20-Bit- und 32-Bit-Adressierung aufgebaut.&lt;br /&gt;
&lt;br /&gt;
Da nur lesbare Zeichen zur Darstellung verwendet werden, können binäre Daten auf Bildschirm und Drucker ausgegeben werden, was bei Einführung dieses Formats (19xx, wenig bis gar keine el. Massenspeicher) noch von Bedeutung war.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Internes ==&lt;br /&gt;
&lt;br /&gt;
Wer eine Hex-Datei schon einmal mit einem Texteditor geöffnet hat, sieht eine Zeile wie diese:&lt;br /&gt;
&lt;br /&gt;
 :1000B000526F626F7465726E65747A2E646520206B&lt;br /&gt;
&lt;br /&gt;
Eine Zeile wird als Record (Datensatz) bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Jedes Byte wird in hexadezimaler Schreibweise dargestellt.&lt;br /&gt;
&lt;br /&gt;
Bedeutung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
!| Start || Anzahl || Adresse || Typ || Daten || Prüfsumme&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
|:||10||00 B0||00||52 6F 62 6F 74 65 72 6E 65 74 7A 2E 64 65 20 20||6B&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start ===&lt;br /&gt;
&lt;br /&gt;
Es steht immer ein &amp;quot;:&amp;quot; (Doppelpunkt) am Zeilenanfang.&lt;br /&gt;
&lt;br /&gt;
=== Anzahl ===&lt;br /&gt;
&lt;br /&gt;
Gibt die Anzahl der effektiven Datenbytes an, kann von 0 - 255 (0x00 - 0xFF) Bytes enthalten&lt;br /&gt;
&lt;br /&gt;
=== Adresse  ===&lt;br /&gt;
&lt;br /&gt;
Adresse im 16-Bit Format an der die folgenden Daten gespeichert werden sollen. Mit 16 Bit können max. 64KByte an Daten Adressiert werden. Wer einen [[ATmega128]] (oder größer) voll ausnutzt, wird auch weitere Datensatztypen als üblich in der Hex-Datei finden.&lt;br /&gt;
&lt;br /&gt;
=== Datensatz-Typen ===&lt;br /&gt;
&lt;br /&gt;
==== 00 - Daten ====&lt;br /&gt;
:Ein Ausschnitt der Beispielzeile von oben:&lt;br /&gt;
&lt;br /&gt;
 :1000B0'''00'''52....6B&lt;br /&gt;
&lt;br /&gt;
:Die Zeile enthält 0x10 (dez 16) Bytes an Nutzdaten, diese sollen ab Adresse 0x00B0 (dez 176) gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
==== 01 - letzte Zeile ====&lt;br /&gt;
:Die letzte Zeile sieht so aus:&lt;br /&gt;
&lt;br /&gt;
 :000000'''01'''FF&lt;br /&gt;
&lt;br /&gt;
:Danach folgt entweder das Dateiende, oder die Übertragung wird abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
==== 02 - erweiterte Segment-Adresse ====&lt;br /&gt;
:Eine &amp;quot;erweiterte Segment-Adress&amp;quot;-Zeile kann so aussehen:&lt;br /&gt;
&lt;br /&gt;
 :020000'''02'''1000EC&lt;br /&gt;
&lt;br /&gt;
:Sie wird benötigt, wenn die Daten den Adressraum von 64KByte überschreiten (ab [[ATmega128]]).&lt;br /&gt;
:Im Datenbereich wird der oberer Teil (Bits 4-19) einer 20-Bit-Adresse im 16-Bit-Format angegeben. Zu dieser muss dann die Offset-Adresse jeder Zeile hinzuaddiert werden, um die eigentliche Adresse zu erhalten.&lt;br /&gt;
&lt;br /&gt;
==== 03 - Start Segment-Adresse ====&lt;br /&gt;
:Eine &amp;quot;Start Segment-Adress&amp;quot;-Zeile kann so aussehen:&lt;br /&gt;
&lt;br /&gt;
 :040000'''03'''20000000D9&lt;br /&gt;
&lt;br /&gt;
:Sie wird benötigt, wenn die Daten an einer Adresse abgelegt werden sollen, die außerhalb eines 64KByte-Adressraums liegt.&lt;br /&gt;
:Im Datenbereich wird die Adresse im 2&amp;amp;times;16-Bit-Format (Segment und Adresse) angegeben. Ergibt eine 20-Bit Adresse. Ist für die Struktur der Intel-CPUs ausgelegt.&lt;br /&gt;
&lt;br /&gt;
==== 04 - erweiterte Linear-Adresse ====&lt;br /&gt;
:Eine &amp;quot;erweiterte Linear-Adress&amp;quot;-Zeile kann so aussehen:&lt;br /&gt;
&lt;br /&gt;
 :020000'''04'''3000CA&lt;br /&gt;
&lt;br /&gt;
:Im Datenbereich wird der obere Teil (Bits 16-31) einer 32-Bit-Adresse im 16-Bit-Format angegeben.&lt;br /&gt;
&lt;br /&gt;
==== 05 - Start Linear-Adresse ====&lt;br /&gt;
:Eine &amp;quot;Start Linear-Adress&amp;quot;-Zeile kann so aussehen:&lt;br /&gt;
&lt;br /&gt;
 :040000'''05'''00100000E7&lt;br /&gt;
&lt;br /&gt;
:Im Datenbereich wird die Adresse im 32-Bit-Format angegeben.&lt;br /&gt;
&lt;br /&gt;
=== Daten/Info ===&lt;br /&gt;
&lt;br /&gt;
Die eigentlichen Daten, bzw. Infos je nach Datensatztyp, max. 255 Byte pro Zeile&lt;br /&gt;
&lt;br /&gt;
=== Prüfsumme ===&lt;br /&gt;
&lt;br /&gt;
In die Prüfsumme fließen alle Bytes der Zeile ein, incl. der Anzahl, Adresse und Typ, aber nicht die Startmarkierung.&lt;br /&gt;
&lt;br /&gt;
==== erzeugen ====&lt;br /&gt;
&lt;br /&gt;
:Zum Erzeugen der Prüfsumme werden alle Bytes der Zeile als Zweier-Komplement summiert, sieht mit den Daten der Beispielzeile in verständlicher Schreibweise so aus:&lt;br /&gt;
&lt;br /&gt;
 '''0x00''' - 0x10 - 0x00 - 0xB0 - 0x00 - 0x52 - 0x6F - 0x62 - 0x6F - 0x74 - 0x65 - 0x72 - 0x6E - &lt;br /&gt;
  0x65 - 0x74 - 0x7A - 0x2E - 0x64 - 0x65 - 0x20 - 0x20 = 0xF9'''6B'''&lt;br /&gt;
:Da nur das Low-Byte als Prüfsumme angegeben wird (Modulo-256-Summe), wird der Wert &amp;lt;tt&amp;gt;0x6B&amp;lt;/tt&amp;gt; angehängt.&lt;br /&gt;
&lt;br /&gt;
==== überprüfen ====&lt;br /&gt;
&lt;br /&gt;
:Zum Überprüfen der Daten muss die Summe aller Bytes, incl. der Prüfsumme, das (Modulo-256)-Ergebnis &amp;lt;tt&amp;gt;0x00&amp;lt;/tt&amp;gt; ergeben.&lt;br /&gt;
&lt;br /&gt;
:Die Beispielzeile wird so berechnet:&lt;br /&gt;
 0x10 + 0x00 + 0xB0 + 0x00 + 0x52 + 0x6F + 0x62 + 0x6F + 0x74 + 0x65 + 0x72 + 0x6E + &lt;br /&gt;
  0x65 + 0x74 + 0x7A + 0x2E + 0x64 + 0x65 + 0x20 + 0x20 + 0x'''6B''' = 0x7'''00'''&lt;br /&gt;
:Da nur das Low-Byte überprüft wird (Modulo-256), dieses hier &amp;lt;tt&amp;gt;0x00&amp;lt;/tt&amp;gt; ist, kann die Zeile als erfolgreich übertragen angesehen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendungen ==&lt;br /&gt;
Software zum Umgang mit Hex-Dateien:&lt;br /&gt;
&lt;br /&gt;
=== avr-objcopy ===&lt;br /&gt;
&lt;br /&gt;
Wer die Tools zur AVR-Programmierung installiert hat (unter Windows [[WinAVR]]), hat Zugriff auf das Consolen-Tool ''avr-objcopy''.&lt;br /&gt;
&lt;br /&gt;
Damit ist es möglich, diverse Dateiformate, u.a. Hex-Dateien, in andere Formate zu übertragen.&lt;br /&gt;
&lt;br /&gt;
Mit der folgenden Anweisung wird die Datei &amp;quot;test.bin&amp;quot;, welche im Format ''binary'' (&amp;lt;tt&amp;gt;-I&amp;lt;/tt&amp;gt;) vorliegt, im Format ''ihex'' (&amp;lt;tt&amp;gt;-O&amp;lt;/tt&amp;gt;) gespeichert, unter dem neuen Dateinamen &amp;quot;test.hex&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 avr-objcopy -O ihex -I binary test.bin test.hex&lt;br /&gt;
&lt;br /&gt;
In die andere Richtung geht das natürlich auch, (Hex-Datei in Binär-Datei übertragen):&lt;br /&gt;
&lt;br /&gt;
 avr-objcopy -I ihex -O binary test.hex test.bin&lt;br /&gt;
&lt;br /&gt;
Beim Compilieren eines C-Quellcodes wird dieses Tool üblicherweise über das [[Makefile]] aufgerufen, so dass die Hex-Datei bei &amp;quot;make all&amp;quot; automatisch erstellt wird.&lt;br /&gt;
&lt;br /&gt;
=== BinHex ===&lt;br /&gt;
&lt;br /&gt;
Unter den Tools von [[LunaAVR]] gibt es das Consolen-Tool ''binhex''.&lt;br /&gt;
&lt;br /&gt;
Damit ist es möglich, Rohdaten in das Hex-Format zu wandeln. Optional können dabei auch bestimmte Speichergrenzen angegeben werden. Das Tool speichert auch Binärdaten korrekt die größer als 64k sind.&lt;br /&gt;
&lt;br /&gt;
Mit der folgenden Anweisung wird die Datei &amp;quot;test.bin&amp;quot;, welche im Format ''binary'' vorliegt, im Format ''ihex'' mit der Dateiendung &amp;quot;.hex&amp;quot; gespeichert (die Zieldatei ist automatisch der Originaldateiname mit Dateiendung &amp;quot;.hex&amp;quot;, wenn keine extra Zieldatei angegeben wurde). Andere Dateinamen oder Dateipfade können mit der Option (&amp;lt;tt&amp;gt;-d&amp;lt;/tt&amp;gt;) angegeben werden.&lt;br /&gt;
&lt;br /&gt;
 binhex -v test.bin&lt;br /&gt;
&lt;br /&gt;
=== Bascom-Programmer ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:BascomOptionsHexFile.jpg|thumb|Compiler/Output]]&lt;br /&gt;
Für das Bascom-interne Programmiertool ist die Hex-Datei nicht zwingend notwendig, da dies mit der Binärdatei auskommt. Falls aber eine andere Anwendung dafür eingesetzt werden muss, gibt es in den Optionen (unter Compiler/Output) ein Auswahlfeld, das beim Compilieren eine Hex-Datei erzeugen lässt (standardmäßig schon ausgewählt). Andersherum, lassen sich mit dem Bascom Programmiertool auch anders erstellte HEX-Dateien zum µC übertragen.&lt;br /&gt;
&lt;br /&gt;
Mit dem Bascom Programmiertool können vom AVR ausgelesene Daten als Binär- oder Hex-Datei gespeichert werden. &amp;lt;small&amp;gt;(Das scheint aber z.Zt. einen kleinen Bug zu haben, denn ab 64KByte stimmt die Adresse nicht mehr :-)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Programmer]]&lt;br /&gt;
* [[HEX Beispiel-Dateien für AVR]]&lt;br /&gt;
* [[Bascom - Erstes Programm in den AVR Controller übertragen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.google.de/search?hl=de&amp;amp;q=intelhex] u.a. :-)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LCD-Modul_am_AVR&amp;diff=21017</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=21017"/>
				<updated>2012-09-15T17:14:27Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &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. Durch 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;
==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 genormte 14 Anschluss 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 den 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 schieben&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;
Die &amp;quot;8-Bit Busmode&amp;quot;-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 Beispiele 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;
Anmerkung: Unbenutzte Pins des Datenports vom LCD sollten auf GND gelegt werden, da sie ansonsten auf keinen definierten Pegel liegen und Störsignale empfangen.&lt;br /&gt;
&lt;br /&gt;
Hier ein [http://picasaweb.google.de/lh/photo/7xU12-9CwCJUXh5XCC7LsQ?authkey=Gv1sRgCI3H2aul1-TmNg&amp;amp;feat=directlink Beispielaufbau] auf einem Steckboard.&lt;br /&gt;
&lt;br /&gt;
====LUNA-AVR Programm====&lt;br /&gt;
&lt;br /&gt;
Das Programm zur Ansteuerung des Displays im 4-Bit-Mode mit dem internen [http://avr.myluna.de/doku.php?id=de:lcd LCD-Interface] von [http://avr.myluna.de LunaAVR]. Die einzelnen Pins müssen nicht am gleichen Port betrieben werden. Das Beispiel zeigt zusätzlich das Setzen und Verwenden von selbst erstellten Zeichen auf dem Display.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'***************************************************************************&lt;br /&gt;
' Title       : lcd example (internal interface)&lt;br /&gt;
' Last updated: 24.08.2012&lt;br /&gt;
' Target      : LCD HD44780 ?x2 (16x2, 20x2, ..)&lt;br /&gt;
' Compiler    : LunaAVR 2012.r7.beta build 3390 or newer&lt;br /&gt;
'***************************************************************************&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
const F_CPU = 16000000&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock  = F_CPU&lt;br /&gt;
avr.stack = 16&lt;br /&gt;
&lt;br /&gt;
dim i as byte&lt;br /&gt;
&lt;br /&gt;
' Die Signale können an *beliebigen* Port-Pins des Controllers&lt;br /&gt;
' angeschlossen werden. Sie müssen *nicht* einer Portgruppe&lt;br /&gt;
' angehören (PortA, PortB, ..).&lt;br /&gt;
lcd.PinDB4	= portb.0&lt;br /&gt;
lcd.PinDB5	= portb.1&lt;br /&gt;
lcd.PinDB6	= portb.2&lt;br /&gt;
lcd.PinDB7	= portb.3&lt;br /&gt;
lcd.PinEN	= portb.4&lt;br /&gt;
lcd.PinRS	= portb.5&lt;br /&gt;
&lt;br /&gt;
'Initialisierung durchführen&lt;br /&gt;
lcd.init&lt;br /&gt;
'Cursor einschalten und blinken lassen&lt;br /&gt;
lcd.cursor.enable&lt;br /&gt;
lcd.cursor.blink.enable&lt;br /&gt;
delay()&lt;br /&gt;
delay()&lt;br /&gt;
delay()&lt;br /&gt;
&lt;br /&gt;
'blinken abschalten (deaktiviert auch den Cursor, Herstellerabhängig)&lt;br /&gt;
lcd.cursor.blink.disable&lt;br /&gt;
lcd.cursor.enable&lt;br /&gt;
&lt;br /&gt;
'Einzelnes Zeichen ausgeben &amp;quot;A&amp;quot;&lt;br /&gt;
lcd.char 65&lt;br /&gt;
delay()&lt;br /&gt;
&lt;br /&gt;
'Cursor sichtbar versetzen&lt;br /&gt;
for i=0 to 3&lt;br /&gt;
  delay()&lt;br /&gt;
  lcd.cursor.right&lt;br /&gt;
next&lt;br /&gt;
'Formatierte Zahlen ausgeben &amp;quot;00&amp;quot; bis &amp;quot;99&amp;quot; (zur Vermeidung von str() bei kleineren Controllern)&lt;br /&gt;
lcd.number 23&lt;br /&gt;
delay()&lt;br /&gt;
lcd.char asc(&amp;quot;:&amp;quot;)&lt;br /&gt;
delay()&lt;br /&gt;
lcd.cursor.set 1,9&lt;br /&gt;
lcd.number 1&lt;br /&gt;
delay()&lt;br /&gt;
&lt;br /&gt;
lcd.DefChar smily,0					' Eigenes Sonderzeichen definieren (0-7 möglich)&lt;br /&gt;
lcd.DefChar heart,1					' Eigenes Sonderzeichen definieren (0-7 möglich)&lt;br /&gt;
&lt;br /&gt;
lcd.cursor.set 2,1					' Cursor positionieren&lt;br /&gt;
lcd.textd &amp;quot;Hallo Lcd &amp;quot;+chr(0)+chr(1)	' Text und eigenes Sonderzeichen ausgeben&lt;br /&gt;
delay()&lt;br /&gt;
delay()&lt;br /&gt;
&lt;br /&gt;
'Gesamten Anzeigebereich verschieben&lt;br /&gt;
for i=0 to 3&lt;br /&gt;
  lcd.screen.left&lt;br /&gt;
  delay()&lt;br /&gt;
next&lt;br /&gt;
delay()&lt;br /&gt;
for i=0 to 3&lt;br /&gt;
  lcd.screen.right&lt;br /&gt;
  delay()&lt;br /&gt;
next&lt;br /&gt;
&lt;br /&gt;
'Ende des Beispiels&lt;br /&gt;
do&lt;br /&gt;
loop&lt;br /&gt;
&lt;br /&gt;
' Erstellt mit Lcd Zeicheneditor in der LunaIDE&lt;br /&gt;
data smily&lt;br /&gt;
  .db &amp;amp;b00000&lt;br /&gt;
  .db &amp;amp;b01010&lt;br /&gt;
  .db &amp;amp;b00000&lt;br /&gt;
  .db &amp;amp;b00100&lt;br /&gt;
  .db &amp;amp;b10001&lt;br /&gt;
  .db &amp;amp;b01110&lt;br /&gt;
  .db &amp;amp;b00000&lt;br /&gt;
  .db &amp;amp;b00000&lt;br /&gt;
enddata&lt;br /&gt;
&lt;br /&gt;
data heart&lt;br /&gt;
  .db &amp;amp;b00000&lt;br /&gt;
  .db &amp;amp;b00000&lt;br /&gt;
  .db &amp;amp;b01010&lt;br /&gt;
  .db &amp;amp;b11111&lt;br /&gt;
  .db &amp;amp;b11111&lt;br /&gt;
  .db &amp;amp;b01110&lt;br /&gt;
  .db &amp;amp;b00100&lt;br /&gt;
  .db &amp;amp;b00000&lt;br /&gt;
enddata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure delay()&lt;br /&gt;
  waitms 250&lt;br /&gt;
endproc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&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 Beispiele 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. Ein Projekt mit Schaltplan und Layout dazu gibts im Artikel [http://www.rn-wissen.de/index.php/LCD_an_I2C_Huckepack_auf_RN-Miniplatine LCD an I2C Huckepack auf RN-Miniplatine].&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               'LCD im 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 I&amp;amp;sup2;C mit PCA9555====&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit der I&amp;amp;sup2;C-Ansteuerung besteht in der Nutzug des PCA9555 (16 Bit I&amp;amp;sup2;C I/O Expander) von Philips. Das Display wird im 8-Bit Mode betrieben. &lt;br /&gt;
&lt;br /&gt;
[[Bild:Lcdmodul_i2c_pca9555_schem.png|center|thumb|600px|I&amp;amp;sup2;C-Ansteuerung mit PCA9555 8-Bit mit Busy]]&lt;br /&gt;
&lt;br /&gt;
====AVR-GCC Programm mit PCA9555====&lt;br /&gt;
&lt;br /&gt;
Programm ist hardwarenah umgesetzt und mit einem ATMEGA8 mit 2x16 Displaytyp getestet. Verwendet wird die twi-library von Peter Fleury. Der Programmentwurf beinhaltet keine Prüfung auf das Zeilenende bzw. Zeilenvorschub. Die Schreibadresse im DD-RAM des Displays wird fortlaufend beschrieben. Die Anzeigeadressen DD-RAM des getesteten Displays liegen bei 00h..0Fh erste Zeile und 40h..4Fh zweite Zeile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;quot;twimaster.c&amp;quot;		//TWI-Routinen von Peter Fleury &amp;lt;pfleury@gmx.ch&amp;gt; http://jump.to/fleury&lt;br /&gt;
#include &amp;quot;pausems.c&amp;quot;		//Einbindung einfache Pausenfunktion für ca. 1 ms&lt;br /&gt;
&lt;br /&gt;
#define PCA9555 0x40      	//device address of Portexpander PCA9555&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//********************************************************************&lt;br /&gt;
// Funktion fragt Buys-Flag des Displays ab ob Bereitschaft&lt;br /&gt;
//		für die Datenübernahme gegeben ist&lt;br /&gt;
//********************************************************************&lt;br /&gt;
&lt;br /&gt;
void WaitForBusy (void)&lt;br /&gt;
{&lt;br /&gt;
	//wenn notwendig, dann umsetzen&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//********************************************************************&lt;br /&gt;
// Funktion führt Erstinitialisierung des Display durch&lt;br /&gt;
//		laut Herstellerempfehlung + Initialisierung Grundfunktion&lt;br /&gt;
//********************************************************************&lt;br /&gt;
&lt;br /&gt;
void InitDisplay (void)&lt;br /&gt;
{&lt;br /&gt;
	i2c_init();				// init I2C interface&lt;br /&gt;
	i2c_start (PCA9555+I2C_WRITE); 		// set device address and write mode&lt;br /&gt;
	i2c_write (0b00000110);			//Command Byte PCA9555&lt;br /&gt;
	i2c_write (0b00000000);			//PCA9555 Reg6 als Ausgang setzen&lt;br /&gt;
	i2c_write (0b00000000);			//PCA9555 Reg7 als Ausgang setzen&lt;br /&gt;
	i2c_stop ();&lt;br /&gt;
&lt;br /&gt;
	i2c_start_wait (PCA9555+I2C_WRITE);	//Schreibzugriff 1 auf Display&lt;br /&gt;
	i2c_write (0b00000011);			//Command Byte PCA9555 Register 3&lt;br /&gt;
&lt;br /&gt;
	i2c_write (0b00000001);			//PCA9555 Reg3 - 001h (E-Bit)&lt;br /&gt;
	i2c_write (0b00110000);			//PCA9555 Reg2 - Systemset 30h&lt;br /&gt;
	i2c_write (0b00000000);			//PCA9555 Reg3 - 000h E-Bit auf Null zur Übernahme&lt;br /&gt;
	pause_ms (10);&lt;br /&gt;
&lt;br /&gt;
	i2c_write (0b00000001);			//PCA9555 Reg3 - 001h&lt;br /&gt;
	i2c_write (0b00110000);			//PCA9555 Reg2 - Systemset 30h&lt;br /&gt;
	i2c_write (0b00000000);			//PCA9555 Reg3 - 000h E-Bit auf Null zur Übernahme&lt;br /&gt;
	pause_ms (3);&lt;br /&gt;
&lt;br /&gt;
	i2c_write (0b00000001);			//PCA9555 Reg3 - 001h&lt;br /&gt;
	i2c_write (0b00110000);			//PCA9555 Reg2 - Systemset 30h&lt;br /&gt;
	i2c_write (0b00000000);			//PCA9555 Reg3 - 000h E-Bit auf Null zur Übernahme&lt;br /&gt;
	pause_ms (3);&lt;br /&gt;
	i2c_stop ();				//ab hier Display bereit zum Schreiben&lt;br /&gt;
&lt;br /&gt;
//	WaitForBusy();				wenn notwendig&lt;br /&gt;
&lt;br /&gt;
	i2c_start (PCA9555+I2C_WRITE);&lt;br /&gt;
	i2c_write(0b00000011);&lt;br /&gt;
	i2c_write(0b00000001);&lt;br /&gt;
	i2c_write(0b00111000);	//PCA9555 Reg2 - Systemset 38h (8 Bit Modus, 2 Zeilen, 5x8 Punkte)&lt;br /&gt;
	i2c_write(0b00000000);	//PCA9555 Reg3 - 000h E-Bit auf Null zur Übernahme&lt;br /&gt;
	i2c_stop ();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//********************************************************************&lt;br /&gt;
// Funktion schaltet Display ein&lt;br /&gt;
//********************************************************************&lt;br /&gt;
&lt;br /&gt;
void DisplayOnOff (uint8_t conf)&lt;br /&gt;
{&lt;br /&gt;
//	WaitForBusy();				wenn notwendig&lt;br /&gt;
	i2c_start (PCA9555+I2C_WRITE); 		//set device address and write mode&lt;br /&gt;
	i2c_write(0b00000011);			//Command Byte PCA9555&lt;br /&gt;
	i2c_write(0b00000001);			//PCA9555 Reg3 - 001h&lt;br /&gt;
	i2c_write(conf);	//PCA9555 Reg2 - B3=Display e/a + B2=Cursor e/a + B1=blink. Cursor e/a&lt;br /&gt;
	i2c_write(0b00000000);	//PCA9555 Reg3 - 000h E-Bit auf Null zur Übernahme&lt;br /&gt;
	i2c_stop ();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//********************************************************************&lt;br /&gt;
// Funktion löscht Displayinhalt&lt;br /&gt;
//********************************************************************&lt;br /&gt;
&lt;br /&gt;
void ClearDisplay (void)&lt;br /&gt;
{&lt;br /&gt;
//	WaitForBusy();				wenn notwendig&lt;br /&gt;
	i2c_start (PCA9555+I2C_WRITE);      	//set device address and write mode&lt;br /&gt;
	i2c_write(0b00000011);			//Command Byte PCA9555&lt;br /&gt;
	i2c_write(0b00000001);			//PCA9555 Reg3 - 001h&lt;br /&gt;
	i2c_write(0b00000001);			//PCA9555 Reg2 - Display löschen&lt;br /&gt;
	i2c_write(0b00000000);			//PCA9555 Reg3 - 000h E-Bit auf Null zur Übernahme&lt;br /&gt;
	i2c_stop ();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//********************************************************************&lt;br /&gt;
// Funktion setzt Display-Modus&lt;br /&gt;
//********************************************************************&lt;br /&gt;
&lt;br /&gt;
void SetEntryMode (void)&lt;br /&gt;
{&lt;br /&gt;
//	WaitForBusy();				wenn notwendig&lt;br /&gt;
	i2c_start (PCA9555+I2C_WRITE);      	//set device address and write mode&lt;br /&gt;
	i2c_write(0b00000011);			//Command Byte PCA9555&lt;br /&gt;
	i2c_write(0b00000001);			//PCA9555 Reg3 - 001h&lt;br /&gt;
	i2c_write(0b00000110);		//PCA9555 Reg2 - DDRAM inkrementieren, Display schieben aus&lt;br /&gt;
	i2c_write(0b00000000);		//PCA9555 Reg3 - 000h E-Bit&lt;br /&gt;
	i2c_stop ();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//********************************************************************&lt;br /&gt;
// Funktion schreibt ein Byte Daten ins Display&lt;br /&gt;
//********************************************************************&lt;br /&gt;
&lt;br /&gt;
void WriteDisplayChar (uint8_t data)&lt;br /&gt;
{&lt;br /&gt;
//	WaitForBusy();				wenn notwendig&lt;br /&gt;
	i2c_start (PCA9555+I2C_WRITE);      	//set device address and write mode&lt;br /&gt;
	i2c_write(0b00000011);			//Command Byte PCA9555&lt;br /&gt;
	i2c_write(0b00000101);&lt;br /&gt;
	i2c_write(data);			//PCA9555 Reg2 - Daten ins Display schreiben&lt;br /&gt;
	i2c_write(0b00000100);			//PCA9555 Reg3 - 000h E-Bit&lt;br /&gt;
	i2c_stop ();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//********************************************************************&lt;br /&gt;
// Funktion setzt Cursorposition&lt;br /&gt;
//********************************************************************&lt;br /&gt;
&lt;br /&gt;
void SetCorsorXY (uint8_t data1, uint8_t data2)&lt;br /&gt;
{&lt;br /&gt;
	if ((data1 &amp;lt; 16) &amp;amp; (data2 &amp;lt; 2))&lt;br /&gt;
	{&lt;br /&gt;
		if (data2 &amp;lt; 1)&lt;br /&gt;
			data2 = 0x00;&lt;br /&gt;
		else&lt;br /&gt;
			data2 = 0x40; &lt;br /&gt;
//		WaitForBusy();				wenn notwendig&lt;br /&gt;
		i2c_start (PCA9555+I2C_WRITE);  	//set device address and write mode&lt;br /&gt;
		i2c_write(0b00000011);			//Command Byte PCA9555&lt;br /&gt;
		i2c_write(0b00000001);			//PCA9555 Reg3 - 001h&lt;br /&gt;
		i2c_write(0b10000000 | data1 | data2);	//PCA9555 Reg2 - Position setzen&lt;br /&gt;
		i2c_write(0b00000000);			//PCA9555 Reg3 - 000h E-Bit&lt;br /&gt;
		i2c_stop ();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//********************************************************************&lt;br /&gt;
// Funktion schreibt Text-Daten (nullterminierter String) ins Display&lt;br /&gt;
//********************************************************************&lt;br /&gt;
&lt;br /&gt;
void WriteDisplayText (const char *data)&lt;br /&gt;
{&lt;br /&gt;
	do&lt;br /&gt;
	{&lt;br /&gt;
		if (*data != 0)&lt;br /&gt;
		WriteDisplayChar (*data);			&lt;br /&gt;
	}&lt;br /&gt;
	while (*data++);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//********************************************************************&lt;br /&gt;
// Funktion initialisiert alle wichtigen Funktionen auf einmal&lt;br /&gt;
//********************************************************************&lt;br /&gt;
&lt;br /&gt;
void InitDisplayAll(void)&lt;br /&gt;
{&lt;br /&gt;
	InitDisplay();&lt;br /&gt;
	DisplayOnOff(0b00001100);&lt;br /&gt;
	ClearDisplay();&lt;br /&gt;
	SetEntryMode();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//********************************************************************&lt;br /&gt;
// Hauptprogramm - 2x Ausgabe &amp;quot;Hallo Welt!&amp;quot;&lt;br /&gt;
//********************************************************************&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
	InitDisplay();&lt;br /&gt;
	DisplayOnOff(0b00001100);	//PCA9555 Reg2 - Display ein + Cursor ein + blink. Cursor aus&lt;br /&gt;
	ClearDisplay();&lt;br /&gt;
	SetEntryMode();&lt;br /&gt;
&lt;br /&gt;
	//oder: InitDisplayAll();&lt;br /&gt;
&lt;br /&gt;
	SetCorsorXY(2,0);&lt;br /&gt;
	WriteDisplayTextData(&amp;quot;Hallo Welt!&amp;quot;);&lt;br /&gt;
	SetCorsorXY(5,1);&lt;br /&gt;
	WriteDisplayTextData(&amp;quot;Hallo Welt!&amp;quot;);&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 werden seit neuestem, einhergehend mit der größeren Verbreitung von Controllern mit mehr Speicherplatz, auch immer öfter Grafik-Displays und Farb-TFTs eingesetzt. Der Aufwand an Software und Hardware ist hier allerdings um einiges höher (jedes Pixel ist einzeln anzusteuern). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==LCD über RN LCD Adapter Std an RN-Control==&lt;br /&gt;
&lt;br /&gt;
Hierbei handelt es sich um eine Beispielansteuerung eines LCD über RN LCD Adapter Std an RN-Control in C.&lt;br /&gt;
&lt;br /&gt;
Komfortabel lässt sich ein LCD in C mit der LCD Library von Peter Fleury ansteuern (LCD Controller HD44780 &amp;amp; KS0073).&lt;br /&gt;
Die Library selbst sowie deren Online Dokumentation und weiterführende informationen sind von [http://jump.to/fleury Peter Fleury's Home Page]zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
Im hier aufgeführten Beispiel wird ein Crystalfontz 20x4 LCD verwendet (CFAH2004A-YYH-JPE).&lt;br /&gt;
&lt;br /&gt;
Pinbelegung nach [http://www.crystalfontz.com/product/CFAH2004AYYHJPE.html Datenblatt]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Pin No.	Symbol 	Level 	Description&lt;br /&gt;
 1 	VSS 	0V 		Ground&lt;br /&gt;
 2 	VDD 	5.0V 		Supply Voltage for logic&lt;br /&gt;
 3	VO 	(Variable) 	Operating voltage for LCD&lt;br /&gt;
 4 	RS 	H/L 		H: DATA, L: Instruction code&lt;br /&gt;
 5 	R/W 	H/L 		H: Read(MPU?Module) L: Write(MPU?Module)&lt;br /&gt;
 6 	E 	H,H?L 		Chip enable signal&lt;br /&gt;
 7 	DB0 	H/L 		Data bit 0&lt;br /&gt;
 8 	DB1 	H/L 		Data bit 1&lt;br /&gt;
 9 	DB2 	H/L 		Data bit 2&lt;br /&gt;
 10 	DB3 	H/L 		Data bit 3&lt;br /&gt;
 11 	DB4 	H/L 		Data bit 4&lt;br /&gt;
 12 	DB5 	H/L 		Data bit 5&lt;br /&gt;
 13 	DB6 	H/L 		Data bit 6&lt;br /&gt;
 14 	DB7 	H/L 		Data bit 7&lt;br /&gt;
 15 	A 	- 		LED +&lt;br /&gt;
 16 	K 	- 		LED -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pinbelegung des LCD Adapters nach [http://www.robotikhardware.de/download/rn_LCD_adapter_std.pdf Datenblatt] &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Pin 1 	LCD DB7&lt;br /&gt;
 Pin 2 	LCD DB6&lt;br /&gt;
 Pin 3 	LCD DB5&lt;br /&gt;
 Pin 4 	LCD DB4&lt;br /&gt;
 Pin 5 	Licht ein/aus per Port (da EN2 hier nicht benötigt wird)&lt;br /&gt;
 Pin 6 	LCD EN&lt;br /&gt;
 Pin 7 	LCD R/W&lt;br /&gt;
 Pin 8 	LCD RS&lt;br /&gt;
 Pin 9 	GND LCD GND und Licht Kathode&lt;br /&gt;
 Pin 10 +5V LCD VCC und Licht Anode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Berücksichtigt man die folgenden Tatsachen:&lt;br /&gt;
* ATMega32 auf dem RN-Control stellt kein &amp;quot;external memory interface&amp;quot; zur Verfügung, daher ist ohne Weiteres keine 8-Bit Ansteuerung des LCD möglich. Es wird 4-Bit I/O verwendet&lt;br /&gt;
* die Zählweise der Pins beginnt in lcd.h bei 0, nicht bei 1&lt;br /&gt;
* der LCD Adapter ist mit PORTC des RN Control verbunden (Vorteil: an den LEDs von PORTC kann erkannt werden, ob überhaupt Daten an das LCD gesendet werden)&lt;br /&gt;
* der Controler im LCD ist ein SPLC780D, welcher mit dem in lcd.h genutzten HD44780 kompatibel ist&lt;br /&gt;
müssen die nachfolgenden Zeilen in lcd.h entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define XTAL 16000000              /**&amp;lt; clock frequency in Hz, used to calculate delay timer */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die DDRAM Adressen der einzelnen Zeilen sind im Datenblatt hinterlegt. Zeile 1 und 3 sowie 2 und 4 bilden intern je eine Zeile.&lt;br /&gt;
Der manuelle Zeilenumbruch am Ende des Codeblocks bleibt Geschmacksache.&lt;br /&gt;
&amp;lt;pre&amp;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      1     /**&amp;lt; 0: no wrap, 1: wrap at end of visibile line */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4-Bit I/O Mode wird verwendet.&lt;br /&gt;
&amp;lt;pre&amp;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;
Wie oben angedeutet werden die Pins von 0 an gezählt. &amp;quot;LCD_DATA3_PIN 0&amp;quot; ist somit Pin 1 des LCD Adapters.&lt;br /&gt;
&amp;lt;pre&amp;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    3            /**&amp;lt; pin for 4bit data bit 0  */&lt;br /&gt;
#define LCD_DATA1_PIN    2            /**&amp;lt; pin for 4bit data bit 1  */&lt;br /&gt;
#define LCD_DATA2_PIN    1            /**&amp;lt; pin for 4bit data bit 2  */&lt;br /&gt;
#define LCD_DATA3_PIN    0            /**&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       7            /**&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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Testprogramm:&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;lcd.c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	lcd_init(LCD_DISP_ON_CURSOR_BLINK);&lt;br /&gt;
	lcd_clrscr();&lt;br /&gt;
	lcd_puts(&amp;quot;test&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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;
* [[LCD an I2C Huckepack auf RN-Miniplatine]]&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>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=19438</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=19438"/>
				<updated>2012-04-16T20:44:44Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte, moderne Basic-ähnliche Programmiersprache, deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen wie z.Bsp. RealStudio® orientiert. Sie ist mit einer einfach zu erlernenden Syntax ausgestattet und eignet sich für die effiziente und zeitsparende Entwicklung von kleinen bis großen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
Luna erhebt nicht den Anspruch andere Programmiersprachen zu ersetzen. Vielmehr soll das Angebot an freien Entwicklungswerkzeugen bereichert werden. Luna ist ein privat initiiertes Projekt und kostenlos.&lt;br /&gt;
&lt;br /&gt;
Luna besteht aus integrierter Entwicklungsumgebung, einem Präprozessor, Compiler und Assembler. Software kann wahlweise in der IDE oder in einem normalen Texteditor geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die IDE bietet hierbei zusätzlich zu den allgemein wünschenswerten Funktionen wie Syntaxfärbung, automatischer Einrückung, Strukturierung von Bedingungen inklusive Ein- und Ausklappfunktion eine direkte Unterstützung der in Luna abgebildeten Hardware und Software-Objekte bzw. -Klassen der einzelnen AVR Controller.&lt;br /&gt;
&lt;br /&gt;
Das erzeugte Binary und die Ausführungsgeschwindigkeit sind von der Größe her vergleichbar mit existierenden Hochsprachen wie z.Bsp. C/C++. Es gibt keine Beschränkung bei der Tiefe von Ausdrücken wie z.Bsp. in BASCOM. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (dynamische Strings oder Speicherblöcke), Speicherstrukturen, dynamische Objekte, selbst erstellbare Klassen und Datenstrukturen. &lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
===Programme===&lt;br /&gt;
* [http://avr.myluna.de]&lt;br /&gt;
&lt;br /&gt;
===Bibliotheken===&lt;br /&gt;
* '''Typkonvertierungen'''&lt;br /&gt;
** Integer&amp;lt;&amp;gt;Single&lt;br /&gt;
** Integer&amp;lt;&amp;gt;String&lt;br /&gt;
** Single&amp;lt;&amp;gt;String&lt;br /&gt;
&lt;br /&gt;
* '''Speicherverwaltung'''&lt;br /&gt;
** dynamische Objekte&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Eeprom'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Flash (Data)'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Konstanten&lt;br /&gt;
&lt;br /&gt;
* '''Math'''&lt;br /&gt;
** Integer 8-32 Bit&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
** '''Floating Point (Single)'''&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
* '''String'''&lt;br /&gt;
** Instr()&lt;br /&gt;
** Left()&lt;br /&gt;
** Right()&lt;br /&gt;
** Mid()&lt;br /&gt;
** Upper()&lt;br /&gt;
** Lower()&lt;br /&gt;
** Spc()&lt;br /&gt;
** StrFill()&lt;br /&gt;
** Chr()&lt;br /&gt;
** Mkb()&lt;br /&gt;
** Mki()&lt;br /&gt;
** Mkw()&lt;br /&gt;
** Mkl()&lt;br /&gt;
** Mks()&lt;br /&gt;
** Bin()&lt;br /&gt;
** Hex()&lt;br /&gt;
** Str()&lt;br /&gt;
&lt;br /&gt;
* '''UART''' &lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Eingabe&lt;br /&gt;
** Ausgabe&lt;br /&gt;
&lt;br /&gt;
* uvm.&lt;br /&gt;
&lt;br /&gt;
* '''Standardfunktionen'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Sie unterstützt mit Einschränkungen:&lt;br /&gt;
&lt;br /&gt;
* Vererbung&lt;br /&gt;
* Datenkapselung&lt;br /&gt;
* Polymorphie&lt;br /&gt;
&lt;br /&gt;
In der Programmierung gibt es verschiedene Begriffe, deren Bedeutung im Allgemeinen geläufig sind. Die objektorientierte Programmierung besitzt zudem weiterführende Begriffe und Bezeichnungen. Oft verwendete Begriffe sind:&lt;br /&gt;
&lt;br /&gt;
* Variable&lt;br /&gt;
* Methode&lt;br /&gt;
* Objekt&lt;br /&gt;
* Klasse&lt;br /&gt;
&lt;br /&gt;
Aufbau und Struktur&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zur „normalen“ rein prozeduralen Programmierung, sind bei der objektbasierten/objektorientierten Programmierung sogutwie alle Elemente der Programmiersprache in bestimmte Strukturen zusammengefasst. Diese Struktur beeinflusst auch die Art und Weise der Syntax, also wie man eine gewünschte Funktionalität schriftlich ausdrückt.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte „Klasse“ (die Basisklasse) implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt. Die davon abgebildeten Objekte erben die Eigenschaften bzw. Attribute dieser Basisklasse, sodass beispielsweise bestimmte Methoden und Eigenschaften nur dann zugänglich sind, wenn sie in der übergeordneten Klasse (in diesem Fall der Controller) vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Hinweis: In Luna sind die gebräuchlichsten Hardware-Controllerfunktionen bzw. -Schnittstellen als Objekte abgebildet. Nicht implementierte Abbildungen als Objekt sind normal über den Direktzugriff auf die Konfigurations- und Datenports des Controllers erreichbar. Die Konfiguration z.Bsp. einer Schnittstelle erfolgt dann anhand der Portnamen und Konfigurationsbits laut Datasheet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Avr&lt;br /&gt;
      |&lt;br /&gt;
      +-- Eigenschaften&lt;br /&gt;
      |        |&lt;br /&gt;
      |        + Controller-Typ&lt;br /&gt;
      |        + Stack-Size&lt;br /&gt;
      |        + Größe Arbeitsspeicher&lt;br /&gt;
      |        + Größe Eeprom&lt;br /&gt;
      |        + Taktrate&lt;br /&gt;
      |        + ..&lt;br /&gt;
      +-- Objekte&lt;br /&gt;
      |      |&lt;br /&gt;
      |      + UART&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |   |      |&lt;br /&gt;
      |      |   |      + Baudrate&lt;br /&gt;
      |      |   |      + Daten bereit zum empfangen&lt;br /&gt;
      |      |   |      + Daten bereit zum senden&lt;br /&gt;
      |      |   + Methoden&lt;br /&gt;
      |      |   |    |&lt;br /&gt;
      |      |   |    + Senden&lt;br /&gt;
      |      |   |    + Empfangen&lt;br /&gt;
      |      |   + Events&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Daten empfangen&lt;br /&gt;
      |      |        + Daten gesendet&lt;br /&gt;
      |      + Ports&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |          |&lt;br /&gt;
      |      |          + Wert&lt;br /&gt;
      |      |          + PortBit&lt;br /&gt;
      |      |               |&lt;br /&gt;
      |      |               + Eigenschaften&lt;br /&gt;
      |      |                      |&lt;br /&gt;
      |      |                      + Wert&lt;br /&gt;
      |      + Arbeitsspeicher&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Objekte&lt;br /&gt;
      |      |             |&lt;br /&gt;
      |      |             + Variablen&lt;br /&gt;
      |      |             |     |&lt;br /&gt;
      |      |             |     + ..&lt;br /&gt;
      |      |             + MemoryBlock&lt;br /&gt;
      |      |                   |&lt;br /&gt;
      |      |                   + Methoden&lt;br /&gt;
      |      |                        |&lt;br /&gt;
      |      |                        + ByteValue &lt;br /&gt;
      |      |                        + IntegerValue &lt;br /&gt;
      |      |                        + WordValue &lt;br /&gt;
      |      |                        + LongValue &lt;br /&gt;
      |      |                        + SingleValue &lt;br /&gt;
      |      |                        + StringValue &lt;br /&gt;
      |      + ..&lt;br /&gt;
      + Methoden&lt;br /&gt;
            |&lt;br /&gt;
            + ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man kann nun auf die Eigenschaften und Methoden der Objekte zugreifen um die gewünschten Ziele zu erreichen. Dies vereinfacht den Zugriff auf die Hardware, minimiert die Fehlerrate, dient der Übersichtlichkeit im Programmcode. Dies erleichtert den Weg zur effizienten und zügigen Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
'''Die grundlegende Programmstruktur ist im Allgemeinen Folgende:'''&lt;br /&gt;
&lt;br /&gt;
* Controllerdefinition&lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Deklarationen&lt;br /&gt;
** Hauptprogramm&lt;br /&gt;
*** Unterprogramme&lt;br /&gt;
*** Datenstrukturen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Version]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:beispiel-sourcen Beispiel-Sourcen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: helloworld.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 16               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=19437</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=19437"/>
				<updated>2012-04-16T20:41:08Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte, moderne Basic-ähnliche Programmiersprache, deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen wie z.Bsp. RealStudio® orientiert. Sie ist mit einer einfach zu erlernenden Syntax ausgestattet und eignet sich für die effiziente und zeitsparende Entwicklung von kleinen bis großen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
Luna erhebt nicht den Anspruch andere Programmiersprachen zu ersetzen. Vielmehr soll das Angebot an freien Entwicklungswerkzeugen bereichert werden. Luna ist ein privat initiiertes Projekt und kostenlos.&lt;br /&gt;
&lt;br /&gt;
Luna besteht aus integrierter Entwicklungsumgebung, einem Präprozessor, Compiler und Assembler. Software kann wahlweise in der IDE oder in einem normalen Texteditor geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die IDE bietet hierbei zusätzlich zu den allgemein wünschenswerten Funktionen wie Syntaxfärbung, automatischer Einrückung, Strukturierung von Bedingungen inklusive Ein- und Ausklappfunktion eine direkte Unterstützung der in Luna abgebildeten Hardware und Software-Objekte bzw. -Klassen der einzelnen AVR Controller.&lt;br /&gt;
&lt;br /&gt;
Das erzeugte Binary und die Ausführungsgeschwindigkeit sind von der Größe her vergleichbar mit existierenden Hochsprachen wie z.Bsp. C/C++. Es gibt keine Beschränkung bei der Tiefe von Ausdrücken wie z.Bsp. in BASCOM. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (dynamische Strings oder Speicherblöcke), Speicherstrukturen, dynamische Objekte, selbst erstellbare Klassen und Datenstrukturen. &lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
===Programme===&lt;br /&gt;
* [http://avr.myluna.de]&lt;br /&gt;
&lt;br /&gt;
===Bibliotheken===&lt;br /&gt;
* '''Typkonvertierungen'''&lt;br /&gt;
** Integer&amp;lt;&amp;gt;Single&lt;br /&gt;
** Integer&amp;lt;&amp;gt;String&lt;br /&gt;
** Single&amp;lt;&amp;gt;String&lt;br /&gt;
&lt;br /&gt;
* '''Speicherverwaltung'''&lt;br /&gt;
** dynamische Objekte&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Eeprom'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Flash (Data)'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Konstanten&lt;br /&gt;
&lt;br /&gt;
* '''Math'''&lt;br /&gt;
** Integer 8-32 Bit&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
** '''Floating Point (Single)'''&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
* '''String'''&lt;br /&gt;
** Instr()&lt;br /&gt;
** Left()&lt;br /&gt;
** Right()&lt;br /&gt;
** Mid()&lt;br /&gt;
** Upper()&lt;br /&gt;
** Lower()&lt;br /&gt;
** Spc()&lt;br /&gt;
** StrFill()&lt;br /&gt;
** Chr()&lt;br /&gt;
** Mkb()&lt;br /&gt;
** Mki()&lt;br /&gt;
** Mkw()&lt;br /&gt;
** Mkl()&lt;br /&gt;
** Mks()&lt;br /&gt;
** Bin()&lt;br /&gt;
** Hex()&lt;br /&gt;
** Str()&lt;br /&gt;
&lt;br /&gt;
* '''UART''' &lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Eingabe&lt;br /&gt;
** Ausgabe&lt;br /&gt;
&lt;br /&gt;
* '''Standardfunktionen'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
Luna ist eine objektbasierte Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Sie unterstützt mit Einschränkungen:&lt;br /&gt;
&lt;br /&gt;
    Vererbung&lt;br /&gt;
    Datenkapselung&lt;br /&gt;
    Polymorphie&lt;br /&gt;
&lt;br /&gt;
In der Programmierung gibt es verschiedene Begriffe, deren Bedeutung im Allgemeinen geläufig sind. Die objektorientierte Programmierung besitzt zudem weiterführende Begriffe und Bezeichnungen. Oft verwendete Begriffe sind:&lt;br /&gt;
&lt;br /&gt;
** Variable&lt;br /&gt;
** Methode&lt;br /&gt;
** Objekt&lt;br /&gt;
** Klasse&lt;br /&gt;
&lt;br /&gt;
Aufbau und Struktur&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zur „normalen“ rein prozeduralen Programmierung, sind bei der objektbasierten/objektorientierten Programmierung sogutwie alle Elemente der Programmiersprache in bestimmte Strukturen zusammengefasst. Diese Struktur beeinflusst auch die Art und Weise der Syntax, also wie man eine gewünschte Funktionalität schriftlich ausdrückt.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte „Klasse“ (die Basisklasse) implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt. Die davon abgebildeten Objekte erben die Eigenschaften bzw. Attribute dieser Basisklasse, sodass beispielsweise bestimmte Methoden und Eigenschaften nur dann zugänglich sind, wenn sie in der übergeordneten Klasse (in diesem Fall der Controller) vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Hinweis: In Luna sind die gebräuchlichsten Hardware-Controllerfunktionen bzw. -Schnittstellen als Objekte abgebildet. Nicht implementierte Abbildungen als Objekt sind normal über den Direktzugriff auf die Konfigurations- und Datenports des Controllers erreichbar. Die Konfiguration z.Bsp. einer Schnittstelle erfolgt dann anhand der Portnamen und Konfigurationsbits laut Datasheet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Avr&lt;br /&gt;
      |&lt;br /&gt;
      +-- Eigenschaften&lt;br /&gt;
      |        |&lt;br /&gt;
      |        + Controller-Typ&lt;br /&gt;
      |        + Stack-Size&lt;br /&gt;
      |        + Größe Arbeitsspeicher&lt;br /&gt;
      |        + Größe Eeprom&lt;br /&gt;
      |        + Taktrate&lt;br /&gt;
      |        + ..&lt;br /&gt;
      +-- Objekte&lt;br /&gt;
      |      |&lt;br /&gt;
      |      + UART&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |   |      |&lt;br /&gt;
      |      |   |      + Baudrate&lt;br /&gt;
      |      |   |      + Daten bereit zum empfangen&lt;br /&gt;
      |      |   |      + Daten bereit zum senden&lt;br /&gt;
      |      |   + Methoden&lt;br /&gt;
      |      |   |    |&lt;br /&gt;
      |      |   |    + Senden&lt;br /&gt;
      |      |   |    + Empfangen&lt;br /&gt;
      |      |   + Events&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Daten empfangen&lt;br /&gt;
      |      |        + Daten gesendet&lt;br /&gt;
      |      + Ports&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |          |&lt;br /&gt;
      |      |          + Wert&lt;br /&gt;
      |      |          + PortBit&lt;br /&gt;
      |      |               |&lt;br /&gt;
      |      |               + Eigenschaften&lt;br /&gt;
      |      |                      |&lt;br /&gt;
      |      |                      + Wert&lt;br /&gt;
      |      + Arbeitsspeicher&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Objekte&lt;br /&gt;
      |      |             |&lt;br /&gt;
      |      |             + Variablen&lt;br /&gt;
      |      |             |     |&lt;br /&gt;
      |      |             |     + ..&lt;br /&gt;
      |      |             + MemoryBlock&lt;br /&gt;
      |      |                   |&lt;br /&gt;
      |      |                   + Methoden&lt;br /&gt;
      |      |                        |&lt;br /&gt;
      |      |                        + ByteValue &lt;br /&gt;
      |      |                        + IntegerValue &lt;br /&gt;
      |      |                        + WordValue &lt;br /&gt;
      |      |                        + LongValue &lt;br /&gt;
      |      |                        + SingleValue &lt;br /&gt;
      |      |                        + StringValue &lt;br /&gt;
      |      + ..&lt;br /&gt;
      + Methoden&lt;br /&gt;
            |&lt;br /&gt;
            + ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man kann nun auf die Eigenschaften und Methoden der Objekte zugreifen um die gewünschten Ziele zu erreichen. Dies vereinfacht den Zugriff auf die Hardware, minimiert die Fehlerrate, dient der Übersichtlichkeit im Programmcode. Dies erleichtert den Weg zur effizienten und zügigen Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
'''Die grundlegende Programmstruktur ist im Allgemeinen Folgende:'''&lt;br /&gt;
&lt;br /&gt;
* Controllerdefinition&lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Deklarationen&lt;br /&gt;
** Hauptprogramm&lt;br /&gt;
*** Unterprogramme&lt;br /&gt;
*** Datenstrukturen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Testversion]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: helloworld.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 16               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispielsource: loops.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const Quartzfrequenz = 20000000&lt;br /&gt;
const prescaler = 256&lt;br /&gt;
&lt;br /&gt;
avr.device = atmega32&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 32               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
dim i as byte&lt;br /&gt;
&lt;br /&gt;
print 27 ; &amp;quot;[21&amp;quot; ; 27 ; &amp;quot;[2J&amp;quot; ; 27 ; &amp;quot;c&amp;quot; ;&lt;br /&gt;
print &amp;quot;******* test source *************&amp;quot;&lt;br /&gt;
print &amp;quot;* loops&amp;quot;&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;for i=0 to 9 ... next (prints 0-9)&amp;quot;&lt;br /&gt;
for i=0 to 9&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
next&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;for i=9 downto 0 ... next (prints 9-0)&amp;quot;&lt;br /&gt;
for i=9 downto 0&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
next&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;while i&amp;lt;10 ... wend (prints 0-9)&amp;quot;&lt;br /&gt;
i=0&lt;br /&gt;
while i&amp;lt;10&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
incr i&lt;br /&gt;
wend&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;do .. loop until i&amp;lt;10 (prints 10-1)&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
decr i&lt;br /&gt;
loop until i=0&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispielsource: Blinksteuerung/Blinkmodul Auto &amp;amp; Motorrad'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
' 2010 rgf software&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
' Simple Blinksteuerung für Harley-Armaturen (Taster, kein Schalter)&lt;br /&gt;
' mit Antippfunktion (nur 3x Blinken bei kurzer Betätigung),&lt;br /&gt;
' automatischer Rückstellung und Warnblinklicht.&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
avr.device = attiny85&lt;br /&gt;
avr.clock = 8000000&lt;br /&gt;
&lt;br /&gt;
dim i,blinkmode,BlinkCount,KurzBlinken,LastPressed as byte&lt;br /&gt;
dim tcount,ticks,t as integer&lt;br /&gt;
&lt;br /&gt;
const TasterState = 0&lt;br /&gt;
const DauerBlinkZeit = 300&lt;br /&gt;
&lt;br /&gt;
portb.1.mode = Output, pulldown&lt;br /&gt;
portb.2.mode = Output, pulldown&lt;br /&gt;
portb.4.mode = Input, pulldown&lt;br /&gt;
portb.5.mode = Input, pulldown&lt;br /&gt;
&lt;br /&gt;
Timer0.clock = 1024&lt;br /&gt;
Timer0.isr = BlinkTimer&lt;br /&gt;
Timer0.Enable&lt;br /&gt;
&lt;br /&gt;
avr.interrupts.enable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
define TasterLinks as PINB.4&lt;br /&gt;
define TasterRechts as PINB.3&lt;br /&gt;
define BlinkerLinks as PORTB.1&lt;br /&gt;
define BlinkerRechts as PORTB.2&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
  if TasterLinks = TasterState then&lt;br /&gt;
    waitms 25                                  ' debounce&lt;br /&gt;
    if TasterLinks = TasterState then&lt;br /&gt;
      if blinkmode &amp;gt; 0 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      else&lt;br /&gt;
        blinkmode = 1&lt;br /&gt;
        KurzBlinken = 1&lt;br /&gt;
        BlinkCount = 0&lt;br /&gt;
        tcount = 0&lt;br /&gt;
        call BlinkerToggle&lt;br /&gt;
        waitms DauerBlinkZeit&lt;br /&gt;
        if TasterLinks = TasterState then      ' prüfen ob Taster immernoch gedrückt&lt;br /&gt;
          KurzBlinken = 0&lt;br /&gt;
        end if&lt;br /&gt;
        if TasterRechts = TasterState then&lt;br /&gt;
          waitms 25                            ' debounce&lt;br /&gt;
          if TasterRechts = TasterState then   ' Beide gedrückt?&lt;br /&gt;
            call BlinkerOff&lt;br /&gt;
            blinkmode = 3&lt;br /&gt;
            KurzBlinken = 0&lt;br /&gt;
          end if&lt;br /&gt;
        end if&lt;br /&gt;
      end if&lt;br /&gt;
      call TasterWait&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
&lt;br /&gt;
  if TasterRechts = TasterState then&lt;br /&gt;
    waitms 25                                 ' debounce&lt;br /&gt;
    if TasterRechts = TasterState then&lt;br /&gt;
      if blinkmode &amp;gt; 0 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      else&lt;br /&gt;
        blinkmode = 2&lt;br /&gt;
        KurzBlinken = 1&lt;br /&gt;
        BlinkCount = 0&lt;br /&gt;
        tcount = 0&lt;br /&gt;
        call BlinkerToggle&lt;br /&gt;
        waitms DauerBlinkZeit&lt;br /&gt;
        if TasterRechts = TasterState then    ' prüfen ob Taster immernoch gedrückt&lt;br /&gt;
          KurzBlinken = 0&lt;br /&gt;
        end if&lt;br /&gt;
        if TasterLinks = TasterState then&lt;br /&gt;
          waitms 25                           ' debounce&lt;br /&gt;
          if TasterLinks = TasterState then   ' Beide gedrückt?&lt;br /&gt;
            call BlinkerOff&lt;br /&gt;
            blinkmode = 3&lt;br /&gt;
            KurzBlinken = 0&lt;br /&gt;
          end if&lt;br /&gt;
        end if&lt;br /&gt;
      end if&lt;br /&gt;
      call TasterWait&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
&lt;br /&gt;
loop&lt;br /&gt;
&lt;br /&gt;
label TasterWait&lt;br /&gt;
  do&lt;br /&gt;
    waitms 25&lt;br /&gt;
  loop until TasterLinks = 1 and TasterRechts = 1&lt;br /&gt;
endlabel&lt;br /&gt;
&lt;br /&gt;
isr BlinkTimer&lt;br /&gt;
  incr tcount&lt;br /&gt;
  if tcount = 12 then                                       ' 1,5 Hz&lt;br /&gt;
    call BlinkerToggle&lt;br /&gt;
    tcount = 0&lt;br /&gt;
    incr BlinkCount&lt;br /&gt;
    if KurzBlinken = 1 and BlinkCount &amp;gt;= 6 then             ' 3 x blinken und aus&lt;br /&gt;
      call BlinkerOff&lt;br /&gt;
    elseif BlinkCount &amp;gt;= 200 then                           ' 100 x blinken und aus (wenn vergessen automatische Rückstellung)&lt;br /&gt;
      if blinkmode &amp;lt; 3 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      end if&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
endisr&lt;br /&gt;
&lt;br /&gt;
label BlinkerOff&lt;br /&gt;
  blinkmode = 0&lt;br /&gt;
  BlinkerLinks = 0&lt;br /&gt;
  BlinkerRechts = 0&lt;br /&gt;
endlabel&lt;br /&gt;
&lt;br /&gt;
label BlinkerToggle&lt;br /&gt;
  if blinkmode=1 or blinkmode=3 then&lt;br /&gt;
    toggle BlinkerLinks&lt;br /&gt;
  end if&lt;br /&gt;
  if blinkmode=2 or blinkmode=3 then&lt;br /&gt;
    toggle BlinkerRechts&lt;br /&gt;
  end if&lt;br /&gt;
endlabel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18780</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18780"/>
				<updated>2011-12-01T17:10:22Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine neue objektbasierte Programmiersprache für [http://www.atmel.com Atmel® AVR® Mikrocontroller], deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen wie [http://www.realsoftware.com RealStudio®] oder [http://www.java.com Java®] orientiert. Sie ist mit einer einfach zu erlernenden Syntax ausgestattet und eignet sich für die effiziente und zeitsparende Entwicklung von kleinen bis großen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist ein junges Projekt, kostenlos und man kann an der Entwicklung der Sprache mitwirken.&lt;br /&gt;
&lt;br /&gt;
Sämtliche Bibliotheksfunktionen auf die im Hintergrund zugegriffen werden, sind in Assembler geschrieben. Der erzeugte Code wird beim Kompiliervorgang wahlweise auf Länge oder Geschwindigkeit optimiert. Das erzeugte Binary ist von der Größe her vergleichbar mit existierenden Hochsprachen wie [http://winavr.sourceforge.net|C/C++]. Die Geschwindigkeit liegt auf dem Level von C/C++ und ist damit bis zu 10x schneller als vergleichbarer Code aus BASCOM®. LunaAVR unterliegt wie auch C/C++ keiner Beschränkung bei der Tiefe von Ausdrücken. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (z.Bsp. dynamische Strings oder Strukturen).&lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
===Programme===&lt;br /&gt;
* [http://avr.myluna.de Editor] (speziell angepasster Editor, Basis für IDE)&lt;br /&gt;
* [http://avr.myluna.de Compiler Version 0.3.5_beta] (Windows und Linux-Version verfügbar)&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* IDE&lt;br /&gt;
&lt;br /&gt;
===Bibliotheken===&lt;br /&gt;
* '''Typkonvertierungen'''&lt;br /&gt;
** Integer&amp;lt;&amp;gt;Single&lt;br /&gt;
** Integer&amp;lt;&amp;gt;String&lt;br /&gt;
** Single&amp;lt;&amp;gt;String&lt;br /&gt;
&lt;br /&gt;
* '''Speicherverwaltung'''&lt;br /&gt;
** dynamische Objekte&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Eeprom'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Flash (Data)'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Konstanten&lt;br /&gt;
&lt;br /&gt;
* '''Math'''&lt;br /&gt;
** Integer 8-32 Bit&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
** '''Floating Point (Single)'''&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
* '''String'''&lt;br /&gt;
** Instr()&lt;br /&gt;
** Left()&lt;br /&gt;
** Right()&lt;br /&gt;
** Mid()&lt;br /&gt;
** Upper()&lt;br /&gt;
** Lower()&lt;br /&gt;
&lt;br /&gt;
* '''UART''' &lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Eingabe&lt;br /&gt;
** Ausgabe&lt;br /&gt;
&lt;br /&gt;
* '''Standardfunktionen'''&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* Math: Mul/Div 8-32 Bit Integer für Classic Core&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine '''objektbasierte''' Programmiersprache und damit eine Zwischenform von prozeduraler und objektorientierter Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Die Implementation der Objektbasierung richtet sich nach den Hardware-Gegebenheiten der AVR-Mikrocontroller. In [http://de.wikipedia.org/wiki/Atmel_AVR AVR Mikrocontrollern] wird der [http://de.wikipedia.org/wiki/Maschinencode Maschinencode] im Flashspeicher abgelegt, womit Programmteile nicht vererbt oder kopiert werden können, um sie an anderer Stelle auszuführen. Weiterhin sind die Ressourcen in Mikrocontrollern stark begrenzt.&lt;br /&gt;
&lt;br /&gt;
Damit eine effiziente und speicherplatzsparende Programmierung möglich wird, ist die Objektbasierung in LunaAVR nicht überladen. Dem Programmierer soll unnötige Arbeit abgenommen und möglichst weitreichende Vorteile objektorientierter Programmierung bei gleichzeitigem vollen Zugriff auf alle Ressourcen zur Verfügung gestellt werden.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte &amp;quot;Klasse&amp;quot; implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt.&lt;br /&gt;
&lt;br /&gt;
Darauf basierend werden Objekte abgeleitet, beispielsweise vom Arbeitsspeicher das Objekt &amp;quot;MemoryBlock&amp;quot; oder Variablen usw.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Avr&lt;br /&gt;
      |&lt;br /&gt;
      +-- Eigenschaften&lt;br /&gt;
      |        |&lt;br /&gt;
      |        + Controller-Typ&lt;br /&gt;
      |        + Stack-Size&lt;br /&gt;
      |        + Größe Arbeitsspeicher&lt;br /&gt;
      |        + Größe Eeprom&lt;br /&gt;
      |        + Taktrate&lt;br /&gt;
      |        + ..&lt;br /&gt;
      +-- Objekte&lt;br /&gt;
      |      |&lt;br /&gt;
      |      + UART&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |   |      |&lt;br /&gt;
      |      |   |      + Baudrate&lt;br /&gt;
      |      |   |      + Daten bereit zum empfangen&lt;br /&gt;
      |      |   |      + Daten bereit zum senden&lt;br /&gt;
      |      |   + Methoden&lt;br /&gt;
      |      |   |    |&lt;br /&gt;
      |      |   |    + Senden&lt;br /&gt;
      |      |   |    + Empfangen&lt;br /&gt;
      |      |   + Events&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Daten empfangen&lt;br /&gt;
      |      |        + Daten gesendet&lt;br /&gt;
      |      + Ports&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |          |&lt;br /&gt;
      |      |          + Wert&lt;br /&gt;
      |      |          + PortBit&lt;br /&gt;
      |      |               |&lt;br /&gt;
      |      |               + Eigenschaften&lt;br /&gt;
      |      |                      |&lt;br /&gt;
      |      |                      + Wert&lt;br /&gt;
      |      + Arbeitsspeicher&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Objekte&lt;br /&gt;
      |      |             |&lt;br /&gt;
      |      |             + Variablen&lt;br /&gt;
      |      |             |     |&lt;br /&gt;
      |      |             |     + ..&lt;br /&gt;
      |      |             + MemoryBlock&lt;br /&gt;
      |      |                   |&lt;br /&gt;
      |      |                   + Methoden&lt;br /&gt;
      |      |                        |&lt;br /&gt;
      |      |                        + ByteValue &lt;br /&gt;
      |      |                        + IntegerValue &lt;br /&gt;
      |      |                        + WordValue &lt;br /&gt;
      |      |                        + LongValue &lt;br /&gt;
      |      |                        + SingleValue &lt;br /&gt;
      |      |                        + StringValue &lt;br /&gt;
      |      + ..&lt;br /&gt;
      + Methoden&lt;br /&gt;
            |&lt;br /&gt;
            + ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man kann nun auf die Eigenschaften und Methoden der Objekte zugreifen um die gewünschten Ziele zu erreichen. Dies vereinfacht den Zugriff auf die Hardware, minimiert die Fehlerrate, dient der Übersichtlichkeit im Programmcode. Dies erleichtert den Weg zur effizienten und zügigen Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
'''Die grundlegende Programmstruktur ist im Allgemeinen Folgende:'''&lt;br /&gt;
&lt;br /&gt;
* Controllerdefinition&lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Deklarationen&lt;br /&gt;
** Hauptprogramm&lt;br /&gt;
*** Unterprogramme&lt;br /&gt;
*** Datenstrukturen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Testversion]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: helloworld.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 16               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispielsource: loops.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const Quartzfrequenz = 20000000&lt;br /&gt;
const prescaler = 256&lt;br /&gt;
&lt;br /&gt;
avr.device = atmega32&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 32               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
dim i as byte&lt;br /&gt;
&lt;br /&gt;
print 27 ; &amp;quot;[21&amp;quot; ; 27 ; &amp;quot;[2J&amp;quot; ; 27 ; &amp;quot;c&amp;quot; ;&lt;br /&gt;
print &amp;quot;******* test source *************&amp;quot;&lt;br /&gt;
print &amp;quot;* loops&amp;quot;&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;for i=0 to 9 ... next (prints 0-9)&amp;quot;&lt;br /&gt;
for i=0 to 9&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
next&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;for i=9 downto 0 ... next (prints 9-0)&amp;quot;&lt;br /&gt;
for i=9 downto 0&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
next&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;while i&amp;lt;10 ... wend (prints 0-9)&amp;quot;&lt;br /&gt;
i=0&lt;br /&gt;
while i&amp;lt;10&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
incr i&lt;br /&gt;
wend&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;do .. loop until i&amp;lt;10 (prints 10-1)&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
decr i&lt;br /&gt;
loop until i=0&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispielsource: Blinksteuerung/Blinkmodul Auto &amp;amp; Motorrad'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
' 2010 rgf software&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
' Simple Blinksteuerung für Harley-Armaturen (Taster, kein Schalter)&lt;br /&gt;
' mit Antippfunktion (nur 3x Blinken bei kurzer Betätigung),&lt;br /&gt;
' automatischer Rückstellung und Warnblinklicht.&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
avr.device = attiny85&lt;br /&gt;
avr.clock = 8000000&lt;br /&gt;
&lt;br /&gt;
dim i,blinkmode,BlinkCount,KurzBlinken,LastPressed as byte&lt;br /&gt;
dim tcount,ticks,t as integer&lt;br /&gt;
&lt;br /&gt;
const TasterState = 0&lt;br /&gt;
const DauerBlinkZeit = 300&lt;br /&gt;
&lt;br /&gt;
portb.1.mode = Output, pulldown&lt;br /&gt;
portb.2.mode = Output, pulldown&lt;br /&gt;
portb.4.mode = Input, pulldown&lt;br /&gt;
portb.5.mode = Input, pulldown&lt;br /&gt;
&lt;br /&gt;
Timer0.clock = 1024&lt;br /&gt;
Timer0.isr = BlinkTimer&lt;br /&gt;
Timer0.Enable&lt;br /&gt;
&lt;br /&gt;
avr.interrupts.enable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
define TasterLinks as PINB.4&lt;br /&gt;
define TasterRechts as PINB.3&lt;br /&gt;
define BlinkerLinks as PORTB.1&lt;br /&gt;
define BlinkerRechts as PORTB.2&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
  if TasterLinks = TasterState then&lt;br /&gt;
    waitms 25                                  ' debounce&lt;br /&gt;
    if TasterLinks = TasterState then&lt;br /&gt;
      if blinkmode &amp;gt; 0 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      else&lt;br /&gt;
        blinkmode = 1&lt;br /&gt;
        KurzBlinken = 1&lt;br /&gt;
        BlinkCount = 0&lt;br /&gt;
        tcount = 0&lt;br /&gt;
        call BlinkerToggle&lt;br /&gt;
        waitms DauerBlinkZeit&lt;br /&gt;
        if TasterLinks = TasterState then      ' prüfen ob Taster immernoch gedrückt&lt;br /&gt;
          KurzBlinken = 0&lt;br /&gt;
        end if&lt;br /&gt;
        if TasterRechts = TasterState then&lt;br /&gt;
          waitms 25                            ' debounce&lt;br /&gt;
          if TasterRechts = TasterState then   ' Beide gedrückt?&lt;br /&gt;
            call BlinkerOff&lt;br /&gt;
            blinkmode = 3&lt;br /&gt;
            KurzBlinken = 0&lt;br /&gt;
          end if&lt;br /&gt;
        end if&lt;br /&gt;
      end if&lt;br /&gt;
      call TasterWait&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
&lt;br /&gt;
  if TasterRechts = TasterState then&lt;br /&gt;
    waitms 25                                 ' debounce&lt;br /&gt;
    if TasterRechts = TasterState then&lt;br /&gt;
      if blinkmode &amp;gt; 0 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      else&lt;br /&gt;
        blinkmode = 2&lt;br /&gt;
        KurzBlinken = 1&lt;br /&gt;
        BlinkCount = 0&lt;br /&gt;
        tcount = 0&lt;br /&gt;
        call BlinkerToggle&lt;br /&gt;
        waitms DauerBlinkZeit&lt;br /&gt;
        if TasterRechts = TasterState then    ' prüfen ob Taster immernoch gedrückt&lt;br /&gt;
          KurzBlinken = 0&lt;br /&gt;
        end if&lt;br /&gt;
        if TasterLinks = TasterState then&lt;br /&gt;
          waitms 25                           ' debounce&lt;br /&gt;
          if TasterLinks = TasterState then   ' Beide gedrückt?&lt;br /&gt;
            call BlinkerOff&lt;br /&gt;
            blinkmode = 3&lt;br /&gt;
            KurzBlinken = 0&lt;br /&gt;
          end if&lt;br /&gt;
        end if&lt;br /&gt;
      end if&lt;br /&gt;
      call TasterWait&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
&lt;br /&gt;
loop&lt;br /&gt;
&lt;br /&gt;
label TasterWait&lt;br /&gt;
  do&lt;br /&gt;
    waitms 25&lt;br /&gt;
  loop until TasterLinks = 1 and TasterRechts = 1&lt;br /&gt;
endlabel&lt;br /&gt;
&lt;br /&gt;
isr BlinkTimer&lt;br /&gt;
  incr tcount&lt;br /&gt;
  if tcount = 12 then                                       ' 1,5 Hz&lt;br /&gt;
    call BlinkerToggle&lt;br /&gt;
    tcount = 0&lt;br /&gt;
    incr BlinkCount&lt;br /&gt;
    if KurzBlinken = 1 and BlinkCount &amp;gt;= 6 then             ' 3 x blinken und aus&lt;br /&gt;
      call BlinkerOff&lt;br /&gt;
    elseif BlinkCount &amp;gt;= 200 then                           ' 100 x blinken und aus (wenn vergessen automatische Rückstellung)&lt;br /&gt;
      if blinkmode &amp;lt; 3 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      end if&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
endisr&lt;br /&gt;
&lt;br /&gt;
label BlinkerOff&lt;br /&gt;
  blinkmode = 0&lt;br /&gt;
  BlinkerLinks = 0&lt;br /&gt;
  BlinkerRechts = 0&lt;br /&gt;
endlabel&lt;br /&gt;
&lt;br /&gt;
label BlinkerToggle&lt;br /&gt;
  if blinkmode=1 or blinkmode=3 then&lt;br /&gt;
    toggle BlinkerLinks&lt;br /&gt;
  end if&lt;br /&gt;
  if blinkmode=2 or blinkmode=3 then&lt;br /&gt;
    toggle BlinkerRechts&lt;br /&gt;
  end if&lt;br /&gt;
endlabel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18779</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18779"/>
				<updated>2011-12-01T17:09:12Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine neue objektbasierte Programmiersprache für [http://www.atmel.com Atmel® AVR® Mikrocontroller], deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen wie [http://www.realsoftware.com RealStudio®] oder [http://www.java.com Java®] orientiert. Sie ist mit einer einfach zu erlernenden Syntax ausgestattet und eignet sich für die effiziente und zeitsparende Entwicklung von kleinen bis großen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist ein junges Projekt, kostenlos und man kann an der Entwicklung der Sprache mitwirken.&lt;br /&gt;
&lt;br /&gt;
Sämtliche Bibliotheksfunktionen auf die im Hintergrund zugegriffen werden, sind in Assembler geschrieben. Der erzeugte Code wird beim Kompiliervorgang wahlweise auf Länge oder Geschwindigkeit optimiert. Das erzeugte Binary ist von der Größe her vergleichbar mit existierenden Hochsprachen wie [http://winavr.sourceforge.net|C/C++]. Die Geschwindigkeit liegt auf dem Level von C/C++ und ist damit bis zu 10x schneller als vergleichbarer Code aus BASCOM®. LunaAVR unterliegt wie auch C/C++ keiner Beschränkung bei der Tiefe von Ausdrücken. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (z.Bsp. dynamische Strings oder Strukturen).&lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
===Programme===&lt;br /&gt;
* Editor (speziell angepasster Editor, Basis für IDE), Version 2.1.332 (derzeit noch nicht veröffentlicht)&lt;br /&gt;
* [http://avr.myluna.de Compiler Version 0.3.5_beta] (Windows und Linux-Version verfügbar)&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* IDE&lt;br /&gt;
&lt;br /&gt;
===Bibliotheken===&lt;br /&gt;
* '''Typkonvertierungen'''&lt;br /&gt;
** Integer&amp;lt;&amp;gt;Single&lt;br /&gt;
** Integer&amp;lt;&amp;gt;String&lt;br /&gt;
** Single&amp;lt;&amp;gt;String&lt;br /&gt;
&lt;br /&gt;
* '''Speicherverwaltung'''&lt;br /&gt;
** dynamische Objekte&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Eeprom'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Flash (Data)'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Konstanten&lt;br /&gt;
&lt;br /&gt;
* '''Math'''&lt;br /&gt;
** Integer 8-32 Bit&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
** '''Floating Point (Single)'''&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
* '''String'''&lt;br /&gt;
** Instr()&lt;br /&gt;
** Left()&lt;br /&gt;
** Right()&lt;br /&gt;
** Mid()&lt;br /&gt;
** Upper()&lt;br /&gt;
** Lower()&lt;br /&gt;
&lt;br /&gt;
* '''UART''' &lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Eingabe&lt;br /&gt;
** Ausgabe&lt;br /&gt;
&lt;br /&gt;
* '''Standardfunktionen'''&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* Math: Mul/Div 8-32 Bit Integer für Classic Core&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine '''objektbasierte''' Programmiersprache und damit eine Zwischenform von prozeduraler und objektorientierter Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Die Implementation der Objektbasierung richtet sich nach den Hardware-Gegebenheiten der AVR-Mikrocontroller. In [http://de.wikipedia.org/wiki/Atmel_AVR AVR Mikrocontrollern] wird der [http://de.wikipedia.org/wiki/Maschinencode Maschinencode] im Flashspeicher abgelegt, womit Programmteile nicht vererbt oder kopiert werden können, um sie an anderer Stelle auszuführen. Weiterhin sind die Ressourcen in Mikrocontrollern stark begrenzt.&lt;br /&gt;
&lt;br /&gt;
Damit eine effiziente und speicherplatzsparende Programmierung möglich wird, ist die Objektbasierung in LunaAVR nicht überladen. Dem Programmierer soll unnötige Arbeit abgenommen und möglichst weitreichende Vorteile objektorientierter Programmierung bei gleichzeitigem vollen Zugriff auf alle Ressourcen zur Verfügung gestellt werden.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte &amp;quot;Klasse&amp;quot; implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt.&lt;br /&gt;
&lt;br /&gt;
Darauf basierend werden Objekte abgeleitet, beispielsweise vom Arbeitsspeicher das Objekt &amp;quot;MemoryBlock&amp;quot; oder Variablen usw.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Avr&lt;br /&gt;
      |&lt;br /&gt;
      +-- Eigenschaften&lt;br /&gt;
      |        |&lt;br /&gt;
      |        + Controller-Typ&lt;br /&gt;
      |        + Stack-Size&lt;br /&gt;
      |        + Größe Arbeitsspeicher&lt;br /&gt;
      |        + Größe Eeprom&lt;br /&gt;
      |        + Taktrate&lt;br /&gt;
      |        + ..&lt;br /&gt;
      +-- Objekte&lt;br /&gt;
      |      |&lt;br /&gt;
      |      + UART&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |   |      |&lt;br /&gt;
      |      |   |      + Baudrate&lt;br /&gt;
      |      |   |      + Daten bereit zum empfangen&lt;br /&gt;
      |      |   |      + Daten bereit zum senden&lt;br /&gt;
      |      |   + Methoden&lt;br /&gt;
      |      |   |    |&lt;br /&gt;
      |      |   |    + Senden&lt;br /&gt;
      |      |   |    + Empfangen&lt;br /&gt;
      |      |   + Events&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Daten empfangen&lt;br /&gt;
      |      |        + Daten gesendet&lt;br /&gt;
      |      + Ports&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |          |&lt;br /&gt;
      |      |          + Wert&lt;br /&gt;
      |      |          + PortBit&lt;br /&gt;
      |      |               |&lt;br /&gt;
      |      |               + Eigenschaften&lt;br /&gt;
      |      |                      |&lt;br /&gt;
      |      |                      + Wert&lt;br /&gt;
      |      + Arbeitsspeicher&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Objekte&lt;br /&gt;
      |      |             |&lt;br /&gt;
      |      |             + Variablen&lt;br /&gt;
      |      |             |     |&lt;br /&gt;
      |      |             |     + ..&lt;br /&gt;
      |      |             + MemoryBlock&lt;br /&gt;
      |      |                   |&lt;br /&gt;
      |      |                   + Methoden&lt;br /&gt;
      |      |                        |&lt;br /&gt;
      |      |                        + ByteValue &lt;br /&gt;
      |      |                        + IntegerValue &lt;br /&gt;
      |      |                        + WordValue &lt;br /&gt;
      |      |                        + LongValue &lt;br /&gt;
      |      |                        + SingleValue &lt;br /&gt;
      |      |                        + StringValue &lt;br /&gt;
      |      + ..&lt;br /&gt;
      + Methoden&lt;br /&gt;
            |&lt;br /&gt;
            + ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man kann nun auf die Eigenschaften und Methoden der Objekte zugreifen um die gewünschten Ziele zu erreichen. Dies vereinfacht den Zugriff auf die Hardware, minimiert die Fehlerrate, dient der Übersichtlichkeit im Programmcode. Dies erleichtert den Weg zur effizienten und zügigen Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
'''Die grundlegende Programmstruktur ist im Allgemeinen Folgende:'''&lt;br /&gt;
&lt;br /&gt;
* Controllerdefinition&lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Deklarationen&lt;br /&gt;
** Hauptprogramm&lt;br /&gt;
*** Unterprogramme&lt;br /&gt;
*** Datenstrukturen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Testversion]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: helloworld.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 16               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispielsource: loops.luna'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const Quartzfrequenz = 20000000&lt;br /&gt;
const prescaler = 256&lt;br /&gt;
&lt;br /&gt;
avr.device = atmega32&lt;br /&gt;
avr.clock = 20000000         ' Quarzfrequenz&lt;br /&gt;
avr.stack = 32               ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
&lt;br /&gt;
uart.baud = 19200            ' Baudrate&lt;br /&gt;
uart.Recv.enable             ' Senden aktivieren&lt;br /&gt;
uart.Send.enable             ' Empfangen aktivieren&lt;br /&gt;
&lt;br /&gt;
dim i as byte&lt;br /&gt;
&lt;br /&gt;
print 27 ; &amp;quot;[21&amp;quot; ; 27 ; &amp;quot;[2J&amp;quot; ; 27 ; &amp;quot;c&amp;quot; ;&lt;br /&gt;
print &amp;quot;******* test source *************&amp;quot;&lt;br /&gt;
print &amp;quot;* loops&amp;quot;&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;for i=0 to 9 ... next (prints 0-9)&amp;quot;&lt;br /&gt;
for i=0 to 9&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
next&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;for i=9 downto 0 ... next (prints 9-0)&amp;quot;&lt;br /&gt;
for i=9 downto 0&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
next&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;while i&amp;lt;10 ... wend (prints 0-9)&amp;quot;&lt;br /&gt;
i=0&lt;br /&gt;
while i&amp;lt;10&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
incr i&lt;br /&gt;
wend&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;do .. loop until i&amp;lt;10 (prints 10-1)&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
print str(i)+&amp;quot; &amp;quot;;&lt;br /&gt;
decr i&lt;br /&gt;
loop until i=0&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispielsource: Blinksteuerung/Blinkmodul Auto &amp;amp; Motorrad'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
' 2010 rgf software&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
' Simple Blinksteuerung für Harley-Armaturen (Taster, kein Schalter)&lt;br /&gt;
' mit Antippfunktion (nur 3x Blinken bei kurzer Betätigung),&lt;br /&gt;
' automatischer Rückstellung und Warnblinklicht.&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
avr.device = attiny85&lt;br /&gt;
avr.clock = 8000000&lt;br /&gt;
&lt;br /&gt;
dim i,blinkmode,BlinkCount,KurzBlinken,LastPressed as byte&lt;br /&gt;
dim tcount,ticks,t as integer&lt;br /&gt;
&lt;br /&gt;
const TasterState = 0&lt;br /&gt;
const DauerBlinkZeit = 300&lt;br /&gt;
&lt;br /&gt;
portb.1.mode = Output, pulldown&lt;br /&gt;
portb.2.mode = Output, pulldown&lt;br /&gt;
portb.4.mode = Input, pulldown&lt;br /&gt;
portb.5.mode = Input, pulldown&lt;br /&gt;
&lt;br /&gt;
Timer0.clock = 1024&lt;br /&gt;
Timer0.isr = BlinkTimer&lt;br /&gt;
Timer0.Enable&lt;br /&gt;
&lt;br /&gt;
avr.interrupts.enable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
define TasterLinks as PINB.4&lt;br /&gt;
define TasterRechts as PINB.3&lt;br /&gt;
define BlinkerLinks as PORTB.1&lt;br /&gt;
define BlinkerRechts as PORTB.2&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
  if TasterLinks = TasterState then&lt;br /&gt;
    waitms 25                                  ' debounce&lt;br /&gt;
    if TasterLinks = TasterState then&lt;br /&gt;
      if blinkmode &amp;gt; 0 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      else&lt;br /&gt;
        blinkmode = 1&lt;br /&gt;
        KurzBlinken = 1&lt;br /&gt;
        BlinkCount = 0&lt;br /&gt;
        tcount = 0&lt;br /&gt;
        call BlinkerToggle&lt;br /&gt;
        waitms DauerBlinkZeit&lt;br /&gt;
        if TasterLinks = TasterState then      ' prüfen ob Taster immernoch gedrückt&lt;br /&gt;
          KurzBlinken = 0&lt;br /&gt;
        end if&lt;br /&gt;
        if TasterRechts = TasterState then&lt;br /&gt;
          waitms 25                            ' debounce&lt;br /&gt;
          if TasterRechts = TasterState then   ' Beide gedrückt?&lt;br /&gt;
            call BlinkerOff&lt;br /&gt;
            blinkmode = 3&lt;br /&gt;
            KurzBlinken = 0&lt;br /&gt;
          end if&lt;br /&gt;
        end if&lt;br /&gt;
      end if&lt;br /&gt;
      call TasterWait&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
&lt;br /&gt;
  if TasterRechts = TasterState then&lt;br /&gt;
    waitms 25                                 ' debounce&lt;br /&gt;
    if TasterRechts = TasterState then&lt;br /&gt;
      if blinkmode &amp;gt; 0 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      else&lt;br /&gt;
        blinkmode = 2&lt;br /&gt;
        KurzBlinken = 1&lt;br /&gt;
        BlinkCount = 0&lt;br /&gt;
        tcount = 0&lt;br /&gt;
        call BlinkerToggle&lt;br /&gt;
        waitms DauerBlinkZeit&lt;br /&gt;
        if TasterRechts = TasterState then    ' prüfen ob Taster immernoch gedrückt&lt;br /&gt;
          KurzBlinken = 0&lt;br /&gt;
        end if&lt;br /&gt;
        if TasterLinks = TasterState then&lt;br /&gt;
          waitms 25                           ' debounce&lt;br /&gt;
          if TasterLinks = TasterState then   ' Beide gedrückt?&lt;br /&gt;
            call BlinkerOff&lt;br /&gt;
            blinkmode = 3&lt;br /&gt;
            KurzBlinken = 0&lt;br /&gt;
          end if&lt;br /&gt;
        end if&lt;br /&gt;
      end if&lt;br /&gt;
      call TasterWait&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
&lt;br /&gt;
loop&lt;br /&gt;
&lt;br /&gt;
label TasterWait&lt;br /&gt;
  do&lt;br /&gt;
    waitms 25&lt;br /&gt;
  loop until TasterLinks = 1 and TasterRechts = 1&lt;br /&gt;
endlabel&lt;br /&gt;
&lt;br /&gt;
isr BlinkTimer&lt;br /&gt;
  incr tcount&lt;br /&gt;
  if tcount = 12 then                                       ' 1,5 Hz&lt;br /&gt;
    call BlinkerToggle&lt;br /&gt;
    tcount = 0&lt;br /&gt;
    incr BlinkCount&lt;br /&gt;
    if KurzBlinken = 1 and BlinkCount &amp;gt;= 6 then             ' 3 x blinken und aus&lt;br /&gt;
      call BlinkerOff&lt;br /&gt;
    elseif BlinkCount &amp;gt;= 200 then                           ' 100 x blinken und aus (wenn vergessen automatische Rückstellung)&lt;br /&gt;
      if blinkmode &amp;lt; 3 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      end if&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
endisr&lt;br /&gt;
&lt;br /&gt;
label BlinkerOff&lt;br /&gt;
  blinkmode = 0&lt;br /&gt;
  BlinkerLinks = 0&lt;br /&gt;
  BlinkerRechts = 0&lt;br /&gt;
endlabel&lt;br /&gt;
&lt;br /&gt;
label BlinkerToggle&lt;br /&gt;
  if blinkmode=1 or blinkmode=3 then&lt;br /&gt;
    toggle BlinkerLinks&lt;br /&gt;
  end if&lt;br /&gt;
  if blinkmode=2 or blinkmode=3 then&lt;br /&gt;
    toggle BlinkerRechts&lt;br /&gt;
  end if&lt;br /&gt;
endlabel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18751</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18751"/>
				<updated>2011-11-14T23:11:37Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: /* Weblinks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine neue objektbasierte Programmiersprache für [http://www.atmel.com Atmel® AVR® Mikrocontroller], deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen wie [http://www.realsoftware.com RealStudio®] oder [http://www.java.com Java®] orientiert. Sie ist mit einer einfach zu erlernenden Syntax ausgestattet und eignet sich für die effiziente und zeitsparende Entwicklung von kleinen bis großen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist ein junges Projekt, kostenlos und man kann an der Entwicklung der Sprache mitwirken.&lt;br /&gt;
&lt;br /&gt;
Sämtliche Bibliotheksfunktionen auf die im Hintergrund zugegriffen werden, sind in Assembler geschrieben. Der erzeugte Code wird beim Kompiliervorgang wahlweise auf Länge oder Geschwindigkeit optimiert. Das erzeugte Binary ist von der Größe her vergleichbar mit existierenden Hochsprachen wie [http://winavr.sourceforge.net|C/C++]. Die Geschwindigkeit liegt auf dem Level von C/C++ und ist damit bis zu 10x schneller als vergleichbarer Code aus BASCOM®. LunaAVR unterliegt wie auch C/C++ keiner Beschränkung bei der Tiefe von Ausdrücken. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (z.Bsp. dynamische Strings oder Strukturen).&lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
===Programme===&lt;br /&gt;
* Editor (speziell angepasster Editor, Basis für IDE), Version 2.1.332 (derzeit noch nicht veröffentlicht)&lt;br /&gt;
* Compiler Version 0.1.64_alpha (derzeit noch nicht veröffentlicht)&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* IDE&lt;br /&gt;
* Assembler&lt;br /&gt;
&lt;br /&gt;
===Bibliotheken===&lt;br /&gt;
* '''Typkonvertierungen'''&lt;br /&gt;
** Integer&amp;lt;&amp;gt;Single&lt;br /&gt;
** Integer&amp;lt;&amp;gt;String&lt;br /&gt;
** Single&amp;lt;&amp;gt;String&lt;br /&gt;
&lt;br /&gt;
* '''Speicherverwaltung'''&lt;br /&gt;
** dynamische Objekte&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Eeprom'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Flash (Data)'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Konstanten&lt;br /&gt;
&lt;br /&gt;
* '''Math'''&lt;br /&gt;
** Integer 8-32 Bit&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
** '''Floating Point (Single)'''&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
* '''String'''&lt;br /&gt;
** Instr()&lt;br /&gt;
** Left()&lt;br /&gt;
** Right()&lt;br /&gt;
** Mid()&lt;br /&gt;
** Upper()&lt;br /&gt;
** Lower()&lt;br /&gt;
&lt;br /&gt;
* '''UART''' &lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Eingabe&lt;br /&gt;
** Ausgabe&lt;br /&gt;
&lt;br /&gt;
* '''Standardfunktionen'''&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* Math: Mul/Div 8-32 Bit Integer für Classic Core&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine '''objektbasierte''' Programmiersprache und damit eine Zwischenform von prozeduraler und objektorientierter Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Die Implementation der Objektbasierung richtet sich nach den Hardware-Gegebenheiten der AVR-Mikrocontroller. In [http://de.wikipedia.org/wiki/Atmel_AVR AVR Mikrocontrollern] wird der [http://de.wikipedia.org/wiki/Maschinencode Maschinencode] im Flashspeicher abgelegt, womit Programmteile nicht vererbt oder kopiert werden können, um sie an anderer Stelle auszuführen. Weiterhin sind die Ressourcen in Mikrocontrollern stark begrenzt.&lt;br /&gt;
&lt;br /&gt;
Damit eine effiziente und speicherplatzsparende Programmierung möglich wird, ist die Objektbasierung in LunaAVR nicht überladen. Dem Programmierer soll unnötige Arbeit abgenommen und möglichst weitreichende Vorteile objektorientierter Programmierung bei gleichzeitigem vollen Zugriff auf alle Ressourcen zur Verfügung gestellt werden.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte &amp;quot;Klasse&amp;quot; implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt.&lt;br /&gt;
&lt;br /&gt;
Darauf basierend werden Objekte abgeleitet, beispielsweise vom Arbeitsspeicher das Objekt &amp;quot;MemoryBlock&amp;quot; oder Variablen usw.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Avr&lt;br /&gt;
      |&lt;br /&gt;
      +-- Eigenschaften&lt;br /&gt;
      |        |&lt;br /&gt;
      |        + Controller-Typ&lt;br /&gt;
      |        + Stack-Size&lt;br /&gt;
      |        + Größe Arbeitsspeicher&lt;br /&gt;
      |        + Größe Eeprom&lt;br /&gt;
      |        + Taktrate&lt;br /&gt;
      |        + ..&lt;br /&gt;
      +-- Objekte&lt;br /&gt;
      |      |&lt;br /&gt;
      |      + UART&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |   |      |&lt;br /&gt;
      |      |   |      + Baudrate&lt;br /&gt;
      |      |   |      + Daten bereit zum empfangen&lt;br /&gt;
      |      |   |      + Daten bereit zum senden&lt;br /&gt;
      |      |   + Methoden&lt;br /&gt;
      |      |   |    |&lt;br /&gt;
      |      |   |    + Senden&lt;br /&gt;
      |      |   |    + Empfangen&lt;br /&gt;
      |      |   + Events&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Daten empfangen&lt;br /&gt;
      |      |        + Daten gesendet&lt;br /&gt;
      |      + Ports&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |          |&lt;br /&gt;
      |      |          + Wert&lt;br /&gt;
      |      |          + PortBit&lt;br /&gt;
      |      |               |&lt;br /&gt;
      |      |               + Eigenschaften&lt;br /&gt;
      |      |                      |&lt;br /&gt;
      |      |                      + Wert&lt;br /&gt;
      |      + Arbeitsspeicher&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Objekte&lt;br /&gt;
      |      |             |&lt;br /&gt;
      |      |             + Variablen&lt;br /&gt;
      |      |             |     |&lt;br /&gt;
      |      |             |     + ..&lt;br /&gt;
      |      |             + MemoryBlock&lt;br /&gt;
      |      |                   |&lt;br /&gt;
      |      |                   + Methoden&lt;br /&gt;
      |      |                        |&lt;br /&gt;
      |      |                        + ByteValue &lt;br /&gt;
      |      |                        + IntegerValue &lt;br /&gt;
      |      |                        + WordValue &lt;br /&gt;
      |      |                        + LongValue &lt;br /&gt;
      |      |                        + SingleValue &lt;br /&gt;
      |      |                        + StringValue &lt;br /&gt;
      |      + ..&lt;br /&gt;
      + Methoden&lt;br /&gt;
            |&lt;br /&gt;
            + ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man kann nun auf die Eigenschaften und Methoden der Objekte zugreifen um die gewünschten Ziele zu erreichen. Dies vereinfacht den Zugriff auf die Hardware, minimiert die Fehlerrate, dient der Übersichtlichkeit im Programmcode. Dies erleichtert den Weg zur effizienten und zügigen Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
'''Die grundlegende Programmstruktur ist im Allgemeinen Folgende:'''&lt;br /&gt;
&lt;br /&gt;
* Controllerdefinition&lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Deklarationen&lt;br /&gt;
** Hauptprogramm&lt;br /&gt;
*** Unterprogramme&lt;br /&gt;
*** Datenstrukturen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Testversion]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: Terminal'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000          ' Quarzfrequenz&lt;br /&gt;
avr.stack = 32                ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
uart.baud = 19200             ' Baudrate&lt;br /&gt;
uart.Recv.Enable&lt;br /&gt;
uart.Send.Enable&lt;br /&gt;
&lt;br /&gt;
dim chars as string&lt;br /&gt;
&lt;br /&gt;
print 27 ; &amp;quot;[21&amp;quot; ; 27 ; &amp;quot;[2J&amp;quot; ; chr(27) ; &amp;quot;c&amp;quot; ;	27 ; &amp;quot;[?6l&amp;quot;;	' Terminal setup (VT100 clear)&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  inpstr &amp;quot; terminal &amp;gt; &amp;quot;,chars&lt;br /&gt;
  select case chars&lt;br /&gt;
  case &amp;quot;hallo&amp;quot;&lt;br /&gt;
    print &amp;quot;jenau, wie gehts?&amp;quot;&lt;br /&gt;
  caseelse&lt;br /&gt;
    print &amp;quot;Sie haben eingegeben: &amp;quot;+34+chars+34&lt;br /&gt;
  endselect&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispielsource: Exceptions'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = atmega32&lt;br /&gt;
avr.clock = 20000000          ' Quarzfrequenz&lt;br /&gt;
avr.stack = 32                ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
uart.baud = 19200             ' Baudrate&lt;br /&gt;
uart.Recv.Enable&lt;br /&gt;
uart.Send.Enable&lt;br /&gt;
&lt;br /&gt;
dim chars as string&lt;br /&gt;
dim m,m1 as memory&lt;br /&gt;
&lt;br /&gt;
print 27 ; &amp;quot;[21&amp;quot; ; 27 ; &amp;quot;[2J&amp;quot; ; chr(27) ; &amp;quot;c&amp;quot; ;	27 ; &amp;quot;[?6l&amp;quot;;	' Terminal setup&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  inpstr &amp;quot; test &amp;gt; &amp;quot;,chars&lt;br /&gt;
  call ausgabe(chars)&lt;br /&gt;
  select case chars&lt;br /&gt;
  case &amp;quot;m&amp;quot;      ' ständig neuen memoryblock anlegen bis Speicher voll&lt;br /&gt;
    m = MemoryBlock(100)&lt;br /&gt;
  case &amp;quot;v&amp;quot;&lt;br /&gt;
    print &amp;quot;m.ByteValue(0)=&amp;quot;+str(m.ByteValue(0)) ' aufruf vor zuweisung eines MemoryBlock führt zur Exception&lt;br /&gt;
  endselect&lt;br /&gt;
  print &amp;quot;SRAM: &amp;quot;+str(memory.space)+&amp;quot; Bytes frei&amp;quot;&lt;br /&gt;
  print &amp;quot;--------------------------------------------------------&amp;quot;&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
procedure ausgabe(s as string)&lt;br /&gt;
  print &amp;quot;s = &amp;quot;+s&lt;br /&gt;
  print &amp;quot;chars = &amp;quot;+chars&lt;br /&gt;
endproc&lt;br /&gt;
&lt;br /&gt;
Exception OutOfSpaceMemory&lt;br /&gt;
  print &amp;quot;*** Exception OutOfSpaceMemory ***&amp;quot;&lt;br /&gt;
EndException&lt;br /&gt;
Exception OutOfBoundsMemory&lt;br /&gt;
  print &amp;quot;*** Exception OutOfBoundsMemory ***&amp;quot;&lt;br /&gt;
EndException&lt;br /&gt;
Exception NilObjectException&lt;br /&gt;
  print &amp;quot;*** Exception NilObjectException ***&amp;quot;&lt;br /&gt;
EndException&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispielsource: Blinksteuerung/Blinkmodul Auto &amp;amp; Motorrad'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
' 2010 rgf software&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
' Simple Blinksteuerung für Harley-Armaturen (Taster, kein Schalter)&lt;br /&gt;
' mit Antippfunktion (nur 3x Blinken bei kurzer Betätigung),&lt;br /&gt;
' automatischer Rückstellung und Warnblinklicht.&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
avr.device = attiny85&lt;br /&gt;
avr.clock = 8000000&lt;br /&gt;
&lt;br /&gt;
dim i,blinkmode,BlinkCount,KurzBlinken,LastPressed as byte&lt;br /&gt;
dim tcount,ticks,t as integer&lt;br /&gt;
&lt;br /&gt;
const TasterState = 0&lt;br /&gt;
const DauerBlinkZeit = 300&lt;br /&gt;
&lt;br /&gt;
portb.1.mode = Output, pulldown&lt;br /&gt;
portb.2.mode = Output, pulldown&lt;br /&gt;
portb.4.mode = Input, pulldown&lt;br /&gt;
portb.5.mode = Input, pulldown&lt;br /&gt;
&lt;br /&gt;
Timer0.clock = 1024&lt;br /&gt;
Timer0.isr = BlinkTimer&lt;br /&gt;
Timer0.Enable&lt;br /&gt;
&lt;br /&gt;
avr.interrupts.enable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
define TasterLinks as PINB.4&lt;br /&gt;
define TasterRechts as PINB.3&lt;br /&gt;
define BlinkerLinks as PORTB.1&lt;br /&gt;
define BlinkerRechts as PORTB.2&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
  if TasterLinks = TasterState then&lt;br /&gt;
    waitms 25                                  ' debounce&lt;br /&gt;
    if TasterLinks = TasterState then&lt;br /&gt;
      if blinkmode &amp;gt; 0 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      else&lt;br /&gt;
        blinkmode = 1&lt;br /&gt;
        KurzBlinken = 1&lt;br /&gt;
        BlinkCount = 0&lt;br /&gt;
        tcount = 0&lt;br /&gt;
        call BlinkerToggle&lt;br /&gt;
        waitms DauerBlinkZeit&lt;br /&gt;
        if TasterLinks = TasterState then      ' prüfen ob Taster immernoch gedrückt&lt;br /&gt;
          KurzBlinken = 0&lt;br /&gt;
        end if&lt;br /&gt;
        if TasterRechts = TasterState then&lt;br /&gt;
          waitms 25                            ' debounce&lt;br /&gt;
          if TasterRechts = TasterState then   ' Beide gedrückt?&lt;br /&gt;
            call BlinkerOff&lt;br /&gt;
            blinkmode = 3&lt;br /&gt;
            KurzBlinken = 0&lt;br /&gt;
          end if&lt;br /&gt;
        end if&lt;br /&gt;
      end if&lt;br /&gt;
      call TasterWait&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
&lt;br /&gt;
  if TasterRechts = TasterState then&lt;br /&gt;
    waitms 25                                 ' debounce&lt;br /&gt;
    if TasterRechts = TasterState then&lt;br /&gt;
      if blinkmode &amp;gt; 0 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      else&lt;br /&gt;
        blinkmode = 2&lt;br /&gt;
        KurzBlinken = 1&lt;br /&gt;
        BlinkCount = 0&lt;br /&gt;
        tcount = 0&lt;br /&gt;
        call BlinkerToggle&lt;br /&gt;
        waitms DauerBlinkZeit&lt;br /&gt;
        if TasterRechts = TasterState then    ' prüfen ob Taster immernoch gedrückt&lt;br /&gt;
          KurzBlinken = 0&lt;br /&gt;
        end if&lt;br /&gt;
        if TasterLinks = TasterState then&lt;br /&gt;
          waitms 25                           ' debounce&lt;br /&gt;
          if TasterLinks = TasterState then   ' Beide gedrückt?&lt;br /&gt;
            call BlinkerOff&lt;br /&gt;
            blinkmode = 3&lt;br /&gt;
            KurzBlinken = 0&lt;br /&gt;
          end if&lt;br /&gt;
        end if&lt;br /&gt;
      end if&lt;br /&gt;
      call TasterWait&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
&lt;br /&gt;
loop&lt;br /&gt;
&lt;br /&gt;
label TasterWait&lt;br /&gt;
  do&lt;br /&gt;
    waitms 25&lt;br /&gt;
  loop until TasterLinks = 1 and TasterRechts = 1&lt;br /&gt;
endlabel&lt;br /&gt;
&lt;br /&gt;
isr BlinkTimer&lt;br /&gt;
  incr tcount&lt;br /&gt;
  if tcount = 12 then                                       ' 1,5 Hz&lt;br /&gt;
    call BlinkerToggle&lt;br /&gt;
    tcount = 0&lt;br /&gt;
    incr BlinkCount&lt;br /&gt;
    if KurzBlinken = 1 and BlinkCount &amp;gt;= 6 then             ' 3 x blinken und aus&lt;br /&gt;
      call BlinkerOff&lt;br /&gt;
    elseif BlinkCount &amp;gt;= 200 then                           ' 100 x blinken und aus (wenn vergessen automatische Rückstellung)&lt;br /&gt;
      if blinkmode &amp;lt; 3 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      end if&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
endisr&lt;br /&gt;
&lt;br /&gt;
label BlinkerOff&lt;br /&gt;
  blinkmode = 0&lt;br /&gt;
  BlinkerLinks = 0&lt;br /&gt;
  BlinkerRechts = 0&lt;br /&gt;
endlabel&lt;br /&gt;
&lt;br /&gt;
label BlinkerToggle&lt;br /&gt;
  if blinkmode=1 or blinkmode=3 then&lt;br /&gt;
    toggle BlinkerLinks&lt;br /&gt;
  end if&lt;br /&gt;
  if blinkmode=2 or blinkmode=3 then&lt;br /&gt;
    toggle BlinkerRechts&lt;br /&gt;
  end if&lt;br /&gt;
endlabel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18745</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18745"/>
				<updated>2011-11-11T22:09:21Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine neue objektbasierte Programmiersprache für [http://www.atmel.com Atmel® AVR® Mikrocontroller], deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen wie [http://www.realsoftware.com RealStudio®] oder [http://www.java.com Java®] orientiert. Sie ist mit einer einfach zu erlernenden Syntax ausgestattet und eignet sich für die effiziente und zeitsparende Entwicklung von kleinen bis großen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist ein junges Projekt, kostenlos und man kann an der Entwicklung der Sprache mitwirken.&lt;br /&gt;
&lt;br /&gt;
Sämtliche Bibliotheksfunktionen auf die im Hintergrund zugegriffen werden, sind in Assembler geschrieben. Der erzeugte Code wird beim Kompiliervorgang wahlweise auf Länge oder Geschwindigkeit optimiert. Das erzeugte Binary ist von der Größe her vergleichbar mit existierenden Hochsprachen wie [http://winavr.sourceforge.net|C/C++]. Die Geschwindigkeit liegt auf dem Level von C/C++ und ist damit bis zu 10x schneller als vergleichbarer Code aus BASCOM®. LunaAVR unterliegt wie auch C/C++ keiner Beschränkung bei der Tiefe von Ausdrücken. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (z.Bsp. dynamische Strings oder Strukturen).&lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
===Programme===&lt;br /&gt;
* Editor (speziell angepasster Editor, Basis für IDE), Version 2.1.332 (derzeit noch nicht veröffentlicht)&lt;br /&gt;
* Compiler Version 0.1.64_alpha (derzeit noch nicht veröffentlicht)&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* IDE&lt;br /&gt;
* Assembler&lt;br /&gt;
&lt;br /&gt;
===Bibliotheken===&lt;br /&gt;
* '''Typkonvertierungen'''&lt;br /&gt;
** Integer&amp;lt;&amp;gt;Single&lt;br /&gt;
** Integer&amp;lt;&amp;gt;String&lt;br /&gt;
** Single&amp;lt;&amp;gt;String&lt;br /&gt;
&lt;br /&gt;
* '''Speicherverwaltung'''&lt;br /&gt;
** dynamische Objekte&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Eeprom'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Flash (Data)'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Konstanten&lt;br /&gt;
&lt;br /&gt;
* '''Math'''&lt;br /&gt;
** Integer 8-32 Bit&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
** '''Floating Point (Single)'''&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
* '''String'''&lt;br /&gt;
** Instr()&lt;br /&gt;
** Left()&lt;br /&gt;
** Right()&lt;br /&gt;
** Mid()&lt;br /&gt;
** Upper()&lt;br /&gt;
** Lower()&lt;br /&gt;
&lt;br /&gt;
* '''UART''' &lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Eingabe&lt;br /&gt;
** Ausgabe&lt;br /&gt;
&lt;br /&gt;
* '''Standardfunktionen'''&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* Math: Mul/Div 8-32 Bit Integer für Classic Core&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine '''objektbasierte''' Programmiersprache und damit eine Zwischenform von prozeduraler und objektorientierter Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Die Implementation der Objektbasierung richtet sich nach den Hardware-Gegebenheiten der AVR-Mikrocontroller. In [http://de.wikipedia.org/wiki/Atmel_AVR AVR Mikrocontrollern] wird der [http://de.wikipedia.org/wiki/Maschinencode Maschinencode] im Flashspeicher abgelegt, womit Programmteile nicht vererbt oder kopiert werden können, um sie an anderer Stelle auszuführen. Weiterhin sind die Ressourcen in Mikrocontrollern stark begrenzt.&lt;br /&gt;
&lt;br /&gt;
Damit eine effiziente und speicherplatzsparende Programmierung möglich wird, ist die Objektbasierung in LunaAVR nicht überladen. Dem Programmierer soll unnötige Arbeit abgenommen und möglichst weitreichende Vorteile objektorientierter Programmierung bei gleichzeitigem vollen Zugriff auf alle Ressourcen zur Verfügung gestellt werden.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte &amp;quot;Klasse&amp;quot; implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt.&lt;br /&gt;
&lt;br /&gt;
Darauf basierend werden Objekte abgeleitet, beispielsweise vom Arbeitsspeicher das Objekt &amp;quot;MemoryBlock&amp;quot; oder Variablen usw.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Avr&lt;br /&gt;
      |&lt;br /&gt;
      +-- Eigenschaften&lt;br /&gt;
      |        |&lt;br /&gt;
      |        + Controller-Typ&lt;br /&gt;
      |        + Stack-Size&lt;br /&gt;
      |        + Größe Arbeitsspeicher&lt;br /&gt;
      |        + Größe Eeprom&lt;br /&gt;
      |        + Taktrate&lt;br /&gt;
      |        + ..&lt;br /&gt;
      +-- Objekte&lt;br /&gt;
      |      |&lt;br /&gt;
      |      + UART&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |   |      |&lt;br /&gt;
      |      |   |      + Baudrate&lt;br /&gt;
      |      |   |      + Daten bereit zum empfangen&lt;br /&gt;
      |      |   |      + Daten bereit zum senden&lt;br /&gt;
      |      |   + Methoden&lt;br /&gt;
      |      |   |    |&lt;br /&gt;
      |      |   |    + Senden&lt;br /&gt;
      |      |   |    + Empfangen&lt;br /&gt;
      |      |   + Events&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Daten empfangen&lt;br /&gt;
      |      |        + Daten gesendet&lt;br /&gt;
      |      + Ports&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |          |&lt;br /&gt;
      |      |          + Wert&lt;br /&gt;
      |      |          + PortBit&lt;br /&gt;
      |      |               |&lt;br /&gt;
      |      |               + Eigenschaften&lt;br /&gt;
      |      |                      |&lt;br /&gt;
      |      |                      + Wert&lt;br /&gt;
      |      + Arbeitsspeicher&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Objekte&lt;br /&gt;
      |      |             |&lt;br /&gt;
      |      |             + Variablen&lt;br /&gt;
      |      |             |     |&lt;br /&gt;
      |      |             |     + ..&lt;br /&gt;
      |      |             + MemoryBlock&lt;br /&gt;
      |      |                   |&lt;br /&gt;
      |      |                   + Methoden&lt;br /&gt;
      |      |                        |&lt;br /&gt;
      |      |                        + ByteValue &lt;br /&gt;
      |      |                        + IntegerValue &lt;br /&gt;
      |      |                        + WordValue &lt;br /&gt;
      |      |                        + LongValue &lt;br /&gt;
      |      |                        + SingleValue &lt;br /&gt;
      |      |                        + StringValue &lt;br /&gt;
      |      + ..&lt;br /&gt;
      + Methoden&lt;br /&gt;
            |&lt;br /&gt;
            + ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man kann nun auf die Eigenschaften und Methoden der Objekte zugreifen um die gewünschten Ziele zu erreichen. Dies vereinfacht den Zugriff auf die Hardware, minimiert die Fehlerrate, dient der Übersichtlichkeit im Programmcode. Dies erleichtert den Weg zur effizienten und zügigen Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
'''Die grundlegende Programmstruktur ist im Allgemeinen Folgende:'''&lt;br /&gt;
&lt;br /&gt;
* Controllerdefinition&lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Deklarationen&lt;br /&gt;
** Hauptprogramm&lt;br /&gt;
*** Unterprogramme&lt;br /&gt;
*** Datenstrukturen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;br /&gt;
&lt;br /&gt;
'''BeispielSource: Terminal'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = attiny2313&lt;br /&gt;
avr.clock = 20000000          ' Quarzfrequenz&lt;br /&gt;
avr.stack = 32                ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
uart.baud = 19200             ' Baudrate&lt;br /&gt;
uart.Recv.Enable&lt;br /&gt;
uart.Send.Enable&lt;br /&gt;
&lt;br /&gt;
dim chars as string&lt;br /&gt;
&lt;br /&gt;
print 27 ; &amp;quot;[21&amp;quot; ; 27 ; &amp;quot;[2J&amp;quot; ; chr(27) ; &amp;quot;c&amp;quot; ;	27 ; &amp;quot;[?6l&amp;quot;;	' Terminal setup (VT100 clear)&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  inpstr &amp;quot; terminal &amp;gt; &amp;quot;,chars&lt;br /&gt;
  select case chars&lt;br /&gt;
  case &amp;quot;hallo&amp;quot;&lt;br /&gt;
    print &amp;quot;jenau, wie gehts?&amp;quot;&lt;br /&gt;
  caseelse&lt;br /&gt;
    print &amp;quot;Sie haben eingegeben: &amp;quot;+34+chars+34&lt;br /&gt;
  endselect&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispielsource: Exceptions'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr.device = atmega32&lt;br /&gt;
avr.clock = 20000000          ' Quarzfrequenz&lt;br /&gt;
avr.stack = 32                ' Bytes Programmstack (Vorgabe: 16)&lt;br /&gt;
uart.baud = 19200             ' Baudrate&lt;br /&gt;
uart.Recv.Enable&lt;br /&gt;
uart.Send.Enable&lt;br /&gt;
&lt;br /&gt;
dim chars as string&lt;br /&gt;
dim m,m1 as memory&lt;br /&gt;
&lt;br /&gt;
print 27 ; &amp;quot;[21&amp;quot; ; 27 ; &amp;quot;[2J&amp;quot; ; chr(27) ; &amp;quot;c&amp;quot; ;	27 ; &amp;quot;[?6l&amp;quot;;	' Terminal setup&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  inpstr &amp;quot; test &amp;gt; &amp;quot;,chars&lt;br /&gt;
  call ausgabe(chars)&lt;br /&gt;
  select case chars&lt;br /&gt;
  case &amp;quot;m&amp;quot;      ' ständig neuen memoryblock anlegen bis Speicher voll&lt;br /&gt;
    m = MemoryBlock(100)&lt;br /&gt;
  case &amp;quot;v&amp;quot;&lt;br /&gt;
    print &amp;quot;m.ByteValue(0)=&amp;quot;+str(m.ByteValue(0)) ' aufruf vor zuweisung eines MemoryBlock führt zur Exception&lt;br /&gt;
  endselect&lt;br /&gt;
  print &amp;quot;SRAM: &amp;quot;+str(memory.space)+&amp;quot; Bytes frei&amp;quot;&lt;br /&gt;
  print &amp;quot;--------------------------------------------------------&amp;quot;&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
procedure ausgabe(s as string)&lt;br /&gt;
  print &amp;quot;s = &amp;quot;+s&lt;br /&gt;
  print &amp;quot;chars = &amp;quot;+chars&lt;br /&gt;
endproc&lt;br /&gt;
&lt;br /&gt;
Exception OutOfSpaceMemory&lt;br /&gt;
  print &amp;quot;*** Exception OutOfSpaceMemory ***&amp;quot;&lt;br /&gt;
EndException&lt;br /&gt;
Exception OutOfBoundsMemory&lt;br /&gt;
  print &amp;quot;*** Exception OutOfBoundsMemory ***&amp;quot;&lt;br /&gt;
EndException&lt;br /&gt;
Exception NilObjectException&lt;br /&gt;
  print &amp;quot;*** Exception NilObjectException ***&amp;quot;&lt;br /&gt;
EndException&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispielsource: Blinksteuerung/Blinkmodul Auto &amp;amp; Motorrad'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
' 2010 rgf software&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
' Simple Blinksteuerung für Harley-Armaturen (Taster, kein Schalter)&lt;br /&gt;
' mit Antippfunktion (nur 3x Blinken bei kurzer Betätigung),&lt;br /&gt;
' automatischer Rückstellung und Warnblinklicht.&lt;br /&gt;
'--------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
avr.device = attiny85&lt;br /&gt;
avr.clock = 8000000&lt;br /&gt;
&lt;br /&gt;
dim i,blinkmode,BlinkCount,KurzBlinken,LastPressed as byte&lt;br /&gt;
dim tcount,ticks,t as integer&lt;br /&gt;
&lt;br /&gt;
const TasterState = 0&lt;br /&gt;
const DauerBlinkZeit = 300&lt;br /&gt;
&lt;br /&gt;
portb.1.mode = Output, pulldown&lt;br /&gt;
portb.2.mode = Output, pulldown&lt;br /&gt;
portb.4.mode = Input, pulldown&lt;br /&gt;
portb.5.mode = Input, pulldown&lt;br /&gt;
&lt;br /&gt;
Timer0.clock = 1024&lt;br /&gt;
Timer0.isr = BlinkTimer&lt;br /&gt;
Timer0.Enable&lt;br /&gt;
&lt;br /&gt;
avr.interrupts.enable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
define TasterLinks as PINB.4&lt;br /&gt;
define TasterRechts as PINB.3&lt;br /&gt;
define BlinkerLinks as PORTB.1&lt;br /&gt;
define BlinkerRechts as PORTB.2&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
  if TasterLinks = TasterState then&lt;br /&gt;
    waitms 25                                  ' debounce&lt;br /&gt;
    if TasterLinks = TasterState then&lt;br /&gt;
      if blinkmode &amp;gt; 0 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      else&lt;br /&gt;
        blinkmode = 1&lt;br /&gt;
        KurzBlinken = 1&lt;br /&gt;
        BlinkCount = 0&lt;br /&gt;
        tcount = 0&lt;br /&gt;
        call BlinkerToggle&lt;br /&gt;
        waitms DauerBlinkZeit&lt;br /&gt;
        if TasterLinks = TasterState then      ' prüfen ob Taster immernoch gedrückt&lt;br /&gt;
          KurzBlinken = 0&lt;br /&gt;
        end if&lt;br /&gt;
        if TasterRechts = TasterState then&lt;br /&gt;
          waitms 25                            ' debounce&lt;br /&gt;
          if TasterRechts = TasterState then   ' Beide gedrückt?&lt;br /&gt;
            call BlinkerOff&lt;br /&gt;
            blinkmode = 3&lt;br /&gt;
            KurzBlinken = 0&lt;br /&gt;
          end if&lt;br /&gt;
        end if&lt;br /&gt;
      end if&lt;br /&gt;
      call TasterWait&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
&lt;br /&gt;
  if TasterRechts = TasterState then&lt;br /&gt;
    waitms 25                                 ' debounce&lt;br /&gt;
    if TasterRechts = TasterState then&lt;br /&gt;
      if blinkmode &amp;gt; 0 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      else&lt;br /&gt;
        blinkmode = 2&lt;br /&gt;
        KurzBlinken = 1&lt;br /&gt;
        BlinkCount = 0&lt;br /&gt;
        tcount = 0&lt;br /&gt;
        call BlinkerToggle&lt;br /&gt;
        waitms DauerBlinkZeit&lt;br /&gt;
        if TasterRechts = TasterState then    ' prüfen ob Taster immernoch gedrückt&lt;br /&gt;
          KurzBlinken = 0&lt;br /&gt;
        end if&lt;br /&gt;
        if TasterLinks = TasterState then&lt;br /&gt;
          waitms 25                           ' debounce&lt;br /&gt;
          if TasterLinks = TasterState then   ' Beide gedrückt?&lt;br /&gt;
            call BlinkerOff&lt;br /&gt;
            blinkmode = 3&lt;br /&gt;
            KurzBlinken = 0&lt;br /&gt;
          end if&lt;br /&gt;
        end if&lt;br /&gt;
      end if&lt;br /&gt;
      call TasterWait&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
&lt;br /&gt;
loop&lt;br /&gt;
&lt;br /&gt;
label TasterWait&lt;br /&gt;
  do&lt;br /&gt;
    waitms 25&lt;br /&gt;
  loop until TasterLinks = 1 and TasterRechts = 1&lt;br /&gt;
endlabel&lt;br /&gt;
&lt;br /&gt;
isr BlinkTimer&lt;br /&gt;
  incr tcount&lt;br /&gt;
  if tcount = 12 then                                       ' 1,5 Hz&lt;br /&gt;
    call BlinkerToggle&lt;br /&gt;
    tcount = 0&lt;br /&gt;
    incr BlinkCount&lt;br /&gt;
    if KurzBlinken = 1 and BlinkCount &amp;gt;= 6 then             ' 3 x blinken und aus&lt;br /&gt;
      call BlinkerOff&lt;br /&gt;
    elseif BlinkCount &amp;gt;= 200 then                           ' 100 x blinken und aus (wenn vergessen automatische Rückstellung)&lt;br /&gt;
      if blinkmode &amp;lt; 3 then&lt;br /&gt;
        call BlinkerOff&lt;br /&gt;
      end if&lt;br /&gt;
    end if&lt;br /&gt;
  end if&lt;br /&gt;
endisr&lt;br /&gt;
&lt;br /&gt;
label BlinkerOff&lt;br /&gt;
  blinkmode = 0&lt;br /&gt;
  BlinkerLinks = 0&lt;br /&gt;
  BlinkerRechts = 0&lt;br /&gt;
endlabel&lt;br /&gt;
&lt;br /&gt;
label BlinkerToggle&lt;br /&gt;
  if blinkmode=1 or blinkmode=3 then&lt;br /&gt;
    toggle BlinkerLinks&lt;br /&gt;
  end if&lt;br /&gt;
  if blinkmode=2 or blinkmode=3 then&lt;br /&gt;
    toggle BlinkerRechts&lt;br /&gt;
  end if&lt;br /&gt;
endlabel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18733</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18733"/>
				<updated>2011-11-05T21:07:55Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine neue objektbasierte Programmiersprache für [http://www.atmel.com Atmel® AVR® Mikrocontroller], deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen wie [http://www.realsoftware.com RealStudio®] oder [http://www.java.com Java®] orientiert. Sie ist mit einer einfach zu erlernenden Syntax ausgestattet und eignet sich für die effiziente und zeitsparende Entwicklung von kleinen bis großen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist ein junges Projekt, kostenlos und man kann an der Entwicklung der Sprache mitwirken.&lt;br /&gt;
&lt;br /&gt;
Sämtliche Bibliotheksfunktionen auf die im Hintergrund zugegriffen werden, sind in Assembler geschrieben. Der erzeugte Code wird beim Kompiliervorgang wahlweise auf Länge oder Geschwindigkeit optimiert. Das erzeugte Binary ist von der Größe her vergleichbar mit existierenden Hochsprachen wie [http://winavr.sourceforge.net|C/C++]. Die Geschwindigkeit liegt auf dem Level von C/C++ und ist damit bis zu 10x schneller als vergleichbarer Code aus BASCOM®. LunaAVR unterliegt wie auch C/C++ keiner Beschränkung bei der Tiefe von Ausdrücken. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (z.Bsp. dynamische Strings oder Strukturen).&lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
===Programme===&lt;br /&gt;
* Editor (speziell angepasster Editor, Basis für IDE), Version 2.1.332 (derzeit noch nicht veröffentlicht)&lt;br /&gt;
* Compiler Version 0.1.64_alpha (derzeit noch nicht veröffentlicht)&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* IDE&lt;br /&gt;
* Assembler&lt;br /&gt;
&lt;br /&gt;
===Bibliotheken===&lt;br /&gt;
* '''Typkonvertierungen'''&lt;br /&gt;
** Integer&amp;lt;&amp;gt;Single&lt;br /&gt;
** Integer&amp;lt;&amp;gt;String&lt;br /&gt;
** Single&amp;lt;&amp;gt;String&lt;br /&gt;
&lt;br /&gt;
* '''Speicherverwaltung'''&lt;br /&gt;
** dynamische Objekte&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Eeprom'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* '''Flash (Data)'''&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Konstanten&lt;br /&gt;
&lt;br /&gt;
* '''Math'''&lt;br /&gt;
** Integer 8-32 Bit&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
** '''Floating Point (Single)'''&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
* '''String'''&lt;br /&gt;
** Instr()&lt;br /&gt;
** Left()&lt;br /&gt;
** Right()&lt;br /&gt;
** Mid()&lt;br /&gt;
** Upper()&lt;br /&gt;
** Lower()&lt;br /&gt;
&lt;br /&gt;
* '''UART''' &lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Eingabe&lt;br /&gt;
** Ausgabe&lt;br /&gt;
&lt;br /&gt;
* '''Standardfunktionen'''&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* Math: Mul/Div 8-32 Bit Integer für Classic Core&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine '''objektbasierte''' Programmiersprache und damit eine Zwischenform von prozeduraler und objektorientierter Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Die Implementation der Objektbasierung richtet sich nach den Hardware-Gegebenheiten der AVR-Mikrocontroller. In [http://de.wikipedia.org/wiki/Atmel_AVR AVR Mikrocontrollern] wird der [http://de.wikipedia.org/wiki/Maschinencode Maschinencode] im Flashspeicher abgelegt, womit Programmteile nicht vererbt oder kopiert werden können, um sie an anderer Stelle auszuführen. Weiterhin sind die Ressourcen in Mikrocontrollern stark begrenzt.&lt;br /&gt;
&lt;br /&gt;
Damit eine effiziente und speicherplatzsparende Programmierung möglich wird, ist die Objektbasierung in LunaAVR nicht überladen. Dem Programmierer soll unnötige Arbeit abgenommen und möglichst weitreichende Vorteile objektorientierter Programmierung bei gleichzeitigem vollen Zugriff auf alle Ressourcen zur Verfügung gestellt werden.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte &amp;quot;Klasse&amp;quot; implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt.&lt;br /&gt;
&lt;br /&gt;
Darauf basierend werden Objekte abgeleitet, beispielsweise vom Arbeitsspeicher das Objekt &amp;quot;MemoryBlock&amp;quot; oder Variablen usw.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Avr&lt;br /&gt;
      |&lt;br /&gt;
      +-- Eigenschaften&lt;br /&gt;
      |        |&lt;br /&gt;
      |        + Controller-Typ&lt;br /&gt;
      |        + Stack-Size&lt;br /&gt;
      |        + Größe Arbeitsspeicher&lt;br /&gt;
      |        + Größe Eeprom&lt;br /&gt;
      |        + Taktrate&lt;br /&gt;
      |        + ..&lt;br /&gt;
      +-- Objekte&lt;br /&gt;
      |      |&lt;br /&gt;
      |      + UART&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |   |      |&lt;br /&gt;
      |      |   |      + Baudrate&lt;br /&gt;
      |      |   |      + Daten bereit zum empfangen&lt;br /&gt;
      |      |   |      + Daten bereit zum senden&lt;br /&gt;
      |      |   + Methoden&lt;br /&gt;
      |      |   |    |&lt;br /&gt;
      |      |   |    + Senden&lt;br /&gt;
      |      |   |    + Empfangen&lt;br /&gt;
      |      |   + Events&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Daten empfangen&lt;br /&gt;
      |      |        + Daten gesendet&lt;br /&gt;
      |      + Ports&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |          |&lt;br /&gt;
      |      |          + Wert&lt;br /&gt;
      |      |          + PortBit&lt;br /&gt;
      |      |               |&lt;br /&gt;
      |      |               + Eigenschaften&lt;br /&gt;
      |      |                      |&lt;br /&gt;
      |      |                      + Wert&lt;br /&gt;
      |      + Arbeitsspeicher&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Objekte&lt;br /&gt;
      |      |             |&lt;br /&gt;
      |      |             + Variablen&lt;br /&gt;
      |      |             |     |&lt;br /&gt;
      |      |             |     + ..&lt;br /&gt;
      |      |             + MemoryBlock&lt;br /&gt;
      |      |                   |&lt;br /&gt;
      |      |                   + Methoden&lt;br /&gt;
      |      |                        |&lt;br /&gt;
      |      |                        + ByteValue &lt;br /&gt;
      |      |                        + IntegerValue &lt;br /&gt;
      |      |                        + WordValue &lt;br /&gt;
      |      |                        + LongValue &lt;br /&gt;
      |      |                        + SingleValue &lt;br /&gt;
      |      |                        + StringValue &lt;br /&gt;
      |      + ..&lt;br /&gt;
      + Methoden&lt;br /&gt;
            |&lt;br /&gt;
            + ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man kann nun auf die Eigenschaften und Methoden der Objekte zugreifen um die gewünschten Ziele zu erreichen. Dies vereinfacht den Zugriff auf die Hardware, minimiert die Fehlerrate, dient der Übersichtlichkeit im Programmcode. Dies erleichtert den Weg zur effizienten und zügigen Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
'''Die grundlegende Programmstruktur ist im Allgemeinen Folgende:'''&lt;br /&gt;
&lt;br /&gt;
* Controllerdefinition&lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Deklarationen&lt;br /&gt;
** Hauptprogramm&lt;br /&gt;
*** Unterprogramme&lt;br /&gt;
*** Datenstrukturen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18732</id>
		<title>LunaAVR</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=LunaAVR&amp;diff=18732"/>
				<updated>2011-11-05T21:05:48Z</updated>
		
		<summary type="html">&lt;p&gt;Rgf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LunaAVR=&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine neue objektbasierte Programmiersprache für [http://www.atmel.com Atmel® AVR® Mikrocontroller], deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen wie [http://www.realsoftware.com RealStudio®] oder [http://www.java.com Java®] orientiert. Sie ist mit einer einfach zu erlernenden Syntax ausgestattet und eignet sich für die effiziente und zeitsparende Entwicklung von kleinen bis großen Softwareprojekten für AVR Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist ein junges Projekt, kostenlos und man kann an der Entwicklung der Sprache mitwirken.&lt;br /&gt;
&lt;br /&gt;
Sämtliche Bibliotheksfunktionen auf die im Hintergrund zugegriffen werden, sind in Assembler geschrieben. Der erzeugte Code wird beim Kompiliervorgang wahlweise auf Länge oder Geschwindigkeit optimiert. Das erzeugte Binary ist von der Größe her vergleichbar mit existierenden Hochsprachen wie [http://winavr.sourceforge.net|C/C++]. Die Geschwindigkeit liegt auf dem Level von C/C++ und ist damit bis zu 10x schneller als vergleichbarer Code aus BASCOM®. LunaAVR unterliegt wie auch C/C++ keiner Beschränkung bei der Tiefe von Ausdrücken. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (z.Bsp. dynamische Strings oder Strukturen).&lt;br /&gt;
&lt;br /&gt;
==Status des Projekts==&lt;br /&gt;
&lt;br /&gt;
===Programme===&lt;br /&gt;
* Editor (speziell angepasster Editor, Basis für IDE), Version 2.1.332 (derzeit noch nicht veröffentlicht)&lt;br /&gt;
* Compiler Version 0.1.64_alpha (derzeit noch nicht veröffentlicht)&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* IDE&lt;br /&gt;
* Assembler&lt;br /&gt;
&lt;br /&gt;
===Bibliotheken===&lt;br /&gt;
* Typkonvertierungen&lt;br /&gt;
** Integer&amp;lt;&amp;gt;Single&lt;br /&gt;
** Integer&amp;lt;&amp;gt;String&lt;br /&gt;
** Single&amp;lt;&amp;gt;String&lt;br /&gt;
&lt;br /&gt;
* Speicherverwaltung&lt;br /&gt;
** dynamische Objekte&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* Eeprom&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Variablen&lt;br /&gt;
** Arrays&lt;br /&gt;
&lt;br /&gt;
* Flash (Data)&lt;br /&gt;
** Strukturen&lt;br /&gt;
** Konstanten&lt;br /&gt;
&lt;br /&gt;
* Math&lt;br /&gt;
** Integer 8-32 Bit&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
** Floating Point (Single)&lt;br /&gt;
*** Addition&lt;br /&gt;
*** Subtraktion&lt;br /&gt;
*** Multiplikation&lt;br /&gt;
*** Division&lt;br /&gt;
*** Fast Increment&lt;br /&gt;
*** Fast Decrement&lt;br /&gt;
&lt;br /&gt;
* String&lt;br /&gt;
** Instr()&lt;br /&gt;
** Left()&lt;br /&gt;
** Right()&lt;br /&gt;
** Mid()&lt;br /&gt;
** Upper()&lt;br /&gt;
** Lower()&lt;br /&gt;
&lt;br /&gt;
* UART &lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Eingabe&lt;br /&gt;
** Ausgabe&lt;br /&gt;
&lt;br /&gt;
* Standardfunktionen&lt;br /&gt;
&lt;br /&gt;
====ausstehend====&lt;br /&gt;
* Math: Mul/Div 8-32 Bit Integer für Classic Core&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Struktur ==&lt;br /&gt;
&lt;br /&gt;
LunaAVR ist eine '''objektbasierte''' Programmiersprache und damit eine Zwischenform von prozeduraler und objektorientierter Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Die Implementation der Objektbasierung richtet sich nach den Hardware-Gegebenheiten der AVR-Mikrocontroller. In [http://de.wikipedia.org/wiki/Atmel_AVR AVR Mikrocontrollern] wird der [http://de.wikipedia.org/wiki/Maschinencode Maschinencode] im Flashspeicher abgelegt, womit Programmteile nicht vererbt oder kopiert werden können, um sie an anderer Stelle auszuführen. Weiterhin sind die Ressourcen in Mikrocontrollern stark begrenzt.&lt;br /&gt;
&lt;br /&gt;
Damit eine effiziente und speicherplatzsparende Programmierung möglich wird, ist die Objektbasierung in LunaAVR nicht überladen. Dem Programmierer soll unnötige Arbeit abgenommen und möglichst weitreichende Vorteile objektorientierter Programmierung bei gleichzeitigem vollen Zugriff auf alle Ressourcen zur Verfügung gestellt werden.&lt;br /&gt;
&lt;br /&gt;
Jeder AVR-Mikrocontroller ist intern als eine sogenannte &amp;quot;Klasse&amp;quot; implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt.&lt;br /&gt;
&lt;br /&gt;
Darauf basierend werden Objekte abgeleitet, beispielsweise vom Arbeitsspeicher das Objekt &amp;quot;MemoryBlock&amp;quot; oder Variablen usw.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Avr&lt;br /&gt;
      |&lt;br /&gt;
      +-- Eigenschaften&lt;br /&gt;
      |        |&lt;br /&gt;
      |        + Controller-Typ&lt;br /&gt;
      |        + Stack-Size&lt;br /&gt;
      |        + Größe Arbeitsspeicher&lt;br /&gt;
      |        + Größe Eeprom&lt;br /&gt;
      |        + Taktrate&lt;br /&gt;
      |        + ..&lt;br /&gt;
      +-- Objekte&lt;br /&gt;
      |      |&lt;br /&gt;
      |      + UART&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |   |      |&lt;br /&gt;
      |      |   |      + Baudrate&lt;br /&gt;
      |      |   |      + Daten bereit zum empfangen&lt;br /&gt;
      |      |   |      + Daten bereit zum senden&lt;br /&gt;
      |      |   + Methoden&lt;br /&gt;
      |      |   |    |&lt;br /&gt;
      |      |   |    + Senden&lt;br /&gt;
      |      |   |    + Empfangen&lt;br /&gt;
      |      |   + Events&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Daten empfangen&lt;br /&gt;
      |      |        + Daten gesendet&lt;br /&gt;
      |      + Ports&lt;br /&gt;
      |      |   |&lt;br /&gt;
      |      |   + Eigenschaften&lt;br /&gt;
      |      |          |&lt;br /&gt;
      |      |          + Wert&lt;br /&gt;
      |      |          + PortBit&lt;br /&gt;
      |      |               |&lt;br /&gt;
      |      |               + Eigenschaften&lt;br /&gt;
      |      |                      |&lt;br /&gt;
      |      |                      + Wert&lt;br /&gt;
      |      + Arbeitsspeicher&lt;br /&gt;
      |      |        |&lt;br /&gt;
      |      |        + Objekte&lt;br /&gt;
      |      |             |&lt;br /&gt;
      |      |             + Variablen&lt;br /&gt;
      |      |             |     |&lt;br /&gt;
      |      |             |     + ..&lt;br /&gt;
      |      |             + MemoryBlock&lt;br /&gt;
      |      |                   |&lt;br /&gt;
      |      |                   + Methoden&lt;br /&gt;
      |      |                        |&lt;br /&gt;
      |      |                        + ByteValue &lt;br /&gt;
      |      |                        + IntegerValue &lt;br /&gt;
      |      |                        + WordValue &lt;br /&gt;
      |      |                        + LongValue &lt;br /&gt;
      |      |                        + SingleValue &lt;br /&gt;
      |      |                        + StringValue &lt;br /&gt;
      |      + ..&lt;br /&gt;
      + Methoden&lt;br /&gt;
            |&lt;br /&gt;
            + ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man kann nun auf die Eigenschaften und Methoden der Objekte zugreifen um die gewünschten Ziele zu erreichen. Dies vereinfacht den Zugriff auf die Hardware, minimiert die Fehlerrate, dient der Übersichtlichkeit im Programmcode. Dies erleichtert den Weg zur effizienten und zügigen Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
'''Die grundlegende Programmstruktur ist im Allgemeinen Folgende:'''&lt;br /&gt;
&lt;br /&gt;
* Controllerdefinition&lt;br /&gt;
** Konfiguration&lt;br /&gt;
** Deklarationen&lt;br /&gt;
** Hauptprogramm&lt;br /&gt;
*** Unterprogramme&lt;br /&gt;
*** Datenstrukturen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode LunaAVR]]&lt;/div&gt;</summary>
		<author><name>Rgf</name></author>	</entry>

	</feed>