Der FKG- Roboter

FORPHYS- Mess- Interfaces

Forschendes Lernen im Physik-UR

Würzburger Quanten- physik- Konzept

Grundfakten der Quanten- physik

Materialien Physik-UR

Physika- lische Analysen

Im- pres- sum

Kommen- tare und Wünsche

© Horst Hübel Würzburg 2005 - 2014

Wir ergänzen einen käuflichen Mikroprozessor-Baustein zum Messinterface

.

Heutzutage werden die meisten Schulen wohl ein kommerzielles Messsystem haben, das als Demonstrationsgerät eingesetzt wird. Es gibt allerdings fast fertige Messinterfaces auf dem Markt, die so kostengünstig sind, dass sie mehrfach angeschafft werden können um Schülerversuche in parallelen Versuchsgruppen zu ermöglichen. Dadurch erschließen sich viele neue Versuche im Sinne des  "Forschendes Lernens" im Physik-Unterricht. Mit wenigen Zusatzkomponenten können sie leicht für diesen Anwendungsbereich ergänzt werden.

Ziel:

Es wird ein fertig aufgebautes Experimentierboard mit einem Atmel Mikroprozessor ATMEGA32 von POLLIN  verwendet. Der Prozessor hat 8 Analogwandler-Eingänge zur Messung analoger Gleichspannungen von 0 bis 5 V, von denen wir 4 nutzen, zwei für Gleichspannungen und zwei für Wechselspannungen.

Abb. 1: Atmel Evaluations-Board von POLLIN mit seiner Verbindung zum PC. Es wird über die PC-Tastatur bedient und sendet Messergebnisse etc. auf den PC-Bildschirm.

Es sollte, anders als im Foto, mit einem Trafo mit 9 V Wechselspannung verbunden werden. Der Prozessor (empfohlen ATMEGA32 16PI; es gingen auch ATMEGA16 und mit etwas weniger Anschlussmöglichkeiten ATMEGA8   und ATMEGA168; alle mit Anschlüssen DIL 40 bzw. 28) und das USB-serial-Kabel müssen getrennt bestellt werden.

Zu messende Spannungen werden rechts am Wannenstecker angeschlossen.

Sie müssten nur einige wenige Komponenten hinzu bestellen. Um nur Gleichspannungen zu messen, bräuchten Sie nur Stecker mit Anschlussleitungen aufstecken. Um auch Wechselspannungen von -5 V bis 5 V zu messen  empfiehlt es sich für die Kanäle A2 und A3 einen kleinen Pegelanheber zusammenzulöten, der Spannungen von - 5V auf 0 V, 0 V auf 2,5 V und 5 V auf 5 V anhebt. Die Kanäle A0 und A1 bleiben dann für Gleichspannungen vorgesehen. Der Pegelanheber enthält auch einen optionalen Überlastungs- und Verpolungsschutz für alle 4 Kanäle. Nur, wenn Sie eine "Luxusversion" in ein Gehäuse einbauen wollen, müssten Sie noch Steckverbindungen ergänzen.

Als Programmiersprache für den Mikroprozessor wird die Hochsprache AVISE von Herrn Schemmert, Firma CINETIX, Frankfurt, empfohlen,  eine FORTH-Variante, die Sie kostenlos aus dem Internet herunterladen können (neueste Variante AVISE 4.3, zu finden unter AV433216.HEX). Damit ist der Mikroprozessor sehr leicht programmierbar vgl. So schön geht AVISE). Aber keine Angst! Sie können auch bereits fertige Messworte verwenden! Evtl. können Sie sich sogar vom Autor gegen Kostenerstattung einen fertig programmierten Mikroprozessor erwerben.

Das Interface wird über den seriellen Port mit dem PC verbunden. Dazu verwenden Sie am besten ein USB to serial-Wandlerkabel. Vom PC aus wird das Interface mit einem üblichen Terminalprogramm bedient, oder dem Terminalprogramm ATOOL von CINETIX (mit dem Sie auch noch eigene Messworte in das EEPROM-Gedächtnis des Prozessors lesen können), oder dem Programm GRAFTERM des Autors, alles kostenlose Programme. Mit GRAFTERM haben sie sogar einige einfache Möglichkeiten, die Messergebnisse in Graphen darzustellen.

Das Interface kann noch viel mehr, als hier beschrieben wird, z.B. Rechteckssignale bestimmter wählbarer Frequenz ausgeben, Frequenzen und Zeiten messen, Schalter bedienen, Schaltsignale ablesen etc. Wenn Sie mehr wissen wollen, könnten Sie z.B. das Buch "Schülerversuche mit PC und Mikroprozessor - Wege zum forschenden Lernen" von Horst Hübel aus der PRAXIS-Reihe des Aulis Verlags (ISBN 3-7614-2613-5) in Uni-Bibliotheken ausleihen, das Sie derzeit sonst höchstens noch gebraucht kaufen können. Das Glossar bzw. das von Herrn Schemmert  bei der Fa. CINETIX gibt Ihnen vielleicht schon einen Vorgeschmack von den Möglichkeiten.

Wenn Sie AVISE in den Flashspeicher des Mikroprozessors selbst laden wollen, brauchen Sie einen geeigneten Programmierer für den USB-Port und geeignete Software. Es genügt die kostenlose Demo-Version des BASCOM-Compilers (AVR) von MCS, den Sie selbst nicht nutzen, wohl aber dessen Programmiersoftware.

Die Mitteilungen dieses Artikels und darauf bezogener Artikel sind erprobt. Dennoch wird keinerlei Haftung für das Funktionieren oder für mögliche Schäden an den hier beschriebenen Baugruppen oder dem PC übernommen.

Abb. 2: Ein Messbeispiel:

Kennlinie einer IR-Leuchtdiode

Erprobung des Mikroprozessor-Boards (MP-Board)

Nach dem Laden von AVISE in den Flashspeicher des Prozessors kann mit dieser Programmiersprache die Funktion des MP-Boards erprobt werden. Sämtliche Jumper JP1 - JP12 seien gesetzt. Mit Taster 1 - 3 können Schaltsignale vom MP abgerufen werden über PD2 - PD4, mit PD5 - PD6 können Ausgangssignale ausgegeben werden, die LEDs auf dem Mikroprozessor-Board bedienen. PD7 ist mit dem Summer verbunden.

Die weitere Kommunikation zwischen PC und MP spielt sich so ab: Sie geben Worte mit der PC-Tastatur ein. Mit der (Entertaste) senden Sie die Zeichenfolge an den MP. Dort werden sie compiliert. Wenn alles in Ordnung war, meldet der MP daraufhin OK. Andernfalls kommt eine Fehlermeldung. Sie können auf gleichem Weg aber auch fertige Mess-Worte direkt vom PC aus starten (Interpreter-Modus).

Ein Beispiel - So einfach wird in AVISE programmiert (Vgl. auch So schön geht AVISE):

Es soll ein Wort PRINT definiert werden, das nichts tut als eine Zahl, die vorher auf den Stapel gelegt wurde, auf dem Bildschirm auszugeben. AVISE arbeitet wie andere FORTH-Dialekte mit der umgekehrten Polnischen Notation (UPN). Jede Zahl, die Sie weiter verarbeiten wollen, muss dazu zu allererst auf den Stapel (einem besonderen Speicher) gelegt werden. Die Definition erfolgt folgendermaßen:

: PRINT . RET   (Vergessen Sie nicht das Leerzeichen hinter dem Doppelpunkt!)

: PRINT stellt die Namensvereinbarung dar. Dann kommt die Folge von Worten, die PRINT ausführen soll. Das ist hier allein der Ausgabebefehl, ein einfacher Punkt. RET sagt dem Compiler, dass die Definition des Worts abgeschlossen ist. Wenn Sie das eingeben und mit (Entertaste) abschließen, meldet der Mikroprozessor OK. Er hat jetzt seinen Wortschatz um das Wort PRINT erweitert. PRINT bringt also auf den Bildschirm, was auf dem Stapel liegt. Also:

Sie geben beim PC ein:   255 PRINT (Entertaste) . Der MP macht Folgendes: 255 wird auf den Stapel gelegt, dann vom Stapel entfernt und auf dem Bildschirm ausgegeben. Der MP meldet 255 OK.

Sie könnten auch & 255 $ PRINT (Entertaste) eingeben. Dann wüsste der MP, dass die erste Zahl eine Dezimalzahl (durch das Wort & in den Dezimalmodus geschaltet) ist, die er aber in eine Hexadezimalzahl umwandeln (durch das Wort $, durch die der MP in den Hexadezimalmodus geschaltet wird) und ausgeben soll. Auf dem Bildschirm erscheint FF OK, was ja das gleiche ist wie oben.

Sie haben also die Möglichkeit per Hand über die PC-Tastatur Worte (Befehle) an den MP zu übertragen, sie compilieren zu lassen, und ausführen zu lassen, aber auch durch ein einzelnes Wort ein ganzes Programm zu starten (im Interpreter-Modus). Für unser Beispiel heißt das, um 255 auszugeben, haben Sie zwei Möglichkeiten:

255 . (Entertaste)

oder

255 PRINT

Solange der Speicherplatz ausreicht, können Sie weitgehend beliebig lange und komplexe "Programme" durch ein Wort definieren. Mit dem Stapel muss man überlegt umgehen. Hat man bloß vergessen, etwas auf dem Stapel abzulegen, kommt nur eine Fehlermeldung. Hat man aber vergessen, eine unbenötigte Zahl (z.B. ein bei einer Rechnung entstandes Zwischenergebnis) zu entfernen, wird der Stapel immer größer, bis er schließlich "überläuft": der Supergau!

Jetzt zum Test der MP-Boards:

$ 0 D WDDR (Entertaste) würde alle 8 Leitungen des Ports D auf Eingang schalten, $ FF D WDDR (Entertaste) würde alle 8 Leitungen des Ports D auf Ausgang schalten. $ sagt dem AVISE-Compiler, dass die folgenden Zahlen Hexadezimalzahlen sein sollen (im letzten Fall sind das FF = 255(10) und D = 13(10). Zum Funktionstest sollen die Leitungen 2, 3 und 4 auf Eingang und die Leitungen 5, 6 und 7 auf Ausgang geschaltet werden. Die Leitung  0 wird anderweitig verwendet und soll nicht verändert werden. $ FF D WDDR ist gleichbedeutend zu & 255 13 WDDR. Alle folgenden Zahlen werden bis zum nächstem Umschalten mit $ als Dezimalzahlen aufgefasst.

$ D2 IZ D3 IZ D4 IZ (Entertaste) schaltet die 3 Leitungen auf Eingang ohne internem hochohmigen Pullup-Widerstand (würde ggf. Potenzial auf 5 V ziehen). Durch die Taster auf der Platine kann jede der drei Leitungen auf 5 V-Potenzial hoch gezogen werden, was vom MP ausgelesen werden kann. In der Hexadezimalzahl D2 ist der Port D und die Leitung (das Bit) 2 verschlüsselt.

$ D5 OH D6 OH (Entertaste) schaltet die Leitungen 5 und 6 von Port D auf Ausgang mit 5 V Ausgangsspannung. Die zwei LEDs müssten jetzt leuchten. Mit der folgenden Wortfolge können sie wieder abgeschaltet werden, obwohl die Leitungen auf Ausgang geschaltet bleiben:

$ D5 OL D6 OL (Entertaste)

Wenn dem MP einmal der Gebrauch von Hexadezimalzahlen aufgetragen wurde, bleibt dieser Zustand bis zu einer gewollten Änderung von Ihnen bestehen. (Das könnte mit der Eingabe von & geschehen.) Sie können dann auf weitere Dollarzeichen verzichten.

Um jetzt die Taster zu testen schreiben wir ein Wort, das eine bestimmte Wortfolge immer wiederholt, sinnvollerweise eine Schleife, die durch einen Tastendruck beendet wird. Das Wort soll TASTER heißen:

: TASTER  REPEAT .... KEY? UNTIL DROP RET

Anstelle der Pünktchen wird stehen, was der MP immer wieder tun soll. Also:

: TASTER leitet die Definition des Worts TASTER ein (Achten Sie auf den Zwischenraum nach dem Doppelpunkt!). Sie wird mit RET abgeschlossen. KEY? fragt ab, ob eine Taste auf dem PC gedrückt wurde. Wenn nein wird das FLAG 0 auf den Stapel gelegt. UNTIL sagt: wiederhole die Schleife, die mit REPEAT beginnt, bis hierher, bis auf dem Stapel das FLAG 1 liegt. Wenn also keine Taste des PC  gedrückt wurde, wird das FLAG (0) entfernt und die Schleife wiederholt. Wurde aber eine Taste gedrückt, legt KEY? erstens den Code der gedrückten Taste auf den Stapel, darüber das FLAG 1. UNTIL nimmt die 1 weg und bricht die Schleife ab. Aber jetzt ist der Code der gedrückten Taste das höchste Element auf dem Stapel. Wir haben keine Verwendung dafür und entfernen es wieder mit DROP.

Was soll für unser Testprogramm jetzt in der Schleife gemacht werden?

Es sollen die Zustände der drei mit den Tastern verbundenen Eingangsleitungen getestet und auf dem Bildschirm gezeigt werden. Also:

D RPIN .   (Der Punkt für die Ausgabe sind jetzt ganz wesentlich! Zwischen allen Worten, wie auch zwischen Punkten, muss ein Leerzeichen eingegeben werden!)

Durch D RPIN wird der Port D ausgelesen und auf den Stapel gelegt (D ist die Hexadezimalzahl für 13(10); RPIN = Read Port In). Wird Taste 1 gedrückt, wird 4 zum Stapel hinzugefügt, wenn alle drei Tasten gedrückt sind kommt 4 + 8 + 16 =  28 = 1E(16) hinzu. Mit der Ausgabe ist der Stapel wieder ausgeglichen.

Einen Schönheitsfehler hätte jetzt das Wort noch: Alle Ergebnisse würden fortlaufend in eine Bildschirmzeile ausgegeben werden. Wir wollen lieber nach der Ausgabe einer Taster-Abfrage eine neue Zeile beginnen und geben zusätzlich noch ein Zeilenvorschubzeichen (Code 13 = D(16)) aus mit D EMIT . Damit lautet die Schleife

: TASTER  D2 IZ D3 IZ D4 IZ REPEAT      D RPIN .  D EMIT      KEY? UNTIL DROP RET

Dabei sind sicherheitshalber die drei Leitungen wieder auf Eingang ohne Pullup-Widerstand geschaltet.

Dann weiß der Compiler auch, dass D eine Hexadezimalzahl ist.

Wenn Sie jetzt dieses Wort starten mit

TASTER (Entertaste)

erscheinen fortlaufend die Zustände der drei Taster, ganz gleich wie Sie schalten, z.B. 1 (keine Taste), 5 (Taste1), 9 (Taste2), 11 (Taste3). 11(16) = 17(10), wie erwartet.

Zu 3.: Test des Summers:

Er ist an Leitung 7 desselben Ports D angeschlossen. Wir schalten in einer Schleife wie oben abwechselnd ein und aus. Das Wort soll jetzt BRUMM heißen:

: BRUMM REPEAT      ....    KEY? UNTIL DROP RET

baut wieder die Schleife auf.  

7 PORTD BSET 7 PORTD BCLEAR  (PORTD siehe unten)

setzt und löscht Bit 7 von Port D, aber nur dann, wenn diese Leitung auch auf Ausgang geschaltet wurde:

$ D7 OH

Das komplette Wort lautet also:

: BRUMM $ D7 OH  REPEAT      7 PORTD BSET 7 PORTD BCLR    KEY? UNTIL DROP RET

Dabei sollte zuvor der Code des Ports D als Konstante definiert sein:

$ 32 CONST PORTD

An der Tonhöhe werden Sie erkennen, dass das ganz schön schnell geht. Wenn zu schnell, können Sie auch z.B. A  MS  WAIT einfügen (am besten nach jeder Änderung des Ausgangssignals). Dann wartet der MP A(16) = 10(10)  ms lang, bevor er das nächste Wort abarbeitet. Eine Periode dauert dann ca. 20 ms, entsprechend 50 Hz. Der MP hat aber auch eigene programmierbare Rechtecksgeneratoren (OC ...), so dass Sie ohne eine solche Software-Lösung weitgehend beliebige Töne erzeugen könnten.

Abb. 3: Steckerbelegung für den Extension-Port J4 des Entwicklungs-Boards

Die Interrupt-Kanäle (INT...) sind geeignet zum Zeitmessen, die Oscillator-Kanäle (OC...) können - evtl. pulsweitenmodulierte - Rechteckssignale ausgeben.

Die INT- und die OC-Kanäle werden in einem späteren Text beschrieben.

Abgesehen von den Stromversorgungspins (rechts) verwenden wir hier nur die linken vier Steckerstifte.

Viel Spaß beim Erproben und Experimentieren!