Tutorial Microcontroller

Mit diesem kleinen Tutorial möchte ich anderen helfen, in die Welt der Microcontroller einzusteigen.

Vorwort:

In den letzten Jahren sind Microcontroller extrem preiswert verfügbar geworden, so dass es heute meist nicht mehr sinnvoll ist, Logikschaltungen diskret aufzubauen.
Ich gehe hier nicht auf die Entwicklerboards wie den Arduino ein, hier geht es um die "nackten" Controller.

Was ist ein Microcontroller:

Ein Microcontroller ist ein Ein-Chip-Computersystem was bedeutet, dass ein kompletter Rechner mit Allem was zum Betrieb nötig ist in einem einzigen Gehäuse integriert ist.

Ein Vergleich:

Prozessorkarte mit 8085ATtiny2313
Eine diskret aufgebaute Prozessorkarte, wie sie in den 80ern in Steuerungen üblich war.
Zu sehen sind der Prozessor, 2KB RAM,2KB PROM (nicht löschbar), ein Portbaustein und diverse Logikbausteine.

Programmierung: externes ROM (PROM oder EPROM)

Preis: ca. 200DM

Ein AVR Microcontroller der Fa. Atmel, der etwa die gleiche Leistung und Eigenschaften aufweist, wie die Prozessorkarte.

Programmierung: interner, wieder beschreibbarer FLASH Speicher.

Preis: 1,65€

Man hat also die Rechenleistung einer kompletten Prozessorkarte in einem einzigen Baustein, der keine 2€ kostet und sich zudem viel einfacher programmieren lässt!

Programmierte Microcontroller sind im Idealfall ohne weitere Peripherie lauffähig, da sie alles Nötige bis hin zur Takterzeugung integriert haben.
Sobald die Stromversorgung angeschlossen wird, beginnen sie ihr Programm abzuarbeiten und erfüllen ihre Funktion.
Daher ist es heute kaum mehr sinnvoll größere Logikschaltungen aufzubauen, da sie im Vergleich zu einem immer wieder neu programmierbaren Controller zu unflexibel, zu aufwändig und zu teuer sind.

Empfehlungen für den Einstieg:

Legt Euch auf eine Prozessorfamilie fest!

Für mich waren die Auswahlkriterien für die AVR Familie:
- Preiswerte, leistungsfähige Hardware
- Leistungsstarke Entwicklungsumgebung (möglichst preiswert verfügbar oder kostenlos)
- Einfache Programmierung der Controller ohne Programmiergerät

Auswahl eines geeigneten Controllers:

Für die meisten meiner Projekte habe ich den AT90S2313 oder dessen kompatiblen Nachfolger ATtiny2313 verwendet, da er die geforderten Anforderungen vollständig erfüllt.
Die Programmierung der Controller unterscheidet sich kaum. Man muss halt wissen, was der entsprechende Controller "an Bord" hat.
So fehlt dem ATtiny2313 z.B. ein AD Wandler, den der Mega8 hat.
Je nach Projekt wählt man also einen passenden Controller.

Die Programmierung:

Als Programmiersprache habe ich mir BASCOM-AVR der Fa. MCS Electronics ausgesucht.
BASCOM-AVR ist eine extrem mächtige Sprache, die dem Programmierer viele Dinge im Hintergrund abnimmt.
Es gibt fertige Routinen, die Einzeiler ermöglichen.

Beispiel:
Das Kommando "sonysend" sendet über einen Portpin einen definierbaren Code um ein Sony Gerät via Infrarotfernbedienung zu steuern.
Die Anweisung "Config Dcf77 = ...parameter" decodiert im Hintergrund ein von einem Empfangsmodul geliefertes DCF Zeitsignal und stellt die Atomgenaue Uhrzeit als Variable zur weiteren Verwendung zur Verfügung!

BASCOM-AVR ist als Demoversion kostenlos verfügbar und kann in der Demoversion bis zu 4KB Maschinencode erzeugen. Die AVR Controller lassen sich über die serielle SPI Schnittstelle mit einfachsten Mitteln programmieren.
Es genügt ein Adapter für den Parallelport.
Heute gibt es für wenig Geld USB Programmieradapter, die auch mit moderner Hard- und Software funktionieren

Bascom AVR ist zum einen ein Compiler, bringt aber auch ein Tool mit, um das Programm auf den Controller zu übertragen.

Nachteile einer "Hochsprache":

Programmiert man einen Mikrocontroller mit Assembler, weiß der Programmierer genau, wie lange ein Programmablauf dauert.
Kompiliert man ein Bascom Programm, kann man das bestenfalls sehr grob abschätzen.
Bei langsamen Vorgängen ist das kein Problem. Möchte man aber zeitkritische Abläufe steuern, so wird das zum Problem!
Als Beispiel möchte ich hier z.B. eine Phasenanschnittregelung nennen, wo die Zündung des Triacs nach einem sehr genau definierten Zeitpunkt erfolgen muss!

Man handelt sich mit der komfortablen Programmierung also einen gewaltigen Nachteil ein!

Für das Problem gibt es aber eine Lösung:
Praktisch alle AVR Controller haben Timer eingebaut, mit denen sich Zeitabläufe präzise steuern lassen.

Beispiele finden sich ein meinen vorgestellten Projekten.

====> Hier geht es zu Teil 2, der die Programmierung eines Controllers Schritt für Schritt beschreibt!

 

 

 

 

 

 

© klaus(at)taeubl.de