Startseite

Der FKG-Roboter

FORPHYS-

Mess-Interfaces

Forschendes Lernen im Physik-UR

Würzburger Quantenphysik-Konzept

Grundfakten der Quantenphysik

Materialien Physik-UR

Impressum

Kommentare und Wünsche

© Horst Hübel Würzburg 2005 - 2011

Die Grundschaltung mit dem AT90S8535 / ATMEGA8535 / ATMEGA32

Wir benutzen den Prozessor AVR AT90S8535 PDIP, das Flaggschiff der 8-bit-Prozessoren von ATMEL. Neuere Varianten mit gleicher Steckerbelegung sind AVR ATMEGA8535 und ATMEGA32(L) (jeweils im 40-poligen DIL-Gehäuse). Für den letzten Prozessor gibt es neuerdings ein eigenes AVISE-FORTH.

Von der Firma EMBEDIT kann man neuerdings auch ein Modul mit dem ATMEGA32 (ca. 20 Euro) erhalten, das weitgehend unserem entspricht. In Kombination mit der zugehörigen Variante von AVISE-FORTH ( AV433214) für 14,7456 MHz Taktfrequenz erfüllt es die Anforderungen für unseren Roboter. Auch das Modul von EMBEDIT ist auf einer 80 x 100 mm großen Platine aufgebaut.

Von der Firma POLLIN gibt es ein EVALUATIONS BAORD AVR, fertig aufgebaut oder als Bausatz, das mit verschiedenen Prozessoren bestückt werden kann, u.a. mit dem ATMEGA32 (16 MHz), der wesentlich mehr Flash-Speicher, EEPROM und SRAM besitzt, aber sonst weitgehend funktionsgleich zum ursprünglich verwendeten AT90S8535 ist. Er wird mit der Programmiersprache AVISE4.3 (AV433216) geladen. Ein Glossar der verwendeten Worte finden Sie hier oder bei CINETIX, eine Beschreibung, wie der fertige Baustein programmiert und evtl. ergänzt wird zum Messinterface finden Sie hier.

Für die ersten zwei Generationen verwendeten wir Lochstreifenplatinen (an einem langen Nachmittag von den Schülern zusammengelötet), später geätzte Platinen.

Wir haben uns entschieden, AVISE-FORTH einzusetzen, weil es genügend klein ist, um in den Mikroprozessor zu passen (quasi Betriebssystem und Programmierumgebung zugleich), weil es eine Hochsprache ist, die zugleich eine Compiler- wie Interpreter-Sprache ist, und weil es besonders kompakten Programm-Code ermöglicht. Wenn man sich einmal an die Denkweise gewöhnt hat,  ist es relativ leicht zu lernen. Alle Programmierhinweise zur Robotik beziehen sich auf AVISE2.4. Neuere Versionen von AVISE-FORTH (also AVISE4.3) erfordern z.T. unterschiedliche Programmierung.

Die Grundeinheit besteht aus

Wir haben uns entschieden, AVISE-FORTH von W. Schemmert (Fa. CINETIX, Frankfurt) als Programmiersprache verwenden. Zur Auswahl stand auch BASIC (BASCOM-AVR), was in einer beschränkten Demo-Version im Internet kostenlos erhältlich ist; die Vollversion kostet ca. 60 Euro. Im Internet sind auch C-Compiler und PASCAL-Compiler erhältlich. Mit der AVR-CD-ROM wird auch ein Assembler mitgeliefert. Einer der Schüler bestand darauf, in Assembler zu programmieren. FORTH-Programme sind sehr kompakt und - wenn man sich einmal an die Sprache gewöhnt hat - sehr einfach zu programmieren. Ein Vorteil ist auch, dass FORTH-Worte bei der Eingabe sofort compiliert werden und dann im Interpreter-Modus aufgerufen werden können.

Wenn wir AVISE-FORTH verwenden, ist es prinzipiell immer noch möglich, alternativ BASCOM-AVR zu verwenden und dann compilierte Programme in den Prozessor zu laden. Unter der Adresse http://www.ckuehnel.ch oder beim Hersteller MCS ( BASCOM-Compiler (AVR) von MCS ) findet man eine kostenlose DEMO-Version des BASCOM-AVR Compilers (ein BASIC-Compiler, der schnellen Maschinencode erzeugt, der auch unter den 32-bit-Versionen von Windows einschließlich WINDOWS NT läuft. Preis der Vollversion ca. 60 Euro). Zur Übertragung von FORTH oder compilierter BASCOM-AVR-Programme braucht man aber einen Programmierstecker, der z.B. am Parallelport oder USB-Port des PCs betrieben wird. (z.B. von EMBEDIT erhältlich, ca. 12 Euro)

Das Lademodul  von BASCOM-AVR ist zum erstmaligen und auch zum erneuten Laden von AVISE-FORTH in den Prozessor zu verwenden. Wie das geschieht, wird hier beschrieben.

Unser Prozessor AVR 8535 hat 3 Timer, 3 PWM-Ausgänge zur Ansteuerung von Servomotoren, 8 Kanäle 10 bit AD-Wandler und mehr als genug Ein-/Ausgabe-Ports. Mindestens so ausgestattet ist auch der neuere ATMEGA32.


AVISE-FORTH ist bei der Firma CINETIX als HEX-File kostenlos erhältlich:


Es wird mit Hilfe eines "Programmers"  (einer relativ einfachen Schaltung für den Druckerport) und eines entsprechenden Ladeprogramms  (Lademodul von BASCOM-AVR oder ISP.exe von ATMEL oder PONYPROG.exe aus dem Internet).

Als Programmer verwende ich den ISP-Programmer von KANDA bzw. ein Modul von EMBEDIT (ca. 12 Euro). Beide Programmer werden an die parallele Schnittstelle (Druckerport) des PCs angeschlossen.

Diese Arbeit wird normalerweise einmalig vom Kursleiter unternommen. Das einmal geladene AVISE-FORTH bleibt dann im Prozessor geladen. Die Teilnehmer der Roboter-Gruppe brauchen dann keinen Programmer mehr.


Zur Kommunikation zwischen PC und Prozessor über die serielle Schnittstelle wird irgendein Terminalprogramm verwendet, z.B.

Einstellungen stets:

COM1/2     19.2 kBaud      8bit        keine Parität   1 Stoppbit  

Meistens gibt es noch eine Einstellmöglichkeit, dass es Zeilen umbricht (am Ende einer Zeile eine neue Zeile anfängt). Anzahl der Zeichen pro Zeile sollte möglichst groß sein (z.B. 132).

Über solche Terminalprogramme können neue FORTH-Worte an den Prozessor geschickt werden (Erweiterung des FORTH-Vokabulars), sofort ausführbare Befehle an den Prozessor geschickt und gestartet werden, oder Daten von ihm empfangen werden, z.B. als Messergebnisse.

Mit dem Programm ATOOL gibt es eine einfache Möglichkeit, ganze Programmfiles (zeilenweise á 80 Zeichen) an den Prozessor zu schicken. Man kann dann Wort für Wort austesten und braucht nicht immer alles neu per Hand eingeben. Das Programm wird dann mit einem Texteditor geschrieben (z.B. Notepad) und als Textdatei abgelegt (*.TXT). In ATOOL wird die Quelle (source, also der Name der Textdatei) benannt. Wenn dann die serielle Schnittstelle aktiviert ist ("connect") wird das Programm mit "Upload" an den Prozessor geschickt.

Achten Sie darauf, dass die Zeilenlänge auf 80 beschränkt ist, dass es für ein Wort eine beschränkte Zahl von Bytes zur Verfügung steht (64 bei Verwendung des EEPROMs 24C64), dass auch 8 kByte externer EEPROM-Speicher irgendwann erschöpft sind. Möglicherweise ist es zweckmäßig, frühere Wortdefinitionen erst zu löschen, bevor eine Neucompilation versucht wird.

Hinweis: Heutzutage sollte lieber der ATMEGA32 verwendet werden. Das externe EEPROM wird dann nicht mehr für neue Wortdefinitionen gebraucht, vielleicht noch als Speicher, wenn der Prozessor als Datenlogger für große Datenmengen verwendet werden soll. Dann können auch EEPROMs mit noch größerem Speicher eingesetzt werden. Der USB-Serial-Wandler benutzt COM3, COM4 oder COM5. Die Einstellungen sind also z.B.

COM4     38,4 kBaud      8bit        keine Parität   1 Stoppbit  


Der Vorgang ist folgender:

1. Aufbau des Prozessors (Platinenlayout groß)

2. Test der Prozessor-Platine

3. Laden von FORTH in die Prozessor (über den ISP-Sockel und den einzigen Programmer; auch das Programm BASCOM (in einer Demoversion im Internet kostenlos erhältlich; enthält ein Lademodul)

4. Entwicklung der gewünschten FORTH-Worte auf dem Papier

5. Verbindung des Prozessors mit einem PC über die serielle Schnittstelle, Einstellung der entsprechenden PC-Schnittstelle nach den oben angegebenen Parametern, Stromversorgung des Prozessors an

6. Wenn alles in Ordnung ist, meldet sich der Prozessor mit AVISE OK. Jeder Druck der Return-Taste am PC führt zu erneuten OK-Meldungen. Damit ist die Kommunikation mit dem Prozessor in Gang gekommen.

7. Das neue FORTH-Wort wird auf dem Bildschirm definiert (eingeleitet durch     :    , abgeschlossen durch    ;    ). Wenn nach dem Strichpunkt die RETURN-Taste gedrückt wird, wird das Wort an den Prozessor geschickt, dort auf Syntax-Fehler untersucht und compiliert. Gelingt das, meldet sich der Prozessor wieder mit OK. Das neue FORTH-Wort ist jetzt im Prozessor gespeichert und kann künftig genutzt werden. Beispiel:

: IDIOT % 76 emit ;

wird mit allen Leerzeichen eingegeben. Nach der Return-Taste steht OK auf dem Bildschirm. Das Wort wird mit seinem Namen aufgerufen, dann Return-Taste. Das Wort IDIOT wird jetzt ausgeführt. Dies besteht darin, dass es ein Zeichen mit dem Code 76 zum Terminal schickt, und anschließend OK.

8. Wird das Wort nicht mehr benötigt, oder will man es durch ein besseres gleichen Namens ersetzen, muss es gelöscht werden (sonst läuft der Speicher schnell voll). Das geschieht mit

FORGET IDIOT

9. Hätte man nicht das Speicherproblem, könnte es einfach neu definiert werden, sogar unter Benutzung der alten Definition.

: IDIOT IDIOT ;

Definiert (sinnloserweise) ein neues Wort mit dem Namen IDIOT, das aber nichts tut als das alte Wort IDIOT aufzurufen. In diesem Fall merkt der Benutzer nichts von der Umdefinition: auf dem Bildschirm steht das Zeichen mit dem Code 76.

10. Ein Wort nach dem anderen wird so getestet. Aus getesteten Worten werden neue Worte gemacht, bis schließlich das umfassendste Wort gebildet wird, das den Roboter auf seinen Weg schickt. Mit ATOOL können Worte gebildet , an den Prozessor geschickt und getestet werden, die viele Zeilen umfassen (bei Verwendung des externen EEPROMS 24C64 aber mit nicht mehr als 64 Worten). Man wird sich überlegen müssen, ob man vor jeder Neucompilation frühere Worte mit FORGET löscht.

11. Der Roboter wird in den Autostart-Modus versetzt. Das heißt, nach Verbindung mit der Stromzufuhr, oder nach Drücken des RESET-Tasters auf dem Prozessor, wird das umfassendste Wort gestart. Wenn dieses Wort z.B. GO heißt, geschieht das durch AUTOEXE .

Wenn das Wort GO so gestartet werden soll, muss man die Code-Nummer von GO mit WORDS suchen. Die sei z.B. 25.

GO wird dann mit

25 AUTOEXE

in den Selbststart-Modus versetzt.

Mit

FF AUTOEXE

wird diese Funktion wieder aufgehoben ohne GO zu löschen. Während des Laufs kann das Wort GO mit ALT GR ~ (Tilde) unterbrochen werden.

12. Irgendwann unterwegs müsste man sich klar werden, was der Roboter tun soll, welche Sensoren und Aktoren er bedienen soll. Die müssen natürlich erst aufgebaut werden.