Vortrag bei U13, 19.02.2010: Microcontroller im Amateurfunk: Eine Einführung mit Arduino

Aus DL8RDS Wiki
Wechseln zu: Navigation, Suche

Dieser Artikel ist eine Zusammenfassung der Aussagen des Vortrags

Ziel des Vortrags:

  • Die Zuhörer sollen einen Überblick über das Gebiet der uCs bekommen
  • Die Zuhörer sollen lernen, wie einfach der Einstieg ist
  • Die Zuhörer sollen die Relevanz des Projekts Arduino verstehen
  • Die Zuhörer sollen Ideen entwickeln, was man mit so einem einfachen Arduino alles anstellen kann

1 Abstract

Mikrocontroller sind allgegenwärtig. Angefangen von den Weihnachts-Blinklichtern, über Ladegeräte, Türklingeln bis hin zu Waschmaschinen, überall werden Mikrocontroller eingesetzt. Natürlich bieten sich Mikrocontroller auch zur Steuerung und Überwachung von Amateurfunk-Gerätschaften an, jedoch stehen sie im Ruf, schwierig programmierbar zu sein, und werden daher von den meisten Bastlern gemieden.

Daß dies nicht so sein muß, zeigt ein in den letzten Jahren sehr aktives italienisches Open Source Hardware-Projekt namens ARDUINO. In diesem Projekt werden fertige Kleinst-Boards auf Basis verschiedener ATMEL-Controller für günstiges Geld entwickelt und vertrieben. Zudem gibt es eine Software-Entwicklungsumgebung und eine objektorientierte, einfache Programmiersprache namens WIRING.

Der Vortrag hat das Ziel, einen Überblick über das Feld des PHYSICAL COMPUTING zu vermitteln. Es werden einfache, grundlegende Hardwarekonstellationen und die dazugehörenden, stets sehr kurzen Mikrocontrollerprogramme vorgestellt. Die Zuhörer sollen in die Lage versetzt werden, einfache Szenarien nachzubauen und nachzuprogrammieren.

Abschließend wird ein Projekt des Referenten vorgestellt: Eine Microcontroller-Steuerung und Überwachung der Betriebsparameter eines Senders für 70cm. Aus diesem Kontext wird vor allem die SWR-Messung näher betrachtet.

2 Amateurfunk und Physical Computing

In den vergangenen 20 Jahren haben wir im Amateurfunk eine sehr turbulente Zeit erlebt: Wir haben erfahren, wie sich ein Paradigmenwechsel von der Analog-Elektronik hin zur digitalen Informationsverarbeitung vollzogen hat. Auswirkungen:

  • Bausteine wurden immer kleiner: SMD macht das Löten schwer
  • Bausteine wurden immer komplexer: Ohne Datasheet-Lesen geht gar nix mehr
  • Immer stärkere Einbindung von Prozessoren
  • Verfügbarkeit von Sensoren zu sehr vielen physikalischen Größen
  • Neue Kommunikationsprotokolle, und zwar drahtgebunden wie auch drahtlos:
    • I2C, CAN, Feldbus, Ethernet,
    • Bluetooth, WLAN (3x), ZBee, GSM, UMTS, GPRS

Noch vor einigen Jahren waren die Bausteine nur "roh" zu bekommen. Wer ruhige Hände und eine SMD-Lötausstattung hatte, konnte mitspielen. Andere waren ausgeschlossen.

Viele Funktionsanteile, die vorher in einzelnen Bauteilen und in Hardware aufgebaut worden waren, werden inzwischen nur noch in Form von Software abgebildet. DSPs zeigen immer mehr, was sie leisten können: Direktes Sampeln von Signalen bis zu 1 GHz ist heute möglich. Theoretisch braucht man für einen 70cm-TRX keine Mischer mehr. Die gesamte Signalverarbeitung erfolgt durch den Rechner!! Auch hier gibts einen Einstieg:

http://www.unidsp56.de/

Viele OMs haben angesichts des "Verschwindens der Analogtechnik" kapituliert. Das ist sehr schade, denn die Schwelle in die digitale Welt ist niedriger als gedacht. Man darf allerdings nicht den Fehler machen, und bei Windows stehen bleiben. Wer wissen will, wie ein Motor funktioniert, muß die Motorhaube aufmachen, und das geht bei Windows nicht. Open Source muß her!!

Konkret muß man sich ein bisserl mit Rechnertheorie beschäftigen, aber das ist leichter als mal denkt.

Und noch ein Trost: Man muß ein guter Analogtechniker sein, wenn man gute Digitaltechnik bauen will.

3 Ein Taschenrechner und ein Kernel

3.1 Mikrocontroller gegenüber DOS

Ein Taschenrechner ist im Grund nur ein Kreislauf, der aus einer Eingabe, einer Ausgabe, einem kleinen Speicher und einer Recheneinheit besteht.

Die Software für die Recheneinheit ist fix und kann nicht verändert werden.

Der Unterschied zwischen einem Taschenrechner und dem alten DOS bestand ausschließlich darin, daß die Software während des Betriebs konfigurierbar war. Ansonsten war DOS vom vorgesehenen Einsatzzweck genauso single-threaded wie ein Taschenrechner: Es konnte nur immer ein einziges Programm laufen. Für den Mehrprogrammbetrieb war es nicht vorgesehen.

Der Unterschied zwischen DOS und einem Mikrocontroller bestand also nur darin, daß es eine Eingabeschnittstelle gab, mit der der User das auszuführende Programm angeben konnte.

3.2 Mikrocontroller gegenüber modernen Betriebssystemem

Was ist nun der Unterschied zwischen einem Mikrocontroller und einem modernen Betriebssystem? Nun, bei "Betriebssystem" dürfen wir nicht an Windows denken, wie man es so kennt: bunt, klicki-mausi-bunti mit vielen Fenstern. Nein!!!

Ein Betriebssystem ist eine ganz nüchterne Laufzeitumgebung, wie sie etwa der Linux-Kernel darstellt. Die ganzen Programme aussendrum (auch die grafische Benutzeroberfläche KDE oder Gnome) gehören gar nicht mehr zum Betriebssystem, denn man kann sie auch weglassen. Stellen wir uns also den absolut minimalen Linux-Rechner vor. Mit so wenig Programmen wir überhaupt möglich.

Das Szenario ist dann folgendes: Sobald der Kernel erfolgreich geladen hat, übergibt er an eine Shell. Fertig, basta, aus. Unser Linux wäre damit schon lauffertig. Zwar könnte man noch nicht all diese schönen Dinge mit dem Netzwerk machen, aber wir könnten zumindest schon einmal verschiedene Programme starten.

Welche Aufgaben hat also der Kernel?

  • Abschottung der Programme vom Zugriff auf die Hardware: Die Programme sollen sich nicht in die Quere kommen. Alle Zugriffe müssen serialisiert werden. Daher brauchen wir eine klar definierte Schnittstelle zwischen dem User-Land und dem Kernel-Land (der Kernel selbst darf sehr wohl auf die Hardware zugreifen). Diese Schnittstelle zwischen diesen beiden "Ländern" sind die System Calls.
  • Prozessmanagement: Sobald man mehrere Programme gleichzeitig laufen lassen möchte, muß man sie entsprechend verwalten und ihnen Rechenzeit zuteilen. Das macht der Scheduler.
  • Memory Management: Damit Programme sich nicht gegenseitig in ihre Speicherbereiche hineinschreiben, braucht man eine Zuordnungstabelle, wer gerade welche Speicherbereiche verwendet. Die Zuteilung, Freigabe und Zugriffskontrolle bzgl Speicher macht der Memory Manager.
  • Hardwareunterstützung: Spezialhardware braucht Treiber. Jede Hardware will irgendwie angesprochen werden, und dafür brauchen wir besonderen Code.
  • Softwareprotokolle: Verfahren wie die Aufteilung von Plattenplatz oder Netzwerkprotokolle wie das berühmte "IP" müssen ebenfalls von irgendjemandem beherrscht werden. Das ist in unserem Fall der Kernel.

3.3 Unterschied zwischen Mikrocontrollern und Kerneln

Wenn man nun keine vielen gleichzeitigen Programme hat, sondern nur eines... dann:

  • braucht man keinen Memory Manager, weil 'DAS PROGRAMM' eh allen Speicher zur Verfügung hat.
  • braucht man keinen Scheduler
  • braucht man gar keine System Calls

Wenn man eh nicht für 20 verschiedene Hardwareplattformen programmiert, sondern nur für eine einzige Zielplattform... dann:

  • braucht man auch keine Hardwareabstraktion. Außerdem sind Mikrocontroller eh recht überschaubar.

Was man nach wie vor braucht, sind Eigenschaften eines Taschenrechners. Also die Ablaufschleife, die von Eingabemöglichkeiten liest und auf Ausgabemöglichkeiten ausgibt.

Daher wird es nicht verwundern, wenn man beim Arduino ebenfalls eine "loop"-Funktion findet.

Ein- und Ausgabefunktionen werden wir uns exemplarisch anehen.

4 Mikroconroller an und für sich

  • Was unterscheidet einen uC von einem großen Rechner? -> Seine Aufgabe!
    • Grundbausteine jedes Rechners: CPU, RAM, Storage, IO
    • sind auch auf uCs vorhanden! Nur eben kleiner und der Aufgabe entsprechend.
    • Eigentlich ist die Abgrenzung zwischen uCs und Großen Rechnern sehr schwer, denn man muß vielmehr von einem Spektrum sprechen
    • Und was ist besonders cool an uCs? -> Energetische Effizienz, minimale Größe!
    • Einziger nennenswerter systemtheoretischer Unterschied: Protected Mode fehlt, daher kein Speicherschutz möglich.
      • Dies ist aber nur bei Mehrprogrammbetrieb / mehrläufiger Programmierung (Multitasking) relevant, und das hat man bei uCs eigentlich nicht.
  • Atmel und PIC
    • Beides sind uC-Familien, es gibt sie in unterschiedlichen Größenordnungen, was die Dimensionierung der Bausteine CPU, RAM, Storage, IO betrifft.

5 Das Projekt Arduino

Ein uC hat in der Regel eine Startadresse, von der der uC "wegläuft", sobald er Strom bekommt. Dies ist erst mal problematisch, denn wie könnte man ihn dann so komfortabel programmieren wie unseren Arduino?

Daher gibt es die Erfindung der BootLoader. Das funktioniert wie ein BootLoader unter Linux (LILO, GRUB), der über die serielle Schnittstelle Code empfangen und diesen installieren kann. Wenn soundso lange kein Code kommt, wird der Code gestartet, der an einer bestimmten Stelle im Speicher beginnt. Das System nennt sich "STK500".

Dieser BootLoader wurde von ATMEL erfunden, daher ist das Programmieren von ATMELs so leicht. Im Gegensatz dazu muß man PICs vollständig programmieren und dann brennen. Das ist etwas weniger komfortabel.

Aber das Arduino-Projekt hat eine Hardwareplattform und dazu eine leicht erlernbare Programmiersprache geschaffen, die "WIRING" heisst. Sie basiert auf C / C++ und implementiert Bibliotheken für alle gängigen Ein- und Ausgabetechniken.

5.1 Boardvarianten

  • Größer: Arduino Mega, ca 50€
  • Der Klassiker: Duemillanove
  • Kleiner: Nano
  • Noch kleiner: Mini Pro

Weil das Arduino-Board OpenSource ist, darf es frei und beliebig ohne Lizenzkosten nachgebaut werden. Es gibt daher verschiedene Hersteller und verschiedene Varianten.

5.2 Shields und Breakouts

  • Ethernet
  • GPS
  • Waveshield
  • spielend leichter Anschluß von LCDs
  • Steuerung von Servomotoren
  • und vieles mehr

Dazu hat jeder Arduino eine Vielzahl an Schnittstellen:

  • Digitale (binäre) sowie mit Pulsweitenwandler, womit man Spannungen zwischen 0 und 5V erzeugen kann
  • I2C
  • ADC (Analog-Digital-Wandler)
  • Seriell / ggf. über USB

6 Erste Gehversuche

Code-Grundlagen

  • Was ist ein Compiler
  • Funktionen, Variablen und Bibliotheken

Die Arduino IDE

Beispielprogramme

  • Schalten einer LED
  • Einlesen eines Wertes über einen ADC
  • Dimmen einer LED
  • Schreiben auf die serielle Schnittstelle
  • Lesen von der seriellen Schnittstelle
  • Schreiben auf ein LCD-Display
  • Kommunikation über Ethernet

7 Ein einfaches Projekt

Ein SWR-Meter, das seine Werte digital über einen uC ausgibt. Eigentlich ist dieses Projekt nicht so isoliert zu betrachten, weil es eigentlich Teil eines größeren Projekts ist. Aber es eignet sich immerhin als Einstieg.

Der Hintergrund ist ein Projekt, in dem ein Echolink-Sender auf Basis eines T7F aufgebaut werden soll, den man von fern überwachen können soll. Damit dieser Sender keinen Hitzetod stirbt, muß er überwacht werden, und man muß sämtliche Vitalparameter des Senders abfragen können. Diese Abfrage erfolgt mittels einer Shell (wie eine Unix- oder DOS-Shell), in der es einen einfachen Befehlssatz gibt.

Die Formel zur Berechnung des SWR ist folgende:

Swrformel.png

Diese Formel muß in Software gegossen werden und vom uC ausgegeben werden.

8 Weitere Ideen

Siehe auch: