Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

In diesem Kapitel beschäftigen wir uns mit Analog-Digital Wandlern und Digital-Analog Wandlern.

Abbildung 1 - links: Schaltskizze mit Potenziometer und AD Wandleranschluss; Mitte: Schaltungsaufbau auf dem Steckbrett; rechts: Terminalausgabe - Courtesy of Parallax Inc.

1 - AD Wandler und Potenziometer Schaltkreis

Auf dem Prop-BoE gibt es vier Anschlüsse, die direkt mit einem AD Wandler Chip verbunden sind. Sie sind gekennzeichnet mit AD0, AD1, AD2 und AD3. In der folgenden Übung wird ein Potenziometer (regelbarer Widerstand) mit drei der vier Anschlüsse verbunden, so wie in Abb. 2 dargestellt.

 

Wird der Schleifer eines Potenziometers gedreht, verändert sich die Spannung am Anschluss AD0. Mit dem Schleifer lassen sich alle Spannungen zwischen 0V und 5V einstellen. AD1 ist direkt mit Masse (GND) verbunden und sollte deshalb 0V anzeigen. AD2 ist direkt mit dem 3,3V Anschluss auf dem Board verbunden und sollte deshalb diesen Wert auch ausgeben.

Schaltskizze und Schaltungsaufbau

Abbildung 2 - links: Schaltskizze; rechts: Schaltungsaufbau - Courtesy of Parallax Inc.
  • Baue die Schaltung nach Schaltskizze auf dem Steckbrett des Prop-BoE auf.

Befindet sich der Schleifkontakt eines Potenziometers am rechten oder linken Anschlag, dann wird in dem einen Fall 0V und im anderen Fall 5V über dem Widerstand (Potenziometer) abfallen.

Der AD Wandler gibt einen ganzzahligen Wert aus, der der von ihm gemessenen Spannung entspricht.

2 - Einfacher Test: Analog zu Digital

Der AD Wandler übergibt dem Propeller Controller einen Zahlenwert, der der an AD0 gemessenen Spannungsgröße entspricht. Diese Zahl wird in einer Variablen ad abgelegt und ihr Wert im Parallax Serial Terminal (pst) ausgegeben. Schauen wir uns das erst einmal im Experiment an.

Abbildung 3 - Programm Poti_1.spin

Terminalausgabe

Die Methode In des Objektes PropBOE ADC erwartet einen Parameter zwischen 0 und 3 und weist der Variablen ad vom Typ long einen Wert zu. Dieser Wert liegt zwischen 0 und 1023 und entspricht dem am Eingang A0 gemessenen Spannungswert.

  • Lasse dir im PT mit dem Aufruf von F8 (Run - Compile Current - View Info...) sämtliche Objekte, die mit dem Programm Poti_1.spin verknüpft sind, anzeigen. Sie erscheinen oben links im Fenster von PT.
  • Klicke auf das Objekt PropBOE_ADC und lade es in den Editor. Wähle die Einstellung Documentation und suche die Methode PUB In..
Abbildung 4 - Methode In im Objekt PropBOE ADC

Wird die Methode In aufgerufen, verzweigt das Programm in das Objekt PropBOE ADC, sucht dort die Methode In und beginnt mit der Ausführung. Sind alle Kommandos abgearbeitet, kehrt das Programm zum Verzweigungspunkt zurück.

Die PUB Deklaration der Methode In beschreibt die Parameter der Methode, die einem Aufruf mitgeliefert werden müssen und sie beschreibt, welcher Wert zurückgegeben wird. Der Aufruf

  • PUB In(channel) : adcval

bedeutet, dass die Methode In einen Parameter channel erwartet, und das sie den Wert einer Variablen adcval zurückgibt. Schaltet man im Editor auf den Auswahlbutton Summary um, dann fehlt hier der Erläuterungstext und es werden nur die Kopfzeilen der Methoden mit zusätzlicher Information angezeigt. Im Fall der Methode In und aller weiteren Methoden im Objekt PropBOE ADC sieht sie so aus:

Abbildung 5 - Kopfzeilen der Methoden im Objekt PropBOE ADC

Die Variablen rechts vom Symbol | sind bei allen Methoden sogenannte lokale Variable, die temporären Speicherplatz während der Ausführung der Methode benötigen.

Abbildung 6 - Programmablauf bei Aufruf von Methoden

Methoden vom Typ PUB und PRI

Methoden können mehr als einen Übergabeparameter enthalten, aber sie besitzen maximal nur einen Rückgabewert. Eine Methode kann als PUB (public) oder PRI (private) deklariert werden. Auf Methoden vom Typ PRI kann nur innerhalb des gleichen Objektes zugegriffen werden; sie werden dort eingesetzt, wo sie andere Methoden des Objektes bei der Ausführung eines Programms unterstützen können. Wird eine PRI Methode von einem anderen Objekt aufgerufen, kann das zu unvorhersehbarem Verhalten des Programms führen.  

3 - Mehrkanal AD Wandler

Das folgende Programm benutzt indexierte Variable und eine Schleife, in der die drei AD Wandler Kanäle abgefragt werden. AD0 ist mit dem Schleiferkontakt verbunden; wird der Schleifer bewegt, sollten sich die angezeigten Werte im Terminal verändern. AD1 ist mit GND (Masse) verbunden und sollte 0 anzeigen, während AD2 mit 3,3V verbunden ist und entsprechend

anzeigen sollte.

  • Übertrage das folgende Programm Mehrkanal_Test.spin in das PT und speichere es ab.

Programm Mehrkanal_Test.spin

  • Starte das Programm mit F12 (Start der Terminalanzeige) und F10 (Compiliere das Programm und Ablage im RAM). Während das Programm compiliert und im RAM abgelegt wird, drücke den Taster Enable im Terminalfenster.
  • Überprüfe, ob drei Werte im PST angezeigt werden.

Wie arbeitet das Programm?

In der Methode start wird die Schleife

  • repeat i from 0 to 2
    

dreimal durchlaufen. Es erfolgen die Zuweisungen

  • adc.In(0) wird zugewiesen -> Rueckgabewert_vom_Wandler[0]
  • adc.In(1) wird zugewiesen -> Rueckgabewert_vom_Wandler[1]
  • adc.In(2) wird zugewiesen -> Rueckgabewert_vom_Wandler[2]

4 - Spannungen messen

Mit kleinen Ergänzungen und Veränderungen in der Methode start wird das Programm aus Abschnitt 3 so angepasst, dass es gleich den Spannungswert in Volt im Terminal anzeigt.

Schaltskizze

  • Baue die Schaltung nach Schaltskizze auf dem Steckbrett auf.
  • Lade das Programm Mehrkanal_Test.spin in den PT.
  • Übertrage die Änderungen aus Abb. 7 in das Programm und speichere es unter dem neuen Namen Reihenschaltung_Widerstand.spin ab.
  • Kopiere in das Programmverzeichnis das Objekt "PropBOE Voltmeter".
  • Starte das Programm mit F12 und F10. Während das Programm compiliert wird, drücke im Terminalfenster auf den Button Enable.

Das Programm Mehrkanal_Test.spin mit Terminalausgabe

Wie arbeitet das Programm?

Das Objekt "PropBOE Voltmeter" enthält eine Methode Str, über die eine formatierte Ausgabe der ermittelten Spannungswerte am AD Wandler möglich ist. Ein Blick in die Beschreibung zur Methode  Str zeigt, dass als Übergabeparameter der Wandlerkanal anzugeben ist. Der vom Kanal ausgelesene und in eine Spannungsgröße umgerechnete Wert erscheint im Terminal im Format:

  • AD<Kanal#> = <Spannungswert> V
    

5 - Von Digital zu Analog

Die Umwandlung von Digital zu Analog ist der umgekehrte Prozess wie er in einem AD Wandler stattfindet, bei dem ein Spannungswert in einen Zahlenwert umgewandelt wird. Ein Digital Analog Wandler (DAW oder DAU) wandelt einen Zahlenwert in einen entsprechenden Spannungswert um.

Auf dem Propeller Board of Education sind die I/O Leitungen P26 und P27 des Mikrocontrollers mit einem DAU verbunden. Bei einer Eingabe einer Zahl zwischen 0 und 255 wird ein entsprechender Spannungswert zwischen 0 und ca. 3,3 Volt ausgegeben. Unterhalb der Anschlüsse DA0 und DA1 befinden sich zwei LEDs, die als Indikatoren für die Höhe des ausgegebenen Spannungswertes stehen. Je höher die Spannung, desto heller, je geringer die Spannung, desto schwächer leuchten sie.

 

Im folgenden Programm wird von 0 bis 255 aufwärts gezählt in 4-er Schritten und über die DAU entsprechende Spannungswerte ausgegeben.

 

Schaltskizze und Schaltungsaufbau

Courtesy of Parallax Inc.
Digital Analog Umsetzer
Aufgaben
  • Baue die Schaltung nach Schaltskizze oder Schaltungsaufbau auf dem Steckbrett auf.
  • Übertrage das Programm DAU_1.spin in den PT Editor und speichere es ab.
  • Überprüfe, ob die LED an P26 heller wird, wenn DA[0] abwärts zählt.
  • Überprüfe, ob die LED an P27 schwächer wird, wenn DA[1] aufwärts zählt.

Das Programm DAU_1.spin

Wie arbeitet das Programm?

Als Aufrufname für das Objekt "PropBOE DAC" wurde im OBJ-Block des Programms dau gewählt. Die Methode Out erwartet zwei Parameter: channel und dacval. Der Befehlsaufruf

dac.Out(0, 128)

bewirkt, dass DA0 auf

3,3V x 128 / 256 = 1,65 V

geht und die LED an P26 etwa die halbe Leuchtkraft hat. Ein Aufruf von

dac.Out(1, 64)

setzt DA1 auf

3,3V x 64 / 256 = 0,825 V.

Mit Hilfe der Endlosschleife repeat wird in der Methode start alle 70 ms in 4-er Schritten dac[0] aufwärts und dac[1] abwärts gezählt. Im Terminal stellt sich dann die Ausgabe wie folgt dar:

6 - DAU und Oszilloskop

Mit Hilfe eines AD Wandlers lassen sich die Zahlenwerte des DAU in Spannungswerte umwandeln. Dazu werden die Anschlüsse DA0 und DA1 mit AD1 und AD2 auf dem Steckbrett verbunden. Die Schaltung arbeitet wie in Abschnitt 5 beschrieben, mit dem Unterschied, dass wir jetzt Spannungswerte im Terminal anzeigen lassen können. Statt das zu tun, habe ich ein Oszilloskop an die DAU-Ausgänge angeschlossen und die Spannungswerte so sichtbar gemacht. Parallel dazu werden die Werte aber immer noch im Terminal angezeigt.

 

Programm DAU_2.spin

Die blaue Kurve im Oszillogramm entspricht DA1, die rote DA0. Auf der Rechtsachse ist die Zeit, auf der Hochachse die Spannung aufgetragen.

Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf