Mikrocontroller

From EWIKI
Jump to navigation Jump to search

Themen:

Link: AVR-GCC-Tutorial

Mikrocontroller? Wozu?

Man kann sich recht einfach klar machen, wozu ein Mikrocontroller gut ist, wenn man exemplarisch folgendes Problem bewältigen muss:

  • Daten werden erfasst, z.B. für einen Zähler oder eine Temperaturmessung
  • Die Daten sollen in einem LCD angezeigt werden
  • Per Knopfdruck soll eine Regelung ein- und ausgeschaltet werden können.

Herkömmlicher Aufbau ist typischerweise: Eine Analogschaltung dient zur Messwerterfassung, gefolgt von einer auf 74er TTL Bausteinen aufbauenden Logik zur Ansteuerung der Displayelemente. Parallel dazu wird die analoge Regelschaltung aufgebaut. Probleme sind die Komplexität durch die vielen notwendigen Einzelkomponenten. Der Schaltplan muss bei kleinsten Änderungen immer wieder überarbeitet werden -- und damit auch die Schaltung. Das ist teuer und kostet viel Zeit und Geduld.. Allein ein Zähler mit einer 2stelligen 7 Segmentanzeige übersteigt schnell das, was eine Europlatine fassen kann. Eine Mikrocontroller (MCU) basierter Lösung sieht z.B. folgendermaßen aus: Sensor - MCU - Display. Der Regelung kann in dem MCU Programm integriert werden und nur noch die Reglersteuerung über einen Port aus der MCU außen geführt werden (z.B. an ein A/D Wander IC oder ein Relais). Sind die Bausteine erst einmal ausgewählt und in eine Schaltung integriert, spielt sich der Rest im Programm der MCU ab.

Microcontroller Bsp.jpg

Tatsächlich kann man so eine Temperaturregelung mit Display mit 2 ICs, einem LCD Modul und einem Relais aufbauen. Die Verbindungen sind übrigen keine Symbolik, sonder Leitungen, d.h. es werden 4 In und min 7 Out Pins benötigt. Das funktioniert, da die LCD Module einen integrierten Mikrocontroller haben, der "High Level Befehle" über einen 8 Bit Bus plus Steuerleitungen bekommt. Die höchsten Bits des Bussen benötigt man aber nur für Sonderzeichen und Spezialbefehle, so dass man meist schon mit 5 Bit auskommt.

Als add-on könnte man noch Temperaturverläufe programmieren oder deren Verlauf graphisch auf dem Display darstellen. Ohne MCU geht es gar nicht, wenn hoch komplexe Aufgaben auf kleinstem Raum gelöst werden müssen, z.B. Langezeitaufzeichnungen, die über eine PC Schnittstelle ausgelesen werden sollen -- man denke an Motorelektronik im Auto oder die Erfassung von Wetter- oder Umweltdaten.

µC Typen: Welchen?

Die Frage nach der Auswahl ist nicht einfach zu beantworten. Kriterien für die Auswahl sind u.a.:

  • Programmierumgebung
  • Komplexität
  • Funktionen
  • Verbreitungsgrad / Verfügbarkeit
  • Kosten

Verbreitete interessante Mikrocontroller (MCU) sind (ohne Anspruch auf Vollständigkeit):

  1. 80C51 Kompatible (aber welchen?)
  2. PIC (aber welchen?)
  3. AVR: ATtiny, ATmega
  4. Z80 (hmmm)
  5. R8C (cool, aber erst mal die Basics drauf haben)
  6. C-Control (gut duchtdacht, aber recht teuer)
  7. Java Controller (noch cooler, aber viel zu teurer)

Von diesen Controllertypen gibt es dann wieder unzählige Unterarten. Bevor man sich verunsichern lässt, sollte man sich einfach etwas in Katalogen oder Internetseiten umschauen und dann seinen Favoriten auswählen.

Für den Anfang ist ein Controller besonders interessant, da er preiswert ist, eine stattliche Anzahl an Funktionen mitbringt, diverse kostenfreie Programmierumgebungen verfügbar sind. Gemeint ist der ATMEL ATTiny2313. Einziger echter Nachteil: Er ist kein 80C51 "kompatibler" ist. Aber nun zu den Vorteilen:

  • Mit BASCOM AVR ist eine kostenlose einfach zu handhabende Programmier und Debugumgebung verfügbar, die den Einstieg erleichtert. Auch reine "Trockenübungen" zum reinschnuppern sind möglich . Bascom unterstützt direkt diverse Devices und Busse im Basic Dialekt.
  • Tiefer geht es mit C oder Assembler mit den Atmle AVR Tools und ACR-gcc
  • Er ist anspruchslos und benötigt irgendeine Spannung (ja gut, 1.8 - 5.5 V an Pin 10/20)
  • hat einen internen Takt, man kann aber auch einen externen Taktgeber anschließen, wenn man höhere Genauigkeit braucht
  • Er hat einen beliebig oft (10000x min) wiederprogrammierbaren Fash Speicher von 2K Byte. 2K ist schon recht viel, auch wenn sich das erst mal nicht so anhört, wenn man aus der PC Welt das ganze betrachtet.
  • 18 I/O Lines
  • 128 Byte Ram, Interrupts, Timer und einen analog Komperator.
  • Man kann praktischerweise direkt LEDs ansteuern
  • Er hat noch einen Low Power Idle Mode und den Power Down Mode
  • Er hat einen programmierbaren seriellen UART (für eine Serielle Schnittstelle zum PC z.B.)
  • Er ist spottbillig, gut 1 Euro kostet ein Exemplar
  • Die minimal Schaltung benötigt noch eine Spannungsquelle (knapp 5 V, Batterien reichten) -- das wars.

Diese Kombination aus den oben genannten Vorteilen mach den ATTiny2313 ideal für den Einstieg in die Mikrocontrollerwelt.

Und so sieht er aus:

ATtiny2313.jpg

Einzige Hürde ist das notwendige ISP Programmiergerät. Ich habe das AVR ISP USB Programmiergerät. 6 Pins verkabeln, mit AVR Studio connecten und die Kompilierten Programme aufspielen geht prima.

Der ISP Connector ist ein 2x3 Wannenstecker. Die Steckerbelegung ist:

ISP-Con.jpg

Die Stecker sind direkt mit den gleichnamigen Pins des Mikrocontrollers zu verdrahten. Reset benötigt noch einen "Pull Up" Widerstand (10k) nach 5 V und einen Kondensator 10nF zur Erde.

Interessante ist (wie immer) das Datenblatt mal zu lesen. Darin findet man viele Fakten und Anregungen. Andere ATtiny AVRs habe ich auf meine ATtiny AVR Übersicht zusammengefasst.

Nun zur Praxis. Ich empfehle zum Experimentieren ein Steckbrett, auf dem eine Schaltung in wenigen Minuten aufgebaut werden kann und schnell erweitert oder geändert werden kann. Alternativ kann man auch ein einfaches Experimentierboard auf einer Streifenrasterplatine realisieren. Es ist so einfach, weil die AVRs nur ihren Sockel und die 2 Pins für die Stromversorgung benötigen, sonst nichts. Sinnvoll, aber schon optional, ist auf einem Experimentierboard ein fest eingelöteter Programmieradapter und eine serielle Schnittstelle zur Kommunikation zum PC (RS232). Schaltungen zur Anbindung an die Mikrocontroller Ports könnten sinnvollerweise dann auf dem Steckbrett aufgebaut werden.

Periperhie

Ohne Aufwand lassen sich "einfache" elektronische Bauteile an die I/O und ADC Ports einer MCU (elektrisch) anschließen und über Software steuern:

  • Schalter / Taster / Schaltsensoren / Drehgeber
  • LEDs / Photoelemente / Lichtschranken
  • Fotodioden
  • Relais
  • Potis
  • Timerbausteine
  • ...

Serielle Schnittstelle

Einige Mikrocontroller haben einen UART integriert. Damit lässt sich eine serielle RS-232 Schnittstelle umsetzen. Es ist noch ein RS-232 Treiber IC notwendig, um die 5 V Pegel auf die Pegel der RS-232 Schnittstelle zu bringen.

Microcontroller RS232 b.jpg

Die Schaltung sieht komplizierter aus als sie ist und kann leicht auf einer Streifenrasterplatine gelötet werden.

In BASCOM kann die Schnittstelle direkt über PRINT oder INPUT programmiert werden.

Link: Mikrocontroller.net AVR-GCC-Tutorial Der_UART

Externe Module

Komplexerer Devices für Mikrocontroller lassen sich aber ebenso einfach anschließen, manchmal reicht eine Leitung . Das ist möglich, weil die Komplexität in den Bausteine selber und in die Ansteuerungsprotokolle, also die Software, verlagert wird. Standardmodule sind:

  • LCD Dot Matrix Module
  • gLCD Module
  • externer Speicher (EPROM, EEPROM, dynamischer/statischer RAM)
  • Messen / Steuern Regeln
    • AD / DA Wandler
    • Muxer / Demuxer / Codiert / Decodierer
    • Timer / Uhren / Kalender
    • Temperaturmesser
    • LED Driver
  • Bustreiber
    • I/O
    • CAN Bus
    • I2C
    • USB
  • ...

I²C Bus

Der I2C Bus wurde von Pillips entwickelt und ist ein bahnbrechender Standard in der MCU Welt. Er löst das Problem, mehrere, diverse einfache und komplexe Bausteine mit wenig Aufwand über einen Bus zu integrieren.Der I2C Bus kann von fast jeder MCU unterstütz werden. Der Bus ist bidirektional und es ist kein externer Takt (und Geschwindigkeitssychronisation) notwendig, wie es vom PC Bussen her kennt (PCI). Zudem ist der Bus einfach und robust, so dass auch relativ große Kabellängen toleriert werden. Das Busprotokoll ist einfach zu implementieren und trotzdem sehr flexibel. Das alles zu ermöglichen ist schon eine hervorragende Ingenieurleistung.

Microcontroller I2C Bus.jpg

Für den I2C Bus werden Bausteine angeboten, die schon recht komplexe Anwendungsscenarien ermöglichen:

  • I/O Erweiterungen
  • LED / LCD Treiberbausteine (I2C LCDs: 20x4 kosten mittlerweile < 10 €)
  • Uhren
  • diverse Speicherbausteine (z.B. Serial EEPROMs)
  • A/D Wandler
  • D/A Wandler
  • Muxer
  • I2C Repeater / Hubs / Multiplexer / DIP Switches / Buscontroller

Der I2C Bus benötigt aus elektrischer Sicht 2 Leitungen als Busverbindungen: SDA, SCL (plus Vcc und GND). Man benötigt meist noch "Pull Up Widerstände", von SDA und SLC auf Vcc, dann alle SDA Pins der Devices verbinden, ebenso wie die SCL pins -- das wars. Den Rest macht das Bus Protokoll, also aus MCU Sicht die Software. Bascom liefert hier alles mit, so dass der Programmieraufwand sich stark vereinfacht -- auch das Timing berechnet der Compiler. I2C Bus

Das Protokoll und diverse Details wie Timing und Pinout ist in fast jedem Datenblatt eine I2C Devices enthalten, wie z.B. in dem Datenblatt eines Speicherbausteins.

Um den Mikrocontroller an den I²C Bus zu koppeln müssen noch Pull Up Widerstände (10 k Ohm) verwendet werden. Die 330 Ohm Widerstände dienen nur dem Schutz des Bausteins und sind optional.

I2C-ATmega32.png

Link: AVR-GCC I2C Libraries

1 Wire

Der One Wire Bus von Texas Instruments benötigt dank pfiffiger Konzeption nur eine Leitung zwischen den Devices und MCU. Auch 1wire kann fast jede MCU, so auch der AT89Cx051. Nur noch ein weiterer Bus? Im Prinzip ja, aber mittlerweile unterstützt TI in Breite nicht den Phillips I2C und andersherum. Das führt dazu, dass innovative MC Devices nur den Bus des jeweiligen Herstellers unterstützen. Allerdings hat der 1wire Bus auch Vorteile gegenüber dem I2C Bus, so vereinfacht sich das Schaltungsdesign. Jaja, immerhin keine eine Reduktion von zwei auf eine Busleitung die Hälfte an Bus-Verdrahtung eingespart werden. Man betrachte in dem I2C Bus Diagramm einfach mal die Anzahl der notwendigen Drahtbrücken, wenn mehr als 2 Devices gekoppelt werden sollen. Immerhin müssen ja auch jedem Device mindestens noch GND und Vcc spendiert werden, wenn nicht noch weitere Verdrahtung hinzu kommt.

DER Grund, sich die 1wire Technologie näher zu betrachen beginnt mit dem hochinteressaten 1wire Thermometer Baustein, der im erweiteten Modus eine hochpräzise Temperaturmessung ermöglicht, die alles altbekannte aus der Elektronik in den Schatten stellt. Er hat nur 3 Pins, kostet um die 3 Euro, deckt den Messbereich von –10°C bis +85°C ab und bietet eine erweiterten Messauflösung von <0.05°C. Wenn ich jetzt die Neugier geweckt habe, dann sollte man im Datenblatt des DS18B20 mal schmökern und die Applikationsnote lesen.