Diplomarbeit. Softwareentwicklung und Akku-Ladesteuerung für einen Hybrid-Segelieger. Hochschule München. 01. Mai

Größe: px
Ab Seite anzeigen:

Download "Diplomarbeit. Softwareentwicklung und Akku-Ladesteuerung für einen Hybrid-Segelieger. Hochschule München. 01. Mai 2010. 01."

Transkript

1 Hochschule München Fakultät für Elektrotechnik und Informationstechnik Diplomarbeit von Marc Koraschnigg Softwareentwicklung und Akku-Ladesteuerung für einen Hybrid-Segelieger Bearbeitungsbeginn 01. Mai 2010 Abgabetermin 01. Oktober 2010 lfd. Nr. 2702

2 Hochschule München Fakultät für Elektrotechnik und Informationstechnik Diplomarbeit von Marc Koraschnigg Softwareentwicklung und Akku-Ladesteuerung für einen Hybrid-Segelieger Software development and battery charge control for a hybrid-glider Betreuer Prof. J. Plate Bearbeitungsbeginn 01. Mai 2010 Abgabetermin 01. Oktober 2010 lfd. Nr Marc Koraschnigg Diplomarbeit HS München

3 Erklärung des Diplomanden: Name Vorname 1. Ich erkläre hiermit, dass ich die vorliegende Diplomarbeit selbstständig verfasst und noch nicht anderweitig zu Prüfungszwecken vorgelegt habe. Sämtliche benutzte Quellen und Hilfsmittel sind angegeben, wörtliche und sinngemäÿe Zitate sind als solche gekennzeichnet. Ort, Datum Unterschrift 2. Ich erkläre mein Einverständnis, dass die von mir erstellte Diplomarbeit in die Bibliothek der Hochschule München eingestellt wird. Ich wurde darauf hingewiesen, dass die Hochschule in keiner Weise für die missbräuchliche Verwendung von Inhalten durch Dritte infolge der Lektüre der Arbeit haftet. Insbesondere ist mir bewusst, dass ich für die Anmeldung von Patenten, Warenzeichen oder Geschmacksmuster selbst verantwortlich bin und daraus resultierende Ansprüche selbst verfolgen muss. Ort, Datum Unterschrift Marc Koraschnigg Diplomarbeit HS München

4 Kurzfassung Segelugzeuge mit Verbrennungs- oder Elektro-Hilfsmotor stellen beim Segeliegen schon einzelne Lösungen für die Antriebstechnik dar. Die Verwendung eines hybriden Antriebsystems - Kombination aus Elektro- und Benzinmotor, ist Neu und bringt Vorteile hinsichtlich der Verlängerung der Flugzeit, Selbststartmöglichkeit, Sicherheit und Unabhängigkeit. Ziel dieser Diplomarbeit ist die Entwicklung der Software zur Akku-Ladesteuerung sowie die visuelle Ausgabe auf einem Grak LCD. Die einzelnen Aufgaben im Überblick sind: ˆ Initialisierung der Peripherie ˆ Kommunikation mittels SPI, GPIO und CAN ˆ Ladezustandsberechnung der Batterien ˆ Intelligente Ladesteuerung ˆ Visuelle Ausgabe auf dem Grak LCD Synopsis Glider with combustion engines or electric motors are already realized. Advantages of a hybrid propulsion system are an extension of the ying time, option for self launching, safety and independency. Aim of this thesis is the development of the software for the battery charge control as well as the visual output on a graphic display. Summary of the tasks: ˆ Initialization of the peripheral equipment ˆ Communication through SPI, GPIO und CAN ˆ Calculation of the battery state of charge ˆ Intelligent charge control ˆ Visual output on a graphic display Marc Koraschnigg Diplomarbeit HS München

5 Danksagung An dieser Stelle möchte ich mich bei allen Personen bedanken, die mich bei der Erstellung dieser Arbeit unterstützt haben. Ein besonderer Dank gilt meinen Betreuern Herrn Prof. Jürgen Plate und Herrn Prof. Dr.-Ing. Klaus Scheer, die stets für mich ansprechbar waren und mir die Freiheit gelassen haben, die Arbeit nach eigenen Vorstellungen zu entwickeln. Groÿer Dank gebührt auch Dipl.-Ing. (FH) Markus Koch, der mir zu jeder Zeit bei Fragen zur Verfügung stand und mich vor allem auf typograsche Fehler hinwies. Ebenfalls möchte ich mich bei meiner Freundin Saskia Jambor, meiner Schwester Sandra Koraschnigg und ihrem Freund Thomas Wurm bedanken, die mir bei der Korrektur der Diplomarbeit sehr hilfreich zur Seite standen. Auch möchte ich mich im Besonderen bei meinen Eltern bedanken, die mich nicht nur nanziell, sondern auch moralisch sehr unterstützt haben. Marc Koraschnigg Diplomarbeit HS München

6 Inhaltsverzeichnis Inhaltsverzeichnis Abbildungsverzeichnis 8 Tabellenverzeichnis 10 Abkürzungen 11 1 Einleitung Projekt Hybrid-Segelieger Grundlagen des Segelugs Startverfahren Aufwinde Vorteile eines Hybrid-Systems Aufgabenstellung und Ziele Ziel der Diplomarbeit Funktionen im Überblick Die Startsequenz Der Ausgangszustand (Idle-Mode) Hardware und Entwicklungsumgebung Überblick Mikrocontroller Keil Evaluationsboard MCB EA DOGXL Display & Backlight EA LED78x64W µvision3 Integrierte Entwicklungsumgebung Flash Magic Software Softwareentwicklung Peripherieinitialisierung General Purpose Input/Output (GPIO) Marc Koraschnigg Diplomarbeit HS München

7 Inhaltsverzeichnis Serial Peripheral Interface (SPI) Initialisierung des Grak LCDs Real Time Clock (RTC) Battery RAM (NVRAM) Controller Area Network (CAN) Initialisierung der LEDs und des Zeilen-LCDs Das Betriebssystem (kooperatives Multitasking) Initialisierung und Funktionsweise des Betriebssystems Programmablauf Einlesen der Schalter, Taster und Schieber Ausgangssignale Ladezustandsberechnung Die Abtastung des Stromes Displayausgabe Der Displaycontroller Zusammensetzen der Bilder Erster Bereich Zweiter Bereich Dritter Bereich Vierter Bereich Datenübergabe an den Displaycontroller Konvertierung und Anzeige der dynamischen Zahlen Ausblick 70 Literaturverzeichnis 71 A Aktivierung und Verwendung von µvision 3 74 B Initialisierungsbeschreibung des GLCD 77 C Von der Zeichnung zum Array 79 D Daten CD 82 Marc Koraschnigg Diplomarbeit HS München

8 Abbildungsverzeichnis Abbildungsverzeichnis 1.1 Hybrid-System auf einer Welle Segelugzeug beim Windenstart [Wik10c] Segelugzeug beim Flugzeugschlepp [Sch10] Segelugzeug beim Eigenstart [Wik10c] Thermischer Aufwind Hangiegen Leewelle [wet10] Übersicht der Kommunikationswege Die Startsequenz Der Idle Screen Die Ausfahrsequenz Der Elektromotor treibt den Propeller an Der Verbrennungs- und Elektromotor treiben den Propeller an Der Propeller wird in die vertikale Position gebracht Der Verbrennungsmotor lädt die Batterien Keil Evaluationsboard MCB EA DOGXL Display und Backlight LED78x64W Dimensionen GLCD & Cockpit-Einheit LCD Pinbelegung Die Backgroundschaltung Das Flash Magic Tool und die nötigen Einstellungen Softwarekonzept Übersicht der SPI Verbindung 4 Wire zwischen Mikrocontroller und LC Display Übersicht der SPI 3/4-Wire Serial Mode Ablauf der Graphic Liquid Crystal Display (GLCD) Initialisierung.. 38 Marc Koraschnigg Diplomarbeit HS München

9 Abbildungsverzeichnis 4.5 Batterieanschluss Funktionsweise des Schiebers Auszug aus dem Datenblatt (LPC23XX UM) des Mikrocontroller Vom Zeichenprogramm zum Array Das richtige Datenformat Zustände eines Pixel Statischer Welcome Screen Dynamischer Idle Screen Array rst_row (320 Byte groÿ) Übersicht Page 1 und Page Byte des ersten Bereichs Byte des zweiten Bereichs Byte des dritten Bereichs Vierte Bereich Restladezeit Konzept der Wrapper-Funktion Übersicht der dynamischen Felder Die Umwandlung der Variable time in einen String A.1 Das License Management A.2 Single-User License & die Computer ID (CID) A.3 Der Arbeitsbereich A.4 Links: Der Rebuild All Button - Rechts: Der Start Debug Button 76 C.1 Im Zeichenprogramm erstellte Motiv C.2 In den BitFontCreator eingefügte Bild C.3 Die Einstellungen im BitFontCreator Marc Koraschnigg Diplomarbeit HS München

10 Tabellenverzeichnis Tabellenverzeichnis 3.1 Übersicht Mikrocontroller Übersicht der 16 Pins des GLCD Übersicht der verschieden Ansteuerungsmodi Übersicht der verwendeten Bauteile Übersicht der Funktionen des PINSELx Registers Übersicht des PINSEL0 Registers Übersicht der Funktionen des PINMODEx Registers Übersicht der vier Steuerregister Abkürzungen des SP Interface Übersicht der möglichen Motorenzustände C.1 Einstellung für die Datenausgabe Marc Koraschnigg Diplomarbeit HS München

11 Tabellenverzeichnis Abkürzungen GPIO General Purpose Input/Output CAN-Bus Controller Area Network Bussystem CAN SPI LCD GLCD Elkos MSB LSB RTC Controller Area Network Serial Peripheral Interface Liquid Crystal Display Graphic Liquid Crystal Display Elektrolyt-Kondensatoren Most Signicant Bit Least Signicant Bit Real Time Clock Marc Koraschnigg Diplomarbeit HS München

12 1 Einleitung 1 Einleitung 1.1 Projekt Hybrid-Segelieger Die Fakultät 03 für Maschinenbau entwickelt und baut in Zusammenarbeit mit der Fakultät 04 für Elektro- und Informationstechnik den hybriden Antrieb eines Segel- ugzeugs. Die Studenten der FK-03 beschäftigen sich dabei mit der Thematik der Mechanik (Entwicklung von Propeller, Verbrennungsmotor, Aerodynamik usw.). Die Studenten der FK-04 sind für die elektrischen und elektronischen Bauteile (Hardund Software, Leistungs- und Ladeelektronik, Elektromotor, Akkupacks, usw.) verantwortlich. Die Motivation dabei ist es, einen modularen Hybridantrieb (Abbildung 1.1) zu entwickeln, dessen leistungsstarke Akkus durch einen zusätzlichen Verbrennungsmotor während des Gleituges aufgeladen werden. Da bei konstanter Ladeleistung eine vollständige Ladung der Batterien nicht möglich ist, können die Akkus über Nacht durch ein geeignetes Ladegerät am Netz vollständig aufgeladen werden. Zum Eigenstart sowie in der ersten Steigphase soll die kombinierte Leistung aus Verbrennungsmotor (7 kw) und Elektromotor (37 kw) dem Piloten zur Verfügung stehen. Im Sägezahnug kann ein umweltfreundlicher und sicherer Langstreckenug durchgeführt werden. Abbildung 1.1 zeigt das Konzept beider Systeme auf einer Welle. Durch diese Konstellation ergeben sich drei Betriebsmodi. ˆ Elektromotor treibt alleine den Propeller an (37 kw) ˆ Verbrennungsmotor + Elektromotor treiben den Propeller an (7 kw + 37 kw) ˆ Verbrennungsmotor treibt Elektromotor als Generator an und lädt die Batterien mit 2C Ladestrom (7 kw) Marc Koraschnigg Diplomarbeit HS München

13 1 Einleitung Abbildung 1.1: Hybrid-System auf einer Welle Denition 1C = Strom der eine Stunde ieÿen muss, um die Ladungsmenge der typischen Akkukapazität übertragen zu haben. 1.2 Grundlagen des Segelugs Beim Segelug werden Aufwinde (thermischer Aufwind, Hangaufwind oder Leewellen) dazu genutzt, das Flugzeug in höhere Lagen zu bringen. Um die Aufwinde nutzen zu können erfordert es eine bestimmte Mindesthöhe. Diese kann durch verschiedene Startverfahren (Windenstart, Flugzeugschlepp oder Eigenstart) erreicht werden. [Wik10c] Startverfahren Beim Windenstart [Wik10c] wird das Segelugzeug mit Hilfe einer Startwinde nach Vorne gezogen. Durch den eigenen Auftrieb und einem geeigneten Anstellwinkel gewinnt es nach und nach an Höhe. Das Stahl- oder Kunststoseil ist je nach Pistenlänge begrenzt und beträgt meist 800 m bis 3 km. Das Flugzeug wird auf etwa km/h beschleunigt. Marc Koraschnigg Diplomarbeit HS München

14 1 Einleitung Abbildung 1.2: Segel ugzeug beim Windenstart [Wik10c] Beim Flugzeugschlepp [Wik10c] wird das Segel ugzeug von einem Motor ugzeug in die Höhe gezogen. Das befestigte Seil ist dabei mit einer Länge von m deutlich kürzer. Bei dieser Art des Startverfahrens kann die Schlepphöhe und der Ausklinkort frei gewählt werden, so dass das Segel ugzeug direkt in den Aufwind geschleppt werden kann. Abbildung 1.3: Segel ugzeug beim Flugzeugschlepp [Sch10] Beim Eigenstart [Wik10c] wird der im Rumpf sitzende, ausklappbare Propeller ausgefahren und gestartet. Durch den Vorschub gewinnt das Flugzeug an Geschwindigkeit, kann damit abheben und steigen. Wenn die gewünschte Höhe erreicht ist, wird der Motor abgestellt, abgekühlt und eingefahren. Abbildung 1.4: Segel ugzeug beim Eigenstart [Wik10c] Marc Koraschnigg Diplomarbeit HS München

15 1 Einleitung Aufwinde Der thermische Aufwind [Wik10c] entsteht durch die Erwärmung des Bodens durch die Sonne. Dieser gibt seine Wärme ab und bildet einen Thermikschlauch. In diesem kann sich der Pilot kreisend nach oben bewegen. Abbildung 1.5: Thermischer Aufwind Beim Hangiegen [Wik10c] iegt das Flugzeug auf der Luv 1 -Seite eines Berghangs in einer aufwärts gerichteten Luftströmung. Diese entsteht durch den Wind, der am Hang schräg nach oben abgeleitet wird. Abbildung 1.6: Hangiegen Leewellen [Wik10c] entstehen bei besonderen Starkwind-Wetterlagen auf der windabgewandten Seite eines Hindernisses. In diesen Windsystemen können Flughöhen von etwa 3000 m bis 8000 m erreicht werden. 1 Luv = dem Wind zugekehrte Seite Marc Koraschnigg Diplomarbeit HS München

16 1 Einleitung Abbildung 1.7: Leewelle [wet10] 1.3 Vorteile eines Hybrid-Systems Hybrid wird in der Technik als ein System bezeichnet, bei welchem zwei Technologien miteinander kombiniert werden. Für die zusätzliche Antriebstechnik beim Segelieger stellen Elektroantrieb und Benzinmotoren schon einzelne Lösungen dar, die Kombination aus beiden aber ist Neu und bringt weitere neue erwünschte Eigenschaften. So soll der Elektroantrieb, der aus einem 37 kw leistungsstarkem Synchronmotor besteht, den Propeller für etwa 5 Minuten bei konstanter Drehzahl von 5500 U/min antreiben und somit das Flugzeug in den Steigug bringen. Ist der Steigug abgeschlossen wird der Benzinmotor automatisch gestartet und die Batterien über den Elektromotor, der jetzt als Generator agiert, geladen. Bei einem Ladestrom von 2C wird der Akku in einer halben Stunde ausreichend geladen. Bei Segelugzeugen, die ausschlieÿlich einen Verbrennungsmotor zum Antrieb haben, muss sich der Pilot speziell in der Phase nach dem Steigug darum kümmern, dass der Propeller und der Kühler erst nach ausreichender Abkühlung wieder eingefahren wird. Der im Hybrid-System verwendete klein dimensionierte Benzinmotor (7 kw) benötigt weitaus weniger Kühlung. Der Pilot kann den Propeller sofort wieder einfahren und kann sich auf wichtige Aufgaben wie z. B. die Suche nach der Thermik konzentrieren. Ein weiterer Vorteil des Hybrid-Systems liegt darin, dass diese an Flugplätzen betrieben werden können, welche Segelieger mit Benzinmotoren zum Eigenstart aufgrund von Lärmschutz verbieten. Marc Koraschnigg Diplomarbeit HS München

17 2 Aufgabenstellung und Ziele 2 Aufgabenstellung und Ziele 2.1 Ziel der Diplomarbeit Ziel dieser Diplomarbeit ist, eine erste Konzeptionierung und Realisierung der Hardund Software für einen Hybrid-Segelieger zu entwickeln, die zur Aufgabe die Steuerung, die Kommunikation und die Ausgabe der Daten auf einem graschen Display (engl. GLCD) hat. Dies beinhaltet unter anderem auch die Anschaung der Hardware sowie das Konzept für die Umsetzung und Integration im Cockpit. Neue Anforderungen werden derzeit im Team von Prof. Scheer ausgearbeitet, diskutiert und direkt in dieser Arbeit umgesetzt. Da sich bis zur endgültigen Version des Segeliegers die gestellten Anforderungen noch verändern können, ist es Voraussetzung, dass der C Code einfach zu erweitern ist. Ein guter Programmierstil setzt eine bestimmte Quelltextformatierung voraus, die zur Steigerung der Lesbarkeit führt. Kommentare sind heutzutage unerlässlich und trägt, richtig angewandt, erheblich zur schnelleren Erfassbarkeit des Quelltext für Auÿenstehende bei. In Abbildung 2.1 werden die Kommunikationswege der einzelnen Komponenten dargestellt. Diese erfolgt beim LCD über das SPI(Serial Periphal Interface) welches die Daten seriell von Mikrocontroller auf den Controller des Displays überträgt. Marc Koraschnigg Diplomarbeit HS München

18 2 Aufgabenstellung und Ziele Abbildung 2.1: Übersicht der Kommunikationswege Die Eingabe über Taster, Schalter und Schieber für den Piloten erfolgt über die digitalen General Purpose Input/Output (GPIO) des Mikrocontrollers. Die Verbindung zwischen Controller und Akkupacks werden über das Controller Area Network Bussystem (CAN-Bus) Protokoll hergestellt. Steuerungsaufgaben, wie das Ein- und Ausfahren des Propellers oder das automatische Starten des Benzinmotor nach dem Steigug, werden softwareseitig realisiert. Auÿerdem werden die Daten visuell auf einem GLCD angezeigt um den Piloten mit Informationen zu Ladezustand, Generatorspannung, Restladezeit usw. zu versorgen. 2.2 Funktionen im Überblick Die Startsequenz Die Startsequenz, die nach dem Einschalten und den Initialisierungen erscheint, zeigt die aktuelle Softwareversion (Abbildung 2.2) für etwa 4 Sekunden an. Marc Koraschnigg Diplomarbeit HS München

19 2 Aufgabenstellung und Ziele Abbildung 2.2: Die Startsequenz Der Ausgangszustand (Idle-Mode) Ist die Startsequenz beendet, springt das Programm in den sog. Idle-Mode über (Abbildung 2.3). An oberster Stelle wird der aktuelle Ladezustand (SOC) der Batterien als Balken und als prozentualer Wert angezeigt. In zweiter Reihe wird die aktuelle Position des Bedienhebels (engl. Control Lever)aufgeführt, direkt darunter ist die Gra k der zwei Motoren auf einer gemeinsamen Welle zu sehen. Der vierte und unterste Teil des Displays ist im Ausgangszustand leer. Dieser Bereich wird zur Anzeige verschiedener Informationen für den Piloten genutzt. Abbildung 2.3: Der Idle Screen Bedienhebel von Position OFF auf 1: Es erscheint die Sequenz, die dem Piloten das Ausfahren des Propeller-Arm's signalisiert (Abbildung 2.4). Diese wird erst unterbrochen und zurück in den Ausgangszustand gebracht, wenn das Signal angibt (bei der Simulation Taster 1), dass der Propeller-Arm vollständig ausgefahren und verriegelt ist. Abbildung 2.4: Die Ausfahrsequenz Marc Koraschnigg Diplomarbeit HS München

20 2 Aufgabenstellung und Ziele Zurück im Ausgangszustand signalisiert die zweite Reihe das der Bedienhebel auf Position 1 steht. Von Position 1 kann der Bedienhebel entweder auf Position 2 oder aber wieder zurück in Position 0 (OFF) gestellt werden. Von Position 1 auf 2: Es wird der Elektromotor gestartet (Abbildung 2.5) und treibt den Propeller für den Steig ug an. Die aktuelle Restantriebszeit erscheint im untersten Bereich und wechselt alle 10 Sekunden auf die aktuelle Spannung und den aktuellen Strom. Der Elektromotor schaltet automatisch ab, wenn der Akkuladezustand einen Wert von 4 % erreicht hat. Dieser Wert kann in der Header-Datei setup.h de niert werden. Abbildung 2.5: Der Elektromotor treibt den Propeller an Von Position 2 auf 3: Es wird zusätzlich zum Elektromotor der Verbrennungsmotor gestartet (Abbildung 2.6). Die Leistung erhöht sich dabei um 7 kw (Verbrennungsmotor) auf 44 kw. Um bei der Simulation in diesen Modus zu gelangen, wird der Schalter von der mittleren auf die linke Position gestellt. Abbildung 2.6: Der Verbrennungs- und Elektromotor treiben den Propeller an Von Position 2 auf 1: Es erscheint die Sequenz, die dem Piloten anzeigt, dass der Propeller in die vertikale Stellung gebracht wird (Abbildung 2.7). Diese wird erst unterbrochen und wieder zurück in den Ausgangszustand gebracht, wenn das Signal anliegt (bei der Simulation Taster 1), dass sich der Propeller in Vertikalstellung be ndet. Marc Koraschnigg Diplomarbeit HS München

21 2 Aufgabenstellung und Ziele Abbildung 2.7: Der Propeller wird in die vertikale Position gebracht Sobald der Propeller in vertikaler Stellung ist, startet automatisch der Verbrennungsmotor und lädt die Batterien. Im untersten Abschnitt wird zudem die ungefähre Restladezeit in Minuten angezeigt (Abbildung 2.8). Der Verbrennungsmotor schaltet bei einem Ladezustand von 85% automatisch ab. Auch dieser Wert kann in der Header-Datei setup.h eingestellt werden. Abbildung 2.8: Der Verbrennungsmotor lädt die Batterien Von Position 1 auf OFF: Es erscheint die Sequenz, die dem Piloten das Einfahren des Propeller-Arm's signalisiert (Abbildung 2.4 nur in umgekehrter Reihenfolge). Auch diese wird erst unterbrochen und zurück in den Ausgangszustand gebracht, wenn das Signal anliegt (bei der Simulation Taster 1), dass der Propeller-Arm vollständig eingefahren und verriegelt ist. Der Pilot hat zudem die Möglichkeit, die Akkuladung jederzeit manuell zu starten. Dazu wird der Schalter von der mittleren auf die rechte Position gestellt. Bei Ladung der Batterien durch ein externes Ladegerät (um eine vollständige Ladung zu erreichen) wird der aktuelle Wert der Ladekapazität durch betätigen des Tasters 3 über drei Sekunden lang auf den Gesamtwert von 100 % gebracht. Die Kapazität der Akkus in As kann in der Header-Datei setup.h eingestellt werden. Sind die Batterien ausreichend geladen (85 %) oder betätigt der Pilot den Taster 2, so schaltet sich der Verbrennungsmotor ab. Marc Koraschnigg Diplomarbeit HS München

22 3 Hardware und Entwicklungsumgebung 3 Hardware und Entwicklungsumgebung 3.1 Überblick Mikrocontroller Denition: Mikrocontroller sind Prozessoren, die neben der CPU und Speicher über eine Vielfalt von Peripherie auf dem Chip verfügen, um Steuer- und Regelungsaufgaben in embedded systems zu übernehmen. [Kri10] Im folgenden werden drei Mikrocontroller (Tabelle 3.1) aufgeführt, die für das Projekt in Frage kommen. Bei der Auswahl der Controller kam es nicht so sehr auf deren Schnelligkeit, sondern auf die zusätzlichen komplexeren Peripheriefunktionen wie z.b. die Controller Area Network (CAN)- oder die Serial Peripheral Interface (SPI)- Schnittstelle, sowie auf die Gröÿe des Speichers an. Ein einzelnes Bild benötigt auf dem DOGXL Display (160 x 104 x 2 Pixel) 4160 Byte, was bei einer Sequenz von nur vier Bildern schon ungefähr 20 kbyte ausmachen kann. Hersteller Controller Flash/RAM ATMEL AVR AT90CAN /4 kbyte NXP lpc /58 kbyte Microchip Tec. dspic33 256/16 kbyte Tabelle 3.1: Übersicht Mikrocontroller Da die Fakultät 04 dem Team ein Keil Evaluationsboard MCB2300 mit einem NXP lpc2368 Controller zur Verfügung gestellt hat, wird auf die alternativen Controller Marc Koraschnigg Diplomarbeit HS München

23 3 Hardware und Entwicklungsumgebung nicht weiter eingegangen. Falls sich in der nalen Version Änderungen am Controller ergeben, kann der C-Code recht einfach portiert werden. Änderungen müssten hauptsächlich bei der Initialisierung gemacht werden. 3.2 Keil Evaluationsboard MCB2300 Das Evaluationsboard MCB2300 (Abbildung 3.1) der Firma Keil ist mit einem 32- Bit lpc2368 (ARM7) Mikrocontroller der Firma NXP Semiconductors (früher ein Unternehmensbereich von Siemens) ausgestattet und dient als Grundlage für die Erarbeitung der Intelligenz des Systems. Der interne RAM Speicher beträgt 58 kbyte und der interne FLASH-ROM Speicher 512 kbyte. Als Ein- und Ausgabe Schnittstellen stehen unter anderem auf dem Board zur Verfügung: ˆ 8 LEDs ˆ 1 analoger Eingang (Potentiometer) ˆ 1 analoger Ausgang (Lautsprecher) ˆ 2 serielle Ports ˆ 2 CAN Ports ˆ 1 Ethernet Verbindung ˆ 1 SD Karten Slot ˆ sowie ein 16 Buchstaben x 2 Linien LCD Die 104 Input/Output(I/O)-Pins können beliebig beschalten werden. Die Spannungsversorgung wird über einen USB Anschluss (5 VDC) bereitgestellt. Marc Koraschnigg Diplomarbeit HS München

24 3 Hardware und Entwicklungsumgebung Abbildung 3.1: Keil Evaluationsboard MCB2300 Das Datenblatt der Mikrocontroller-Reihe lpc23xx bendet sich auf der beigelegten CD. Vorsicht! Es muss darauf geachtet werden, dass die Pin Kongurationen aus Kapitel 8 sowie der Pin Connect Block aus Kapitel 9 nur mit denen des Mikrocontroller lpc2377/78 übereinstimmen und funktionieren und nicht mit dem eigentlich verbauten Mikrocontroller lpc EA DOGXL Display & Backlight EA LED78x64W Als grasche Ausgabe wird das DOGXL Display sowie die Hintergrundbeleuchtung LED 78 x 64W (Abbildung 3.2) der Firma Electronic Assembly verwendet. Das 3,3" groÿe GLCD mit Pixel kann mit 3,3 V betrieben werden und wird über das SPI angesteuert. Mit einer Moduläche von 78 mm 50 mm (Länge Breite) kann das Display wie in Abbildung 3.3 in eine genormte Cockpit-Einheit (Durchmesser: 80 mm) integriert werden. Die Gröÿe der tatsächlichen Sichtäche be- Marc Koraschnigg Diplomarbeit HS München

25 3 Hardware und Entwicklungsumgebung trägt 69 mm 43 mm (Länge Breite) und passt somit in den denierten Bereich. Abbildung 3.2: EA DOGXL Display und Backlight LED78x64W Abbildung 3.3: Dimensionen GLCD & Cockpit-Einheit Zuerst werden das Display und der Beleuchtungskörper (LED 78 x 64W) aufeinander gesteckt. Die Bauart sowie die Anordnung der 22 Pins (Lochraster-Abstand 2,54 mm) ermöglichen ein direktes Einlöten in die Platine. Die 16 Pins auf der Oberseite sind Steuer- und Datenleitungen, die sechs Pins auf der Unterseite dienen zur Beschaltung der Hintergrundbeleuchtung. Abbildung 3.4 und Tabelle 3.2 zeigt das Display mit seinen Pinbelegungen. Marc Koraschnigg Diplomarbeit HS München

26 3 Hardware und Entwicklungsumgebung Abbildung 3.4: LCD Pinbelegung VLCD erzeugt über die beiden Voltage Converter Paare (VB0+, VB0-, VB1+ & VB1-) die Betriebsspannung (VBias) des GLCD. Diese wird bei der Initialisierung geregelt und sollte etwa bei 14 V liegen. VB0+, VB0-, VB1+ & VB1- (Voltage Converter) werden jeweils über einen 2,2 µf miteinander verbunden. Sollten Elektrolyt-Kondensatoren (Elkos) verwendet werden, so muss zusätzlich auf die richtige Polung geachtet werden. CD (Abk. für Command/Data) wird mit Pin 83 vom Keil Board verbunden. Um Bilddaten zu empfangen muss CD auf Low, um Kommandos zu empfangen muss CD auf High gestellt werden. CS (Abk. für Chip Select (Low-Aktiv)) wird direkt auf GND gelegt, da das Display der einzige Slave im System ist und ständig als aktiv selektiert sein kann. RST (Abk. für Reset (Low-Aktiv)) wird direkt auf 3,3 V gelegt, da der Reset nur softwareseitig durchgeführt wird. SDA (Abk. für Serial Data) wird mit Pin 86 vom Keil Board verbunden. Der Master sendet die Daten (Bitweise) seriell bei jeder steigenden Taktanke an das Display. SCK (Abk. für Serial Clock) wird mit Pin 89 vom Keil Board verbunden. Der Master stellt das Taktsignal für das Display bereit. Marc Koraschnigg Diplomarbeit HS München

27 3 Hardware und Entwicklungsumgebung Pin Abk. verbunden mit Beschreibung 17 VLCD GND über einen 220 nf Kondensator auf GND gelegt 18 VB0+ 21 über einen 2,2 µf Kondensator 19 VB1+ 20 über einen 2,2 µf Kondensator 20 VB1-19 über einen 2,2 µf Kondensator 21 VB0-18 über einen 2,2 µf Kondensator 22 VDD 3,3 V direkt auf 3,3 V 23 VDD2/3 3,3 V direkt auf 3,3 V 24 VSS2 GND direkt auf Ground 25 VSS GND direkt auf Ground 26 BM0 GND direkt auf Ground 27 CD 83 direkt zum Pin 83 auf dem Keil Board 28 CS GND direkt auf Ground 29 RST 3,3 V direkt auf 3,3 V 30 D6 3,3 V direkt auf 3,3 V 31 SDA 86 direkt zum Pin 86 auf dem Keil Board 32 SCK 89 direkt zum Pin 89 auf dem Keil Board Tabelle 3.2: Übersicht der 16 Pins des GLCD Das Display kann in vier verschiedenen Modi angesprochen werden, die durch die zwei Pins BM0 und D6 deniert werden. Tabelle 3.3 zeigt die drei SPI Modi, den I 2 C Modus und die dazugehörigen Werte für BM0 und D6. Die Pins werden je nach Beschaltung direkt auf 3,3 V oder GND gelegt. Marc Koraschnigg Diplomarbeit HS München

28 3 Hardware und Entwicklungsumgebung Modus BM0 / D6 4 Wire, 8-Bit SPI 0 / 0 3 Wire, 8-Bit SPI 0 / 1 3 Wire, 9-Bit SPI 1 / 0 2 Wire, I 2 C 1 / 1 Tabelle 3.3: Übersicht der verschieden Ansteuerungsmodi BM0 wird auf GND und D6 auf 3,3 V gelegt (siehe auch Tabelle 3.2), da das GLCD über den 3 Wire, 8-Bit SPI Modus angesteuert wird. Die sechs Pins auf der Unterseite werden wie in Abbildung 3.5 in Reihe miteinander verbunden und über den Step-Up Wandler (CAT4238TD-GT3) angesteuert. Zur Versorgung der LEDs hebt der Wandler die Eingangsspannung auf 47 V. Dabei wird die Beleuchtung durch ein High Signal auf Pin 4 des Bauteils zugeschaltet und kann durch ein Low Signal wieder abgeschaltet werden. Abbildung 3.5: Die Backgroundschaltung Tabelle 3.4 zeigt die im Projekt verwendeten Bauteile zur Beschaltung der Hintergrundbeleuchtung. Marc Koraschnigg Diplomarbeit HS München

29 3 Hardware und Entwicklungsumgebung Bauteil Bezeichnung Wert Step-Up Wandler CAT4238-GT3 Schottky Diode MBRS360T3G 3 A / 60 V Speicher-Induktivität SRR µf Widerstand 15 Ω Elkos 100 nf Tabelle 3.4: Übersicht der verwendeten Bauteile 3.4 µvision3 Integrierte Entwicklungsumgebung Die Integrierte Entwicklungsumgebung (Abkürzung IDE, von engl. integrated development environment) µvision3 liegt in Version 3.85 auf der CD bei. Die grasche Benutzeroberäche vereint mehrere Tools wie Texteditor, Compiler & Intepreter, Linker, Simulator sowie einen Programm Debugger. Auÿerdem liefert die Software den Startup Code für den lpc23xx Mikrocontroller sowie die Header Datei lpc23xx.h, die die Hardware-Peripherie des Mikrocontrollers deniert. Der Startup Code wird sofort nach einem Reset der CPU ausgeführt und initialisiert das MEMMAP Register welches die Einstellungen der Kongurationspins überschreibt. Die Header Datei lpc23xx.h vereint die kompletten Hardware-Denitionen der Peripheriegeräte. In dieser sind u. a. die Denitionen des PINSEL Registers oder die Denitionen der GPIO Register inklusive der zugehörigen Speicheradressen enthalten. Das Programm muss nach der Installation mit der Product Serial Number (PSN) lizenziert werden. Es handelt sich hierbei um eine Single-User License, die nur eine Installierung auf zwei Computern ermöglicht. Den Installationsablauf sowie Ansprechpartner und Servicenummer der Firma Keil sind im Anhang zu nden. Wenn die nale Projektdatei final.uv2 geladen und kompiliert ist, so wird ein hex-le mit dem Namen nal.hex von µvision im selben Ordner erzeugt. Sollte dies nicht der Fall sein, so kann über den Reiter Flash Congure Flash Tools... Output das Häckchen bei Create HEX File gesetzt werden. Dieses Hex-File wird später mittels der Flash Magic Software auf den Mikrocontroller übertragen. Marc Koraschnigg Diplomarbeit HS München

30 3 Hardware und Entwicklungsumgebung 3.5 Flash Magic Software Die Flash Magic Software in der Version von Embedded Systems Academy liegt auf der CD bei oder kann kostenlos über die Internetadresse flashmagictool.com/ heruntergeladen werden. Das Keil Evaluationsboard wird am COM0 Port mit einem seriellen Kabel an den COM Port am PC angeschlossen. Einstellungen die zur Kommunikation dienen können unter Step 1 konguriert werden. Abbildung 3.6 zeigt die nötigen Einstellungen. Abbildung 3.6: Das Flash Magic Tool und die nötigen Einstellungen Durch ein Anklicken des Startbuttons beginnt der Flash-Vorgang und es wird der Mikrocontroller mit den kompilierten Informationen aus dem Hex-File beschrieben. Sobald die Verizierung abgeschlossen ist, wird ein Reset ausgelöst und der neue Programmcode ausgeführt. Marc Koraschnigg Diplomarbeit HS München

31 4 Softwareentwicklung 4 Softwareentwicklung Die Softwareentwicklung stellt den gröÿten und wichtigsten Bereich dieser Diplomarbeit dar. Sie initialisiert die angeschlossene Peripherie, steuert und berechnet Informationen und gibt diese auf einem GLCD aus. In Abbildung 4.1 ist der Aufbau der Software schematisch dargestellt. Abbildung 4.1: Softwarekonzept Als erstes werden die Schnittstellen GPIO, LED, CAN, GLCD, SPI, RTC und die des Scheduler initialisiert. Bei der Initialisierung werden die Pins mit den gewünschten Eigenschaften deniert und Taktraten festgelegt. Nach dieser ist die Peripherie in einem sogenannten Ausgangszustand, der nun von der Software angesprochen und gesteuert werden kann. Die Initialisierung erfolgt nur wenn die Hardware eingeschaltet wird oder nach einem Hardware-Reset. Marc Koraschnigg Diplomarbeit HS München

32 4 Softwareentwicklung Das einfache Betriebssystem ermöglicht Tasks zu priorisieren und kooperatives Multitasking. Auÿerdem dient es zur Strukturierung und Übersicht des Programmcodes. Die verschiedenen Tasks werden softwaremäÿig nach voreingestellten Zyklen aufgerufen und komplett abgearbeitet. Die shutdown Sequenz tritt beim betätigen des OFF Tasters ein. Dies ist nötig, da die intern generierte LCD Bias Spannung beim abrupten Ausschalten ein Entladen der Kondensatoren über den integrierten LCD Controller (uc1610) zur Folge hat und diese den Controller nach längerem Gebrauch zerstören kann. 4.1 Peripherieinitialisierung Der Mikrocontroller lpc2368 verfügt über diverse Schnittstellen, die zur Interaktion verschiedener Bauteile dienen. So wird die Kommunikation der Akkupacks, die Informationen zum Ladezustand enthalten, über das CAN Protokoll übertragen. GLCDs werden meist über die serielle Schnittstelle (SPI, I 2 C, usw.) oder über die parallele Schnittstelle angesteuert. Serielle Schnittstellen haben zum Vorteil, dass weniger Leitungen zur Datenübertragung benötigt werden. Beim SPI liegen diese bei drei Leitungen in der Minimalkonguration. Hingegen benötigen parallele Schnittstellen vier oder acht Datenleitungen, können allerdings dabei die Daten im 4- oder 8-Bit Modus half Byte- oder Byte-weise schneller übertragen. Der EA DOG XL Liquid Crystal Display (LCD) kann bei einer 3 Wire, 8Bit SPI Übertragung mit einer Taktrate von bis zu SCK = 8MHz betrieben werden, jedoch allerdings nur bis zur Hälfte des Systemtakts von 12MHz/2 = 6MHz General Purpose Input/Output (GPIO) GPIO (dt. Universelle Ein- und Ausgabeports) dienen u.a. zur Ansteuerung einfacher Peripherie wie Schalter, Taster, LEDs usw., können aber auch komplexere Teilaufgaben wie die Ansteuerung eines LC Displays übernehmen. Die Initialisierung wird in der Datei GPIO.c vorgenommen. Der ARM lpc23xx verfügt über eine Vierfachbelegung der meisten Pins, daraus folgt, dass jedem Pin, im Marc Koraschnigg Diplomarbeit HS München

33 4 Softwareentwicklung folgenden nur noch Port 1 (Tabelle 4.1). genannt, 2 Bits zur Konguration zur Verfügung stehen Binärwert Ausgewählte Funktion 00 Primäre Funktion (meist GPIO's) 01 Erste alternative Funktion 10 Zweite alternative Funktion 11 Dritte alternative Funktion Tabelle 4.1: Übersicht der Funktionen des PINSELx Registers Initialisierung der GPIOs Die Initialisierung der GPIOs erfolgt über eines der 32 Bit PINSELx Register. Die ersten 16 Ports (Port 0.0 Port0.15) werden dabei über das PINSEL0 Register initialisiert, Port0.16 Port0.31 über das PINSEL1 Register usw. In Tabelle 4.2 ist das Register PINSEL0 mit seinen zugehörigen Bits dargestellt. Port Bits Tabelle 4.2: Übersicht des PINSEL0 Registers Da die erste primäre Funktion in allen Fällen die Pins als GPIO konguriert, werden durch den Aufruf der Funktion die beiden 32 Bit Register PINSEL0 und PINSEL1 mit 0 deniert und dabei die Ports 0.0 bis Port 0.31 als GPIOs konguriert. 1 void r e s e t _ p i n s e l ( void ) 2 { 3 PINSEL0 = 0 x ; 4 PINSEL1 = 0 x ; 5 } Die internen Pull-Up oder Pull-Down Widerstände können über das PINMO- DEx Register für jeden Port aktiviert bzw. deaktiviert werden. Das 32 Bit Register 1 Jeder Pin ist genau einem Port zugeteilt Marc Koraschnigg Diplomarbeit HS München

34 4 Softwareentwicklung ähnelt dem PINSELx Register. Auch hier ist das PINMODE0 Register für die ersten 16 Ports zuständig (Port Port 0.15). Tabelle 4.3 zeigt die verschiedenen Einstellmöglichkeiten des PINMODEx Registers. Binärwert Funktion 00 Pull-Up 01 Reserviert 10 No Pull-Up/Pull-Down 11 Pull-Down Tabelle 4.3: Übersicht der Funktionen des PINMODEx Registers Standardmäÿig ist an jedem Port der Pull-Up Widerstand aktiviert. Die Pins, die später als Eingänge initialisiert werden, müssen über das PINMODE Register den internen Pull-Down Widerstand aktivieren. Ansteuerung der GPIO Ports Die Ein- und Ausgabeports (GPIOs) werden durch vier Register gesteuert (Tabelle 4.4) IODIRx IOSETx IOCLRx IOPINx Bestimmt PIN als Eingang(0) oder Ausgang(1) Setzt den PIN auf HIGH Setzt den PIN auf LOW Liest den Zustand des ausgewählten Pins Tabelle 4.4: Übersicht der vier Steuerregister IODIRx bestimmt ob der ausgewählte Pin als Eingang(0) oder als Ausgang(1) de- niert werden soll. IOSETx setzt den Pin auf HIGH (logische '1'). Marc Koraschnigg Diplomarbeit HS München

35 4 Softwareentwicklung IOCLRx setzt den Pin auf LOW (logische '0'). IOPINx liest den aktuellen Zustand des ausgewählten Registers ein. Das x steht für die Register, also IODIR0 für das PINSEL0 & PINSEL1 Register, IODIR1 für das PINSEL2 & PINSEL3 Register usw Serial Peripheral Interface (SPI) SPI [Wik10d] ist ein synchroner serieller Datenbus, der einst von Motorola entwickelt wurde, um digitale Schaltungen nach dem Master-Slave-Prinzip zu verbinden. Das Interface wird in diesem Fall für die serielle Kommunikation zwischen dem Mikrocontroller (Master) und dem LC Display (Slave) verwendet (Abbildung 4.2). Abbildung 4.2: Übersicht der SPI Verbindung 4 Wire zwischen Mikrocontroller und LC Display Tabelle 4.5 zeigt die Abkürzungen der drei Daten- und der Chip-Select-Leitung für den Slave. SCK MOSI oder SDI MISO oder SDA CS oder SS Serial Clock Master Out Slave In Master In Slave Out Chip Select Tabelle 4.5: Abkürzungen des SP Interface Die Initialisierung der SPI wird in der Datei SPI.c durch die Funktion SPI_Init() vorgenommen. Marc Koraschnigg Diplomarbeit HS München

36 4 Softwareentwicklung 1 void SPI_Init ( void ) 2 { 3 PINSEL0 = 0xC ; // SCK Port PINSEL1 = 0 x ; // Mosi Port S0SPCCR = 6 ; // Clock Counter ( 2MHz) 7 8 S0SPCR = 0x00 ; // d e l e t e Control R e g i s t e r 9 S0SPCR = 0xA0 ; // MSB, SPIE enable i f (S0SPINT & 0x01 ) // i f i n t e r r u p t f l a g i s s e t 12 { 13 S0SPINT = 0x01 ; // r e s e t i n t e r r u p t f l a g 14 } 15 } PINSEL0 = 0xC ; belegt den Port 0.15 (Bits 30 & 31 auf 1 gesetzt) mit der dritten alternativ Funktion. Alle anderen Werte im Register bleiben unverändert. Port 0.15 (Pin 89) stellt somit als Master das SPI Taktsignal SCK für das GLCD (Slave) bereit. PINSEL1 = 0x ; belegt den Port 0.18 (Pin 86) mit der Funktion des SPI MOSI S0SPCCR = 6; setzt den generierte SPI Takt auf 2 MHz. Der übergebene Wert 6 ist der Divisor und teilt den Systemtakt (12 MHz / 6 = 2 MHz). Abbildung 4.3 zeigt die im Projekt verwendete SPI 3/4-Wire Serial Mode. Das die Daten bei steigender Taktanke mit dem Most Signicant Bit (MSB) zuerst ins Register geschoben werden (D7...D0), ist hierbei gut zu erkennen. Die Einstellungen nden sich bei der Initialisierung im Register S0SPCR wieder. Mit dem Wert 0xA0 werden die oben genannten Eigenschaften realisiert und der SPI Interrupt zu geschaltet. Das Chip Select (CS) Signal kann fest auf Masse liegen, da das GLCD der einzige Slave ist. Der Command/Data (CD) Pin muss vor jeder Sendung beim Übertragen von Daten auf 1 oder beim Übertragen von Kommandos auf 0 gezogen werden. Marc Koraschnigg Diplomarbeit HS München

37 4 Softwareentwicklung Abbildung 4.3: Übersicht der SPI 3/4-Wire Serial Mode Dies wurde in den beiden Funktionen GLCD_SendData() und GLCD_SendCmd() realisiert. Zeile 4 zieht den CD Pin auf High. 1 /* Function t o send Data */ 2 void GLCD_SendData( uint8 * SData, uint16 i ) 3 { 4 IOSET0 = (1<<CD) ; /* CD High */ 5 SPI_transfer ( SData, i ) ; 6 } Zeile 4 zieht den CD Pin auf Low. 1 /* Function t o send Commands */ 2 void GLCD_SendCmd( uint8 * SCmd, uint8 i ) 3 { 4 IOCLR0 = (1<<CD) ; /* CD Low */ 5 SPI_transfer (SCmd, i ) ; 6 } Die Daten oder Kommandos werden dann an die Funktion SPI_transfer() weitergereicht und von dort an das Display gesendet (Zeile 6). 1 /* Function t o send Data/Commands t o t h e LCD */ 2 void SPI_transfer ( uint8 * DATA, uint8 i ) 3 { 4 while ( i ) 5 { 6 S0SPDR = *DATA; /* Transmit data */ 7 while (! ( S0SPSR & 0x80 ) ) ; 8 DATA++; /* Increment the p o i n t e r on the array */ 9 i ; /* Decrement the Byte counter */ 10 } Marc Koraschnigg Diplomarbeit HS München

38 4 Softwareentwicklung 11 while (! ( S0SPSR & 0x80 ) ) ; / * Wait u n t i l S0SPSR b u f f e r i s ready? */ 12 } Da die Daten/Kommandos als Adressen übergeben werden, ndet die Dereferenzierung (*DATA) direkt vor der Übergabe an das S0SPDR Register statt. Die Adresse des Datenarrays wird inkrementiert, die Anzahl des Byte-Counters dekrementiert bis der Wert 0 ist. Am Ende wird das S0SPSR Register erneut auf Ready überprüft bevor es die Funktion wieder verlässt. Diese Abkapselung macht es für den Programmierer einfach, da er an jeder Stelle im Code weiÿ, ob Daten oder Kommandos an das GLCD übertragen werden Initialisierung des Grak LCDs Die Initialisierung des GLCDs wird in der Datei glcd.c durch den Funktionsaufruf GLCD_Init() vorgenommen. Das Datenblatt vom Display DOGXL sowie vom integrierten Controller uc1610 benden sich auf der beigelegten CD. Der korrekter Ablauf (Abbildung 4.4) ist essentiell für einen fehlerfreien Betrieb. Nach dem Einschalten der Hardware muss 5 bis 10 ms gewartet werden, bis das Display bereit zum Empfang der Initialisierung ist. Nach dieser Sequenz wird durch den Befehl Set_Display_Enable mit der Adresse 0xAF das GLCD aktiviert. Abbildung 4.4: Ablauf der GLCD Initialisierung Bei der Initialisierung sind elf Kommandos unersetzlich. Diese werden am Anfang Marc Koraschnigg Diplomarbeit HS München

39 4 Softwareentwicklung in der Datei glcd.c deniert und als Konstanten im Array LcdInitMacro gespeichert. Die Kommandos teilen sich in zwei Gruppen, die sog. Single-Byte Commands und die Double-Byte Commands auf. Single-Byte Commands bestehen aus einem Byte (8 Bit) wobei sich die Anzahl an statischen und dynamischen Bits von Kommando zu Kommando unterscheidet. Double-Byte Commands bestehen aus zwei Bytes (16 Bits), das erste Byte ist in jedem Fall statisch und leitet den Befehl ein, das zweite ist dynamisch und kann durch verschiedene Belegungen unterschiedlich gestellt werden. Die Beschreibung der Kommandos bendet sich im Anhang B. 1 #d e f i n e Set_Com_End_H 0xF1 2 #d e f i n e Set_Com_End_L 0x67 3 #d e f i n e Set_LCD_Mapping_Control 0xC0 4 #d e f i n e Set_Scroll_Line_LSB 0 x40 5 #d e f i n e Set_Scroll_Line_MSB 0 x50 6 #d e f i n e Set_Panel_Loading 0x2B 7 #d e f i n e Set_Pump_Control 0x2F 8 #d e f i n e Set_LCD_Bias_Ratio 0xEB 9 #d e f i n e Set_Vbias_Potentiometer_H 0 x81 10 #d e f i n e Set_Vbias_Potentiometer_L 0x5F 11 #d e f i n e Set_RAM_Address_Control 0 x89 12 #d e f i n e Set_Display_Enable 0xAF uint8 LcdInitMacro []={ // DogXL160 I n i t i a l i z a t i o n Commands 15 Set_Com_End_H, 16 Set_Com_End_L, Set_RAM_Address_Control, 19 Set_Display_Enable, 20 } ; void GLCD_Init( void ) 23 { 24 GLCD_SendCmd( LcdInitMacro, 1 2 ) ; // I n i t LCD 25 } Durch den Funktionsaufruf GLCD_SendCmd() werden die zwölf vordenierten Variablen als Kommandos an das Display geschickt. Set_Display_Enable setzt das Marc Koraschnigg Diplomarbeit HS München

40 4 Softwareentwicklung Display aktiv und wartet bis Bildinformationen in Form von Arrays geschickt werden Real Time Clock (RTC) Die Real Time Clock (RTC) (dt. Echtzeituhr) wird in diesem Projekt als Parameter für die Integration des Stromes über der Zeit verwendet. Sie wird aus dem Prozessortakt gewonnen und inkrementiert die Sekunden. Nach 60 Sekunden wird das Minutenregister um eins erhöht, nach 60 Minuten das Stundenregister usw. Bei der Initialisierung muss zunächst der Teiler für die Systemfrequenz ermittelt werden. Die Quarz Frequenz beträgt 12 MHz. 1 uint32 CCLK = ; // Quartz Frequence 2 3 RTC_PREINT = (CCLK / 32768) 1; // I n t i g e r d i v i s o r 4 RTC_PREFRAC = CCLK ( (RTC_PREINT+1) * ) ; // c a l c u l a t e f l o a t 5 // d i v i s o r Ist der Systemteiler berechnet, erfolgt ein Reset der RTC (Zeile 1) gefolgt von der Vor-Denition der Zeit (Zeile 3-9). 1 RTC_CCR = 0x2 ; // r e s e t RTC 2 3 RTC_HOUR = 0 ; // s e t Hour, Minute and Second 4 RTC_MIN = 0 ; 5 RTC_SEC = 0 ; 6 7 RTC_DOM = 0 ; // s e t Day Of Month, Month and Year 8 RTC_MONTH = 0 ; 9 RTC_YEAR = 0 ; Die RTC wird durch die Funktion start_rtc() gestartet. Dabei wird das Register RTC_CCR mit dem Wert 0x1 belegt (Zeile 3), um das erste Bit auf 1 zu setzen. Die Variablen old_value und rtc werden auf 0 bzw. auf ON gesetzt (Zeile 4 & 5). 1 void start_rtc ( void ) 2 { Marc Koraschnigg Diplomarbeit HS München

41 4 Softwareentwicklung 3 RTC_CCR=0x1 ; // s t a r t RTC 4 old_value = 0 ; // r e s e t old_value 5 r t c = ON; // s e t RTC Flag ON 6 } Durch die Funktion stop_rtc() wird die RTC wieder gestoppt. Dabei wird das Register RTC_CCR mit dem Wert 0x0 initialisiert (Zeile 3). Die Variable rtc wird auf OFF und die Register Stunden, Minuten und Sekunden zurück auf 0 gesetzt (Zeile 4-8). 1 void stop_rtc( void ) 2 { 3 RTC_CCR=0x0 ; // stop RTC 4 r t c = OFF; // s e t RTC Flag OFF 5 6 RTC_HOUR = 0 ; // s e t Hour, Minute and Second 7 RTC_MIN = 0 ; 8 RTC_SEC = 0 ; 9 } Battery RAM (NVRAM) Der Mikrocontroller lpc2368 verfügt über einen 2 kbyte groÿen Battery RAM. Dieser bendet sich an der Speicheradresse 0xE und kann nur Wortweise (32 Bit) angesprochen werden. Er ist isoliert vom Rest des Controllers und kann durch das Anlegen einer 3 V Batterie auch ohne Hauptstromversorgung betrieben werden. Der aktuelle Ladezustand der Akkus wird nach jeder Berechnung in diesen Speicher geschrieben, damit dieser auch nach einer Stromunterbrechung noch verfügbar ist. Der Speicherbereich wird in der Header-Datei LPC23xx.h deniert. 1 /* Battery RAM */ 2 #d e f i n e BATTERY_RAM_ADDR 0 xe #d e f i n e BATT_RAM ( * ( v o l a t i l e unsigned long * ) (BATTERY_RAM_ADDR) ) BATT_RAM kann jetzt als Variable im Code verwendet werden, z. B. wie in Zeile 2, bei der Zuweisung der Gesamtladekapazität. Der Hexadezimalwert 0x0000F1E0 Marc Koraschnigg Diplomarbeit HS München

42 4 Softwareentwicklung (= Dezimalwert 61920) entspricht dabei der Ladekapazität in As (Ampere Sekunden). 1 /* s e t b a t t e r y RAM to 0x0000F1E0 */ 2 BATT_RAM = 0 x0000f1e0 ; Die 3 V Knopfzelle wird wie in Abbildung 4.5 an den Pin 27 des Evaluationsboard angeschlossen. Abbildung 4.5: Batterieanschluss Controller Area Network (CAN) Der CAN-Bus [Wik10a] ist ein asynchrones, serielles Bussystem und gehört zu den Feldbussen. Er wurde 1983 von Bosch speziell für die Vernetzung von Steuergeräten in Automobilen entwickelt. Vorteile sind unter anderem geringe Kosten, hohe Zuverlässigkeit, Flexibilität und Geschwindigkeit. Der CAN-Bus arbeitet nach dem CSMA/CR (Carrier Sense Multiple Access / Collision Resolution)-Verfahren. Dabei werden Kollisionen beim Buszugri durch die Arbitrierung 2 oder Bit-Arbitrierung aufgelöst. Die bei CSMA/CR benutzte Arbitrierung erfolgt auf Basis der Prioritäten, mit denen die einzelnen Stationen ihre Daten über das Übertragungsmedium übertragen. Die Arbitrierung erfolgt nur dann, wenn mehrere Stationen gleichzeitig auf das Übertragungsmedium zugreifen. Die Akkupacks von Clean Mobile verfügen über eine CAN-Schnittstelle über die Informationen zur Ladekapazität abgegrien werden können. Da die Batterien zum Zeitpunkt dieser Diplomarbeit noch nicht verfügbar waren, wurde keine Initialisierung des CAN Busses durchgeführt. 2 Die Arbitration ist ein Zugangsverfahren, bei dem sich die Nutzer nach einer gegenseitigen Vereinbarung das Zugangsrecht bestimmen. Marc Koraschnigg Diplomarbeit HS München

43 4 Softwareentwicklung Initialisierung der LEDs und des Zeilen-LCDs Die Onboard-LEDs sowie das Onboard-LCD (16 Zeichen x 2 Zeilen) wurden nur für die Entwicklung initialisiert und genutzt. Da diese Komponenten in der nalen Version wegfallen, wird in dieser Diplomarbeit nicht weiter darauf eingegangen. Die Initialisierungen sind weiterhin im C Code verfügbar und müssen nur bei Verwendung anderer Hardware auskommentiert werden. Der Example Code wurde von der Firma Keil mitgeliefert und unverändert im Projekt übernommen. 4.2 Das Betriebssystem (kooperatives Multitasking) Beim kooperativen Multitasking [Wik10b] wird durch die zentrale Prozessverwaltung die Rechenleistung nacheinander an die gestarteten Tasks abgegeben. Jede Task wird, sofern sie aufgerufen wurde, komplett abgearbeitet. Die Tasks können unterschiedlich in der scheduler.h priorisiert werden. Bekommt zum Beispiel eine Task den Wert 50 zugewiesen, so wird diese alle 50 Betriebssystem-Zyklen wiederholt und abgearbeitet. Zudem ist es ressourcensparend, einfach und übersichtlich gehalten und durch die deterministische Arbeitsweise zeitlich und logisch vorhersehbar. Diese Form des Multitasking hat aber auch den Nachteil, dass Fehler in einer Task, das gesamte System zum Stillstand bringen können Initialisierung und Funktionsweise des Betriebssystems Die Initialisierung des Betriebssystems (Scheduler) wird in der Datei scheduler.c durch den Funktionsaufruf scheduler_init() vorgenommen. Dabei werden alle de- nierten Tasks auf READY gesetzt und erhalten die in der dazugehörigen Header Datei denierten START_PRIORITAET. 1 f o r ( x = 0 ; x < MAX_TASK_SCHEDULER; x++) 2 { 3 s c h e d u l e r _ s t a t e [ x ] = READY; / * s e t a l l t a s k s ready */ 4 scheduler_prio [ x ] = START_PRIORITAET; Marc Koraschnigg Diplomarbeit HS München

44 4 Softwareentwicklung 5 } Das Projekt besteht aus drei Tasks, die in der scheduler.h deniert wurden. 1 /* task names */ 2 #d e f i n e MAIN_PROGRAM_TASK 0 3 #d e f i n e READ_BUTTONS_TASK 1 4 #d e f i n e BATTERY_STATE_TASK 2 Das Hauptprogramm (Zeile 2) und die Berechnung der Ladekapazität (Zeile 4) werden alle 50 und das Einlesen der Schalter (Zeile 3) alle 10 Betriebssystem-Zyklen aufgerufen und abgearbeitet. 1 // d e f i n e p r i o r i t y (0 0xFFFFFFFF) 2 #d e f i n e MAIN_PROGRAM_PRIO 50 / * r e p e a t s every 50 c y c l e s */ 3 #d e f i n e READ_BUTTONS_PRIO 10 / * r e p e a t s every 10 c y c l e s */ 4 #d e f i n e BATTERY_STATE_PRIO 50 / * r e p e a t s every 50 c y c l e s */ Das kooperative Multitasking Betriebssystem bendet sich in der Datei scheduler.c und wird durch die Funktion scheduler() nach der Initialisierung der Peripheriegeräte aufgerufen und gestartet. Diese Funktion ist als Endlosschleife programmiert. Erhält die Task den Status READY (Zeile 3), wird ihre Priorität überprüft (Zeile 5). Bei jedem Durchlauf wird diese um 1 dekrementiert (Zeile 7), bis sie nicht mehr gröÿer ist als 0. Dann nämlich erhält die Task das BUSY-Flag (Zeile 11) und die darunterliegenden Funktionen werden ausgeführt (Zeile 12). Nach der Abhandlung erhält die Task wieder den Status READY (Zeile 13) und die Priorität wird auf den vordenierten Wert gesetzt (Zeile 14). 1 while ( 1 ) 2 { 3 i f ( s c h e d u l e r _ s t a t e [MAIN_PROGRAM_TASK] == READY) 4 { 5 i f ( scheduler_prio [MAIN_PROGRAM_TASK] > 0x00 ) 6 { 7 scheduler_prio [MAIN_PROGRAM_TASK] ; 8 } 9 e l s e 10 { 11 s c h e d u l e r _ s t a t e [MAIN_PROGRAM_TASK] = BUSY; Marc Koraschnigg Diplomarbeit HS München

45 4 Softwareentwicklung 12 main_program ( ) ; 13 s c h e d u l e r _ s t a t e [MAIN_PROGRAM_TASK] = READY; 14 scheduler_prio [MAIN_PROGRAM_TASK] = MAIN_PROGRAM_PRIO; 15 } 16 } i f ( s c h e d u l e r _ s t a t e [BATTERY_STATE_TASK] == READY) 19 { 20 /* analog zu oben */ 21 } i f ( s c h e d u l e r _ s t a t e [READ_BUTTONS_TASK] == READY) 24 { 25 /* analog zu oben */ 26 } 27 } Die beiden anderen Tasks verfahren analog Programmablauf Als Einstiegsfunktion jedes C Programms wird automatisch die main() Funktion aufgerufen, die sich in der Datei main.c bendet. Die Initialisierung der Peripherie und des Betriebssystems wird gestartet (Zeile 6-12). Nach den 5-10 ms (Zeile 13), die das GLCD zur Initialisierung benötigt, wird die aktuelle Softwareversion auf dem Onboard LCD ausgegeben (Zeile 16). Nachfolgend wird einmalig der letzte aktuelle Stand der Ladekapazität aus dem NVRAM eingelesen (Zeile 19), gefolgt von dem Funktionsaufruf (Zeile 20) zur Berechnung der prozentualen Ladekapazität. Die Startsequenz wird in Zeile 23 aufgerufen, sie gibt die aktuelle Softwareversion für etwa 3 Sekunden aus. Als letztes wird das Betriebssystem durch den Aufruf aus Zeile 26 gestartet. 1 i n t main ( void ) 2 { 3 wait ( onesec ) ; 4 5 /* I n i t i a l i z i n g p e r i p h e r y */ 6 GPIO_Init ( ) ; Marc Koraschnigg Diplomarbeit HS München

46 4 Softwareentwicklung 7 LED_Init ( ) ; 8 LCD_Init ( ) ; 9 RTC_Init ( ) ; 10 s c h e d u l e r _ i n i t ( ) ; 11 SPI_Init ( ) ; 12 GLCD_Init ( ) ; 13 wait ( inittime ) ; /* w r i t e s the s o f t w a r e v e r s i o n to the onboard l c d */ 16 disp_sw ( ) ; /* read b a t t e r y c a p a c i t y from nvram & c a l c u l a t e b a t t e r y percentage */ 19 read_nvram ( ) ; 20 calc_percent_value ( ) ; /* s t a r t i n g s t a r t sequence */ 23 start_seq ( ) ; /* s t a r t i n g o p e r a t i n g system */ 26 s c h e d u l e r ( ) ; r eturn 1 ; 29 } Read Buttons Task Durch den Aufruf der Funktionen zum Auslesen der Taster und Schalter werden sog. Globale Variablen mit den aktuellen Zuständen deniert und an verschiedenen Stellen im Code weiterverarbeitet. Abschnitt 4.3 zeigt die Vorgehensweise zum Einlesen der Schalter. Main Program Task Die Aufgabe des Hauptprogramms besteht darin, den Zustand des Bedienhebels weiter zu verarbeiten. Die folgende if - Anweisung steuert die Eingabe des Piloten und gibt weitere Informationen grasch dazu aus. Marc Koraschnigg Diplomarbeit HS München

47 4 Softwareentwicklung Ist die globale Variable control_lever_state, die durch die Read Button Task ständig den aktuellen Zustand des Bedienhebels erhält, auf cl_o gesetzt (Zeile 3), wird der unten gezeigte Codeblock ausgeführt. Zeile 6 überprüft die Variable main_state auf ihren Zustand. Wird der Bedienhebel von Position 1 auf Position OFF geschoben, ist die Variable beim ersten Durchlauf noch auf ihren alten Zustand cl_pos1 und die Sequenz des einfahrenden Propellers wird durch den Aufruf aus Zeile 8 gestartet. Zeile 10 weist dann der main_state - Variable den neuen aktuellen Zustand zu, bevor die Funktion hmi_250ms() zur Erstellung der Bilder aufgerufen wird (Zeile 11). 1 /******************************************************************** / 2 /* c o n t r o l l e v e r on P o s i t i o n OFF */ 3 i f ( c o n t r o l _ l e v e r _ s t a t e == c l _ o f f ) 4 { 5 /* c o n t r o l l e v e r comes from Pos 1 s t a t e > c a l l going down sequence */ 6 i f ( main_state == cl_pos1 ) 7 { 8 prop_goingdown_seq ( ) ; 9 } 10 main_state = c l _ o f f ; 11 hmi_250ms ( ) ; /* s e t p r o p e l l e r power OFF */ 14 prop_power = OFF; 15 } 16 /*****/ /******************************************************************** / 19 /* c o n t r o l l e v e r on P o s i t i o n 1 */ 20 e l s e i f ( c o n t r o l _ l e v e r _ s t a t e == cl_pos1 ) 21 { /* analog zu oben */ 23 } 24 /*****/ /******************************************************************** / 27 /* c o n t r o l l e v e r on P o s i t i o n 2 */ 28 e l s e i f ( c o n t r o l _ l e v e r _ s t a t e == cl_pos2 ) 29 { /* analog zu oben */ 31 } 32 /*****/ Marc Koraschnigg Diplomarbeit HS München

48 4 Softwareentwicklung /******************************************************************** / 35 /* c o n t r o l l e v e r on P o s i t i o n 3 */ 36 e l s e i f ( c o n t r o l _ l e v e r _ s t a t e == cl_pos3 ) 37 { /* analog zu oben */ 39 } 40 /*****/ Die restlichen drei else if - Anweisungen sind analog zu dieser aufgebaut. Bei Position 1 wird jedoch noch unterschieden, ob der Bedienhebel von Position OFF oder von Position 2 geschoben worden ist. Eine Sequenz wird dementsprechend abgespielt. Die Funktion hmi_250ms() kopiert das Bild je nach Zustand aus vier Teilen zusammen und übergibt das neue Array an die Funktion write_fullpic(). 1 void hmi_250ms ( void ) 2 { 3 /* c r e a t e p i c t u r e */ 4 create_firstrow ( calc_perc ) ; 5 create_secondrow ( ) ; 6 create_thirdrow ( ) ; 7 create_fourthrow ( calc_time ) ; 8 9 /* draws p i c t u r e on the s c r e e n */ 10 w r i t e _ f u l l p i c ( ( uint8 *) s c r e e n ) ; 11 } Die Zusammensetzung wie auch die Übertragung der Bilddaten an den Displayspeicher werden in Kapitel 5 genau erläutert. Battery State Task Die globalen Variablen calc_perc (Zeile 4) und calc_time (Zeile 7) werden nach dem Aufruf der Task berechnet und liefern zu jeder Zeit den aktuellen prozentualen Wert der Kapazität sowie die Restladezeit. Marc Koraschnigg Diplomarbeit HS München

49 4 Softwareentwicklung Abschnitt 4.5 zeigt die genaue Vorgehensweise zur Berechnung der oben genannten Werte. 4.3 Einlesen der Schalter, Taster und Schieber Auf dem Demoboard benden sich sechs Taster, ein Schalter und ein Schieber die verschiedene Aufgaben übernehmen. So ist der Schieber, auf dem Board als Control Lever bezeichnet, mit seinen drei Stellungen als Simulation des Bedienhebels im Cockpit zu sehen. Abbildung 4.6 zeigt den Schieber und seine Funktionsweise im Schnittbild. Abbildung 4.6: Funktionsweise des Schiebers Wird der Schieber von Position OFF auf Position 1 geschoben, liegen 3,3 V am Pin 10 auf dem Keil Board an. Auf Position 2 liegen die 3,3 V an Pin 11 an. Diese Technik ermöglicht es, die verschiedenen Zustände im Code auszulesen und weiter zu verarbeiten. Dafür müssen die beiden GPIOs (Pin 10 & 11) als Eingang geschaltet und die internen Pull-Down Widerstände aktiviert werden. Position 3 kam erst im Laufe der Arbeit hinzu und wird vom Schalter realisiert. Marc Koraschnigg Diplomarbeit HS München

50 4 Softwareentwicklung Pin 11 als Eingang denieren Jeder Pin ist einem Port zugeteilt. Pin 11 ist im Datenblatt (LPC23XX User Manual) des Mikrocontroller (Abbildung 4.7) mit Port 0.24 assoziiert. Abbildung 4.7: Auszug aus dem Datenblatt (LPC23XX UM) des Mikrocontroller Um diesen Pin nun als Eingang zu schalten, wird zuerst durch das PINMODE1 Register der Pull-Down Innenwiderstand aktiviert 1 PINMODE1 = 0 x ; / * Bit 16 & 17 auf '1 ' */ und dann über das IODIR0 Register der Pin als Eingang geschaltet. 1 IODIR0 &= ~(1<<24); /* Port 24 auf '0 ' */ Zustand von Pin 10 & 11 abfragen Um die Zustände der Pins abzufragen, wird die Funktion read_control_lever() von der Task aufgerufen und abgearbeitet. Die zwei deklarierten Variablen cl_state1 und cl_state2 werden durch den Funktionsaufruf getpinstate(pinx) mit dem übergebenen Pin deniert (Zeile 3 & 4), später in der if-anweisung überprüft (Zeile 6 & 10), bevor sie der globalen Variable control_lever_state den Wert zuweisen. 1 void read_control_lever ( void ) 2 { uint8 cl_state1, c l _ s t a t e 2 ; 3 c l _ s t a t e 1 = getpinstate ( PIN10 ) ; 4 c l _ s t a t e 2 = getpinstate ( PIN11 ) ; 5 6 i f ( c l _ s t a t e 1 == 1 && c l _ s t a t e 2 == 0) 7 { 8 c o n t r o l _ l e v e r _ s t a t e = cl_pos1 ; Marc Koraschnigg Diplomarbeit HS München

51 4 Softwareentwicklung 9 } 10 e l s e i f ( c l _ s t a t e 2 == 1 && c l _ s t a t e 1 == 0) 11 { 12 c o n t r o l _ l e v e r _ s t a t e = cl_pos2 ; 13 } 14 e l s e 15 { 16 c o n t r o l _ l e v e r _ s t a t e = c l _ o f f ; 17 } 18 } Die Funktion getpinstate() speichert erst die kompletten Zustände des IOPIN0 Registers in der Variable pinblockstate (Zeile 3) und überprüft diese mit der übergebene Pin-Nummer (Zeile 5). Liegen 3,3 V an, so gibt die Funktion eine 1, bei 0 V eine 0 zurück (Zeile 7). 1 uint8 getpinstate ( uint8 pinnumber ) 2 { // Read the c u r r e n t s t a t e o f a l l pins in GPIO block 0 3 i n t pinblockstate = IOPIN0 ; 4 // Read the value o f ' pinnumber ' 5 i n t p i n S t a t e = ( pinblockstate & (1 << pinnumber ) )? 1 : 0 ; 6 // Return the value o f p i n S t a t e 7 r eturn p i n S t a t e ; 8 } 4.4 Ausgangssignale Um Ausgangssignale, wie die Ansteuerung der Kupplung oder das Starten des Verbrennungsmotors, zu erzeugen, werden GPIOs als Outputs deniert und durch die Befehle IOSET0 und IOCLR0 auf High oder Low gesetzt. So können diese Signale später an weiteren elektronischen Bauteilen verarbeitet werden um beispielsweise die Kupplung 1 (clutch 1) zu önen oder zu schlieÿen. 1 void GPIO_Init ( void ) 2 { 3 r e s e t _ p i n s e l ( ) ; IODIR0 = (1<<Clutch1 ) ; // s e t Clutch1 Pin a s Output Marc Koraschnigg Diplomarbeit HS München

52 4 Softwareentwicklung set_pinmode ( ) ; 8 } 9 10 void open_clutch1 ( void ) 11 { 12 IOSET0 = (1<<Clutch1 ) ; // s e t Clutch1 Pin High 13 } void c l o s e _ c l u t c h 1 ( void ) 16 { 17 IOCLR0 = (1<<Clutch1 ) ; // s e t Clutch1 Pin Low 18 } Zeile 5 deniert den Pin als Ausgang. Zeile 12 setzt den Pin auf High und Zeile 17 auf Low. 4.5 Ladezustandsberechnung Die Ladezustandsberechnung bendet sich in der calculation.c Datei und wird vom Betriebssystem alle 50 Zyklen durch die Funktion calculation() aufgerufen. Die Berechnung basiert auf der Information, dass der Strom an den Akkupacks über einen Shunt-Widerstand berechnet wird und in Echtzeit zur Verfügung steht. Ist die Kapazität der Batterien bekannt, so kann über den Strom und der Zeit die abgegebene bzw. aufgenommene Ladung berechnet werden. Die genaue Zeit wird durch die Real Time Clock geliefert. Die Akkus von Clean Mobile haben eine Kapazität von 17,2 Ah (= As). Der Strom wird bei jedem Durchlauf der Funktion calculation() abgetastet und aufaddiert. Nach genau einer Sekunde wird der aufaddierte Wert durch die Abtastungen geteilt, als Mittelwert gespeichert und zur Ladekapazität ab bzw hinzu gezählt. Dieser wird in den nicht üchtigen Speicherbereich geschrieben, um auch nach einer Stromunterbrechung den letzten genauen Zustand wieder zu bekommen. Als letztes wird die Restladezeit berechnet. Marc Koraschnigg Diplomarbeit HS München

53 4 Softwareentwicklung Die Abtastung des Stromes Die Funktion calculation() wird vom Betriebssystem aufgerufen um den aktuellen Ladezustand der Batterien zu ermitteln und zu speichern. Dabei wird erst immer überprüft, ob eines der drei Flags gesetzt ist, da sich nur in diesen Zuständen die Kapazität der Batterien ändert. 1 i f ( charging == ON prop_power == TRUE charging_switch == ON) Bendet man sich in einem der oben genannten Modi, wird die RTC beim ersten Durchgang gestartet und der aktuelle Sekundenwert über den Funktionsaufruf read_rtc() in der Variable current_sec gespeichert. 1 i f ( r t c == OFF) 2 { 3 start_rtc ( ) ; 4 } 5 current_sec = read_rtc ( ) ; Bendet sich die Abtastung noch in der selben Sekunde, so wird der Strom, simuliert über die Funktion read_amp(), bei jedem Durchlauf abgetastet und auf die Variable current_amp hinzu addiert (Zeile 3). Ebenfalls wird die Variable step_cnt bei jedem Durchlauf inkrementiert (Zeile 4). 1 i f ( current_sec == old_value ) 2 { 3 current_amp += read_amp ( ) ; 4 step_ cnt++; 5 } Stimmt der aktuelle Sekundenwert nicht mit dem alten Wert überein (Zeile 1), ist also eine Sekunde verstrichen, so wird der Variable old_value der Wert der neuen Sekunde zugewiesen (Zeile 3), damit beim nächsten Durchgang wieder von vorne aufaddiert werden kann. Im nächsten Schritt wird der Mittelwert der Kapazität ermittelt, indem die Summe aus dem Strom durch die Abtastrate geteilt wird (Zeile 4). Im Modus charging wird der berechnete Wert der aktuellen Kapazität zu addiert und in den NVRAM geschrieben (Zeile 6-10). Analog dazu wird im Modus prop-power der ermittelte Wert subtrahiert bevor er in den NVRAM geschrieben Marc Koraschnigg Diplomarbeit HS München

54 4 Softwareentwicklung wird (Zeile 11-15). Bevor die Variablen current_amp und step_cnt wieder auf 0 gesetzt werden (Zeile 18 & 19), werden die Funktionen calc_percent_value() und calc_timeleft() aufgerufen, um den aktuellen prozentualen Wert des Ladezustandes und der Restlade- oder Restantriebszeit zu berechnen (Zeile 16 & 17). 1 e l s e 2 { 3 old_value = current_sec ; 4 q_ current_ charge = ( current_amp/ step_ cnt ) ; 5 6 i f ( charging == TRUE) 7 { 8 q_charge_mas += q_ current_ charge ; 9 BATT_RAM = q_charge_mas ; 10 } 11 e l s e 12 { 13 q_charge_mas = q_ current_ charge ; 14 BATT_RAM = q_charge_mas ; 15 } 16 calc_percent_value ( ) ; 17 c a l c _ t i m e l e f t ( ) ; 18 current_amp = 0 ; 19 step_ cnt = 0 ; 20 } Wird die Ladung der Batterien oder der Betrieb des Propellers beendet, wird durch Zeile 3 die Variable q_current_charge zurück auf 0 gesetzt, die RTC gestoppt (Zeile 4) und durch den Aufruf in Zeile 5, der prozentuale Ladezustand berechnet. e l s e i f ( charging == OFF prop_power == OFF charging_switch == OFF) } { } q_ current_ charge = 0 ; stop_rtc ( ) ; calc_percent_value ( ) ; Marc Koraschnigg Diplomarbeit HS München

55 5 Displayausgabe 5 Displayausgabe Die Displayausgabe gehört teilweise zur Softwareentwicklung, ist aber aufgrund des Umfanges und der Erstellung der Bilder im Zeichenprogramm als eigenes Kapitel verfasst. Um Ausgaben auf dem GLCD zu erzeugen, werden die Bilder erst in sog. Zeichenprogrammen wie Photoshop, Paintshop Pro oder GIMP erstellt. Diese können dann durch Programme wie BitFontCreator in Byte-Arrays konvertiert werden. Abbildung 5.1 zeigt die drei Schritte des Welcome-Screens von der Erstellung in Photoshop (Links), über die Konvertierung in BitFontCreator (Mitte) bis zur eigentlichen Ausgabe als Array (Rechts). Abbildung 5.1: Vom Zeichenprogramm zum Array Die richtigen Einstellungen des Datenformats in BitFontCreator sind für die korrekte Anzeige unerlässlich. Dabei ist darauf zu achten, die Bit-Order (dt. Bit Reihenfolge) spaltenweise auf Little Endian zu stellen, was das Byte mit dem Least Signicant Bit (LSB) an der Stelle 0 speichert. Zudem wird spaltenweise hochgezählt, bevor in die zweite Reihe gesprungen wird (Abbildung 5.2). Die Bilddaten werden monochrom in 8 Bit-Länge gespeichert. Nähere Information zu den Einstellungen und der Anleitung von der Zeichnung zum Array benden sich im Anhang C. Marc Koraschnigg Diplomarbeit HS München

56 5 Displayausgabe Abbildung 5.2: Das richtige Datenformat Die Bildinformationen werden in der Header-Datei lcdscreen.h als uint8 1 Arrays gespeichert. Bevor die Daten seriell über das SPI in den DDRAM des Controllers übertragen werden können, müssen sie durch eine Wrapper-Funktion in das richtige Format gebracht werden. 5.1 Der Displaycontroller Der im DOGXL GLCD integrierte Displaycontroller uc1610 ist ein sog. 2Bit greyscale-controller (dt. Graustufen-Controller), der 4 Pixel mit einem Byte ansteuert. Jedes Pixel hat demnach vier Zustände (Abbildung 5.3). Bei 160 x 104 Pixel x 2Bit ergeben sich 4160 Byte pro Bild, was zu einer erheblichen Datenmenge führt, vor allem wenn animierte Bildsequenzen angezeigt werden. Abbildung 5.3: Zustände eines Pixel Da es bei dieser Auösung wenig Sinn macht, das Bild mit Graustufen zu zeichnen 1 uint8 = unsigned char Marc Koraschnigg Diplomarbeit HS München

57 5 Displayausgabe und sich die Hälfte an Speicherplatz sparen lässt, wird es ausschlieÿlich als monochromes Display betrieben. Das bedeutet, dass jedes Pixel nur An (11) oder Aus (00) geschaltet werden kann. Die Bilddaten aus BitFontCreator können zudem nur als monochrome Bilder verarbeiten werden. Wie Nachfolgend noch zu sehen ist, werden die Bilder auf zwei Arten erstellt. Bevor sie aber an das Display übertragen werden, werden sie über die Wrapper-Funktion write_fullpic() geleitet. 5.2 Zusammensetzen der Bilder In diesem Projekt gibt es zwei unterschiedliche Arten von Bildern, das statische komplette und das dynamische Bild - Array, dass aus vier Bereichen zusammengesetzt wird. Der Welcome Screen (Abbildung 5.4), der als komplettes Array in der Header-Datei lcdscreens.h liegt, wird komplett an die Wrapper-Funktion übergeben bevor er auf das Display geschrieben wird. Abbildung 5.4: Statischer Welcome Screen Der Idle Screen (Abbildung 5.5) hingegen wird je nach Modus aus vier Bereichen zusammengesetzt und dann an die Wrapper-Funktion übergeben. Abbildung 5.5: Dynamischer Idle Screen Marc Koraschnigg Diplomarbeit HS München

58 5 Displayausgabe Erster Bereich Bei jedem Aufruf von der hmi_250ms() werden die vier Funktionen zur Erstellung der Bereiche nacheinander ausgeführt. create_firstrow(calc_perc) erstellt den ersten Bereich mit den Maÿen 160 x 16 Pixel und kreiert aus dem statischen Bild (Abbildung 5.6), dem dynamischen Balken und dem numerisch prozentualen Wert ein neues Bild in Form eines Arrays. Die übergebene globale Variable calc_perc liefert den berechneten Ladezustand der Batterien aus der Funktion calculation(). Abbildung 5.6: Array rst_row (320 Byte groÿ) Die beiden uint8 Arrays page1_bar[] und page2_bar[] speichern jeweils die Bild- Informationen zum Ladebalken. Dabei steht page1 für die oberen acht und page2 für die unteren acht Reihen (Abbildung 5.7). 1 void create_firstrow ( uint8 percent ) 2 { 3 uint8 k ; 4 uint8 new_percent ; 5 6 /* Pos 0 > not h i g h l i g h t e d : : Pos 1 > h i g h l i g h t e d : : 7 Pos 2 > l a s t p i x e l i f 100% */ 8 uint8 page1_bar [ ] = {0x0B, 0xEB, 0x8B } ; 9 10 /* Pos 0 > not h i g h l i g h t e d : : Pos 1 > h i g h l i g h t e d */ 11 uint8 page2_bar [ ] = {0x00, 0x0F } ; new_percent = calc_percent ( percent ) ; Abbildung 5.7: Übersicht Page 1 und Page 2 Da der Balken nur 89 Pixel breit ist, wird der übergebene Prozentwert durch die Funktion calc_percent() (Zeile 13) mit der folgenden Formel neu berechnet und zurückgegeben: Marc Koraschnigg Diplomarbeit HS München

59 5 Displayausgabe v n = v min maxn minn max min + min n min max entspricht der alten Wertespanne (0 100) und min n max n entspricht der neuen, normalisierten Wertespanne (0 91). v n ist dabei der neu berechnete und zurückgegebene Prozentwert. Mit der folgenden Funktion memcpy() werden die ersten 36 Byte von Array first_row an die 0. Stelle des Arrays screen kopiert. 1 /********************************************************************* / 2 /* c o p i e s 36 bytes to s c r e e n array on pos 0 */ 3 memcpy( screen, first_row, 3 6 ) ; 4 /*****/ Nach 36 Spalten beginnt der obere Teil des dynamischen Ladebalkens. Der Wert des Arrays page1_bar von Position 1 wird solange in das Array screen kopiert, bis die Zählervariable k nicht mehr kleiner als der berechnete neue Prozentwert ist (Zeile 7). Die restlichen Spalten werden von dem Array page1_bar der Position 0 gefüllt (Zeile 11). Zeile 14 entscheidet, ob die letzte Spalte des Ladebalkens ausgefüllt werden soll oder nicht. 1 /********************************************************************* / 2 /* c o p i e s bytes to s c r e e n array on pos 36 */ 3 f o r ( k = 0 ; k < 8 8 ; k++) /* 88 runs > b a t t e r y bar */ 4 { 5 i f ( k < new_percent ) /* as long as k < new_percent */ 6 { 7 memcpy( s c r e e n +(36+k ), page1_bar +1,1); / * h i g h l i g h t e d bar */ 8 } 9 e l s e 10 { 11 memcpy( s c r e e n +(36+k ), page1_bar, 1 ) ; / * NOT h i g h l i g h t e d bar */ 12 } 13 } 14 i f ( new_percent == 89) /* w r i t e s l a s t p i x e l bar i f = 100% */ 15 { 16 memcpy( s c r e e n +(36+88), page1_bar +2,1); 17 } 18 e l s e /* w r i t e s l a s t p i x e l bar i f < 100% */ 19 { 20 memcpy( s c r e e n +(36+88), page1_bar, 1 ) ; Marc Koraschnigg Diplomarbeit HS München

60 5 Displayausgabe 21 } 22 /*****/ Die nächsten vier Bytes werden wieder aus dem Array first_row in das Array screen kopiert, jetzt jedoch von Position 125 an Position /********************************************************************* / 2 /* c o p i e s 4 bytes from f i r s t _ r o w pos 125 to s c r e e n array on pos 125 */ 3 memcpy( s c r e e n +125, f i r s t _ r o w +125,4); 4 /*****/ Anschlieÿend wird der nicht normierte prozentuale Wert und die Position (top oder bottom) der Funktion get_number_array() übergeben (Zeile 4). Diese Funktion konvertiert den Wert in einen String und kopiert diesen durch die Funktion memcpy() an die Position 129 im Array screen (Zeile 5). Die Vorgehensweise zur Konvertierung wird in Abschnitt 5.4 genauer erläutert. 1 /********************************************************************* / 2 /* convert the uint8 percent to a s t r i n g and saves in number_array */ 3 /* 18 bytes on pos 129 */ 4 get_number_array ( percent, top ) ; 5 memcpy( s c r e e n +129,number_array, 1 8 ) ; 6 /*****/ Die letzten dreizehn Bytes werden wieder aus dem statischen Array rst_row in das Array screen kopiert, diesmal jedoch von Position 147 an Position /********************************************************************* / 2 /* c o p i e s 13 bytes from f i r s t _ r o w pos 147 to s c r e e n array on pos 147 */ 3 memcpy( s c r e e n +147, f i r s t _ r o w +147,13); 4 /*****/ Abbildung 5.8 zeigt das bisher erstellte Bild. Es umfasst 160 x 8 Pixel, was 160 Byte entsprechen. Die 160 Byte der zweiten 8 Pixel werden analog wie oben erstellt, nur Abbildung 5.8: 160 Byte des ersten Bereichs werden andere Array-Daten verwendet. Marc Koraschnigg Diplomarbeit HS München

61 5 Displayausgabe Die 2 x 160 Byte sind nun im Array screen an der Stelle 0 bis 319 gespeichert Zweiter Bereich Der zweite Bereich mit den Maÿen 160 x 16 Pixel (= 320 Byte) wird durch die Funktion create_secondrow() aufgerufen und ist nicht so komplex aufgebaut, da er nur den aktuellen Zustand des Bedienhebels ausgibt. Der Hebel kann in drei Stellungen gebracht werden. Je nach Status der globalen Variable control_lever_state (Zeile 3) werden die 320 Byte des Arrays second_row_off, second_row_pos1 oder second_row_pos2 an die 320. Stelle des Array screen kopiert. 1 void create_secondrow ( void ) 2 { 3 switch ( c o n t r o l _ l e v e r _ s t a t e ) 4 { 5 case c l _ o f f : 6 memcpy( s c r e e n +320,second_row_OFF, ) ; 7 break ; 8 case cl_pos1 : 9 memcpy( s c r e e n +320,second_row_pos1, ) ; 10 break ; 11 case cl_pos2 : 12 memcpy( s c r e e n +320,second_row_pos2, ) ; 13 break ; 14 } 15 } Abbildung 5.9 zeigt die Ausgabe des Bereichs mit der Position 1 Stellung des Bedienhebels. Abbildung 5.9: 320 Byte des zweiten Bereichs Die zweiten 320 Byte sind nun im Array screen an der Stelle 320 bis 639 gespeichert. Marc Koraschnigg Diplomarbeit HS München

62 5 Displayausgabe Dritter Bereich Der dritte Bereich wird von der Funktion create_thirdrow() aufgerufen. Er enthält 160 x 48 Pixel (= 960 Byte) und zeigt die Zustände der beiden Motoren (Abbildung 5.10) an. Er ist analog zu Bereich zwei aufgebaut, unterscheidet sich jedoch in der Abbildung 5.10: 960 Byte des dritten Bereichs Animation. Realisiert wird das ganze durch eine if - else - if - Anweisung, die die Variable virtual dreimal hoch zählt, bevor sie im letzten Schritt wieder auf 0 gesetzt wird. 1 i f ( v i r t u a l == 0) 2 { v i r t u a l 5 } 6 e l s e i f ( v i r t u a l == 1) 7 { v i r t u a l 10 } 11 e l s e i f ( v i r t u a l == 2) 12 { v i r t u a l 15 } 16 e l s e 17 { v i r t u a l = 0 ; 20 } Ist einer der beiden Motoren in Betrieb, wird der Energieuÿ mit oder ohne Propeller, durch vier Bilder animiert und soll dem Piloten auf übersichtliche Weise den aktuellen Zustand signalisieren. Es ergeben sich vier Zustände: Marc Koraschnigg Diplomarbeit HS München

63 5 Displayausgabe V-Motor E-Motor Variable Aus Aus keine Aus Ein two_button_state Ein Ein three_button_state Ein Aus charging_switch charging Tabelle 5.1: Übersicht der möglichen Motorenzustände Wird einer der Variablen der Wert ON (= 1) zugewiesen, so werden 960 Byte des selektierten Array aus der Header-Datei lcdscreens.h in das Array screen an der Stelle 640 kopiert. Die 960 Byte sind im Array screen an der Stelle 640 bis 1599 gespeichert Vierter Bereich Der vierte und letzte Bereich wird von der Funktion create_fourthrow(calc_time) aufgerufen und verhält sich wie der erste, da bei Akkuladung oder Antrieb des Propellers die jeweilige Restlade- oder Restantriebszeit berechnet und ausgegeben wird. Bei Ladung, erscheint für etwa zehn Sekunden die berechnete Restladezeit (Abbildung 5.11) bevor es für die nächsten zehn Sekunden den aktuellen Strom anzeigt. Die Wiederholungsrate kann in der Header-Datei setup.h umgestellt oder ganz abgeschaltet werden. Abbildung 5.11: Vierte Bereich Restladezeit Auch hier werden Teile des statischen Arrays mit übergebenen, berechneten Werten vereint und an die richtigen Stellen im Array screen gespeichert. Die Maÿe des vierten Bereichs liegen bei 160 x 24 Pixel, was 480 Byte entsprechen. Die benutzten Bilder liegen auch hier in der Header-Datei lcdscreens.h. Die 480 Byte sind im Array screen an der Stelle 1600 bis 2079 gespeichert. Das Marc Koraschnigg Diplomarbeit HS München

64 5 Displayausgabe Array ist somit 2080 Byte groÿ und wird im nächsten Schritt an die Wrapper- Funktion write_fullpic() übergeben. 5.3 Datenübergabe an den Displaycontroller Der Displaycontroller verarbeitet die Bilddaten, wie schon vorher im Text erwähnt, im 2 Bit grayscale Format. Das bedeutet, dass normalerweise ein Bild 4160 Byte umfasst und das Array screen mit 2080 Byte nicht richtig angezeigt werden würde. Abbildung 5.12 zeigt das Konzept der Wrapper-Funktion. Das Byte 0xEB wird von der Funktion in zwei einzelne half-bytes geteilt, dann auf jeder der vier Positionen mit 1 überprüft und im Anschluss die vordenierten Werte hinzu addiert. Am Ende ergeben sich zwei neue Bytes die im Display RAM an unterschiedliche Stellen kopiert werden. Da der Controller die Daten spaltenweise auf dem GLCD anzeigt, liegen genau 160 Byte zwischen der oberen und unteren Reihe. Abbildung 5.12: Konzept der Wrapper-Funktion Im Projekt wird das Konzept durch die Funktion write_fullpic() umgesetzt. Jedes Byte wird in 2 x 4 Bit aufgespalten (Zeile 13 & 14) und in der Variable H und L gespeichert. H wird dabei um 4 Positionen nach rechts geschoben (Zeile 15), damit in beiden Fällen nur die ersten vier Bit belegt sind. 1 void w r i t e _ f u l l p i c ( uint8 * p i c t u r e ) Marc Koraschnigg Diplomarbeit HS München

65 5 Displayausgabe 2 { 3 uint8 k, p, c ; 4 uint8 * ptr ; 5 uint8 LcdData [ 2 ] ; /* Pointer to both pages o f one column */ 6 uint8 H = 0x00 ; 7 uint8 L = 0x00 ; 8 9 f o r ( k = 0 ; k < 1 3 ; k++) 10 { 11 f o r ( c = 0 ; c < 1 60; c++) 12 { 13 L = ( p i c t u r e [160 * k+c ] & 0x0F ) ; /* 4 LSB are saved to L */ 14 H = ( p i c t u r e [160 * k+c ] & 0xF0 ) ; /* 4 MSB are saved to H */ 15 H = (H >> 4 ) ; /* s h i f t 4 times r i g h t */ 16 LcdData [ 0 ] = 0x00 ; 17 LcdData [ 1 ] = 0x00 ; Die Variable H wird an den ersten vier Positionen überprüft (Zeile 2, 6, 10, 14). Liegt an der ersten Stelle eine 1 an wird auf das Array LcdData an Position 1 der Wert 0x03 hinzu addiert (Zeile 4). Liegt an zweiter Stelle eine 1 an wird der Wert 0x0C hinzu addiert (Zeile 8) usw. Analog dazu wird auch die Variable L überprüft und konvertiert. Sie wird aber, anders als bei Variable H, in das Array LcdData auf der Position 0 gespeichert. 1 /* Each P i x e l in the H i s converted to 2 B i t s */ 2 i f ( (H & 0x01 ) == 0x01 ) 3 { 4 LcdData [ 1 ] = LcdData [ 1 ] + 0x03 ; 5 } 6 i f ( (H & 0x02 ) == 0x02 ) 7 { 8 LcdData [ 1 ] = LcdData [ 1 ] + 0x0C ; 9 } 10 i f ( (H & 0x04 ) == 0x04 ) 11 { 12 LcdData [ 1 ] = LcdData [ 1 ] + 0x30 ; 13 } 14 i f ( (H & 0x08 ) == 0x08 ) 15 { 16 LcdData [ 1 ] = LcdData [ 1 ] + 0xC0 ; 17 } Marc Koraschnigg Diplomarbeit HS München

66 5 Displayausgabe Die Adressen der beiden Variablen werden an die Funktion GLCD_SendData (Zeile 6) übergeben, bevor sie in den RAM des GLCD geschrieben werden. Zuerst aber, muss die richtige Spalten- und Zeilenadresse (Zeile 3 & 4) übertragen werden. 1 f o r ( p=0; p<2; p++){ /* Font Page S i z e 2 Pages */ 2 ptr = LcdData+p ; 3 GLCD_SetColumnAdress ( 0 x00 + c ) ; 4 GLCD_SetPageAddress (0 x *k + p ) ; 5 6 GLCD_SendData( ptr, 1 ) ; / * send new data to the d i s p l a y */ 7 } 8 } 9 } 10 } Jedes Byte wird also zerlegt, in zwei Bytes konvertiert und an die richtige Stelle auf dem Display RAM übertragen. 5.4 Konvertierung und Anzeige der dynamischen Zahlen Um den Wertebereich von 0 bis 100 abdecken zu können, müssten 100 verschiedene Bilder gespeichert und mit dem übergebenen Prozentwert verglichen werden. Das würde einen enormen Aufwand bei der Erstellung sowie eine erhebliche zusätzliche Datenmenge bedeuten. Die andere und auch hier verwendete Lösung wäre, ein Array gefüllt mit hinterlegten Zahlen von 0 bis 9 (7 Byte pro Zahl), dass je nach übergebenen Wert dynamisch auf den festgelegten Positionen (Abbildung 5.13 rote Kästchen) angezeigt werden würde. Marc Koraschnigg Diplomarbeit HS München

67 5 Displayausgabe Abbildung 5.13: Übersicht der dynamischen Felder Die einzelnen Zahlen werden, bevor sie als Array verwendet werden können, in einem Zeichenprogramm erstellt und mit dem BitFontCreator als Array konvertiert. Die fertigen Zahlen sind in der Datei hmi.c als 7 x 6 Pixel (7 Byte) gespeichert. 1 uint8 numbers_top_2 []= 2 { 3 0x00, 0x7E, 0xA1, 0x99, 0x85, 0x7E, 0x00, / * Number 0 */ 4 0x00, 0x82, 0x82, 0xFF, 0x80, 0x80, 0x00, / * Number 1 */ 5 0x00, 0xC2, 0xA1, 0x91, 0x89, 0x86, 0x00, / * Number 2 */ 6 0x00, 0x42, 0x81, 0x89, 0x89, 0x76, 0x00, / * Number 3 */ 7 0x00, 0x30, 0x2C, 0x22, 0xFF, 0x20, 0x00, / * Number 4 */ 8 0x00, 0x4F, 0x89, 0x89, 0x89, 0x71, 0x00, / * Number 5 */ 9 0x00, 0x7C, 0x8A, 0x89, 0x89, 0x70, 0x00, / * Number 6 */ 10 0x00, 0x01, 0xC1, 0x31, 0x0D, 0x03, 0x00, / * Number 7 */ 11 0x00, 0x76, 0x89, 0x89, 0x89, 0x76, 0x00, / * Number 8 */ 12 0x00, 0x0E, 0x91, 0x91, 0x51, 0x3E, 0x00, / * Number 9 */ 13 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, / * Space */ 14 } ; Um die Zahlen dynamisch ausgeben zu können, wird z. B. die Restladezeit in der Variable time an die Funktion get_number_arraytime(time) übergeben. Dort wird der Zahlenwert als String, also als ASCII-Wert, in dem Array time_array gespeichert (Zeile 7). Wie Abbildung 5.14 zeigt, wird der Wert 16 über die Funktion sprintf(...); als ASCII-Wert auf zwei Elemente des Array gespeichert. Abbildung 5.14: Die Umwandlung der Variable time in einen String Ist die Zeit kleiner als 10 wird der Wert des ersten Elements (0) auf die Position 1 kopiert und diese Position mit 0x00 initialisiert (Zeile 11 & 12). Marc Koraschnigg Diplomarbeit HS München

68 5 Displayausgabe 1 void get_number_arraytime ( uint8 time ) 2 { 3 uint8 a = 0 ; 4 uint8 j ; 5 char time_array [ 2 ] ; 6 7 s p r i n t f ( time_array,"% i ", time ) ; 8 9 i f ( time < 10) 10 { 11 time_array [ 1 ] = time_array [ 0 ] ; 12 time_array [ 0 ] = 0x00 ; 13 } Die anschlieÿende do-while Schleife speichert der Reihe nach den ASCII-Wert in der Variable j (Zeile 4) und übergibt diese zusammen mit der Variable a an die Funktion number_into_arraytime(a, j-48) bis j gleich 0 ist do 3 { 4 j = time_array [ a ] ; 5 number_into_arraytime ( a, j 48); 6 a++; 7 j = time_array [ a ] ; 8 } while ( j! = 0 ) ; 9 } Die Aufgabe der Funktion number_into_arraytime(), mit den übergebenen Werten count und number, liegt darin, sieben Byte aus dem Array numbers_top_2 in das Array number_array2 zu kopieren (Zeile 6). Dabei wird, wie im oben genannten Beispiel, die Zahl 16 als String mit den Werten 49 (entspricht 1) an Position 0 und 54 (entspricht 6) an Position 1 des Array time_array übergeben. Bei der ersten Übergabe ist a (= count) gleich 0 und j-48 (= number) gleich 1 (49-48). Durch die for - Schleife werden dann genau sieben Byte an die Position count*7+j Marc Koraschnigg Diplomarbeit HS München

69 5 Displayausgabe von der richtigen Position number*7+j aus dem Array numbers_top_2 kopiert. j ist dabei die Hochlaufvariable und läuft von 0 bis 6. 1 void number_into_arraytime ( uint8 count, uint8 number ) 2 { 3 uint8 j ; 4 f o r ( j = 0 ; j < 7 ; j++) 5 { 6 number_array2 [ count *7+ j ] = numbers_top_2 [ number*7+ j ] ; 7 } 8 } Das Array number_array2, dass aus 14 Byte mit den oben selektierten Werten besteht, wird dann an die gewünschte Stelle im Array screen kopiert und auf dem GLCD angezeigt. Marc Koraschnigg Diplomarbeit HS München

70 6 Ausblick 6 Ausblick Zum Abschluss dieser Diplomarbeit möchte ich einen Ausblick über die weitere Hardund Softwareentwicklung zu diesem Projekt geben. Hardware Im nächsten Schritt soll eine neue Platine auf SMD-Basis entwickelt und gefertigt werden. Sie sollte kompakt und mit den benötigten Schnittstellen versehen sein. Ein Ansatz wäre z. B. ein Bestücken der Bauteile wie Prozessor, Widerstände, Spulen usw. auf der einen Seite der Platine und das Herausführen der Schalter, Taster sowie das GLCD auf der Anderen. Es müsste sich auÿerdem Gedanken über die Steckverbindungen gemacht werden, damit ein sicherer Betrieb im Flugzeug gewährleistet ist. Software Da die Akkus voraussichtlich erst im September 2010 geliefert werden können, wird ein nächster Schritt die Implementierung der Kommunikation zwischen Mikrocontroller und Batterien sein. Auÿerdem soll das Zusammenspiel von Hard- und Software erweitert und optimiert werden um die Integration der externen Bauteile (Kupplungen, Verbrennungsmotor usw.) zu gewährleisten. Sollte eine andere Hardware verwendet werden, so muss der geschriebene C Code auf dieses neue System portiert werden. Bei der Benutzung eines anderen Compilers, wie den GCC Compiler, müssen ebenso Anpassungen erfolgen. Marc Koraschnigg Diplomarbeit HS München

71 Literaturverzeichnis Literaturverzeichnis [Kri10] Kristl, Prof. Dr. Heribert: Mikrocontroller Vorlesungsskript, [Online; Stand 12. Juni 2010]. [Sch10] Scheffler, Prof. Dr. Klaus: Entwicklung eines hybriden Antriebs für ein Segelugzeug - Präsentation, [Stand Juli 2010]. [wet10] wetterklima.de: Leewellen, [Stand August 2010, [Wik10a] Wikipedia: Controller Area Network Wikipedia, Die freie Enzyklopädie, [Online; Stand 22. July 2010]. [Wik10b] Wikipedia: Multitasking Wikipedia, Die freie Enzyklopädie, [Online; Stand 26. July 2010]. [Wik10c] Wikipedia: Segelug Wikipedia, Die freie Enzyklopädie, [Online; Stand 03. August 2010]. [Wik10d] Wikipedia: Serial Peripheral Interface Wikipedia, Die freie Enzyklopädie, [Online; Stand 03. Mai 2010]. Marc Koraschnigg Diplomarbeit HS München

72 Literaturverzeichnis Wichtige Kontakte Initiator des Projekts Hybrid-Segelugzeug Prof. Dr.-Ing. Klaus Scheer Hochschule München; Fakultät 03: Maschinenbau/Fahrzeugtechnik/Flugzeugtechnik Raum B0.174 Dachauer Straÿe 98b München Tel.: +49 (0) Fax: +49 (0) Projektleiter des Projekts Hybrid-Segelugzeug Steen Moll Christoph-Probst-Straÿe 8 Apt München Tel.: +49 (0) Mobil: +49 (0) Entwicklungsleiter Batterien der Firma Clean-Mobile Dr. John De Roche MChem. Clean Mobile AG Marc Koraschnigg Diplomarbeit HS München

73 Literaturverzeichnis Inselkammerstr München-Unterhaching Tel.: +49 (0) Mobil: +49 (0) Ansprechpartner für CAN-Bus der Firma Clean-Mobile Arne Pagel Clean Mobile AG Inselkammerstr München-Unterhaching Tel.: +49 (0) Betreuer meiner Diplomarbeit Prof. Jürgen Plate Hochschule München; Fakultät 04: Elektro- und Informationstechnik Raum R3.058 Lothstr München Tel.: +49 (0) Fax: +49 (0) Support Hotline Europe der Firma Keil Keil Bretonischer Ring Grasbrunn Tel.: +49 (0) Support: +49 (0) Marc Koraschnigg Diplomarbeit HS München

74 A Aktivierung und Verwendung von µvision 3 A Aktivierung und Verwendung von µvision 3 Die Installationsdatei MDK370.exe bendet sich auf der beigelegten CD im Ordner Software und wird durch einen Doppelklick gestartet. Nach der Installation muss µvision 3 aktiviert werden, um den vollen Funktionsumfang nutzen zu können. Dafür wird das Programm als Administrator gestartet und über den Eintrag File License Management.. aus der Toolbar aufgerufen (Abbildung A.1). Abbildung A.1: Das License Management Den benötigten LIC (License ID Code) erhält man durch die Aktivierung auf der Internetseite mittels der Computer Marc Koraschnigg Diplomarbeit HS München

75 A Aktivierung und Verwendung von µvision 3 ID (CID) und der Personal Serial Number (PSN). Die CID bendet sich im License Manager unter dem Reiter Single-User License (Abbildung A.2 oben), die PSN ist auf der beiliegenden CD im Ordner License zu nden. Ist die Aktivierung erfolgreich durchlaufen, kann der neu erhaltene LIC dem Programm hinzugefügt werden (Abbildung A.2 unten). Abbildung A.2: Single-User License & die Computer ID (CID) Sollten Probleme bei der Installation oder der Aktivierung entstehen, kann der deutsche Keil Support telefonisch erreicht werden. Die Telefonnummern benden sich unter Wichtige Kontakte. Sobald µvision 3 installiert und aktiviert worden ist, kann das Programm gestartet werden. Es besteht aus einer Menu- (1), File- (2) und Build-Bar (3), aus dem Project Workspace (4), Work- (5) und Output-Window (6) (Abbildung A.3). Marc Koraschnigg Diplomarbeit HS München

76 A Aktivierung und Verwendung von µvision 3 Abbildung A.3: Der Arbeitsbereich Das Projekt lässt sich durch ein klicken auf Project Open Project.. aus der Menü Leiste auswählen und önen. Die nale Projektdatei bendet sich auf der beiliegenden CD im Ordner Programmcode. Durch ein klicken auf das Symbol Rebuild all target les (Abbildung A.4 links) aus der Build-Leiste wird der C Code kompiliert und das hex le auf der Festplatte gespeichert. In der Leiste File bendet sich das Symbol, um in den Debug Modus zu gelangen (Abbildung A.4 rechts). Abbildung A.4: Links: Der Rebuild All Button - Rechts: Der Start Debug Button Alle wichtigen Register (wie z. B. PINSELx, PINMODEx oder das SPI) können dann über die Fläche Peripherals aus der Menü Leiste geönet und ausgelesen werden. Marc Koraschnigg Diplomarbeit HS München

77 B Initialisierungsbeschreibung des GLCD B Initialisierungsbeschreibung des GLCD Die Beschreibung der Displayinitialisierung: Set_Com_End_H & L deniert die Anzahl der Pixel-Reihen. Set_LCD_Mapping_Control zeigt Reihen und Spalten im Normal-Modus an (6:00 Blickwinkel). Set_Scroll_Line_LSB & MSB setzt die Displaystartposition auf 0. Set_Panel_Loading setzt Panel Loading auf nf. Set_Pump_Control setzt den internen Vlcd auf 8-Fach. Set_LCD_Bias_Ratio setzt den BIAS auf 1/12. Set_Vbias_Poti_H & L stellt den Kontrast zwischen 0 und 255 ein (aktueller Wert 95). Set_RAM_Address_Control deniert ob beim Daten schreiben automatisch in die nächste Zeile gesprungen wird. Set_Display_Enable aktiviert das Display und ist bereit Bild-Informationen zu empfangen. Wie schon im Text erwähnt, sollte die V LCD - Spannung unter 15 V liegen. Die Spannung setzt sich aus folgenden Komponenten zusammen: Marc Koraschnigg Diplomarbeit HS München

78 B Initialisierungsbeschreibung des GLCD V LCD = (C V 0 + C P M P M) (1 + (T 25) C T %) C V0 & C PM sind Konstanten, die über den Befehl Set_LCD_Bias_Ratio eingestellt werden. PM ist der numerische Wert des Registers V BIAS Potentiometer Registers (Befehl Set_Vbias_Poti_H & L). T ist die Umgebungstemperatur. C T ist der temperaturkompensierte Koezient aus dem TC Register. Mit den im Projekt verwendeten Werten ergibt sich eine Spannung V LCD von 14,2 V bei einer Umgebungstemperatur von 25 C. Weitere mögliche Einstellungen können aus dem Datenblatt uc1610 des Displaycontrollers entnommen werden. Marc Koraschnigg Diplomarbeit HS München

79 C Von der Zeichnung zum Array C Von der Zeichnung zum Array Als erstes werden die Bilder in einem Zeichenprogramm, wie Adobe Photoshop, Paintshop Pro oder GIMP erstellt. Die Gröÿe der Bilder sollte mit der Gröÿe des Displays übereinstimmen. Wir önen ein neues Bild mit 160 x 104 Pixel und wählen als Color Mode Bitmap (1 Bit) aus. Das Bild kann jetzt mit den gewünschten Motiven gezeichnet werden (Abbildung C.1). Abbildung C.1: Im Zeichenprogramm erstellte Motiv Um das Bild in ein Array zu wandeln, benötigen wir das Programm BitFontCreator. Es ist eigentlich zur Konvertierung von Schriften gedacht, kann aber auch bei Bildern genutzt werden. Der Creator liegt in der Version auf der CD in dem Ordner Software bei. Wir erstellen einen neuen Font, indem wir auf File New Font New Font From Scratch.. in der Menüleiste klicken und vergeben als Font Size - Width 160 und als Font Size - Height 104 Pixel. Das gezeichnete Bild wird in dem Zeichenprogramm selektiert, mit STRG + C kopiert und mit STRG + V in den BitFontCreator eingefügt (Abbildung C.2). Marc Koraschnigg Diplomarbeit HS München

80 C Von der Zeichnung zum Array Abbildung C.2: In den BitFontCreator eingefügte Bild Ein klick auf Refresh liefert das gewünschte C Array. Man sollte jedoch die Einstellungen unter Data Format.. überprüfen, da diese sonst nicht korrekt auf dem Display angezeigt werden. Ein klicken auf Data Format.. önet die Einstellungen (Abbildung C.3). Abbildung C.3: Die Einstellungen im BitFontCreator Marc Koraschnigg Diplomarbeit HS München

Serielle Kommunikation mit dem Arduino. Teil 1: Das Serial Peripheral Interface (SPI)

Serielle Kommunikation mit dem Arduino. Teil 1: Das Serial Peripheral Interface (SPI) Serielle Kommunikation mit dem Arduino Teil 1: Das Serial Peripheral Interface (SPI) Axel Attraktor e.v. 4. Juni 2012 Axel (Attraktor e.v.) 5. Arduino-Stammtisch 4. Juni 2012 1 / 25 Serielle Kommunikation

Mehr

Die Entwicklungsumgebung. Labor Technische Informatik. Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) A. Reber

Die Entwicklungsumgebung. Labor Technische Informatik. Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) A. Reber Die Entwicklungsumgebung Labor Technische Informatik Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) A. Reber 19.04.2011 Inhalt 1 Das Keil MCB1700 Board...2 2 Keil ARM MDK Toolchain...3 2.1 Projekterstellung...3

Mehr

Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel

Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel 2 Der Mikrocontroller Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel 1 beschrieben. Auf dem Chip sind die, ein ROM- für das Programm, ein RAM- für die variablen

Mehr

Microcontroller Kurs. 08.07.11 Microcontroller Kurs/Johannes Fuchs 1

Microcontroller Kurs. 08.07.11 Microcontroller Kurs/Johannes Fuchs 1 Microcontroller Kurs 08.07.11 Microcontroller Kurs/Johannes Fuchs 1 Was ist ein Microcontroller Wikipedia: A microcontroller (sometimes abbreviated µc, uc or MCU) is a small computer on a single integrated

Mehr

Ringlicht-v3 - Frei konfigurierbares Ringlicht mit RS232 Anbindung. Kurzbeschreibung

Ringlicht-v3 - Frei konfigurierbares Ringlicht mit RS232 Anbindung. Kurzbeschreibung Ringlicht-v3 - Frei konfigurierbares Ringlicht mit RS232 Anbindung Kurzbeschreibung Das frei konfigurierbare Ringlicht kann jede beliebige Abfolge an Lichtmustern erzeugen und über einen Triggereingang

Mehr

SPI Serial Peripheral Interface

SPI Serial Peripheral Interface SPI Serial Peripheral Interface Physik- Seminar Universität Koblenz-Landau Christian Büch 27. Juni 2006 Einleitung SPI bedeutet Serial Peripheral Interface zu Deutsch serielle Peripherie Schnittstelle

Mehr

I2C-Echtzeituhr am Atmel AVR

I2C-Echtzeituhr am Atmel AVR Fachbereich Elektrotechnik und Informatik Labor für Angewandte Informatik und Datenbanken Praktikum Mikrocontroller und DSP (EMD) Prof.Dr.-Ing. E. Coersmeier I2C-Echtzeituhr am Atmel AVR Name, Vorname

Mehr

Bau und Programmieranleitung für den IR - Booster. Vorbemerkungen

Bau und Programmieranleitung für den IR - Booster. Vorbemerkungen Bau und Programmieranleitung für den IR - Booster Vorbemerkungen Die folgende Anleitung beschreibt den Aufbau und die Inbetriebnahme des IR - Booster. Ich möchte ausdrücklich darauf hinweisen, das es sich

Mehr

AT90USB Plug. Mini-Entwicklungswerkzeug. Nutzerhandbuch

AT90USB Plug. Mini-Entwicklungswerkzeug. Nutzerhandbuch AT90USB Plug Nutzerhandbuch Inhaltsverzeichnis 1 Einleitung 3 1.1 Benutzungshinweis..................... 3 2 Die erste Inbetriebnahme 4 2.1 Installation der Software.................. 4 2.2 Installation

Mehr

TBE332 Controller. Produktbeschreibung

TBE332 Controller. Produktbeschreibung TBE332 Controller Produktbeschreibung Bei der Entwicklung der TBE332 Steuerung wurde auf die Erfahrung unserer jahrelangen Planung und Realisierung verschiedenster Steuerungs- und Regelungseinrichtungen

Mehr

UART-Kommunikation mit dem Atmel AVR

UART-Kommunikation mit dem Atmel AVR Fachbereich Elektrotechnik und Informatik Labor für Angewandte Informatik und Datenbanken Praktikum Automatisierung / Echtzeitregelung (BAU/BER) Prof.Dr.-Ing. Coersmeier UART-Kommunikation mit dem Atmel

Mehr

8.1 Grundsätzlicher Aufbau der Beispiele

8.1 Grundsätzlicher Aufbau der Beispiele 107 8 Beispiele Nachdem nun viele theoretische Grundlagen gelegt wurden, kann man mit dem Programmieren eines Mikrocontrollers beginnen. In den folgenden Kapiteln werden verschiedene Möglichkeiten der

Mehr

Microcontroller Kurs Programmieren. 09.10.11 Microcontroller Kurs/Johannes Fuchs 1

Microcontroller Kurs Programmieren. 09.10.11 Microcontroller Kurs/Johannes Fuchs 1 Microcontroller Kurs Programmieren 9.1.11 Microcontroller Kurs/Johannes Fuchs 1 General Purpose Input Output (GPIO) Jeder der Pins der vier I/O Ports kann als Eingabe- oder Ausgabe-leitung benutzt werden.

Mehr

Projekt Nr. 15: Einen elektronischen Würfel erstellen

Projekt Nr. 15: Einen elektronischen Würfel erstellen Nun wissen Sie, wie Sie Zufallszahlen erzeugen können. Als Nächstes wollen wir diese neuen Kenntnisse gleich in die Tat umsetzen, indem wir einen elektronischen Würfel konstruieren. Projekt Nr. 15: Einen

Mehr

3.0 8051 Assembler und Hochsprachen

3.0 8051 Assembler und Hochsprachen 3.0 8051 Assembler und Hochsprachen Eine kurze Übersicht zum Ablauf einer Programmierung eines 8051 Mikrocontrollers. 3.1 Der 8051 Maschinencode Grundsätzlich akzeptiert ein 8051 Mikrocontroller als Befehle

Mehr

Bedienungsanleitung Version 1.0

Bedienungsanleitung Version 1.0 Botex DMX Operator (DC-1216) Bedienungsanleitung Version 1.0 - Inhalt - 1 KENNZEICHEN UND MERKMALE...4 2 TECHNISCHE ANGABEN...4 3 BEDIENUNG...4 3.1 ALLGEMEINES:...4 3.2 BEDIENUNG UND FUNKTIONEN...5 4 SZENEN

Mehr

Quanton Manual (de) Datum: 20.06.2013 URL: http://wiki:8090/pages/viewpage.action?pageid=9928792 )

Quanton Manual (de) Datum: 20.06.2013 URL: http://wiki:8090/pages/viewpage.action?pageid=9928792 ) Datum: 20.06.2013 URL: http://wiki:8090/pages/viewpage.action?pageid=9928792 ) Inhaltsverzeichnis 1 quanton flight control rev. 1 3 1.1 Anschlüsse für Peripheriegeräte 3 1.1.1 Eingänge / Ausgänge 3 1.1.2

Mehr

Anwendung und Programmierung von Mikrocontrollern. Anwendung und Programmierung von Mikrocontrollern

Anwendung und Programmierung von Mikrocontrollern. Anwendung und Programmierung von Mikrocontrollern Anwendung und Programmierung von Mikrocontrollern Sommersemester 2013 Dr.-Ing. Hubert Zitt Kontakt: hubert.zitt@fh-kl.de www.fh-kl.de/~zitt Dr.-Ing. Hubert Zitt Seite 1 von 24 S65 Shield (von oben) Komponenten

Mehr

Produktinformationen. Basis Set Atmel Atmega8 & ISP Programmer. Lieferumfang :

Produktinformationen. Basis Set Atmel Atmega8 & ISP Programmer. Lieferumfang : Produktinformationen Basis Set Atmel Atmega8 & ISP Programmer Lieferumfang : 1 Steckboard 840 Pin 1 USB ISP Programmer mit Kabel 1 Kabelsatz 32-teilig 1 Atmega8L 5 LED 3mm Klar Rot/Gelb/Grün/Blau/Weiss

Mehr

a. Flipflop (taktflankengesteuert) Wdh. Signalverläufe beim D-FF

a. Flipflop (taktflankengesteuert) Wdh. Signalverläufe beim D-FF ITS Teil 2: Rechnerarchitektur 1. Grundschaltungen der Digitaltechnik a. Flipflop (taktflankengesteuert) Wdh. Signalverläufe beim D-FF b. Zähler (Bsp. 4-Bit Zähler) - Eingang count wird zum Aktivieren

Mehr

Ergänzungen zum Manual OS V 2.05/2.06

Ergänzungen zum Manual OS V 2.05/2.06 Ergänzungen zum Manual OS V 2.05/2.06 SYSTEMRESOURCEN - PROGRAMM DOWNLOAD - Ab der Betriebssystemversion 2.05 haben die C-Control Units M-2.0 und Station 2.0 die Möglichkeit das Anwenderprogramm von einem

Mehr

Embedded Hardware Getting Started

Embedded Hardware Getting Started Embedded Hardware Getting Started HW - Ressourcen 2 Arduino Installation-Guide 4 Arduino IDE/Download 4 Arduino Treiber Installation 5 Arduino DIE starten 7 Arduino IDE - Getting Started (Code-Basiert)

Mehr

Programmierung des Lego NXT in C. Hochschule Mannheim Fakultät für Informatik

Programmierung des Lego NXT in C. Hochschule Mannheim Fakultät für Informatik Programmierung des Lego NXT in C Hochschule Mannheim Fakultät für Informatik Der NXT Stein Technische Daten 32-bit ARM7 Microcontroller 256 Kbytes FLASH, 64 Kbytes RAM 8-bit AVR microcontroller 4 Kbytes

Mehr

RN-Control ARDUINO Bibliothek ATMEL 32 Version 0.2

RN-Control ARDUINO Bibliothek ATMEL 32 Version 0.2 RN-Control ARDUINO Bibliothek ATMEL 32 Version 0.2 Bernd Klein 23. Mai 2011 Inhaltsverzeichnis 1 ARDUINO - RN-Control Library 3 1.1 Bibliothek RNControl...................... 3 1.2 Einführung............................

Mehr

DTMF Sender. Es können 252 Zeichen maximal am Stück übertragen werden; die Länge des Strings wird mit einem Byte übertragen.

DTMF Sender. Es können 252 Zeichen maximal am Stück übertragen werden; die Länge des Strings wird mit einem Byte übertragen. DTMF Sender Author DK1RI, Version V02.1, 20160104 This project can be found in https://www.github.com/dk1ri Einleitung Dieses Interface ist eine Vorlage für ein Interface, das ein Gerät, das sich mit DTMF

Mehr

Rechnerarchitektur Atmega 32. 1 Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7

Rechnerarchitektur Atmega 32. 1 Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7 1 Vortrag Atmega 32 Von Urs Müller und Marion Knoth Urs Müller Seite 1 von 7 Inhaltsverzeichnis 1 Vortrag Atmega 32 1 1.1 Einleitung 3 1.1.1 Hersteller ATMEL 3 1.1.2 AVR - Mikrocontroller Familie 3 2 Übersicht

Mehr

01.04.2004 Fachbereich Informatik Microcomputer-Labor TFH Berlin MCÜ 65 1. Laborübung -Beschreibung der Hardware -Beschreibung der Aufgabe Seite 2 -Frontplatte des Zielsystems Seiten 3 -Tabellen und Timingdiagramme

Mehr

SCAN OPERATOR 12. Bedienungsanleitung. Ab Version 1.0. email: service@glp.de Internet: http://www.glp.de

SCAN OPERATOR 12. Bedienungsanleitung. Ab Version 1.0. email: service@glp.de Internet: http://www.glp.de Bedienungsanleitung Ab Version 1.0 email: service@glp.de Internet: http://www.glp.de 2 (V2.0) GLP German Light Production Inhalt 1 Übersicht...5 1.1 Frontansicht...5 1.2 Rückansicht...7 2 Bedienung...7

Mehr

Atmel AVR für Dummies

Atmel AVR für Dummies Atmel AVR für Dummies fd0@koeln.ccc.de 29.12.2005 Übersicht 1 Hardware Kurzvorstellung Atmega8 Programmierkabel (Eigenbau vs. Kommerzlösung) Alternative: Bootloader (Programmieren via rs232) Software Speicher

Mehr

Aufgabenstellung Praktikum Mikrorechentechnik Sommersemester 2014

Aufgabenstellung Praktikum Mikrorechentechnik Sommersemester 2014 Aufgabenstellung Praktikum Mikrorechentechnik Sommersemester 2014 Aufgabe: Entwurf und Implementierung eines Weckers auf Basis des MSP430 Education Systems Beschreibung: Gegenstand des Praktikums ist der

Mehr

Name: ES2 Klausur Thema: ARM 25.6.07. Name: Punkte: Note:

Name: ES2 Klausur Thema: ARM 25.6.07. Name: Punkte: Note: Name: Punkte: Note: Hinweise für das Lösen der Aufgaben: Zeit: 95 min. Name nicht vergessen! Geben Sie alle Blätter ab. Die Reihenfolge der Aufgaben ist unabhängig vom Schwierigkeitsgrad. Erlaubte Hilfsmittel

Mehr

Microcontroller Programmierung. Ein PDV-Vertiefungsprojekt von: Chr. Schulz, P. Simon und D. Stein Sommersemester 2005 Version 1.0

Microcontroller Programmierung. Ein PDV-Vertiefungsprojekt von: Chr. Schulz, P. Simon und D. Stein Sommersemester 2005 Version 1.0 Microcontroller Programmierung Ein PDV-Vertiefungsprojekt von: Chr. Schulz, P. Simon und D. Stein Sommersemester 2005 Version 1.0 Inhalt Einführung Die Hardware Die Schaltlogik Implementierung der Steuerung

Mehr

Mikrocontroller von Markus Koch April 2011

Mikrocontroller von Markus Koch April 2011 Mikrocontroller von Markus Koch April 2011 Inhaltsverzeichnis 1 Was ist ein Mikrocontroller?...3 1.1 Einleitung...3 1.2 Aufbau...3 1.2.1 CPU...3 1.2.2 Speicher...3 RAM...3 ROM...4 1.2.3 Takt...4 1.2.4

Mehr

Programmieren in C Teil 3: Mikrocontrollerprogrammierung

Programmieren in C Teil 3: Mikrocontrollerprogrammierung Programmieren in C Teil 3: Mikrocontrollerprogrammierung 08/30/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 1 Tag 1 Hello World 08/30/10 Fachbereich Physik Institut für Kernphysik

Mehr

C4 Die SPI Schnittstelle

C4 Die SPI Schnittstelle C4 Die SPI Schnittstelle Einführung Motorola entwickelte die synchrone SPI-Master-Slave Schnittstelle, (Serial Periphal Interface) für die Kommunikation zwischen Mikrocontrollern. Ein ähnliches Bus System

Mehr

Kommunikation HOST TMC420 Controller

Kommunikation HOST TMC420 Controller Kommunikation HOST TMC420 Controller Sofern möglich, sollte zusätzlich neben der seriellen Kommunikation (RS232 bzw. RS485) ein Signalaustausch tels digitaler E/A erfolgen (24 VDC). Dieses ermöglicht eine

Mehr

Modellgestütztes Software Engineering. Versuch 5. Wintersemester 2015

Modellgestütztes Software Engineering. Versuch 5. Wintersemester 2015 Modellgestütztes Software Engineering Versuch 5 Wintersemester 2015 Version 7.0.1, 16. Dezember 2015 Inhalt 1 OOP IN C... 3 1.1 UMSETZUNG IN RAPHSODY (RIC)... 3 2 DIE ENTWICKLUNGSUMGEBUNG... 5 2.1 HARDWARE

Mehr

Wer möchte, kann sein Programm auch auf echter Hardware testen

Wer möchte, kann sein Programm auch auf echter Hardware testen U4 3. Übungsaufgabe U4 3. Übungsaufgabe Grundlegendes zur Übung mit dem AVR-μC Register I/O-Ports AVR-Umgebung Peripherie U4.1 U4-1 Grundlegendes zur Übung mit dem AVR-mC U4-1 Grundlegendes zur Übung mit

Mehr

AVR Net-IO. Der originale von Pollin vertriebene Bausatz hat folgende Eckdaten:

AVR Net-IO. Der originale von Pollin vertriebene Bausatz hat folgende Eckdaten: AVR Net-IO 2013 DL2USR Bitte alles sorgfältig lesen. Weitere Hinweise enthält die Readme.txt im Softwareordner. Keine Garantie für Vollständigkeit und Fehlerfreiheit, kein Support in irgendeiner Art! Ein

Mehr

Einreichung. Name, Klasse und Adresse der HTL: HTL Pinkafeld, 5BE, Meierhofplatz 1. Name/n des/r Einreichenden: Mörth Stefan, Radl Benedikt

Einreichung. Name, Klasse und Adresse der HTL: HTL Pinkafeld, 5BE, Meierhofplatz 1. Name/n des/r Einreichenden: Mörth Stefan, Radl Benedikt Einreichung Name, Klasse und Adresse der HTL: HTL Pinkafeld, 5BE, Meierhofplatz 1 Name/n des/r Einreichenden: Mörth Stefan, Radl Benedikt Name des betreuenden Professors: Dipl. Ing. Thomas Schlaudoschitz

Mehr

Einführung in Mikrokontroller Benutzung mit dem Arduino Board. Ramon Hofer ICVR

Einführung in Mikrokontroller Benutzung mit dem Arduino Board. Ramon Hofer ICVR Einführung in Mikrokontroller Benutzung mit dem Arduino Board Ramon Hofer ICVR Ablauf Warum Mikrokontroller Das Arduino Board Anschliessen von Bauteilen Digitale Ein- und Ausgaben Analoge Eingaben Serielle

Mehr

BLIT2008-Board. Uwe Berger

BLIT2008-Board. Uwe Berger 11/2008 (BLIT) 2 Inhalt Was sind Mikrocontroller AVR-Mikrocontroller Werkzeugkasten Prinzipielles zur Programmierung BLIT2008-Board 11/2008 (BLIT) 3 Was sind Mikrocontroller AVR-Mikrocontroller Werkzeugkasten

Mehr

"Memory Stick" zur Programmierung der comfort 8+ Lichtsteuranlage mit PC Software "scenes editor"

Memory Stick zur Programmierung der comfort 8+ Lichtsteuranlage mit PC Software scenes editor comfort 8+ IRPC "Memory Stick" zur Programmierung der comfort 8+ Lichtsteuranlage mit PC Software "scenes editor" 1: Programmstart, Einstellungen 1.1 Zuerst die Software der beiliegenden CD-ROM auf einem

Mehr

Innenbeleuchtungsplatine für Y-Wagen mit integriertem Digitaldecoder

Innenbeleuchtungsplatine für Y-Wagen mit integriertem Digitaldecoder Innenbeleuchtungsplatine für Y-Wagen mit integriertem Digitaldecoder Diese Beleuchtungsplatine ist auf den Y-Wagen angepasst. Sie ist für die Version mit 9 und 10Abteilen und den Speisewagen der Firmen

Mehr

ARDUINO Übung. Inhalt:

ARDUINO Übung. Inhalt: ARDUINO Übung Diese Übung ermöglicht einen kurzen Einblick in die Welt der Mikrokontrollerprogrammierung. Es sollen im Folgenden die Anleitungen befolgt werden und die entsprechenden elektrotechnischen

Mehr

Übungscomputer mit Prozessor 8085 - Bedienungsanleitung

Übungscomputer mit Prozessor 8085 - Bedienungsanleitung Seite 1 von 9 Pinbelegung der Steckerleisten im Übungsgerät Seite 2 von 9 Inbetriebnahme: Schalter S1, S2, und S3 in Stellung 1 (oben) schalten. Spannung 5 V anlegen. ACHTUNG auf Polarität achten. Taste

Mehr

D i g i t a l l a b o r

D i g i t a l l a b o r Hochschule Karlsruhe Technik und Wirtschaft Fakultät für Informatik und Wirtschaftsinformatik Prof. Dr. A. Ditzinger / Dipl.-Inform. (FH) O. Gniot Prof. Dr. N. Link / Dipl.-Ing. J. Krastel D i g i t a

Mehr

Mikrocontroller Grundlagen. Markus Koch April 2011

Mikrocontroller Grundlagen. Markus Koch April 2011 Mikrocontroller Grundlagen Markus Koch April 2011 Übersicht Was ist ein Mikrocontroller Aufbau (CPU/RAM/ROM/Takt/Peripherie) Unterschied zum Mikroprozessor Unterschiede der Controllerarten Unterschiede

Mehr

Bedienungsanleitung BOTEX DMX OPERATOR

Bedienungsanleitung BOTEX DMX OPERATOR Bedienungsanleitung BOTEX DMX OPERATOR 1 2 7 8 10 9 11 12 13 3-192 DMX Kanäle, fest zugeordnet an 12 Scannern. - 30 Bänke, mit je 8 programmierbaren Scenen. - 8 Fader für max. 16 DMX Kanäle pro Scanner

Mehr

Einführung in Automation Studio

Einführung in Automation Studio Einführung in Automation Studio Übungsziel: Der links abgebildete Stromlaufplan soll mit einer SPS realisiert werden und mit Automation Studio programmiert werden. Es soll ein Softwareobjekt Logik_1 in

Mehr

Parallel-IO. Ports am ATmega128

Parallel-IO. Ports am ATmega128 Parallel-IO Ansteuerung Miniprojekt Lauflicht Ports am ATmega128 PortE (PE7...PE0) alternativ, z.b. USART0 (RS232) 1 Pin von PortC Port C (PC7...PC0) 1 Parallel-IO-Port "Sammelsurium" verschiedener Speicher

Mehr

Sprachausgabe. Die Steuerung des Interfaces kann, abhängig von der Besückung über I2C, RS232 oder USB erfolgen

Sprachausgabe. Die Steuerung des Interfaces kann, abhängig von der Besückung über I2C, RS232 oder USB erfolgen Sprachausgabe Einleitung Dieses Interface ist bindet das Sprachausgabe Modul MSM2 von ELV in da MYC System ein. Das Interface arbeitet als Slave am I2C Bus oder kann über RS232 /USB gesteuert werden. Dieses

Mehr

Compuprint SP40plus. Das SP40plus Remote Setup Programm. Restore MFG. Send Setup. Send Setup. Restore MFG

Compuprint SP40plus. Das SP40plus Remote Setup Programm. Restore MFG. Send Setup. Send Setup. Restore MFG Das SP40plus Remote Setup Programm Das SP40plus Remote Setup Programm ist ein kleines schweizer Messer, das Ihnen den Umgang mit dem Produkt erleichtert, sei es, dass Sie als Techniker mehrere Geräte aktualisieren

Mehr

Wie in der Skizze zu sehen ist, bleibt die Periodendauer / Frequenz konstant und nur die Pulsweite ändert sich.

Wie in der Skizze zu sehen ist, bleibt die Periodendauer / Frequenz konstant und nur die Pulsweite ändert sich. Kapitel 2 Pulsweitenmodulation Die sogenannte Pulsweitenmodulation (kurz PWM) ist ein Rechtecksignal mit konstanter Periodendauer, das zwischen zwei verschiedenen Spannungspegeln oszilliert. Prinzipiell

Mehr

Tutorial. Microcontroller. Grundlagen µc. Kapitel 1

Tutorial. Microcontroller. Grundlagen µc. Kapitel 1 Microcontroller Kapitel 1 Grundlagen µc µc Inhaltsverzeichnis 1 - Vorwort Seite 2 2 - Prinzipieller Programmablauf Seite 4 3 - ISR Interrupt Service Routine Seite 5 4 - Compiler Seite 7 5 - ATMega8 Seite

Mehr

Snake Projekt. Jan Scholz. 16. März 2013

Snake Projekt. Jan Scholz. 16. März 2013 Snake Projekt Jan Scholz 16. März 2013 Inhaltsverzeichnis 1 Einführung 3 2 Hardware Entwicklung 4 2.1 Mikrocontroller............................. 4 2.2 LED-Matrix............................... 4 2.2.1

Mehr

Adressbeispiele Binär Schalterbild

Adressbeispiele Binär Schalterbild Datenblatt Features Controller kann DMX 512 empfangen oder senden Bis zu 360W Schaltleistung (3x 5A bei 24V) 3 PWM Kanäle Onboard, 7-24V DMX 512 zu WS2801 fähig Bequem programmierbar über Fernbedienung

Mehr

BitRecords FPGA Modul XC6SLX25_V2.0, Mai2013 1

BitRecords FPGA Modul XC6SLX25_V2.0, Mai2013 1 BitRecords FPGA Modul XCSLX FPGA Modul zur Anwendung im Hobby- und Prototypenbereich Eigenschaften: Xilinx Spartan (XCSLX-FGGC) Nutzer-IOs On-Board 0MHz Oszillator LEDs, Taster Rastermaß:. mm Maße: x mm

Mehr

Treiberinstallation Bitte laden Sie sich die *inf Datei für den Treiber des Prog-S-Programmer hier herunter: www.diamex.de Kartenreiter download Programmiergeräte - ERFOS-Prog-S.zip Die *inf Datei auf

Mehr

eblock, SD-Kartenleser Projektteam: Henrik Esche Tobias Albers Michael Heßling Daniel Lütfrenk Jonas Wieschmann

eblock, SD-Kartenleser Projektteam: Henrik Esche Tobias Albers Michael Heßling Daniel Lütfrenk Jonas Wieschmann eblock, SD-Kartenleser Projektteam: Henrik Esche Tobias Albers Michael Heßling Daniel Lütfrenk Jonas Wieschmann eblock, SD-Kartenleser Zieldefinition: Am 17.06.2009 ist ein eblock betriebsbereit und mit

Mehr

Vorschläge für kleine Bastel-Projekte im Rahmen des Arduino-Workshops

Vorschläge für kleine Bastel-Projekte im Rahmen des Arduino-Workshops Vorschläge für kleine Bastel-Projekte im Rahmen des Arduino-Workshops Die folgenden Aufgaben sind Vorschläge für kleine Projekte, mit denen man seinen Arduino, dessen Entwicklungsumgebung und die verschiedenen

Mehr

Laderegler VWG 2008 mit Display

Laderegler VWG 2008 mit Display Anschluss des Ladereglers Der Laderegler muss vor der Inbetriebnahme programmiert werden. Zum Anschluss eines Netzwechselrichters, beachten Sie bitte die Bedienungs- und Installationsanleitung des Netzwechselrichters,

Mehr

Protokoll zum Versuch 146

Protokoll zum Versuch 146 Elektronik-Praktikum am Dritten Physikalischen Institut der Universität Göttingen Wintersemester 2005/2006 Protokoll zum Versuch 146 Messgerätesteuerung über IEC-Bus Name: Georg Herink, Hendrik Söhnholz

Mehr

Teil I: Wat isse ne Mikrokontroller?

Teil I: Wat isse ne Mikrokontroller? Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13 Eine Einführung in Aufbau, Funktionsweise, Programmierung und Nutzen von Mikroprozessoren Teil I: Wat isse ne Mikrokontroller? Wat

Mehr

14 Mee Controller. 14.1 Mee Controller. 14.1.1 Blockschaltbild Mee Controller. 14.1.2 Beschleunigungssensor. HSR Hochschule für Technik Rapperswil

14 Mee Controller. 14.1 Mee Controller. 14.1.1 Blockschaltbild Mee Controller. 14.1.2 Beschleunigungssensor. HSR Hochschule für Technik Rapperswil 14 Mee Controller Der Mee Controller ist ein Gamecontroller, der eine ähnliche Funktionsweise wie jener der bekannten Wii Konsole von Nintendo hat. Dabei werden die Steuerbefehle vom Beschleunigungssensor

Mehr

Fachhochschule Kaiserslautern Fachbereich Angewandte Ingenieurwissenschaften WS2010/11. Zeitpunkt der Prüfung: 18.01.2011 Beginn: 10.

Fachhochschule Kaiserslautern Fachbereich Angewandte Ingenieurwissenschaften WS2010/11. Zeitpunkt der Prüfung: 18.01.2011 Beginn: 10. Lehrprozessor: Coldfire MCF-5272 Zeitpunkt der Prüfung: 18.01.2011 Beginn: 10.45 Uhr Raum: Aula Bearbeitungszeit: 180 Minuten Erlaubte Hilfsmittel: Gedrucktes Vorlesungsskript von Prof. Neuschwander mit

Mehr

CompuLok Zentrale. Software Interface. Digitalzentrale für DCC und Motorola Format

CompuLok Zentrale. Software Interface. Digitalzentrale für DCC und Motorola Format CompuLok Zentrale Software Interface Digitalzentrale für DCC und Motorola Format Inhalt CompuLok Software Interface... 3 Das Software Interface... 3 Installation... 3 Treiber installieren.... 3 Hinweis

Mehr

Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein:

Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein: Blinken Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein: // Projekt 1 - LED Blinker int ledpin = 13; void setup() pinmode(ledpin, OUTPUT); void loop() digitalwrite(ledpin, HIGH);

Mehr

Zusatzinformation zum USB-Flashdrive mit ARM und RS232

Zusatzinformation zum USB-Flashdrive mit ARM und RS232 Zusatzinformation zum USB-Flashdrive mit ARM und RS232 1. Belegung der LCD-Schnittstelle an JP3: REGISTER_SELECT READ_WRITE ENABLE DISPLAY_D0 DISPLAY_D1 DISPLAY_D2 DISPLAY_D3 DISPLAY_D4 DISPLAY_D5 DISPLAY_D6

Mehr

Aufbauanleitung für das Atmega-Board Version 1.1

Aufbauanleitung für das Atmega-Board Version 1.1 Aufbauanleitung für das Atmega-Board Version 1.1 Inhaltsverzeichnis 1 Einleitung 2 2 Zusammenbau 2 2.1 Teileliste................................ 2 2.2 Ausrichten der Platine........................ 2

Mehr

B1 Stapelspeicher (stack)

B1 Stapelspeicher (stack) B1 Stapelspeicher (stack) Arbeitsweise des LIFO-Stapelspeichers Im Kapitel "Unterprogramme" wurde schon erwähnt, dass Unterprogramme einen so genannten Stapelspeicher (Kellerspeicher, Stapel, stack) benötigen

Mehr

Serie 8: Microcontroller 17./18.07.2014

Serie 8: Microcontroller 17./18.07.2014 Serie 8: Microcontroller 17./18.07.2014 I. Ziel der Versuche Erster Erfahrungen mit einem Microcontroller sollen gesammelt werden, die grundlegenden Ein- Ausgabe-Operationen werden realisiert. II. Vorkenntnisse

Mehr

8.0 Erweiterung mit dem 8 Bit D/A Maxim MAX5382

8.0 Erweiterung mit dem 8 Bit D/A Maxim MAX5382 8.0 Erweiterung mit dem 8 Bit D/A Maxim MAX5382 Der MAX5382 ist ein 8 Bit DA Wandler im SOT23 Gehäuse. Der MAX5380 besitzt eine interne Referenzspannung von 2 V, der MAX5381 von 4 Volt und der verwendete

Mehr

Technische Dokumentation

Technische Dokumentation Technische Dokumentation für metratec TCP/IP auf UART Converter (TUC) Stand: Juni 2011 Version: 1.0 Technische Dokumentation metratec TUC Seite 1 von 11 Inhaltsverzeichnis 1. Allgemeine Hinweise/Sicherheitshinweise...3

Mehr

Technische Dokumentation. TopMessage / TopLab Hardware MessHaus Softwarekomponenten SPS

Technische Dokumentation. TopMessage / TopLab Hardware MessHaus Softwarekomponenten SPS Delphin Technology AG Sülztalstraße 23 D 51491 Overath-Brombach Tel: ++49 2207 9645 0 Fax: ++49 2207 9645 35 Technische Dokumentation TopMessage / TopLab Hardware MessHaus Softwarekomponenten SPS Ergänzende

Mehr

Anleitung zur Konfiguration und ersten Inbetriebnahme des RPTC-1 v1.17. www.funk24.net. RPTC-1_anleitung_v117.docx 1 / 14 DG1BGS, 03.08.

Anleitung zur Konfiguration und ersten Inbetriebnahme des RPTC-1 v1.17. www.funk24.net. RPTC-1_anleitung_v117.docx 1 / 14 DG1BGS, 03.08. Anleitung zur Konfiguration und ersten Inbetriebnahme des RPTC-1 v1.17 RPTC-1_anleitung_v117.docx 1 / 14 DG1BGS, 03.08.2015 21:26:00 Inhaltsverzeichnis Vorbereitungen... 3 Installation des USB-Treibers...

Mehr

LCD-GRAFIKMODUL 120x32 PIXEL

LCD-GRAFIKMODUL 120x32 PIXEL LCD-GRAFIK MODUL 120x32 PIXEL Stand 12.2010-20..+70 C EA T120L-53 EA T120A-54LED TECHNISCHE DATEN * KONTRASTREICHE SUPERTWIST ANZEIGE (GRÜN) * KONTROLLER AX6120 ODER KOMPATIBEL INTEGRIERT * ANSCHLUSS AN

Mehr

Der I²C-Bus. Vorstellung des Inter-Integrated Circuit -Bus. Aufbau und Funktionsweise. Beispiel PortExpander am Arduino

Der I²C-Bus. Vorstellung des Inter-Integrated Circuit -Bus. Aufbau und Funktionsweise. Beispiel PortExpander am Arduino Der I²C-Bus Vorstellung des Inter-Integrated Circuit -Bus Aufbau und Funktionsweise Beispiel PortExpander am Arduino Weitere Anwendungsmöglichkeiten Was ist der I²C-Bus entwickelt von Philips Anfang der

Mehr

1Im Gegensatz zu den übrigen Web-IO Digital, ist bei den

1Im Gegensatz zu den übrigen Web-IO Digital, ist bei den 5.9 Über die Standardbetriebsarten hinaus, beinhalten die ERP- Gateway-Modelle 57635 und 57636 zusätzlich das patentierte Wayback-Verfahren für den Zugriff auf die digitalen Ausgänge. Dieses ermöglicht

Mehr

HelvePic32 Breadboard. Internet Data Logger

HelvePic32 Breadboard. Internet Data Logger 2016/04/03 21:14 1/10 HelvePic32 Breadboard Alle Beispiele, welche beim Helvepic32 angegeben sind, können unverändert natürlich auch beim HelvePic32 Breadboard verwendet werden. Daher nutzen wir die Gelegenheit,

Mehr

embedded projects GmbH

embedded projects GmbH embedded projects GmbH e Quickstart GNUBLIN 32 MB (700641) Montage- und Aufbauanleitung Beispielanwendung (Rote LED auf dem Gnublin ) 1/12 Lieber Kunde, wir versuchen mit unseren Datenenblättern Ihnen

Mehr

Kombinierter Pitch Bend/Modulation Joystick GLOBAL) oder führt ein Aktion aus (WRITE, TAP TEMPO) Keyboard

Kombinierter Pitch Bend/Modulation Joystick GLOBAL) oder führt ein Aktion aus (WRITE, TAP TEMPO) Keyboard ANSCHLUSS AN EINEN COMPUTER Wenn Sie das ReMOTE SL zur Steuerung Ihrer Software verwenden wollen, ist die Einrichtung sehr einfach. Es ist keine Treiberinstallation erforderlich, Sie müssen das Gerät lediglich

Mehr

AT90USB Plug. Mini-Entwicklungswerkzeug. Benutzerhandbuch

AT90USB Plug. Mini-Entwicklungswerkzeug. Benutzerhandbuch AT90USB Plug Mini-Entwicklungswerkzeug Benutzerhandbuch Chip1768 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung 4 1.1 Benutzungshinweis.................................. 4 2 Die erste Inbetriebnahme

Mehr

Anleitung Installation und Kurzanleitung Tachostore/D-Box

Anleitung Installation und Kurzanleitung Tachostore/D-Box Anleitung Installation und Kurzanleitung Tachostore/D-Box Inhalt 1 Installation Tachostore...2 2 Beseitigung der Installationsprobleme...2 3 Registrierung bei Micropross...3 4 D-Box USB Treiber Installation...3

Mehr

Johannes Kelper Universität Linz. Institut für Elektrische Messtechnik. Dokumentation. ATmeag8-USB Modul. Bernd R. Arminger ATmega8-USB Modul 1

Johannes Kelper Universität Linz. Institut für Elektrische Messtechnik. Dokumentation. ATmeag8-USB Modul. Bernd R. Arminger ATmega8-USB Modul 1 Dokumentation ATmeag8-USB Modul Bernd R. Arminger ATmega8-USB Modul 1 1. Beschreibung Das ATmega8-USB Modul besteht aus einen ATmega8 Mikrokontroller der Firma Atmel (Datenblatt/buch erhältlich unter http://www.atmel.com)

Mehr

NanoCAN & NanoJEasy. Software training

NanoCAN & NanoJEasy. Software training NanoCAN & NanoJEasy Software training NanoCAN NanoCAN ist ein nützliches Tool für: - Prüfung - Fehlersuche und -behebung - Firmware-Updates Unsere Steuerungen sind immer CAN-Slaves. Aus diesem Grund stehen

Mehr

Zähler- und Zeitgeber-Baugruppen

Zähler- und Zeitgeber-Baugruppen Zähler- und Zeitgeber-Baugruppen Sinn: häufig müssen Zeitbedingungen eingehalten werden z.b.: einige ms warten, Häufigkeit von Ereignissen zählen etc... Lösung: 1.) Zeitschleifen = Programm abarbeiten,

Mehr

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C Interrupts Funktionsprinzip Interrupts bei ATmega128 Beispiel in C Funktionsprinzip 1 Was ist ein Interrupt? C muss auf Ereignisse reagieren können, z.b.: - jemand drückt eine Taste - USART hat Daten empfangen

Mehr

Zusatzplatine MP-Bus HZS 562

Zusatzplatine MP-Bus HZS 562 ZUSATZPLATINE MP-BUS HZS 562 Zusatzplatine MP-Bus HZS 562 Die MP-Bus Interfaceelektronik stellt die Schnittstelle zwischen einem CAN-Bus-System und einem MP-Bus-System dar. Die Elektronik wird als MP-Bus

Mehr

embedded projects GmbH

embedded projects GmbH embedded projects GmbH Build your own GNUBLIN GNUBLIN nach Kundenwunsch Planung Prototyp Entwicklung Serie 1/11 Version: 100 Stand: 03.09.11 Lieber Kunde, wir möchten Ihnen mit unseren Datenenblättern

Mehr

SX3 PC Software rev. 0.99c

SX3 PC Software rev. 0.99c SX3 PC Software rev. 0.99c SX3 ist ein Programm zur Steuerung einer Selectrix Digitalzentrale unter Linux bzw. Windows. Mit SX3 haben Sie die Möglichkeit Selectrix -Loks zu fahren, Weichen zu Schalten

Mehr

Fernseh-Simulator Microcontroller ATMEL 89C4051 8 Bit Betriebsspannungsbereich von 9-35 Volt 8 leistungsfähigen Ausgänge 16 Programmspeicherplätze

Fernseh-Simulator Microcontroller ATMEL 89C4051 8 Bit Betriebsspannungsbereich von 9-35 Volt 8 leistungsfähigen Ausgänge 16 Programmspeicherplätze Fernseh-Simulator Diese Steuerung mit dem Microcontroller ATMEL 89C4051 ist für universelle Steueraufgaben bis 8 Bit ausgelegt. Der große Betriebsspannungsbereich von 9-35 Volt, die 8 leistungsfähigen

Mehr

Mikrocontroller - Schnelleinstieg

Mikrocontroller - Schnelleinstieg Mikrocontroller - Schnelleinstieg Am Beispiel des Atmel Mega8 Philipp Fabian Benedikt Maier Mikrocontroller Schnelleinstieg Seite 1 Mikrocontroller - Schnelleinstieg: - Was ist ein Mikrokontroller? - Welche

Mehr

PG5 Starter Training PG5 Core und Webeditor 8 Daniel Ernst DE02 2013-03-14

PG5 Starter Training PG5 Core und Webeditor 8 Daniel Ernst DE02 2013-03-14 PG5 Starter Training PG5 Core und Webeditor 8 Daniel Ernst DE02 2013-03-14 Einführung Benötigtes Material: Notebook oder Computer PCD1 E-Controller USB Kabel Schulungsplatine Ethernet Kabel Benötigte Software

Mehr

Installationsanleitung des luftgestützten Überwachungssystems

Installationsanleitung des luftgestützten Überwachungssystems Telematik-Projekt Installationsanleitung des luftgestützten Überwachungssystems des Studienganges Telematik (Master TM12) an der Technischen Hochschule Wildau [FH] von Nora Duch, Christopher Guhl, Christoph

Mehr

SSA P_51_002_NEU. doc

SSA P_51_002_NEU. doc SSA P_51_002_NEU. doc Lehrfach: Mikrorechentechnik Versuch: Sieben-Segment-Anzeige Oc Hochschule Zittau/Görlitz; Fachbereich Elektro- und Informationstechnik Prof. Dr.-Ing. Kühne April 2005 Bearb.:Dipl.-Ing.

Mehr

SEDU-Ambilight. Ambilight mit dem SEDU-Board

SEDU-Ambilight. Ambilight mit dem SEDU-Board SEDU-Ambilight Ambilight mit dem SEDU-Board 1 Merkmale Das SEDU-Board ist ein universelles Controller-Board mit einem ATMega16-Prozessor (oder kompatiblen). Eine Beschreibung des Boards ist über einen

Mehr