Microcontroller Seminararbeit zum Thema Microcontroller bei Prof. Dr. K.O. Linn von Benjamin Zanke 1/12 Inhaltsverzeichnis 1 Einleitung.............................................................................................................................................................3 2 Geschichte............................................................................................................................................................4 3 Aufbau / Funktion................................................................................................................................................4 3.1 CPU / Interruptcontroller..............................................................................................................................5 3.1.1 CPU.......................................................................................................................................................5 3.1.2 Interruptcontroller.................................................................................................................................5 3.1.3 RISC / CISC..........................................................................................................................................5 3.2 Speicher........................................................................................................................................................6 3.2.1 Flash Speicher.......................................................................................................................................6 3.2.2 SRAM...................................................................................................................................................6 3.2.3 EEPROM..............................................................................................................................................6 3.3 Ein- und Ausgänge.......................................................................................................................................6 3.3.1 SPI Serial Peripheral Interface..............................................................................................................6 3.3.2 CAN Controller Area Network.............................................................................................................7 3.3.3 AD Wandler..........................................................................................................................................7 3.3.4 PWM Pulsweitenmodulation / DA Wandler.........................................................................................7 3.4 Watchdog......................................................................................................................................................8 3.5 Brown Out Detection....................................................................................................................................8 3.6 Beispiel eines Attiny13.................................................................................................................................8 4 Programmierung...................................................................................................................................................9 4.1 Beispielschaltung..........................................................................................................................................9 4.2 Beispielprogramm.........................................................................................................................................9 4.3 Programmiermöglichkeiten........................................................................................................................10 4.3.1 ISP In System Programmable.............................................................................................................10 4.3.2 Software..............................................................................................................................................10 4.3.3 Evaluations boards..............................................................................................................................10 4.3.4 Programmieradapter............................................................................................................................10 4.4 Übertragung des Beispielprogramms.........................................................................................................10 5 Anwendungsbeispiel..........................................................................................................................................11 6 Quellen...............................................................................................................................................................12 2/12 1 Einleitung Microcontroller kann man sich als Computer in einem Chip vorstellen. Im Gegensatz zur normalen CPU werden in einem Microcontroller möglichst viele, für den jeweiligen Einsatzzweck notwendige, Komponenten integriert. Meist befindet sich der Programmspeicher auch ganz oder teilweise im Chip. Oft werden auch die nötigen Schnittstellen, wie CAN oder SPI direkt auf dem Chip implementiert. Durch die hohe Integration werden Microcontroller meist für einen speziellen Anwendungsfall entwickelt. Dadurch gibt es eine Vielzahl verschiedener Typen. Es gibt auch allgemeinere Typen, die einfach möglichst viele Funktionen bieten. Die nicht benötigten Funktionen lassen sich dann einfach abschalten. In der heutigen Zeit sind uC nicht mehr wegzudenken. Sie befinden sich in fast jedem Elektronischen Gerät. In jeder Uhr, ausgenommen mechanische Uhren, wird die Zeit von einem Microcontroller gezählt und angezeigt. In der Unterhaltungselektronik befinden sich mittlerweile mehrere Controller in jedem Gerät. Die größte Ansammlung von Microcontrollern dürfte allerdings in modernen Autos zu finden sein. Dort ist jedes Gerät mit mindestens einem Controller ausgestattet. Alle Controller kommunizieren dabei über den CAN Bus. 3/12 2 Geschichte Erste Microcontroller kamen Anfang der 70er Jahre auf den Markt. Grundlage hierfür waren meist etablierte Prozessoren z.b. der 8086 von Intel. Er wurde um einen Interrupt- und einen Speichercontroller erweitert und dann als 80186 Microcontroller verkauft. Es war der erste Microcontroller, der so hoch integriert war, daß er zum Betrieb extern nur noch den Speicher und den Takt benötigte. Man konnte hier auf vorhandene, bewährte Plattformen aufsetzen und diese entsprechend des geplanten Einsatzbereichs erweitern bzw. spezialisieren. 1874 bringt Intel den 8080, dessen Nachfolger bzw Weiterentwicklung in der Firma Zilog Z80 (1976) einer der erfolgreichsten Microcontrollern wurde. Er wurde unter Anderem im Commodore C128, in Taschenrechnern und in Gameboys eingesetzt. Der Z80 ist wegen der großen Anzahl aktiver Exemplare heute noch Lieferbar. 1976 kommt der wohl erfolgreichste Microcontroller aller Zeiten, der Intel 8085. Er war der Nachfolger des 8080 und wurde bis 2002 öfter verkauft, als alle Nachfolger zusammen. Eingesetzt wurde er unter Anderem beim Militär und der Nasa. So findet er auch Anwendung im Mars Rover Pathfinder. Teilweise gab es von den Prozessoren auch extra Militärvarianten mit erweitertem Temperaturbereich und / oder besonderem Strahlenschutz. Anfangs wurden Microcontroller fast ausschließlich in der CISC Technik gebaut. Zu der Anfangszeit der Microcontroller wurden Ihre Vorbilder wegen des teuren und knappen Speichers als CISC Prozessoren ausgeführt. (CISC Programme sind kleiner). Deshalb waren die Microcontroller am Anfang auch in dieser Architektur gefertigt. Ab der 80er Jahre ging man hier wieder in Richtung RISC Architektur und baute Prozessoren wie den ARM (acom), MIPS (stanford) später den PPC (Apple, Ibm, Motorola). Wegen der großen Vorteile der RISC Architektur gerade bei Microcontrollern und deren Einsatzgebiete werden heute meist RISC Controller gefertigt. 3 Aufbau / Funktion Ein Microcontroller vereint in einem einzigen Chip die meisten zum Betrieb notwendigen Bausteine. Neben der CPU enthält ein Standartcontroller noch einen oder mehrere eigene Speicher, den Interruptcontroller, einen Watchdog und verschiedene Ein- und Ausgänge. Bei höherer Integration können auch noch Komponenten wie Taktgeber, Timer, PWM (Pulsweitenmodulation), Serielle Schnittstelle (RS485), SPI (Serial Peripheral Interface), CAN (Controller Area Network), USB integriert sein. Durch die hohe Integration lassen sich Microcontroller mit einer minimalen externen Beschaltung betreiben. Im Extremfall benötigt man nur eine Spannungsversorgung. 4/12 3.1 CPU / Interruptcontroller 3.1.1 CPU Für die CPU Komponente wurden meist etablierte Standarttypen verwendet. Die Bitbreite reicht je nach Anwendungsfall von 4Bit bei einfachen Uhrencontrollern bis zu 32Bit bei meist durch Hochsprachen bzw Interpretersprachen programmierten Controllern. Als Architektur kamen sowohl RISC als auch CISC Prozessoren mit Trennung von Programm und Datenspeicher nach Harvard. Es gibt Microcontroller mit Taktfrequenzen bis 700Mhz. Üblich sind aber 10-20MHz. 3.1.2 Interruptcontroller Der Interruptcontroller reagiert auf externe und interne Ereignisse und meldet diese unverzüglich bzw. so schnell wie möglich an das Programm, welches dann auf die entsprechenden Ereignisse reagieren kann. Interne Ereignisse sind z.B. ● Timer Interrupt, wenn der Timer einen bestimmten Wert erreicht hat oder übergelaufen ist. ● Zeichen über Serielle Schnittstelle empfangen oder gesendet. ● AD Wandlung abgeschlossen Externe Ereignisse sind z.B. ● Reset ausgelöst ● Externer Interrupt 3.1.3 RISC / CISC Grundsätzlich unterscheidet man bei Prozessoren zwischen zwei Architekturen: RISC CISC Wenige, einfache Befehle Viele, aufwändige Befehle Meist ein Takt pro Befehl Meist zwei oder mehr Takte pro Befehl Hohe Effizienz Geringe Effizienz Aufwändige Softwareentwicklung Einfachere Softwareentwicklung Für beide Architekturen gibt es die Bitbreiten 4Bit - 32 Bit. Günstige 4Bit Prozessoren werden z.B. in Uhren verwendet. Am weitesten sind 8Bit Microcontroller verbreitet. Hier ist das Verhältnis von Kosten zu Nutzen am besten. Bei komplexeren Aufgaben kommen meist 32Bit Microcontroller zum Einsatz. Die Einsparung eines 16Bit Controllers steht mittlerweile in keinem Verhältnis zum Leistungsvorteil des 32Bitters. 5/12 3.2 Speicher Der Speicher der Microcontroller ist nach der Harvardarchitektur organisiert. Es gibt also getrennte Speicherbereiche für Daten- und Programmcode. Bei größeren Stückzahlen bzw bis Ende der 90er Jahre wurden statt Flash Speicher ROM Speicher genommen. Das ist bei größeren Stückzahlen günstiger herzustellen, lässt sich aber einmal programmiert nicht mehr ändern. Statt der EEPROM Speicher wurden früher EPROMS eingesetzt, welche nur mithilfe von UV Licht gelöscht werden konnten. 3.2.1 Flash Speicher Der Flashspeicher enthält das Programm und Datenkonstanten. Er ist nur von Außen beschreibbar, also nicht vom Programm selbst änderbar. Die Lebensdauer beträgt mehr als 10000 Schreibzyklen. Die Daten bleiben bei Spannungsverlust, wie für Flash Speicher üblich, weiterhin erhalten. Er ist also nicht flüchtig. 3.2.2 SRAM Der SRAM Speicher enthält den Stack und die Variablen während dem Programmablauf. Die Daten sind vom Programm direkt änderbar. Die Anzahl möglicher Schreibzyklen ist fast unbegrenzt. Daten in diesem Speicher sind nach Spannungsverlust verloren. Er ist also flüchtig. 3.2.3 EEPROM Der EEPROM Speicher enthält Daten vom Programm, welche sich nicht sehr häufig ändern und über einen längeren Zeitraum archiviert werden sollen. Er ist vom Programm schreib- und lesbar. Es kann allerdings nicht beliebig gelesen und geschrieben werden, sondern es muß bei Änderung von Daten erst der alte Wert gelöscht und mit dem neuen Wert beschrieben werden. Die Anzahl möglicher Schreib- und Lesezyklen wird mit >100000 angegeben. Der Speicher ist auch nicht flüchtig. 3.3 Ein- und Ausgänge Die Ein- und Ausgänge ermöglichen die Kommunikation des Controllers mit der Außenwelt. Beispiele hierfür sind: ● Anbinden von externem Speicher ● Anschluß von Peripherie wie Display, andere Controller usw ● Steuern von Verbrauchern ● Einlesen von Tastern ● Einlesen von Analogen Meßwerten 3.3.1 SPI Serial Peripheral Interface Über das SPI werden hauptsächlich einfache Sensoren angeschlossen. Die SPI Schnittstelle besteht aus 2 Leitungen und Chipselect. Pro Bus gibt es einen Master und mehrere Slaves. Die Übertragungsgeschwindigkeit erreicht je nach Länge der Leitung und angeschlossener Peripherie bis zu 1 MHz. 6/12 3.3.2 CAN Controller Area Network Über den CAN Bus werden verschiedene Controller zu einem Netzwerk zusammengeschaltet. Die CAN Schnittstelle besteht dabei aus zwei Leitungen. Es kann im Prinzip jedes Gerät Master oder Slave sein. Die Übertragungsgeschwindigkeit erreicht je nach Länge der Leitung und angeschlossener Peripherie bis zu 1 MHz. 3.3.3 AD Wandler Um Analoge Meßgrößen zu erfassen, haben viele Microcontroller einen eingebauten Analog Digital Wandler. Mit Ihm kann man den Analogen Eingangswert in einen digitalen Zahlenwert wandeln. Bei einem 10Bit AD Wandler kann man also 1023 verschiedene Werte zwischen 0V und der Referenzspannung bestimmen. Das funktioniert meist nach dem Verfahren der Successiven Approximation. Nach dem Start der Wandlung wird ein Zähler bis 1023 hochgezählt. Der Zählerstand wird gleichzeitig über ein Widerstandsnetzwerk in ein Analoges Signal gewandelt und mit dem zu messenden Signal verglichen. Sobald die hochgezählte Spannung größer als die zu messende Spannung ist, stoppt der Zähler und man kann den aktuellen Meßwert auslesen. 3.3.4 PWM Pulsweitenmodulation / DA Wandler Viele Microcontroller bringen auf Ihrem Chip schon einen oder mehrere PWM Kanäle mit, welche völlig unabhängig von der Software laufen können. Mit der Pulsweitenmodulation lassen sich z.B. Verbraucher in Ihrer zugeführten Leistung regeln oder ein Analoges Ausgangssignal erzeugen. Dafür konfiguriert man einen Timer als pwm Kanal. Der Takt kommt dabei vom Chiptakt und kann durch einen Teiler eingestellt werden. Über die untere Grenze stellt man den Einschaltzeitpunkt des Ausgangssignals ein. Bei erreichen der oberen Grenze wird der Ausgang wieder auf Null geschaltet, der Zähler zurückgesetzt und der Vorgang beginnt von Neuem. Je länger das Ausgangssignal eingeschaltet ist, um so mehr Energie wird dem Verbraucher zugeführt. Verbraucher mit relativ trägem Verhalten, wie Motoren, Glühlampen können direkt über einen Leistungsschalter (FET) angesteuert werden. Bei schnelleren Verbrauchern z.B. bei der Erzeugung einer Referenzspannung oder Anschluß eines Lautsprechers muß man die Wechselspannung vorher durch ein Integrationsglied bzw Tiefpaßfilter Gleichrichten. 7/12 3.4 Watchdog Die meisten Microcontroller haben eine sogenannte Watchdog Logik integriert. Das funktioniert ähnlich der Tote Mann Sicherung der Bahn. Es läuft permanent ein Zähler, welcher in bestimmten Abständen vom Programm zurückgesetzt werden muß. Bei erreichen einer Obergrenze erfolgt ein Reset, um den Controller wieder in einen definierten Ausgangszustand zu bringen. 3.5 Brown Out Detection Bei Microcontrollern für Batteriebetrieb gibt es zusätzlich noch die Brown Out Detection. Sie überwacht die Betriebsspannung und führt einen Reset durch, falls eine untere Grenze unterschritten wird. Dadurch soll ein sicherer Programmablauf gewährleistet werden. 3.6 Beispiel eines Attiny13 Am Beispiel des Attiny 13 kann man die Größenentwicklung gut sehen. Trotz der kleinen Bauform des Attiny13 enthält er viele Features: ● 6 Ein- / Ausgänge ● 4 Kanal 10 Bit AD Wandler ● Bis 20Mhz möglich ● ein Timer mit zwei PWM ● 8Bit ● 1kByte Flash, 64Byte EEPROM, 64Bytes SRAM 8/12 4 Programmierung 4.1 Beispielschaltung Die Versorgungsspannung von 2,5-5,5V wird an die Pins 8 (+) und 4 (-) angeschlossen, wobei Pin8 noch über einen 100nF Kondensator vor unsauberer Eingangsspannung abgeschirmt wird. Pin 1 (reset) wird über einen Pullup Widerstand auf logisch eins gesetzt, was durch den invertierten Eingang eine Null ergibt. Reset soll ja nicht auslösen. An Pin 3 (IO PB4) schließen wir die Anode der LED an, Die Kathode schließen wir über einen geeigneten Vorwiderstand an Masse. 4.2 Beispielprogramm Unser „Hello World“ Programm in c: int main (void) { DDRB = 0x1F; // alle ios als output außer RESET (PB5) PORTB = 0x00; // alle ios auf low. while(1) { PORTB ^= 0x01 << PB4; // PB4 umschalten delay(); } return 0; } void delay (void){ unsigned int counter = 10000; while (counter--); } Der Erste Befehl schaltet alle Ausgänge des PortB außer Reset (PB5) als Eingang. Reset darf nicht auf Einoder Ausgang geschaltet werden, denn sonst kann man den Controller nicht mehr Programmieren. Mit dem zweiten Befehl werden alle Ausgänge auf Null gesetzt. Die Pause "delay" ist einfach eine Schleife, welche 10000 mal durchläuft. Mit dem Befehl in der Endlosschleife wird nun eine 1 mit der 4. Stelle des PORTB Registers XOR gerechnet. Damit wird bei jedem Durchlauf der Zustand von PB4, also unserer LED, geändert und wir haben somit einen Blinker. 9/12 4.3 Programmiermöglichkeiten 4.3.1 ISP In System Programmable Der Controller kann in der bestehenden Schaltung programmiert werden und muß dazu nicht ausgebaut werden. Hierbei kann Er sogar in einen speziellen Debugmodus gebracht werden, in dem man mit der speziellen Software fast wie in einer IDE debuggen kann. Man kann also sein Programm Schrittweise abarbeiten, Brakepoints setzen, Variablen zur Laufzeit auswerten usw. 4.3.2 Software Zur Programmierung der Controller gibt es verschiedene freie und kostenpflichtige Software, die den Umgang mit Microcontrollern erheblich vereinfacht. Manche enthalten sogar einen Emulator, mit dem sich der Controller komplett emulieren lässt. So kann man die Programme außerhalb des Controllers schon testen und optimieren. 4.3.3 Evaluations boards Mit evaluations boards lassen sich recht schnell Anwendungen entwickeln, ohne dafür eine Schaltung aufbauen zu müssen. Man kommt so recht schnell zu einem funktionierenden Prototypen. Sie enthalten verschiedene Sensoren, Aktoren und Schnittstellen, die konfigurierbar mit den Ein- und Ausgängen des Controllers verbunden werden können. 4.3.4 Programmieradapter Als Schnittstelle zwischen Pc und Controller benötigt man zur Programmierung einen Programmieradapter. Hier gibt es verschiedene Ausführungen für USB, Seriell oder Parallel. Meist hat ein Adapter verschiedene Sockel, um mit einem Gerät verschiedene Controller Programmieren zu können. Ein günstiger Adapter lässt sich aus einem alten Druckerkabel und ein paar Widerständen herstellen. 4.4 Übertragung des Beispielprogramms Die hier vorgestellte Schaltung ist die günstigste Möglichkeit, die ISP Schnittstelle eines Controllers zu nutzen. Die Benötigten Ports werden einfach über einen Schutzwiderstand mit der Parallelen Schnittstelle des Pcs verbunden. Die meisten Programmierprogramme unterstützen diese Art Programmieradapter. 10/12 5 Anwendungsbeispiel Ein schönes Beispiel für die Anwendung eines Microcontrollers im Privatbereich ist der hier vorgestellte selbstbau MP3 Player. Bei der Entwicklung des Players wurde großes Augenmerk auf einfachen Nachbau und gute Beschaffbarkeit der Teile. Die Platine gibt es als Image zum herunterladen. Mit der Direkt Toner Methode lässt Sie sich relativ einfach herstellen. Hat man zufällig ein altes Handy zum Ausschlachten des Displays und des Akkus, hält sich der Materialaufwand mit ca 30Eur in Grenzen. Als Speicher kann man entweder eine cf oder sd Karte nehmen. 11/12 6 Quellen ● ● ● ● ● ● ● ● ● ● ● ● ● http://www.david-schleicher.de http://www.avrbeginners.net http://www.habmigern2003.info/future_trends/greenhouse/CO2Supplementation/Projektdokumentation_V1.htm http://de.wikipedia.org/wiki/RCA1802 http://de.wikipedia.org/wiki/Intel_8085 http://de.wikipedia.org/wiki/Microcontroller http://www.atmel.com http://avrmicrocontrollers.com http://www.mikrocontroller.net/articles/AVR-Tutorial http://www.myplace.nu/mp3/ NEWNES – PIC Microcontrollers – Di Jasio VIEWEG – Mikroprozessortechnik – Klaus Wüst TEWI – Microcontroller – Dieter Schossig 12/12