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

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

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

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

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

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

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

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

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

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

Diplomarbeit. Konzeption einer Entwicklungsplattform für Embedded Linux auf Basis der ARM9 Technologie. von. Andreas Bießmann. 20.

Diplomarbeit. Konzeption einer Entwicklungsplattform für Embedded Linux auf Basis der ARM9 Technologie. von. Andreas Bießmann. 20. In Zusammenarbeit mit Diplomarbeit Konzeption einer Entwicklungsplattform für Embedded Linux auf Basis der ARM9 Technologie von Andreas Bießmann 20. Januar 2008 Erstprüfer: Zweitprüfer: Firmenbetreuer:

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

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

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

Interface Definitionen zu E-LAB ICP-V24 Portable

Interface Definitionen zu E-LAB ICP-V24 Portable Serielles Interface PC ICP-V24 18.03.2003 Seite 1/5 Interface Definitionen zu E-LAB ICP-V24 Portable Das Interface zwischen PC und ICP-V24 besteht aus dem Hardware Teil und dem Software Teil. Hardware

Mehr

AVR UART. ELV Modul: http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=28776&flv=1&berei ch=&marke=

AVR UART. ELV Modul: http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=28776&flv=1&berei ch=&marke= AVR UART 1. Einleitung In dieser Anleitung soll beispielhaft gezeigt werden, wie die serielle Kommunikation zwischen einem AVR Mikroprozessor und dem PC aufgebaut wird. Hierbei wird erst der einfache Fall

Mehr

GmbH, Stettiner Str. 38, D-33106 Paderborn

GmbH, Stettiner Str. 38, D-33106 Paderborn Serial Device Server Der Serial Device Server konvertiert die physikalische Schnittstelle Ethernet 10BaseT zu RS232C und das Protokoll TCP/IP zu dem seriellen V24-Protokoll. Damit können auf einfachste

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

Netduino Mikroprozessor für.net Entwickler

Netduino Mikroprozessor für.net Entwickler Netduino Mikroprozessor für.net Entwickler Patrick Herting Softwareentwickler BlueTem Software GmbH Blog E-Mail www.wdev.de pher@live.de Ablaufplan - Theorieteil Was ist der Netduino? Welche Modelle gibt

Mehr

1090/606 4 Kanal-Video-Umschalter

1090/606 4 Kanal-Video-Umschalter MV006500 / 10-2008 Allgemeines 1090/606 4 Kanal-Video-Umschalter Der Umschalter 1090/606, ist ein hochwertiger Mikroprozessor gesteuerter Video-Umschalter, der geeignet ist bis zu vier Kameras oder Videosignale

Mehr

MB-Diplom (4. Sem.) / MB-Bachelor (Schwerpunkt Mechatronik, 5. Sem.) Seite 1 von 8. Wintersemester 2014/15 Elektronik

MB-Diplom (4. Sem.) / MB-Bachelor (Schwerpunkt Mechatronik, 5. Sem.) Seite 1 von 8. Wintersemester 2014/15 Elektronik MB-Diplom (4. Sem.) / MB-Bachelor (Schwerpunkt Mechatronik, 5. Sem.) Seite 1 von 8 Hochschule München Fakultät 03 Zugelassene Hilfsmittel: alle eigenen, Taschenrechner Matr.-Nr.: Hörsaal: Wintersemester

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

Software Manual Asuro xtend

Software Manual Asuro xtend Software Manual Asuro xtend Zur Benutzung mit dem ASURO Roboter bzw. ASURO xtend 2014 AREXX Engineering und JM3 Engineering www.arexx.com Neueste Updates sind auf www.jm3-engineering.com! Version: 0.90

Mehr

Gliederung Hardware fuer die Zeitmessung Zeitmanagement auf Uniprozessorsystemen. Timing Measurements. Timo Schneider. 4.

Gliederung Hardware fuer die Zeitmessung Zeitmanagement auf Uniprozessorsystemen. Timing Measurements. Timo Schneider. 4. 4. Juni 2005 1 2 Timer Interrupts Software Timer System Calls Die Real Time Clock befindet sich zusammen mit CMOS-RAM (Bios) auf einem Chip, zb Motorola 1416818. Wenn der PC ausgeschaltet wird, wird die

Mehr

In diesem Dokument soll kurz auf die Bedienung von VST3PluginTestHost.exe eingegangen werden.

In diesem Dokument soll kurz auf die Bedienung von VST3PluginTestHost.exe eingegangen werden. Hochschule für Angewandte Wissenschaften Hamburg Hamburg University of Applied Sciences Fakultät Technik und Informatik Department Informations- und Elektrotechnik Projekt E7 im Bachelorstudiengang Informations-

Mehr

Die Mikroprogrammebene eines Rechners

Die Mikroprogrammebene eines Rechners Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten, z.b. Befehl holen Befehl dekodieren Operanden holen etc.

Mehr

GinLink Interface 1GHz RISC CPU M-RAM High-Speed Feldbus Controller RISC-CPU, 800MHz... 1GHz Bis zu 256 MByte SDRAM

GinLink Interface 1GHz RISC CPU M-RAM High-Speed Feldbus Controller RISC-CPU, 800MHz... 1GHz Bis zu 256 MByte SDRAM GinLink-News Feldbus-Controller GinLink Interface 1GHz RISC CPU M-RAM High-Speed Feldbus Controller RISC-CPU, 800MHz... 1GHz Bis zu 256 MByte SDRAM Technische Daten GIN-SAM3 610736800 Schnittstellen 2

Mehr

Codegenerierung für Mikrocontroller aus einem SimulinkModell (Schritt-für-Schritt-Anleitung)

Codegenerierung für Mikrocontroller aus einem SimulinkModell (Schritt-für-Schritt-Anleitung) Codegenerierung für Mikrocontroller aus einem SimulinkModell (Schritt-für-Schritt-Anleitung) Folgende Schritt-für-Schritt-Anleitung zeigt exemplarisch den Arbeitsablauf der CCodegenerierung für den Mikrocontroller

Mehr

Serielles Grafik-Display (GFX-Lib)

Serielles Grafik-Display (GFX-Lib) 08.09.2013, Axel SchultzeDK4AQ, Quelle Jörg Alpers, Adafruit Serielles Grafik-Display (GFX-Lib) Quellen und Eigenschaften für Grafik-Displays Die TFT Display -Library GFX Das Grafikmodul 1.8" 18-bit color

Mehr

Leitfaden für eine erfolgreiche Inbetriebnahme der Profibus-Master Schnittstelle des Anybus X-gateway

Leitfaden für eine erfolgreiche Inbetriebnahme der Profibus-Master Schnittstelle des Anybus X-gateway Leitfaden für eine erfolgreiche Inbetriebnahme der Profibus-Master Schnittstelle des Anybus X-gateway Haftungsausschluß Die Schaltungen in diesem Dokument werden zu Amateurzwecken und ohne Rücksicht auf

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

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

CASH-Interface MC8 - http://www.casino-software.de

CASH-Interface MC8 - http://www.casino-software.de Projekt: CASH-Interface MC8 - http://www.casino-software.de Geldwechsler Software: v1.36 Platine: CI MC8 v4.02 Datum: 09.06.2015 BESCHREIBUNG: Im Servicemenü werden die Kredite für jede Münze und Geldschein

Mehr

StarterKit Embedded Control SC13 + DK51. From the electronic to the automation

StarterKit Embedded Control SC13 + DK51. From the electronic to the automation SC13 + DK51 From the electronic to the automation 21.10.2005 No. 1 /14 Entwicklungssystem für Embedded Controller Applikationsspezifische Komponenten ergänzen. Ethernet-Anbindungen seriellen Schnittstellen

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

BY 15030. Gleichlaufregler zur driftfreien und winkelgenauen Synchronisierung elektrischer Wickelantriebe. Zusatzbeschreibung

BY 15030. Gleichlaufregler zur driftfreien und winkelgenauen Synchronisierung elektrischer Wickelantriebe. Zusatzbeschreibung MaschinenKontrollSysteme GmbH Zwischen den Wegen D789 Rielasingen Germany Tel. 9 (0)7790 Fax 9 (0)7790 EMail info@mkscontrol.de Internet http://www.mkscontrol.de BY 500 Gleichlaufregler zur driftfreien

Mehr

Übung -- d001_7-segmentanzeige

Übung -- d001_7-segmentanzeige Übung -- d001_7-segmentanzeige Übersicht: Der Steuerungsablauf für die Anzeige der Ziffern 0 bis 9 mittels einer 7-Segmentanzeige soll mit einer speicherprogrammierbaren Steuerung realisiert werden. Lehrziele:

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

Software mit Tests & Beispielen

Software mit Tests & Beispielen Prüfverfahren Anleitung INHALT Allgemeine Angaben 1. DAS GERÄT... 3 2. DAS GERÄT TESTEN... 4 3. DIE KOMMUNIKATION MIT DEM PC TESTEN... 6 Software mit Tests & Beispielen 1. DIE TESTPROGRAMME HERUNTERLADEN...

Mehr

SPI-Bus-Kommunikation mit Sensortechnics digitalen Drucksensoren der HCE-Serie

SPI-Bus-Kommunikation mit Sensortechnics digitalen Drucksensoren der HCE-Serie 1 EINFÜHRUNG 1.1 Digitale Drucksensoren Sensortechnics digitale Drucksensoren nutzen einen internen ASIC zur digitalen Kalibrierung, Temperaturkompensation und Ausgabe eines digitalen Ausgangssignals mit

Mehr

IRF2000, IF1000 Application Note ModbusTCP API

IRF2000, IF1000 Application Note ModbusTCP API Version 2.0 Original-Application Note ads-tec GmbH IRF2000, IF1000 Application Note ModbusTCP API Version 2.0 Stand: 28.10.2014 ads-tec GmbH 2014 IRF2000 IF1000 2 Inhaltsverzeichnis 1 Einführung... 3 2

Mehr

ES-M32. Entwicklungs- und Ausbildungssystem für ATmega32

ES-M32. Entwicklungs- und Ausbildungssystem für ATmega32 ES-M32 Entwicklungs- und Ausbildungssystem für ATmega32 Bei Modul-Bus wurde lange überlegt: Noch ein ATmega-System? Es gibt doch schon so viele. Dann haben wir uns doch dafür entschieden. Ausschlaggebend

Mehr

Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler die Datein verarbeitet.

Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler die Datein verarbeitet. U4 4. Übung U4 4. Übung Besprechung Aufgabe 2 Makros Register I/O-Ports U4.1 U4-1 Makros U4-1 Makros Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler

Mehr

Embedded Linux gnublin Board Programmieren Sonstiges. Embedded Linux am Beispiel des Gnublin-Boards

Embedded Linux gnublin Board Programmieren Sonstiges. Embedded Linux am Beispiel des Gnublin-Boards Embedded Linux am Beispiel des Gnublin-Boards Was ist Embedded Linux? Wikipedia Als Embedded Linux bezeichnet man ein eingebettetes System mit einem auf dem Linux-Kernel basierenden Betriebssystem. In

Mehr

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet C++ Grundlagen ++ bedeutet Erweiterung zum Ansi C Standard Hier wird eine Funktion eingeleitet Aufbau: In dieser Datei stehen die Befehle, die gestartet werden, wenn das Programm gestartet wird Int main()

Mehr

Erste Schritte. Das Arduino-Board. Ihr Fundino-Board. Programmieren für Ingenieure Sommer 2015. Andreas Zeller, Universität des Saarlandes

Erste Schritte. Das Arduino-Board. Ihr Fundino-Board. Programmieren für Ingenieure Sommer 2015. Andreas Zeller, Universität des Saarlandes Erste Schritte Programmieren für Ingenieure Sommer 2015 Andreas Zeller, Universität des Saarlandes Das Arduino-Board Ihr Fundino-Board Anschluss über USB Anschluss über USB Programmierumgebung Download

Mehr

Angewandte Informatik

Angewandte Informatik Angewandte Informatik Teil 2.1 Was ist Hardware? Die Zentraleinheit! 1 von 24 Inhaltsverzeichnis 3... Was ist Hardware? 4... Teile des Computers 5... Zentraleinheit 6... Die Zentraleinheit 7... Netzteil

Mehr

PCI VME Interface SIS1100/SIS3100

PCI VME Interface SIS1100/SIS3100 PCI VME Interface SIS1100/SIS3100 Peter Wüstner Forschungszentrum Jülich, Zentrallobor für Elektronik (ZEL) Designprinzip der im ZEL entwickelten Datenaufnahmesysteme ist es, preiswerte PC Technik mit

Mehr

Go Wireless Connect - Kurzbeschreibung

Go Wireless Connect - Kurzbeschreibung Index Änderung Datum Name 01.01 Erweiterung um die SMS alität 09.07.2012 Skrebba 01.00 Erstellung 14.06.2012 Skrebba 1. Allgemes Nachdem das Gerät betriebsbereit ist, wird anschließend e Verbindung zum

Mehr

Mark Fink @ VHS Augsburg 2015. Einführung in die Mikrocontroller-Programmierung. mark@mark-fink.de

Mark Fink @ VHS Augsburg 2015. Einführung in die Mikrocontroller-Programmierung. mark@mark-fink.de Mark Fink @ VHS Augsburg 2015 mark@mark-fink.de Mark Fink Testautomation & PerformanceEngineering Finance, Telco, Logistic Mark Fink Webmaster Media-Site Open-Source @ Github Robotics Seminar-Ablauf Haftungs-Ausschluss

Mehr

Eclipse. für die kleinen Dinge des (modernen) Lebens

Eclipse. für die kleinen Dinge des (modernen) Lebens Eclipse für die kleinen Dinge des (modernen) Lebens Agenda Vorstellung Zielsysteme Software Modellierung Übertragung zum Gerät Vorstellung www.mda4e.org Projektpartner mda4e itemis GmbH & Co. KG Spezialist

Mehr

Übungen zu Architektur Eingebetteter Systeme. Teil 1: Grundlagen. Blatt 5 1.1: VHDL 28./29.05.2009

Übungen zu Architektur Eingebetteter Systeme. Teil 1: Grundlagen. Blatt 5 1.1: VHDL 28./29.05.2009 Übungen zu Architektur Eingebetteter Systeme Blatt 5 28./29.05.2009 Teil 1: Grundlagen 1.1: VHDL Bei der Erstellung Ihres Softcore-Prozessors mit Hilfe des SOPC Builder hatten Sie bereits erste Erfahrungen

Mehr

Die ActiveX-Komponente COM_V3

Die ActiveX-Komponente COM_V3 Comx3-handbuch Die ActiveX-Komponente COM_V3 1. Einführung COM_V3 ist eine ActiveX-Komponente, welche einige Funktionen zum Programmieren der seriellen Schnittstelle zur Verfügung stellt. COM_V3 kann nicht

Mehr

Modulares, flexibles UltraCap Balancing und Management System

Modulares, flexibles UltraCap Balancing und Management System CapMon Modulares, flexibles UltraCap Balancing und Management System Stercom CapMon ist ein modulares und effizientes UltraCap Balancing und Management System geeignet sowohl für einzelne SuperCap Module

Mehr

11: Echtzeitbetriebssystem ucos-ii

11: Echtzeitbetriebssystem ucos-ii 11: Echtzeitbetriebssystem ucos-ii Sie lernen anhand aufeinander aufbauender Übungen, welche Möglichkeiten ein Echtzeitbetriebssystem wie das ucosii bietet und wie sich damit MC-Applikationen realisieren

Mehr

ANLEITUNG Vers. 22.04.2014. EAP Gateway mit Webserver Modbus TCP/IP Slave - Modbus RTU Master

ANLEITUNG Vers. 22.04.2014. EAP Gateway mit Webserver Modbus TCP/IP Slave - Modbus RTU Master ANLEITUNG Vers. 22.04.2014 EAP Gateway mit Webserver Modbus TCP/IP Slave - Modbus RTU Master Allgemeine Beschreibung Das Gateway mit Webserver Modbus TCP/IP Slave Modbus RTU Master ist ein Gerät, welches

Mehr

Installationsanleitung PowerSDR-IQ v1.19.3.15 SV1EIA für den Betrieb mit LIMA-SDR

Installationsanleitung PowerSDR-IQ v1.19.3.15 SV1EIA für den Betrieb mit LIMA-SDR Installationsanleitung PowerSDR-IQ v1.19.3.15 SV1EIA für den Betrieb mit LIMA-SDR 02.07.2010 Bernd Wehner DL9WB Talbahnstraße 17 47137 Duisburg dl9wb@darc.de - 1 - 1. Systemvoraussetzungen Damit PowerSDR

Mehr

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome (Timo Heinrich, t_hein03@uni-muenster.de) Inhaltsverzeichnis: 0.Einleitung 1.Teil: Helloworldprogramm 1.1 Quellcode: Helloworld.cpp 1.2

Mehr

Kurzanleitung. Hotel Modus. Deutsch. Vestel Germany GmbH Parkring 6 85748 Garching bei München

Kurzanleitung. Hotel Modus. Deutsch. Vestel Germany GmbH Parkring 6 85748 Garching bei München Kurzanleitung Hotel Modus Deutsch Vestel Germany GmbH Parkring 6 85748 Garching bei München Inhaltsverzeichnis Einleitung... - 3-1. Funktionen... - 3-2. Hotel TV Menü öffnen... - 4-3. Hotel TV Menüpunkte...

Mehr

Seite 1. Windkraft GWT400 GTW600. Beschreibung und Handbuch

Seite 1. Windkraft GWT400 GTW600. Beschreibung und Handbuch Seite 1 Windkraft GWT400 GTW600 Beschreibung und Handbuch Seite 2 1. Einleitung Unsere Windenergieanlagen sind für alle Wetterbedingungen, für alle geographischen und klimatischen konzipiert. Sie verfügen

Mehr

Mikrocontroller in eigenen Hobbyprojekten nutzen

Mikrocontroller in eigenen Hobbyprojekten nutzen PIC-Mikrocontroller Mikrocontroller in eigenen Hobbyprojekten nutzen - Mikrocontroller Definition und Historie - die PIC-Familie - Entwicklungssysteme - Programmierung - Softwareerstellung - Debugging

Mehr

Betriebsanleitung. Mikroprozessorgesteuerter Batterie-Kapazitätstester CAPTEST 1225 und 2425 Für 12V (0,3 A 25 A) oder 24V (0,3 A 25 A)

Betriebsanleitung. Mikroprozessorgesteuerter Batterie-Kapazitätstester CAPTEST 1225 und 2425 Für 12V (0,3 A 25 A) oder 24V (0,3 A 25 A) Betriebsanleitung Mikroprozessorgesteuerter Batterie-Kapazitätstester CAPTEST 1225 und 2425 Für 12V (0,3 A 25 A) oder 24V (0,3 A 25 A) Betriebsanleitung Batterie-Tester - 2 Einsatzgebiet: Dieser mikroprozessorgesteuerte

Mehr

Teil VIII Von Neumann Rechner 1

Teil VIII Von Neumann Rechner 1 Teil VIII Von Neumann Rechner 1 Grundlegende Architektur Zentraleinheit: Central Processing Unit (CPU) Ausführen von Befehlen und Ablaufsteuerung Speicher: Memory Ablage von Daten und Programmen Read Only

Mehr

D&E Entwicklerforum Embedded System Entwicklung Workshop für angewandte und eingebettete IT-Sicherheit

D&E Entwicklerforum Embedded System Entwicklung Workshop für angewandte und eingebettete IT-Sicherheit D&E Entwicklerforum Embedded System Entwicklung Workshop für angewandte und eingebettete IT-Sicherheit Sicheres Flashen eines konfigurierbaren Batterie Management Systems für Elektrofahrzeuge Joachim Tauscher

Mehr

Antriebs- und Automatisierungstechnik I Vorbereitung Versuch SPS 2 Heiko Böhmer, Dipl.-Ing. Seite 1

Antriebs- und Automatisierungstechnik I Vorbereitung Versuch SPS 2 Heiko Böhmer, Dipl.-Ing. Seite 1 Heiko Böhmer, Dipl.-Ing. Seite 1 SPS-gesteuertes Pneumatiksystem Stand: 31.10.2011 Laborgruppe: Name Vorname Datum:... 1 Vorbemerkung Zur Versuchsvorbereitung benötigen Sie die Demo-Version der Software

Mehr

Bedienungsanleitung Modbus-LAN Gateway

Bedienungsanleitung Modbus-LAN Gateway Bedienungsanleitung Modbus-LAN Gateway Bedienungsanleitung Modbus-LAN Gateway Inhalt 1. Starten der Konfigurationsoberfläche des MLG... 3 2. Konfiguration MLG... 4 2.1. Network Settings... 4 2.1.1 Statische

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

Nr. Name Beschreibung Es handelt sich um eine Multifunktionstaste mit

Nr. Name Beschreibung Es handelt sich um eine Multifunktionstaste mit Golden Eye A. Produktprofil Nr. Name Beschreibung Es handelt sich um eine Multifunktionstaste mit 1 Funktionstaste verschiedenen Funktionen in verschiedenen Modus- und Statusoptionen; einschließlich Ein-

Mehr

BT OBD 327. Bluetooth OBD Interface. Technische Dokumentation

BT OBD 327. Bluetooth OBD Interface. Technische Dokumentation Bluetooth OBD Interface by Technische Dokumentation Dieses Dokument wurde sorgfältig überprüft. Die APOS GmbH Embedded Systems behält sich das Recht vor, Änderungen an allen hier beschriebenen Produkten

Mehr

Peripherie Komplexe serielle Schnittstellen

Peripherie Komplexe serielle Schnittstellen Peripherie Komplexe serielle Schnittstellen Kennzeichen Aufwändigere Physical Layer Darstellungen Praktisch immer asynchron Blockübertragungen Asynchronität: Taktrückgewinnung nötig Overhead bei Bit-Übertragung

Mehr

VB.net Programmierung und Beispielprogramm für GSV

VB.net Programmierung und Beispielprogramm für GSV VB.net Programmierung und Beispielprogramm für GSV Dokumentation Stand vom 26.05.2011 Tel +49 (0)3302 78620 60, Fax +49 (0)3302 78620 69, info@me-systeme.de, www.me-systeme.de 1 Inhaltsverzeichnis Vorwort...2

Mehr

Montageanleitung. Steuer- und Fernbedien-Software PSW 1000. Deutsch. Grundig SAT Syst ms

Montageanleitung. Steuer- und Fernbedien-Software PSW 1000. Deutsch. Grundig SAT Syst ms Montageanleitung Deutsch GSS Grundig SAT Systems GmbH Beuthener Straße 43 D-90471 Nuernberg Grundig SAT Systms Steuer- und Fernbedien-Software PSW 1000 Telefon: +49 (0) 911 / 703 8877 Fax: +49 (0) 911

Mehr

Mobile Security Configurator

Mobile Security Configurator Mobile Security Configurator 970.149 V1.1 2013.06 de Bedienungsanleitung Mobile Security Configurator Inhaltsverzeichnis de 3 Inhaltsverzeichnis 1 Einführung 4 1.1 Merkmale 4 1.2 Installation 4 2 Allgemeine

Mehr

Embedded OS für ARM Cortex Microcontroller

Embedded OS für ARM Cortex Microcontroller Embedded OS für ARM Cortex Microcontroller RTOS Design, Timinganalyse und Test mit Core Simulation und Hardware Debugger Entscheidende Fragen für oder gegen RTOS Lohnt sich der Einsatz eines RTOS auch

Mehr

Installationsanleitung GSM Modem

Installationsanleitung GSM Modem Installationsanleitung GSM Modem Diese Installationsanleitung beschreibt die Installation und Konfiguration eines GSM Models, das als Kommunikationsmedium für ein SolarEdge Gerät (Wechselrichter oder Safety

Mehr

Mini-Controller für den Philips Desktop TV-Tuner FI1216MK2

Mini-Controller für den Philips Desktop TV-Tuner FI1216MK2 Robert Tyrakowski, DK7NT 14.04.98, tuner.doc Mini-Controller für den Philips Desktop TV-Tuner FI1216MK2 Zur Referenzfrequenzerzeugung aus dem ZDF Fernsehbild wird ein TV-Empfänger und eine Impulsabtrennbaugruppe

Mehr

Roboter programmieren im Unterricht der Sekundarstufe I

Roboter programmieren im Unterricht der Sekundarstufe I Roboter programmieren im Unterricht der Sekundarstufe I C. Kieslich D. Justen Agenda 14:30 14:40 Begrüßung 14:40 15:15 Grundlagen 15:15 16:00 Praktische Übung I 16:00 16:30 Pause 16:30 17:45 Praktische

Mehr

I 2 C. ANALYTICA GmbH

I 2 C. ANALYTICA GmbH HANDBUCH ANAGATE I 2 C ANALYTICA GmbH Vorholzstraße 36 Tel. +49 721 35043-0 email: info@analytica-gmbh.de D-76137 Karlsruhe Fax: +49 721 35043-20 WWW: http://www.analytica-gmbh.de 1 2004-2006, Analytica

Mehr

lome6 (Lights-Out-Management-Ether6) by warhog 2011

lome6 (Lights-Out-Management-Ether6) by warhog <warhog@gmx.de> 2011 lome6 (Lights-Out-Management-Ether6) by warhog 2011 Inhaltsverzeichnis 1 GPL...2 2 Einleitung...3 3 Funktionen...3 4 Erster Prototyp...4 5 Hardware...4 6 Software...5 6.1 Ethersex...5 6.2

Mehr

Script-Sprache für UPT und MKT-View II / III / IV. Einleitung, Anwendungsfälle, Programmierung. MKT Systemtechnik

Script-Sprache für UPT und MKT-View II / III / IV. Einleitung, Anwendungsfälle, Programmierung. MKT Systemtechnik Einleitung, Anwendungsfälle, Programmierung MKT Systemtechnik Autor: Stand: Ablage: Wolfgang Büscher Dipl.-Ing. Soft- und Hardware-Entwicklung buescher@mkt-sys.de 2015-01-21 (JJJJ-MM-DD) art85133_einfuehrung_mktview_scriptsprache.odp/pdf;

Mehr

Dokumentation Metronom

Dokumentation Metronom Beuth Hochschule für Technik Berlin Fachbereich VII Elektrotechnik Mechatronik Optometrie Studiengang Bachelor Elektrotechnik Dokumentation Metronom Projekt im Labor Mikrocomputertechnik Teilnehmer: Benjamin

Mehr

Rechnerunterstützte Echtzeitsteuerung mit grafischer Bedienerschnittstelle für synchrone Antriebe mit dynamischer Drehzahländerung

Rechnerunterstützte Echtzeitsteuerung mit grafischer Bedienerschnittstelle für synchrone Antriebe mit dynamischer Drehzahländerung Rechnerunterstützte Echtzeitsteuerung mit grafischer Bedienerschnittstelle für synchrone Antriebe mit dynamischer Drehzahländerung Martin Heine, Dipl.-Ing.(FH) Light Art Vision Germany 19.02.2001 2001

Mehr

1. Was bietet die Displayserie EA DOG von Electronic Assembly?

1. Was bietet die Displayserie EA DOG von Electronic Assembly? LC-Displays EA DOG mit neuen Möglichkeiten Gunther Zielosko 1. Was bietet die Displayserie EA DOG von Electronic Assembly? Das auffälligste an der z.b. auch von Reichelt Elektronik (http://www.reichelt.de/)

Mehr

Die Hifidelio App Beschreibung

Die Hifidelio App Beschreibung Die Hifidelio App Beschreibung Copyright Hermstedt 2010 Version 1.0 Seite 1 Inhalt 1. Zusammenfassung 2. Die Umgebung für die Benutzung 3. Der erste Start 4. Die Ansicht Remote Control RC 5. Die Ansicht

Mehr

Kurzanleitung. Logstar_FTP. Version 1.1

Kurzanleitung. Logstar_FTP. Version 1.1 Kurzanleitung Logstar_FTP Version 1.1 Februar 2006 UP GmbH Anleitung_Logstar_FTP_1_24.doc Seite 1 von 8 LOGSTAR _FTP Inhaltsverzeichnis Einleitung...3 Registrierung...3 Das Logstar_FTP Hauptmenu...4 Server...4

Mehr

Ch. 6 Switch Konfiguration

Ch. 6 Switch Konfiguration Ch. 6 Switch Konfiguration CCNA 3 version 3.0 Wolfgang Riggert,, FH Flensburg nach Rick Graziani, Cabrillo College Vorbemerkung Die englische Originalversion finden Sie unter : http://www.cabrillo.cc.ca.us/~rgraziani/

Mehr

Prozesse und Scheduling

Prozesse und Scheduling Betriebssysteme für Wirtschaftsinformatiker SS04 KLAUSUR Vorbereitung mit Lösungen / Blatt 1 Prozesse und Scheduling Aufgabe 1 : Scheduling Gegeben seien die folgenden Prozesse und die Längen des jeweiligen

Mehr

Display Controller für ein 320x240 4 Bit Display

Display Controller für ein 320x240 4 Bit Display Display Controller für ein 320x240 4 Bit Display Unterstützte Mikrocontroller Mega16/164/32/324/644 Schnittstelle: UART (Baudrate über 3 Jumper wählbar) 9600 (Default), 14400, 19200, 28800, 38400, 56000,

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

TC-GEN Parametrierung via PC-Software

TC-GEN Parametrierung via PC-Software TC-GEN Parametrierung via PC-Software Die Notstromautomatik TC-GEN lässt sich sehr komfortabel über die TCGen Konfigurationssoftware parametrieren. Verdrahtung der TCGEN (Visualisierungs-Modul, Mess-Modul

Mehr

SMART CD PROGRAMMIERGERÄT

SMART CD PROGRAMMIERGERÄT Stand: Dezember 2014 Inhaltsverzeichnis 1.0 SICHERHEITSHINWEISE 3 2.0 EINFÜHRUNG 3 3.0 ANSCHLUSS AN EINEN PC/LAPTOP 4 3.1 Laden der Akkus 4 4.0 KONFIGURATION DER BLUETOOTH VERBINDUNG 5 4.1 Erstmalige Installation

Mehr

AVR-Programmierung unter Mac OSX

AVR-Programmierung unter Mac OSX AVR-Programmierung unter Mac OSX im Studiengang BEL3 Lehrveranstaltung Embedded Systems Tutorial ausgeführt von: Jürgen Hausladen A-2460 Bruck/Leitha, Obere Neugasse 6 Wien 01.02.2011 Inhaltsverzeichnis

Mehr

POB-Technology Dokumentation. POB-Technology Produkte. Deutsche Übersetzung von roboter-teile.de Alle Rechte vorbehalten Seite 1 von 13

POB-Technology Dokumentation. POB-Technology Produkte. Deutsche Übersetzung von roboter-teile.de Alle Rechte vorbehalten Seite 1 von 13 POB-Technology Produkte Deutsche Übersetzung von roboter-teile.de Alle Rechte vorbehalten Seite 1 von 13 Inhaltsverzeichnis Inhaltsverzeichnis Inhaltsverzeichnis... 2 Einführung...4 POB-EYE... 5 POB-LCD128...

Mehr

Programmierung über den ARCNET-Bus. Programmiersystem. 907 PC 331 Programmier- und Testsoftware. ABB Schaltund Steuerungstechnik

Programmierung über den ARCNET-Bus. Programmiersystem. 907 PC 331 Programmier- und Testsoftware. ABB Schaltund Steuerungstechnik Programmierung über den ARCNET-Bus Programmiersystem 907 PC 331 Programmier- und Testsoftware ABB Schaltund Steuerungstechnik Inhaltsverzeichnis Einbindung ARCNET-Treiber in 907PC331... 3 1 Allgemeine

Mehr

Biegetestmaschine Bedienungsanleitung

Biegetestmaschine Bedienungsanleitung Bedienungsanleitung Inhalt Software Seite 4 Inbetriebnahme Seite 4 Hauptmenü Seite 5 Settings Seite 7 Status Seite 9 Hardware Seite 10 Not-Aus Seite 10 Kabelvorbereitung Seite 10 Gewichte Seite 11 Verdrahtung

Mehr

Echtzeitbetriebssysteme/ Prozessdatenverarbeitung II

Echtzeitbetriebssysteme/ Prozessdatenverarbeitung II Fachhochschule Kaiserslautern Prof. Dr. P. Liell Echtzeitbetriebssysteme/ Prozessdatenverarbeitung II SS 2012 1. Versuch Allgemeines zum Ablauf und zur Versuchsausarbeitung Es ist eine Ausarbeitung zum

Mehr

EX-1361 / EX-1361IS EX-1362 / EX-1362IS. 1S PCMCIA Karte Standard und Surge Protection & Optical Isolation

EX-1361 / EX-1361IS EX-1362 / EX-1362IS. 1S PCMCIA Karte Standard und Surge Protection & Optical Isolation Bedienungsanleitung EX-1361 / EX-1361IS 1S PCMCIA Karte Standard und Surge Protection & Optical Isolation EX-1362 / EX-1362IS 2S PCMCIA Karte Standard und Surge Protection & Optical Isolation Version 1.3

Mehr

Service & Support. Wie ist der User Mode Process Dumper für Diagnosezwecke bei WinCC und PCS7 einzurichten? User Mode Process Dumper.

Service & Support. Wie ist der User Mode Process Dumper für Diagnosezwecke bei WinCC und PCS7 einzurichten? User Mode Process Dumper. Deckblatt Wie ist der User Mode Process Dumper für Diagnosezwecke bei WinCC und PCS7 einzurichten? User Mode Process Dumper FAQ April 2011 Service & Support Answers for industry. Fragestellung Dieser Beitrag

Mehr

INES-Webserver. Damit gehen Ihre Geräte und Anlagen online. 1 Inhalt

INES-Webserver. Damit gehen Ihre Geräte und Anlagen online. 1 Inhalt Damit gehen Ihre Geräte und Anlagen online Mit dem Webbrowser bedienen, steuern und überwachen Sie INES und die daran angeschlossene Peripherie... ganz einfach übers Internet. 1 Inhalt 1 Inhalt 1 2 Anwendungen

Mehr

Unter Project New µvision Project kann ein neues Projekt angelegt werden.

Unter Project New µvision Project kann ein neues Projekt angelegt werden. KURZBESCHREIBUNG ZUM ERSTELLEN EINES PROJEKTES MIT µvision4 NEUES PROJEKT ANLEGEN Unter Project New µvision Project kann ein neues Projekt angelegt werden. Es öffnet sich ein Dialogfenster, in dem der

Mehr