Selbstbau eines RCL

Transcription

Selbstbau eines RCL
Remotely Controlled Laboratory
(RCL)
Tutorial „Selbstbau eines RCL”
- Versuche per Internet fernsteuern Martin Vetter, Kaiserslautern
Markus Ludwig, München
Version vom 14.9.2006
3
Ziel des Tutorials
Über das Internet ferngesteuerte Experimente nennen wir „Remotely Controlled Laboratory“ – kurz
RCL. Unter „Experiment“ verstehen wir einerseits typische Demonstrationsexperimente aus dem naturwissenschaftlich-technischen Unterricht. Andererseits können die unterschiedlichsten Komponenten
und Geräte angesprochen werden, so dass der Leser eine Anleitung erhält, seine eigenen Ideen umzusetzen.
Dieses Tutorial zeigt schrittweise den technischen Aufbau und die Programmierung einer Steuerung
über das Internet, bestehend aus Webserver und Interface anhand eines sehr einfachen „elementaren“ RCLs.
Zu Beginn des Tutorials zeigen wir einige Kriterien für die Realisierung eines über Internet bedienbaren Versuchaufbaus. Anschließend wird unsere Konzeption für die Umsetzung entsprechend den
aufgestellten Kriterien dargestellt. Die folgenden Kapitel geben eine schrittweise Anleitung zum
Selbstbau eines „elementaren“ RCLs: Ansteuerung einer Lichtquelle und Abfragen eines Tasters per
Webseite. Es werden alle Komponenten (Interface, Software) sowie deren Aufbau, Installation und
Programmierung vorgestellt.
Nach Abschluss dieses Tutorials sollte der Leser, jetzt mit den eingesetzten Technologien vertraut,
direkt mit der Realisierung seines eigenen Remotely Controlled Labs beginnen können.
Die vorgestellte Lösung basiert auf dem ATMEL 8bit RISC Microcontroller ATmega16, der das Experiment (z.B. Motoren, Spannungsquellen, Messgeräte, Sensoren...) steuert. Er kommuniziert mit Hilfe
eines Null-Modem-Kabels über die serielle Schnittstelle (RS232) mit einem Webserver (Apache+PHP). Dies ermöglicht die Steuerung des Experiments über eine Webseite. Eine Videoübertragung in Echtzeit erfolgt mittels einer Webcam.
4
5
Leseanleitung für dieses Tutorial:
Den Schaltplan sollten Sie bei jedem Schritt während des Aufbaus (Löten) des Interfaces vorliegen
haben. Im Tutorial sind zwei Alternativen zum Bau des Interfaces dargestellt: auf geätzten Platinen
oder auf Lochrasterplatinen.
Schaltplan
S.11
„Einkaufsliste“
für die benötigten Bauteile
S.12
Platinen herstellen
S.14
Interface auf
Lochrasterplatine
S.23
Interface löten
S.18
Programmierung des
Microcontrollers
S.27
Installation des Webservers
S.33
Aufbau eines „elementaren“ RCLs
S.35
Erweiterungsmodule
(Relais, Motor, Schalter, Lampe)
S.46
6
7
Prinzip des RCLs
Die folgende Abbildung gibt den schematischen Aufbau eines RCLs wieder. Der Nutzer steuert das
Experiment über eine Internetverbindung mit seinem Browser und kann es dabei in Echtzeit mittels
einer Webcam beobachten. Der Webserver vermittelt die Eingaben des Nutzers an ein Microcontroller-Interface, welches das Experiment steuert und gegebenenfalls Messgrößen liefert.
Browser
Internet
WebCam
Experiment
Webserver
Interface
Der Nutzer benötigt zum Zugriff einen javafähigen Browser. Weitere Plugins oder zusätzliche Treiber
und Programme sind nicht erforderlich. Die Internetverbindung muss das http-Protokoll, sowie Zugriffe
über den Port 8080 (proxy:http) zur Übertragung der Webcam-Bilder ermöglichen.
Als Webserver wird der Apache-Webserver in Kombination mit PHP eingesetzt. Diese Produkte stehen für unterschiedliche Betriebssysteme als Opensource-Programme zur Verfügung. Die Kommunikation zwischen Webserver und Interface erfolgt per Null-Modem-Kabel über die serielle RS232Schnittstelle (z.B. COM1), welche von PHP wie eine Datei mit Schreib- und Lesebefehlen angesprochen werden kann. Diese Schnittstelle wird bei einigen neuen Rechnern und insbesondere bei Notebooks nicht mehr angeboten. Hier können USB-RS232 Adapter verwendet werden.
Das Video der USB-Webcam wird mit Hilfe der Software webcamXP übertragen. Alternativ kann auch
die Freeware Webcam2000 bei 1-Kamera-Lösungen eingesetzt werden. Werden mehrere Kameras
benötigt, bieten sich IP-Kameras an. Weitere Details zur Videoübertragung werden in diesem Tutorial
nicht dargestellt.
8
Kriterien für die Verwendung bestimmter Technologien und
Methoden bei der Entwicklung eines RCL
Folgende Kriterien dienen uns als Maßstab bei der Auswahl der einzusetzenden Technologien und
Lösungswege für den Aufbau eines Remotely Controlled Labs:
1. Anpassbarkeit an die Zielgruppe, hier naturwissenschaftlich und technisch interessierte Schüler der Sekundarstufe II, Lehrer und Laien
2. Flexibilität des zur realisierenden Versuchsaufbaus, um z.B. unterschiedlichste Art und Anzahl
von Mess- und Stellgrößen zu unterstützen
3. hohe Benutzerfreundlichkeit:
auf alle gängigen javafähigen Browsern lauffähig,
keine Plugins, Treiber oder zusätzliche Software notwendig
keine Probleme durch Firewalls und eingeschränkte Benutzerrechte
4. Schutz des Experiments vor Fehlbedienung und Missbrauch
5. Niedrige Kosten (Zielgruppe Schüler und Schule!)
6. Verfügbarkeit der Materialien für Privatkunden
7. Eignung für unterschiedliche Betriebssysteme
8. Stabilität der Gesamtlösung (keine Abstürze, Dauerbetrieb), geringer Wartungsaufwand
9. Geringer Programmieraufwand für Webseiten und Hardware
10. Kurze Einarbeitungszeiten beim Selbstbau eines RCLs
9
Entsprechend den genannten Kriterien geben folgende Punkte einen Überblick, wie wir die Kriterien
bei der Umsetzung einer RCL-Lösung realisiert haben. Die einzelnen Technologien werden in den
nächsten Kapiteln detaillierter in Form einer schrittweisen Anleitung zum Nachbau vorgestellt.
1. Unsere Praxiserfahrung während der Entwicklung dieser RCL-Technologie:
- Aufbau, Webseitengestaltung und Präsentation von vier RCLs im Rahmen eines Schülercamps mit 15 Schülern
- selbstständiger Eigenbau eines RCLs durch 16jährigen Schüler mit Hilfe unserer Dokumentation
2. Entwicklung eines frei programmierbaren Microcontroller-Interfaces, welches beliebig erweiterbar ist.
3. Steuerung über html-Seiten, Java nur für Videobild, benötigte Ports http(80), 8080 und 8081,
keine Plugins für Browser notwendig
4. Das Interface stellt dem Webserver nutzerorientierte Funktionen zur Steuerung des Experiments bereit (z.B. „Zähler start“ und „Zähler stopp“). Es überwacht die Zulässigkeit der Parameter (z.B. bei einstellbaren Spannungsquellen). Somit ist kein direkter Zugriff auf die Geräte
des Experiments über das Internet möglich und auch im Falle eines Hackereinbruchs besteht
keine Gefahr für die Hardware.
5. Die zum Betrieb und zur Programmierung eines RCLs notwendigen Programme sind frei erhältlich. Es ist ein PC mit Internetanschluss und eine Webcam erforderlich, sowie das Microcontroller-Interface. Die Bauteilkosten des Interfaces betragen ca. 50-100€, weiterhin wird ein
Programmieradapter (ca. 40€) benötigt. Zusätzlich müssen natürlich noch die für den gewünschten Versuchsaufbau spezifischen Kosten berücksichtigt werden.
6. Alle Komponenten, insbesondere die elektronischen Bauteile, sind für Privatpersonen bei lokalen Händlern (Elektronikladen, Baumarkt) oder per Versand erhältlich. Die Software ist im
Internet frei per Download verfügbar.
7. Es wird der Apache-Webserver in Verbindung mit PHP eingesetzt. Diese sind für unterschiedliche Betriebssysteme frei erhältlich. Zur Videoübertragung können übliche Webcams oder IPKameras eingesetzt werden.
8. Auf dem Server laufen Apache, PHP und Videoserver. Es ist kein Interface-Treiber oder zusätzliche Software notwendig und somit keine weiteren „Störgrößen“ für das Betriebssystem.
Das Experiment wird durch das Microcontroller-Interface gesteuert, so dass PC-Abstürze nicht
zu undefinierten Zuständen im Versuchsaufbau führen. Weiterhin können über eine StandbyFunktion bestimmte Komponenten des Versuchsaufbaus bei Nichtgebrauch ausgeschaltet
werden.
9. Zur Erstellung der Webseite sind grundlegende Kenntnisse in PHP und html notwendig. Als
Web-Programmiersprache wird PHP gewählt, da es sich hierbei um eine Interpretersprache
handelt, so dass der Quellcode in den html-Seiten integriert ist. Daraus resultiert eine erheblich vereinfachte Wartbarkeit des Systems, da insbesondere bei hoher Fluktuationsrate der
Mitarbeiter (z.B. Schulprojekt) der Quellcode stets im lauffähigen System vorliegt. Zur Programmierung des Microcontroller-Interfaces stehen neben Assembler auch Basic-, Pascalund C-Compiler bereit.
10. Mit Hilfe des vorliegenden Tutorials, sowie elementaren Programmierkenntnissen ist der Aufbau eines eigenen ferngesteuerten Experiments innerhalb von wenigen Stunden möglich. Das
Tutorial soll alle notwendigen Technologien vorstellen und eine funktionsfähige „Minimallösung“ bereitstellen. Auf dieser Grundlage kann der interessierte Leser sich dann schrittweise
in die unterschiedlichen Richtungen, beispielsweise der Elektronik, Programmierung oder
Webseitengestaltung eigenständig fortbilden, um so den von ihm angestrebten Versuchsaufbau als RCL zu entwickeln. Sowohl zur gewählten Webprogrammiersprache PHP als auch zur
verwendeten Elektronik des Interfaces (Atmel AVR 8bit RISC-Prozessor ATmega16) stehen
im Internet äußerst zahlreiche, frei zugängliche und gut dokumentierte Lösungen zu den unterschiedlichsten Anwendungen bereit, da diese Technologien auch starke Verbreitung im
Hobby-Bereich besitzen.
10
Microcontroller-Interface
Zur Kommunikation zwischen Webserver (PC) und Experiment (Versuchsaufbau) wird ein Interface
benötigt. Das im Rahmen dieses Tutorials entwickelte Interface basiert auf einem 8bit Microcontroller
der Firma Atmel (Typ: ATmega16, Datenblatt: www.atmel.com). Unter einem Microcontroller kann
man sich einen kleinen Computer in einem einzigen Chip integriert vorstellen, es sind Prozessor, Arbeitsspeicher, Flashspeicher (vgl. Festplatte), Timer und Aus-/Eingabeschaltungen zusammengefasst.
Der Aufbau des Interfaces ist modular gestaltet und kann flexibel an die Bedürfnisse des jeweiligen
Versuchsaufbaus angepasst werden. Die so genannte „Grundversion“ besteht aus Microcontoller,
Taktgeber, Spannungsversorgung und serieller Schnittstelle zur Kommunikation mit dem PC. Weiterhin ist noch eine ISP-Programmierschnittstelle zur Programmierung des Microcontrollers integriert.
Wie in der folgenden Darstellung gezeigt, gibt es also zwei „Verbindungen“ zwischen PC und Interface: Über die serielle RS232-Schnittstelle zwischen Webserver und Interface erfolgt die Steuerung
des Versuchsaufbaus seitens des Nutzers. Über die ISP-Schnittstelle wird der Microcontroller selbst
programmiert, also die so genannte Firmware des Interfaces in den Microcontroller geschrieben. Diese Programmierung ist nur einmal notwendig und wird mit einem speziellen Programmieradapter vorgenommen (Details hierzu werden bei der Programmierung des Microcontrollers erläutert).
PC
Programmiersprache
ISP
Programmierschnittstelle
WebServer - PHP
RS232
Serielle
Schnittstelle
Taktgenerator
Mikrocontroller
I/O-Elektronik
Experiment
z.B.
Relais,
Treiber,
Verstärker
Spannungsversorgung
Interface
Der Versuchsaufbau selbst kann teilweise direkt mit dem Microcontroller verbunden werden. Meist ist
jedoch noch eine spezielle Elektronik je nach Versuchsaufbau notwendig. So müssen z.B. zum Schalten größerer Leistungen Relais oder andere Treiber-Bausteine verwendet werden. Diese können direkt auf der Interface-Grundversion aufgebaut werden. Einige typische Erweiterungen, wie z.B. für
Motoren, Lampen, Taster usw. werden später in diesem Tutorial gezeigt.
Einige Eckdaten zu den Spezifikationen des eingesetzten Prozessors:
•
•
•
•
•
16MHz RISC-Prozessor mit 131 Instruktionen – meist 1-2 Taktzyklen / Instruktion
16K Bytes In-System Self-Programmable Flash, 512 Bytes EEPROM, 1K Byte internes SRAM
32 programmierbare Eingänge/Ausgänge
Zwei 8-bit Timer/Zähler, ein 16-bit Timer/Zähler
Vier Pulsweitenmodulationsausgänge
•
acht 10-bit A/D-Wandler
•
Master/Slave SPI Interface
•
•
•
programmierbare USART (serielle Schnittstelle)
I2C Interface
externe und interne Interrupts
Details und technische Spezifikationen zur Beschaltung und Programmierung des Microcontrollers
finden Sie im Datenblatt des ATmega16 (www.atmel.com). Dieses enthält alle Herstellerinformationen
zu diesem Chip und ist äußerst hilfreich bei der Erweiterung der Interface-Grundversion.
11
Interface - Schaltplan
Die Schaltung ist für die Verwendung eines 12V Gleichspannung Universal-Steckernetzteils konzipiert.
Der Spannungsregler (L7805) liefert die für den Microcontroller notwendige Spannung von 5V. Die
12V Spannung (Ub) kann im Interface direkt zur Ansteuerung von Relais oder auch zur Versorgung
kleiner Motoren verwendet werden. Bei Bedarf können auch höhere Eingangsspannungen (z.B. 24V
für Schrittmotoren) angelegt werden. Beachten Sie hierbei jedoch das Datenblatt des L7805 (Kühlung,
max. Spannung).
Der Microcontroller kann über den externen Quarz (hier 11,0592MHz, max. 16MHz) mit unterschiedlichen Geschwindigkeiten getaktet werden. Der IC Max232 ist ein Pegelwandler, der die +5V der seriellen Schnittstelle des Microcontrollers an die ±15V der seriellen Schnittstelle des PCs anpasst.
+5V
100kOhm
+5V
ISP-Stecker
2
IC 40-polig
1
MOSI
7
SCK
MISO
5
RESET 9
4,6,8,10
+5V
10µF
+
+
10µF
+
10µF
+
10µF
+
2
1
5
11,0592 Mhz
30
ATmega 16
13
+5V
10
16
100nF
IC 16-polig
Spule
100µH
100nF
TX 15
10
RX 14
9
MAX 232
optional für A/D-Wandler
11, 31
6
8 7 14
9p Sub-D Stecker
RS232
8
33pF
3
4
7
12
Quarz
33pF
+5V
10µF
6
9
11, 13, 15
2
7
5
+Ub
Hohlstecker
Spannungsregler
SB140
IN
470µF
+
100nF
L7805
COM
+5V
OUT
100nF
100µF
+
Möchten Sie die internen A/D-Wandler des ATmega16 nutzen, sollten Sie zusätzlich die Spule 100µH
mit den beiden 100nF Kondensatoren bestücken.
12
„Einkaufsliste“ für die benötigten Bauteile
Folgende Liste enthält alle für die Grundversion erforderlichen Bauteile. Weiterhin finden Sie die Bestellnummern der Firma reichelt elektronik (www.reichelt.de). Dies ist ein Elektronik-Versender, der
Privatpersonen beliefert. Auch die Firma Conrad Elektronik (www.conrad.de) liefert an Privatpersonen
und bietet zusätzlich einen 24h-Service.
Anzahl
1
1
1
1
1
2
3
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
Bauteil
Bauteile Grundversion
9-poliger Sub-D Stecker, gewinkelt, Leiterplattenmontage
Best.-Nr. Reichelt
Stand Katalog 1/2006
D-SUB ST 09EU
IC Sockel 40-polig
GS 40P
2x10-polige Stiftleiste 2-reihig, gerade, RM 2,54
SL 2X10G 2,54
IC Sockel 16-polig
Hohlstecker-Buchse 2,1mm, gewinkelt, Lötfahnen
GS 16P
HEBW21
Kondensator Kerko 33pF
Kerko 33p
Elektrolyt Kondensator 10µF, 35V
RAD 10/35
Vielschicht Keramik Kondensator 100nF
Elektrolyt Kondensator 100µF, 16V
Elektrolyt Kondensator 470µF, 25V
Z5U-2,5 100n
RAD 100/16
RAD 470/25
Quarz 11,0592 MHz
11,0592-HC49U-S
ATMega16 40-polig DIL-Gehäuse
ATMega16-16 DIP
Diode SB140
SB 140
MAX232 16-polig DIL-Gehäuse
MAX232CPE
Spannungsregler 7805, 5V 1A
µA 7805
Widerstand 1/4Watt 100kOhm
Kühlkörper für TO220-Gehäuse
„elementares“ RCL
Metall 100k
V FI356
Taster
Taster 3301
Widerstand 1,8 kOhm
Metall 1,8K
LED rot, 2mA
Gehäuse, Montage, Netzteil
Steckernetzteil 12V, 1000mA
LED 5mm 2MA rt
SNT1000
Nullmodemkabel (9pBuchse/9pBuchse)
AK143
Schraube M3x10 für Kühlkörper
SZK M3x10mm
Gehäuse + Befestigungsschrauben
Mutter M3
Werkstattbedarf
Elektronik-Lot + Lötkolben mit feiner Spitze
SK M3
13
Wärmeleitpaste, Sekundenkleber
1
1
1
1
2
1
1
1
6
2
6
2
ISP-Programmiergerät von Atmel
zum Anschluss eines LCD-Displays
Widerstand 12kOhm
Widerstand 1kOhm
zur Verwendung des eingebauten Analog/Digitalwandlers
Spule 100µH
Vielschicht Keramik Kondensator 100nF
zum Anschluss von Peripherie
AT AVR ISP
Metall 12K
Metall 1K
SMCC100µ
Z5U-2,5 100n
10-poliges Flachbandkabel 3m
AWG 28-10G 3m
40-polige Stiftleiste 1-reihig, gerade, RM2,54
SL 1x40G 2,54
14-poliges Flachbandkabel 3m
10-poliger Wannenstecker, RM 2,54, stehend
14-poliger Wannenstecker, RM 2,54, stehend
10-poliger Pfostensteckverbinder
14-poliger Pfostensteckverbinder
AWG 28-14G 3m
WSL 10G
WSL 14G
PFL10
PFL14
14
Platinen herstellen
In diesem Kapitel erfahren Sie, wie eigene Platinen hergestellt werden können. Zuerst werden die
benötigten „Zutaten“ vorgestellt, anschließend wird beschrieben, wie Sie Ihr Layout auf die Platine
übertragen (belichten) und diese dann ätzen. Dabei wird alles überflüssige Kupfer entfernt, so dass
nur noch die gewünschten Leiterbahnen übrig bleiben.
Benötigte „Zutaten“:
•
•
•
•
•
•
Belichtungslampe (Nitraphot Lampe): Diese Lampe wird speziell für Belichtungszwecke hergestellt und strahlt einen besonders hohen UV- Anteil ab. (z.B. Conrad: 529141)
Zwei Glasplatten zur besseren Auflage der Folie beim Belichten mit den Mindestabmessungen von 160mm*100mm. (z.B. aus alten Bilderrahmen)
Tintendrucker oder Laserdrucker mit passender Transparentfolie
Fotobeschichtetes Basismaterial (=Platinen, deren Kupferschicht mit lichtempfindlichem
und säurefestem Lack abgedeckt ist) aus Epoxidharz mit den Maßen 160mm*100mm mit einer Dicke von 1,5mm. (z.B. Conrad: 529249)
Entwickler (Reichelt: Entwickler 10g)
Ätzmittel: hier stehen drei verschiedene Chemikalien zur Auswahl:
o
o
o
•
•
•
•
•
•
•
•
Eisen(III)Chlorid hat den Vorteil, dass der Ätzvorgang recht schnell von statten geht: Je
nach Temperatur und Badbewegung sollte die Platine nach 5 Minuten fertig sein. Hier
muss das Bad nicht unbedingt erwärmt werden. Zimmertemperatur reicht normalerweise
aus. Leider sind die entstehenden Dämpfe schleimhautreizend und so aggressiv, dass
sich auf Metallgegenständen Rost bilden kann. Sollte etwas Flüssigkeit auf Textilien tropfen, bleiben gelbe Flecken oder sogar Löcher zurück. (z.B. Conrad: 528722)
Ammoniumpersulfat wird nicht trüb, hat aber den Nachteil, dass es mit der Zeit kristallisiert.
Wir haben Natriumpersulfat verwendet, denn auch nach mehrfacher Nutzung bildet sich
keine Trübung, wodurch der Ätzstatus leichter zu erkennen ist. Es kristallisiert nicht aus.
Der Ätzvorgang dauert ca. 40 Minuten. (z.B. Conrad: 529257 )
Zwei Glasflaschen (1l) zur Lagerung der Ätz- und Entwicklerlösung.
Säurebeständige Plastikwanne (z.B. Conrad: 530247)
Trichter,
Kunststoffpinzette zum Entnehmen der Platine aus dem Bad
Holzspatel
Aceton
Thermometer bis 100°C
(Stand-)Bohrmaschine (Dremel, Proxxon o.ä.) mit 0,8 mm, 1,5 mm und 3mm Bohrer
Belichtungsvorlage auf Transparentfolie drucken
Das Bild zeigt die gewünschten Leiterbahnen des Interfaces
(Platinen-Layout).
Bevor Sie das Layout drucken, wählen Sie bitte unter den Einstellungen des Druckers die höchste Qualität und das Papierprofil „high glossy film“, damit die Farbschicht ausreichend dick
gedruckt wird. Die Dichte des Farbauftrags entscheidet maßgeblich über die Qualität der Platine: Sollte die Farbschicht
leicht lichtdurchlässig sein, werden die Konturen der Bahnen
nicht sauber herausgeätzt, oder sie verschwinden komplett.
Legen Sie die Folie exakt an den Anschlag des Papiereinzu-
15
ges und achten Sie darauf, dass die Folie kein seitliches Spiel hat. Die Folie darf nicht berührt werden,
da sonst die Trägerschicht abgelöst wird und die Tinte nicht mehr haften kann.
Drucken Sie das Layout aus. Die Folie sollte einige Zeit trocknen, damit die Tinte nicht verwischt.
Halten Sie die bedruckte Folie gegen eine Lichtquelle und prüfen Sie, ob Licht durch die schwarzen
Bahnen hindurch scheint. Falls dies der Fall ist, sollte unbedingt eine zweite Tintenschicht aufgedruckt
werden. Dazu muss die Folie an exakt der gleichen Position im Einzug des Druckers liegen, damit der
zweite Druck genau über dem ersten liegt. Drucken Sie Notfalls auch ein drittes mal auf die Folie,
damit das Ergebnis einwandfrei wird. Schneiden Sie die Folie so zurecht, dass nur der gewünschte
Ausschnitt übrig bleibt.
Belichten des Basismaterials
Befestigen Sie die Belichtungslampe ca. 20 cm über
einer hitzebeständigen Arbeitsoberfläche. Legen Sie
eine der beiden Glasplatten unter die Lampe. Entfernen Sie die Schutzfolie des Basismaterials, legen Sie
dieses auf die Glasplatte und positionieren Sie die
Belichtungsfolie darauf (siehe Skizze). Dies sollte
möglichst in einem leicht abgedunkelten Raum geschehen, um eine ungewollte Belichtung zu verhindern. Legen Sie die zweite Glasplatte auf die Folie.
Stellen Sie sicher, dass die Folie dabei nicht verrutscht
und nicht versehentlich spiegelverkehrt aufgelegt wurde. Die Schrift muss lesbar sein.
Schalten Sie die Lampe für sieben Minuten ein und
legen Sie anschließend die belichtete Platine mit der
Kupferschicht nach unten an einen abgedunkelten Ort.
Achtung! Die Lampe erwärmt sich sehr stark! Sie darf auf keinen Fall Erschütterungen jeglicher Art
ausgesetzt werden. Lassen Sie die Lampe nach dem Betrieb mindestens fünf Minuten auskühlen,
bevor sie erneut in Betrieb genommen, bzw. abgebaut wird, da ansonsten der Glühdraht Schaden
nimmt.
ACHTUNG: Sicherheitshinweise beachten!!
In den folgenden Arbeitsschritten kommen ätzende und toxische Stoffe zum Einsatz! Verwenden Sie
unbedingt eine Schutzbrille und Schutzhandschuhe! Lesen und befolgen Sie die Sicherheitshinweise
auf den jeweiligen Chemikalien. Sollten Textilien mit den Stoffen in Berührung kommen, waschen Sie
diese umgehend aus, da sonst Bleichflecken oder sogar Löcher entstehen können!
Entwickeln der Platine
Zunächst müssen Sie die Entwicklerlösung herstellen. Messen Sie dazu die auf
der Verpackung angegebene Menge
Wasser ab, füllen es in eine der beiden
Flaschen und lösen darin das Granulat
(10gr NaOH für einen Liter Wasser) auf.
Zum Entwickeln sollte die Lösung eine
Temperatur von etwa 30°C haben. Am
besten lässt sich die Flüssigkeit in einem
Wasserbad erwärmen.
Füllen Sie die Plastikwanne halbvoll mit
der Entwicklerlösung.
In die Lösung legen Sie die zuvor belichtete Platine. Das Bad bzw. die Platine muss
kontinuierlich bewegt werden.
16
Nach spätestens 2 Minuten muss das Abbild der Leiterbahnen vollständig erkennbar sein. Ist dieser
Zustand erreicht, nehmen Sie die Platine sofort aus dem Bad, da bei zu langer Entwicklung die unbelichtete Fotoschicht angegriffen wird. Anschließend ist ein gründliches Abspülen der Platine unter fließendem Leitungswasser notwendig. Gießen Sie die Lösung zurück in die Flasche und waschen Sie
die Wanne aus. Die Flasche muss fest zugeschraubt werden, da andernfalls die Wirkung des Entwicklers verloren geht.
Tipp:
Falls einige Bahnen durch zu starkes Entwickeln blass geworden, oder verschwunden sind, lassen sie sich mit einem feinen Lackstift korrigieren (z.B.
Edding 780).
Ätzen der Platine
Stellen Sie die Säurelösung her. Wir empfehlen Natriumpersulfat.
Natriumpersulfat löst sich endotherm, d.h. das Wasser kühlt sich beim Lösungsvorgang ab. Allerdings
darf die Wassertemperatur 60°C nicht übersteigen, da sich der Stoff sonst zersetzt und seine Ätzwirkung verliert. 250gr pro Liter Wasser sind zu empfehlen. Erwärmen Sie das Wasser auf 40°C und
lösen sie das Natriumpersulfat darin auf. Eventuell muss die Lösung danach nochmals erwärmt werden, damit eine optimale Ätztemperatur von 40-45°C erreicht wird.
Eisen(III)Chlorid: Pro Liter Wasser werden 250gr Granulat benötigt. Es löst sich auch bei Zimmertemperatur gut auf. Um die größtmögliche Ätzwirkung zu erzielen, sollte das Wasser eine Temperatur von
40°C haben, bei Zimmertemperatur dauert der Ätzvorgang etwas länger.
Ammoniumsulfat löst sich ebenfalls endotherm. Pro Liter Wasser empfehlen wir 230gr Ammoniumsulfat. Erwärmen Sie das Wasser auf ca. 70 – 80°C und lösen sie das Pulver darin auf. Danach hat die
Flüssigkeit eine Temperatur von 50°C – ideal zum ätzen.
Achtung! Da die Temperatur der Flüssigkeit beim Einfüllen in die Flasche oder durch das Aufwärmen
in einem Wasserbad sehr hoch ist, kommt es nach dem Abkühlen zu einem Druckabfall in der Flasche, was zur Implosion führen kann. Bohren Sie ein kleines Loch in den Flaschendeckel der Säurelösung, damit ein Druckausgleich stattfinden kann! (NICHT bei der Entwicklerlösung!)
Befüllen Sie die Wanne zur Hälfte mit der Ätzlösung. Legen Sie die Platine hinein. Je nach verwendetem Ätzmittel, der Bewegung des Bades oder der Platine mit dem Holzspatel und der Temperatur des
Bades dauert der Vorgang einige Minuten bis eine ¾ Stunde. Nehmen Sie die Platine anschließend
aus dem Bad und spülen sie gründlich unter fließendem Wasser ab, um ein Nachätzen zu verhindern.
Füllen Sie die Ätzlösung zurück in die Flasche und reinigen Sie die Ätzwanne mit viel Wasser.
17
Entfernen der Fotoschicht:
Tränken Sie etwas Watte mit Aceton und entfernen Sie den Rest der Fotoschicht auf den Leiterbahnen.
Umweltgerechte Entsorgung verbrauchter Chemikalien:
Sollten die Flüssigkeiten verbraucht sein oder nicht mehr benötigt werden, dürfen sie auf keinen Fall
über das Abwasser entsorgt werden. In manchen Städten gibt es Giftmobile, die in bestimmten Zeiträumen Chemikalien entgegennehmen und fachgerecht entsorgen. Man kann aber auch bei der örtlichen Abfallentsorgung nachfragen.
Bohren der Platine
Bohren Sie zum Schluss noch die Löcher für die Bauteile. Die jeweilige Größe wird durch das Layout
ersichtlich.
18
Interface löten
Das hier vorgestellte Layout ist etwas größer als das genormte Europakarten-Format. Wenn Sie die
Platine selbst herstellen, ist es eventuell vorteilhaft, wenn Sie dennoch eine Platine im Europa-Format
wählen und das auf dem folgenden Bild sichtbare Layout etwas versetzt belichten. Dann fehlen einige
Reihen des Lötaugenrasters, welches für Erweiterungen frei zur Verfügung steht – dies sollte in den
meisten Fällen kein Nachteil sein.
Kupfer-Seite: Auf dieser Seite werden die Bauteile angelötet.
Bestückungsseite: Hier werden die Bauteile eingesteckt.
19
Fertig bestückte Platine:
Abgebildet ist die Grundversion mit zusätzlichen Buchsen und Stiftleisten. Der Microcontroller ist noch
nicht in seinen Sockel eingesteckt.
Rechts neben der 40-poligen IC-Fassung sind optionale Komponenten (2 Kondensatoren, Spule, 2
Widerstände) für A/D-Wandler und LCD-Display montiert.
z.B. ULN2803
100µH
JMP1
PortC
1N4007
Brücke
+Ub
+5V
+Ub
+
GND
JMP2
Kühlkörper
optionale Komponenten
L7805
100nF
1k
+
GND
z.B. ULN2803
+
2x100nF
12k
PortD
ATmega 16 oder ATmega 32
33pF
100nF
33pF
11,0592 MHz
+
10µF
+
+5V
100k
ISP-Stecker
+
+
GND
PortA
100µF +5V
DC_IN
470µF
1
+
GND
100nF
PortB
MAX232
RS232
10µF 10µF
10µF
10µF
Der folgende Bestückungsplan gibt einen schematischen Überblick. Auch hier sind gegenüber der
Grundversion zusätzliche Komponenten eingezeichnet. Alle Bauteile rechts neben dem IC ATmega16
sind optional. Die Spule, sowie die beiden benachbarten Kondensatoren werden nur benötigt, wenn
man die integrierten Analog/Digital-Wandler des Microcontrollers benutzen möchte. Weiterhin ist mit
den Widerständen (1k, 12K) ein Spannungsteiler zur Kontrasteinstellung eines LCD-Displays bereits
integriert. Diese Widerstände müssen also ebenfalls nur bei Bedarf bestückt werden, ebenso die Stecker und Sockel für die Treiber ICs (ULN2803) für z.B. Lampen oder kleine Motoren.
Bestückungsplan
20
Im Folgenden werden die benötigten Bauteile vorgestellt. Es ist empfehlenswert, die Bauteile auch in
dieser Reihenfolge einzulöten. Die Beschreibung der Einbaupositionen und Orientierung der Bauteil
bezieht sich auf die beiden vorangehenden Abbildungen (Bestückungsplan und Foto).
Stromversorgungsbuchse – Hohlstecker 2,1mm
Diese Buchse sollte mit etwas Sekundenkleber vor dem Löten auf
der Platine fixiert werden, da sie später mechanischen Belastungen
ausgesetzt ist. Eventuell müssen die Löcher in der Platine mit einer
runden Schlüsselfeile etwas aufgeweitet werden. Bitte VOR dem
Auftragen des Sekundenklebers prüfen.
Es kann auch wahlweise die 2,5mm-Version der Buchse verwendet
werden.
RS232 Datenstecker
Diode – SB140
Drahtbrücke
IC-Fassungen
Der 9-polige Sub-D-Stecker sollte ebenfalls mit Sekundenkleber vor
dem Löten fixiert werden. Zur besseren Stabilität bitte alle Beinchen
und die Befestigungsstifte anlöten. Dieser Stecker wird später mit
einem NULL-Modemkabel mit der seriellen Schnittstelle (z.B.
COM1) des PCs verbunden.
Ein Ring (hier links, weiß) an einer Seite der Diode zeigt die Durchlass- bzw. Sperrrichtung der Diode an. Die Position des Ringes
entspricht der Position des Balkens im Schaltungssymbol. Auf der
Platine muss der Ring auf der von der Stromversorgungsbuchse
entfernten Seite liegen.
Auf der Platine muss VOR der Montage des 40-poligen IC-Sockels
eine Drahtbrücke UNTER diesem eingelötet werden. Hier bietet es
sich an, nach Einlöten der Diode, deren Beinchen zu kürzen und
die so gewonnen Drähte zu verwenden.
Die 16-polige und 40-polige IC-Fassungen besitzen eventuell eine
Markierung für Pin1 (z.B. Kerbe in der Stirnseite, Punkt, Pfeil…).
Diese sollte bei beiden Fassungen nach oben zeigen, also zum
nächstliegenden Rand der Platine. Somit kann dies später eine
Hilfe zur richtigen Montage der ICs sein. Die ICs selbst sollten noch
nicht eingesteckt werden.
Programmierschnittstelle (ISP)
Diese doppelreihige Stiftleiste dient der Programmierung des Microcontrollers mit dem AVR-ISP-Programmer (ISP: In System Programming).
Sie wird mit den kurzen Beinchen eingelötet, so dass auf die langen
Stifte der Programmieradapter gesteckt werden kann.
Widerstand 100k
Der 100k-Ohm Widerstand wird rechts neben der ISP-Stiftleiste
eingelötet.
21
Kondensatoren: Elkos
Bei den verwendeten Elektrolyt-Kondensatoren ist die Polung zu
beachten (langes Beinchen = Plus-Pol). Weiterhin ist auf den Kondensatoren ein weißer Streifen mit „Minus“-Zeichen aufgedruckt.
Die Kondensatoren sollten eine Spannungsfestigkeit von mindestens 16V, besser 25V besitzen.
Auf der Kupferseite der Platine zeigt die Form der Lötaugen die
Polung an: rundes Lötauge Plus, quadratisches Lötauge Minus.
Der 470µF Kondensator wird mit dem weißen Streifen in Richtung
Stromversorgungsbuchse direkt unter diese montiert.
Der 100µF Kondensator sitzt direkt unter der 16-poligen ICFassung. Sein weißer Streifen (Minus-Pol) zeigt in Richtung Stromversorgungsbuchse.
Vier der 10µF Kondensatoren werden links neben der 16-poligen
IC-Fassung montiert. Deren Polung ist wie folgt: Unterster Kondensator Minus nach oben, nächster Kondensator Minus nach unten,
die beiden oberen Kondensatoren mit Minus nach oben.
Ein weiterer 10µF Kondensator wird rechts neben die 16-polige ICFassung gelötet. Sein „Minus-Streifen“ zeigt nach unten.
Keramik-Kondensatoren
Die beiden 33pF-Kerkos (Keramik-Kondensatoren) werden direkt
nebeneinander rechts neben die 16-polige IC-Fassung gelötet.
Zwei 100nF-Kondensatoren werden unter dem 470µF-Elko eingelötet, ein weiterer mittig an der linken Seite der 40-poligen ICFassung. Die beiden Kondensatoren rechts neben der 40-poligen
Fassung müssen in der „Grundversion“ nicht bestückt werden.
Die Beschriftung „104“ bedeutet 10e4pF = 100nF.
Quarz
Als Quarz wird ein 11,0592 MHz – Typ verwendet. Bei dieser Frequenz ist eine fehlerfreie Kommunikation über RS232 mit
9600Baud möglich. Für den ATmega16 können Quarze bis 16MHz
eingesetzt werden. Details siehe Datenblatt. Der Quarz wird direkt
rechts neben die beiden 33pF-Kerkos gelötet. Die Orientierung
spielt keine Rolle.
Spannungsregler L7805
Der Spannungregler L7805 (Bild links) erzeugt eine stabilisierte Spannung von 5V. Es ist empfehlenswert einen Kühlkörper
(Bild rechts) zu verwenden.
Wärmeleitpaste
L7805
Beinchen
Löten
Platine
Schraube
VOR dem Einlöten:
1. Mutter
2. Mutter
Kühlkörper
Zwischen Spannungsregler und Kühlkörper sollte etwas Wärmeleitpaste aufgetragen werden. Dann werden die beiden
FEST mit einer Schraube M3x10 und einer Mutter verschraubt. Die über die Mutter hinausragende Schraube kann
dann durch ein passendes Loch der Platine gesteckt und
durch eine weitere Mutter an dieser befestigt werden. Die
Beinchen des Spannungsreglers sind um 90° passend abzubiegen.
22
Funktionskontrolle VOR Einsetzen der ICs
Bitte prüfen Sie insbesondere die Ausrichtung der ElektrolytKondensatoren (Elkos).
Sind alle Beinchen angelötet? Hat das Lötzinn an den Beinchen
und der Platine guten Kontakt? Sind eventuell zwei benachbarte
Beinchen unbeabsichtigt durch Lötzinn verbunden? ALLE Lötungen
nochmals genau prüfen (Tipp: Lupe)!
Probeweise 12V-Versorgungsspannung einstecken: Am 100nFKondensator links mittig der 40-poligen IC-Fassung müssen 5V
anliegen.
Versorgungsspannung von der Platine wieder trennen.
Einsetzen der ICs MAX232 und ATmega16
Die „Nuten“ (Pfeile im Foto links) auf den IC-Gehäusen müssen
nach oben zeigen, d.h. Pin1 ist bei beiden ICs (hier im Foto) links
unten und auf der Platine oben links.
Sollten die Beinchen der ICs nicht in die Fassung passen, da die
Fassung scheinbar zu schmal ist, den IC seitlich mit einer Beinchen-Reihe flach auf den Tisch legen. Den IC-Körper links und
rechts greifen und Beinchen durch leichten Druck biegen. Sind
einzelne Beinchen durch den Transport verbogen, diese vorsichtig
mit einer kleinen Flachzange richten.
Zum Anschließen weiterer Komponenten sind auf der Platine vier Wannenstecker und vier Stiftleisten
vorgesehen. Die vier Stiftleisten sind mit den 8 Pins der entsprechenden Ports verbunden, so dass
hier direkt die 32 I/O-Anschlüsse des ATmega verfügbar sind.
Drei der vier Wannenstecker (Port A, B und D) sind 10polig ausgeführt. Hier sind zusätzlich +5V und
Masse verfügbar. Der 14polige Wannenstecker von Port C ist zum direkten Anschluss von StandardLCD-Displays vorgesehen. Er besitzt zusätzlich einen Spannungsteiler mittels zweier Widerstände
zum Einstellen des LCD-Kontrasts, sowie zwei Steuerleitungen, die mit Port D verbunden sind:
1
2
1
2
Port A, Port B, Port D
1: GND
2: +5V
3..10 : Pin 0 .. Pin 7
Port C
1: GND
2: +5V
3: Kontrast für LCD-Display
4: LCD-RS (PinD.5)
5: GND
6: LCD-CS (PinD.4)
7..14: PinC.0 .. PinC.7
23
Interface auf einer Lochrasterplatine
Dieses Kapitel gibt eine schrittweise Anleitung, wie Sie die Grundversion des Interfaces auf eine Lochrasterplatine aufbauen können. Diese Lochrasterplatinen gibt es als Fertigprodukt zu kaufen.
Werkzeuge:
Neben den im vorhergehenden Kapitel aufgelisteten elektronischen Bauteilen benötigen Sie:
•
•
•
•
•
•
•
•
•
•
Eine Lochrasterplatine im Euro-Format (160mm x 100 mm) mit dem Rastermaß 2,54mm und
Lötpunkten. Es gibt diese Platine in einer Epoxid- und in einer Hartpapierausführung. Die Lötaugen auf der Epoxidvariante halten größeren mechanische Belastungen stand und lösen
sich bei eventuellen Korrekturarbeiten nicht so leicht ab. Für Lötanfänger ist diese Epoxidvariante zu empfehlen. Wir haben in diesem Beispiel eine Hartpapierplatine verwendet.
Einen Meter isolierte Kupferlitze mit einer
Querschnittsfläche zwischen 0,01mm² und
0,2 mm².
Sekundenkleber
Lötkolben mit feiner Spitze. (z.B. Meißelform 2mm breit)
Lötzinn (zwischen 0,8mm und 1,0mm im
Durchmesser)
Lötzinnabsauger
evtl. einen Schwamm um den Lötkolben
zu reinigen
Zangen
Multimeter
Bohrmaschine, z.B. Dremel, Proxxon o.ä. mit 0.8mm Bohrer
Für Lötanfänger einige Infos zum Umgang mit Lochrasterplatinen:
Die Lochrasterplatine wird oft in Labors oder bei Elektronikern eingesetzt. Bauteile lassen sich beliebig
platzieren, es müssen keine Löcher gebohrt werden und Fehler in der Schaltung lassen sich ohne
großen Aufwand beheben.
Die Bauteile werden von oben eingesteckt, so dass die Beinchen auf der Seite der Lötaugen herausstehen. Hilfreich beim einlöten ist ein kleiner Schraubstock, so dass man die Bauteile auf einer Seite
festhalten kann, während man auf der anderen Seite lötet. Manchmal wird empfohlen, die Beinchen
nach außen zu biegen, so dass das Bauteil nicht herausfallen kann, dann wird ein späteres Auslöten
jedoch etwas schwieriger. Nach dem Einlöten müssen die überstehenden Beinchen gekürzt werden.
Die Bauteile lassen sich auf verschiedene Weisen miteinander verbinden:
•
•
•
•
Reste der Beinchen: Nachdem die ersten Bauteile eingelötet sind, muss man die überstehenden Beinchen auf der Rückseite mit einer Zange abzwicken. Die anfallenden Drahtstückchen
können dann zum Verbinden der Beinchen für kurze Strecken genutzt werden. Hier muss man
aufpassen, dass sich die Drähte nicht überkreuzen.
Lötaugen mit Lötzinn überbrücken: Dazu ist allerdings etwas Feingefühl notwendig.
isolierte Litzen: Die „sicherste“ Methode. Kabel werden auf die entsprechende Länge gekürzt,
dann abisoliert und zum Schluss festgelötet.
Kupferlackdraht: Hier entfällt das Abisolieren. Die dünne Isolierschicht löst sich beim erhitzten
durch den Lötkolben ab.
24
Platine bestücken
Für die folgenden Schritte sollten Sie unbedingt den Schaltplan vorliegen haben, da Sie diesem entnehmen, welche Bauteile wie zu verbinden sind.
Zunächst müssen ein paar Modifikationen vorgenommen werden, denn die Pins der Sub-D Buchse
sind so angeordnet, dass sie nicht in das Raster der Platine passen. Die Befestigungslaschen stören,
da es keine Möglichkeit gibt, sie stabil an der Platine festzulöten.
1. Entfernen Sie die Laschen und die Pins, die durch die Schaltung nicht beansprucht werden.
Übrig bleiben folgende Pins, der Pin links oben
passt jedoch nicht in das 2,54mm Raster
Die Laschen lassen sich am besten mit der
Kneifzange entfernen.
Bohren Sie ein Loch für den einzelnen Pin in die
Platine. Dieses muss zwischen zwei der vielen
vorgebohrten Löchern liegen, damit die Buchse
in das Raster passt. Folgende ungefähre Position
ist zu empfehlen:
Testen Sie ob sich alle 4 Pins in die Platine stecken lassen. Erst dann geben Sie einige Tropfen Sekundenkleber auf die Unterseite der Buchse und drücken Sie diese fest auf die Platine, so dass alle
Pins auf der Seite mit den Lötaugen zu sehen sind. Warten Sie bis der Kleber ausgehärtet ist und
löten Sie die Pins an der Unterseite fest.
Montage der Stromversorgungsbuchse: Es müssen drei
schmale, längliche Löcher gebohrt werden. Regeln Sie dazu
die Geschwindigkeit der Bohrmaschine hoch und drücken Sie
den Bohrer sanft gegen das Material. Achtung! Die feinen
Bohrer brechen sehr leicht.
Anschließend kleben Sie die Buchse ebenfalls an und löten
sie fest. Hier kann viel Lötzinn verwendet werden.
Stecken Sie nun die IC-Fassungen auf die Platine. Die Einkerbungen müssen zum oberen Platinenrand zeigen. Achten Sie
darauf, dass die Fassungen direkt auf der Platine anliegen.
Löten Sie zunächst nur die äußeren 4 Pins ein und anschließend die Übrigen.
25
Jetzt werden die 10µF Elkos bestückt. Diese werden nach
dem folgenden Schema mit dem 16pol. IC Sockel verbunden:
Die blauen Punkte stehen für einen Minuspol, die roten Punkte
markieren einen Pluspol. Die Polarität muss unbedingt beachtet werden, da die Kondensatoren sonst Schaden nehmen
oder im schlimmsten Fall sogar explodieren können. Den
Pluspol erkennen Sie daran, dass das Beinchen etwas länger
ist als das Beinchen des Minuspols. Meistens ist der Minuspol
auch auf dem Gehäuse markiert.
Löten Sie die Beinchen an den Lötpunkten der Platine fest und
kürzen Sie anschließend die abstehenden Drähte. Verbinden
sie nun die Elkos mit der IC-Fassung nach der obigen Skizze.
Dazu können Sie entweder die Kupferlitze oder die abgeschnittenen Beinchen der Kondensatoren verwenden.
Bauen Sie den Quarz, welcher den Prozessor mit dem Takt
versorgen wird, ein. Die Beinchen des Quarzes müssen mit
Pin 12 und 14 der 40pol IC-Fassung verbunden werden. Anschließend löten Sie hinter jedes Beinchen des Quarzes je
einen der 33pF Kondensatoren ein. Verbinden Sie die Kondensatoren mit dem Quarz. Hier können wieder die abgeschnittenen Beinchen als Verbindung dienen.
Bauen Sie die Diode ein und verbinden Sie sie mit dem PlusPol der Strombuchse. Sie soll verhindern, dass eine verkehrt
gepolte Spannungsquelle die Bauteile auf dem Interface zerstört, denn Sie leitet nur in eine Stromrichtung. Beachten Sie
aus diesem Grund bitte unbedingt die richtige Polung der Diode! Die weiße Markierung am Gehäuse, die so genannte Kathode muss von der Netzteilbuchse wegzeigen.
Über die Stiftleiste kann später der Programmieradapter mit
dem Microcontroller verbunden werden. Kürzen Sie die Leiste
mit der Kneifzange auf die Länge von 5*2 Stiften und löten Sie
die Leiste ein. Der 100kΩ Widerstand verbindet Pin 9 (Reset)
des Microcontrollers mit +5 V. Wir haben noch eine Drossel
und zwei Kondensatoren für die Analog-Digitalwandler eingebaut.
Die Aufgabe des Spannungsreglers ist die Erzeugung einer
Gleichspannung von +5 V. Dabei darf die Eingangsspannung
maximal +30 V betragen und muss mindestens 2 V über der
Ausgangsspannung, also in diesem Fall bei etwa 7 V liegen.
Man kann dadurch am Netzteil eine Spannung von 12 V einstellen, erhält trotzdem die erforderlichen 5 V für die Bauteile.
Die 12 V vor dem Spannungsregler lassen sich für andere
Komponenten wie beispielsweise einen Motortreiber abgreifen, ohne dass ein zweites Netzteil benötigt wird.
Der Spannungsregler, die beiden 100nF Kondensatoren, der
100µF Elko und der 470µF Elko müssen wie folgt montiert und
verdrahtet werden.
Achtung: Sollten Sie noch weitere Bauteile am Spannungsregler betreiben, muss je nach Stromstärke ein Kühlkörper am
Gehäuse montiert werden. Bis etwa 100mA bei 12 V Eingangsspannung kommt der Spannungsregler ohne Kühlkörper
aus.
26
Zum Schluss folgt die Verdrahtung gemäß dem Schaltplan:
So sieht die Unterseite der bestückten Lochrasterplatine aus. Sie sehen die angelöteten Beinchen der
Bauteile, die durch Drähte oder Kabel gemäß dem Schaltplan miteinander verbunden sind.
27
Programmierung des Microcontrollers
Damit das Interface bestimmte Aufgaben übernehmen kann, müssen die dafür notwendigen Lösungsschritte dem Microcontroller in Form eines Programms (=Firmware) mitgeteilt werden. Dieses Programm erstellen Sie mit Ihrem PC und kopieren es anschließend mit einem speziellen Programmieradapter über die ISP-Schnittstelle des Interfaces in den Speicher des Microcontrollers (auch „schreiben“ oder „brennen“ genannt). ISP-Schnittstelle (InSystemProgramming) bedeutet, dass der Microcontroller in der Schaltung programmiert wird, in der er anschließend seine Arbeit verrichtet, hier unser
Interface. Alternativ könnte auch der Microcontroller, also der einzelne Chip, in ein spezielles Schreibgerät eingesetzt werden.
Im Rahmen dieses Tutorials empfehlen wir den Programmieradapter „AVR-ISP-Programmer“ von Atmel (ca. 40€). Er kann für fast
alle Prozessor-Typen verwendet werden (auch SMD-Typen). Allerdings müssen die Prozessoren dann in einer geeigneten Schaltung
(z.B. unsere Grundschaltung des Interfaces) mit ISPProgrammierschnittstelle eingebaut sein.
Hinweis: Das STK500-Entwicklungsboard von ATMEL bietet die
Möglichkeit, verschiedene Microcontroller und deren Programmierung mit einer kleinen Testschaltung kennen zu lernen. Es stehen
unter anderem 8 Schalter, 8 LEDs und eine serielle Schnittstelle für
die ersten Versuche im Umgang mit Microcontrollern bereit. Die
Microcontroller können in das Board eingesetzt und dort programmiert werden.
Zur Vollständigkeit sei erwähnt, jedoch für Einsteiger nicht empfohlen: Ein solches Schreibgerät können Sie auch selbst bauen – im Internet finden Sie zahlreiche Anleitungen.
Bisher gab es eine Version des AVR-ISP-Programmers, der an der seriellen Schnittstelle des PCs
angeschlossen wird oder über einen USB-seriell Konverter betrieben werden kann. Derzeit ist eine
Version direkt mit USB-Anschluss angekündigt, vermutlich wird er genauso wie der Vorgängertyp
einzusetzen sein. Im Folgenden gehen wir davon aus, dass Sie den AVR-ISP-Programmer mit 10poligem Programmierstecker vorliegen haben.
Laden Sie sich von www.atmel.com unter PRODUCTS – Microcontrollers and DSP – AVR 8 bit RISC
– Tools & Software das Programm „AVR Studio“ und installieren es auf Ihrem PC. Es dient zum Übertragen der Programme von Ihrem PC auf den Microcontroller. Weiterhin enthält es einen Assembler
incl. Entwicklungsumgebung, so dass Sie damit auch Programme erstellen können.
In diesem Tutorial werden wir den Microcontroller jedoch in Basic programmieren. Hierzu laden Sie
von der Seite www.mcselec.com das Programm BASCOM-AVR. Diese Demo-Version besitzt den
vollen Funktionsumfang, ist jedoch auf 4k Programmcode beschränkt. Dies ist für einfache Experimente ausreichend. Die Vollversion kostet ca. 80€.
Hinweis: Es gibt auch C-Compiler (unter anderem kostenlosen GNU-Compiler) und einen sehr guten
Pascal-Compiler (www.elab.de, Demo-Version mit vollem Funktionsumfang, jedoch auch auf 4k Programmcode beschränkt, Vollversion ca. 500€)
Die folgenden Schritte beziehen sich auf die Verwendung von BASCOM:
Es wird vorausgesetzt, dass Sie die Interface-Platine in der Grundversion vorliegen haben, bestückt
mit einem ATmega16 Microcontroller und einem 11,0592MHz Quarz. Das Interface ist mit einem
Nullmodemkabel mit dem PC verbunden. Der AVR-ISP-Programmer ist mit der zweiten seriellen
Buchse Ihres PCs verbunden und mit dem 10-poligen ISP-Stecker des Interfaces (PIN1 zeigt zum
Quarz!!).
ACHTUNG: AVR-ISP-Programmer nur an Interface anschließen oder abziehen, wenn dieses
stromlos ist, d.h. 12V-Netzteil darf NICHT am Interface angeschlossen sein.
28
Konfiguration von Bascom
Starten Sie Bascom und wählen Sie Options – Compiler. Bitte übertragen Sie folgende Einstellungen
Chip: m16def.dat
HW Stack: 32
Soft Stack: 32
Framesize: 32
Baudrate 0: 9600
Frequenz: 11059200 Hz
Wählen Sie den COM-Port, an den Sie das NullModem-Kabel angeschlossen haben.
Bitte 9600 Baud, Parity none, Databits 8 und Stoppbits 1 einstellen.
Bestätigen Sie die Änderungen mit <OK>
Programmeingabe
Wählen Sie in Bascom File – New, geben Sie folgendes Programm ein und speichern Sie es unter
dem Namen „rs232.bas“. Die Kommentare am Ende der Zeilen müssen nicht eingegeben werden.
$regfile = "m16DEF.dat"
$crystal = 11059200
$baud = 9600
'Microcontroller ATmega16
'11.0592MHz Quarz
'Baudrate 9600 Baud
Dim Kommando As String * 20
'Deklaration einer Textvariable
Do
If Ischarwaiting() = 1 Then
Input Kommando
Print "empfangen: " ; Kommando
End If
Loop
End
'Start der Endlos-Schleife
'wurde ein Zeichen gesendet?
'String über RS232 lesen
'String über RS232 ausgeben
'springe zur Zeile “Do”
'(wird nie erreicht)
Dieses Beispiel zeigt die Kommunikation zwischen Microcontroller und PC über die serielle Schnittstelle. Hierzu wird in den ersten Zeilen der Prozessortyp festgelegt, sowie dessen Taktfrequenz und
die Kommunikationsgeschwindigkeit (Baud-Rate).
Es wird eine Text-Variable (mit maximal 20 Zeichen) zum Zwischenspeichern der Eingaben benötigt.
29
Das „Haupt“-Programm besteht aus einer Schleife, die nie beendet wird (endlos-Schleife); das Interface führt also immer wieder dieselben Befehle aus: Es wird geprüft, ob ein Zeichen über die serielle
Schnittstelle empfangen wurde. Falls dies der Fall ist, wird ein String gelesen und zur Kontrolle wieder
ausgegeben.
Programm compilieren
Wählen Sie Program – Compile: Ihr Programm wird in den Maschinen-Code für den Microcontroller
übersetzt – es wird eine Datei „rs232.hex“ erzeugt. Gegebenenfalls weist der Compiler Sie auf (Tipp-)
Fehler hin.
Programm in den Microcontroller schreiben
Bascom bietet die Möglichkeit die erstellten Programme (hex-Dateien) direkt in den Microcontroller zu
schreiben. Leider zeigte sich jedoch, dass dies nicht immer problemlos funktioniert. Deshalb empfehlen wir das Programm „AVR Studio“ von Atmel zu verwenden:
Nach dem Programmstart schließen Sie bitte folgendes Fenster mit <Cancel> und verbinden den
AVR ISP-Programmer mit einer seriellen Schnittstelle des PCs und mit der ISP-Stiftleiste des Interfaces. ACHTUNG: auf Orientierung achten – PIN1
zeigt nach unten rechts in Richtung Quarz.
Wenn Sie einen neuen ATmega Microcontroller erstmalig verwenden, müssen Sie diesen für Ihre Schaltung
konfigurieren. Dies ist normalerweise beim Einsatz im Interface nur einmal notwendig:
Wählen Sie Tools – Program AVR – Auto Connect
Es erscheint folgendes Fenster, sofern der AVRISP-Programmer gefunden wurde.
30
Unter Fuses setzten Sie bitte die Häkchen wie
abgebildet. Entfernen Sie das Häkchen in der 2.
Zeile vor „JTAG...“
Setzen Sie das vorletzte Häkchen, somit wird der
interne Taktgenerator des ATmega16 deaktiviert.
Führen Sie die Änderungen mit <Program> aus.
Bestätigen Sie die Änderungen mit <Ja>
ACHTUNG!
Ändern Sie auf keinen Fall die „LockBits“, wenn
Sie sich nicht mit dem Datenblatt des ATmega16
vertraut gemacht haben. Hierdurch könnte Ihr Microcontroller unbrauchbar werden.
31
Wählen die Options-Seite mit Namen „Program“:
Klicken Sie im Abschnitt „Flash“ auf den Knopf mit
den drei Punkten <...> um eine „Input HEX File“ zu
wählen.
Jetzt wählen Sie Ihr Programm „rs232.hex“ aus
Klicken Sie im Abschnitt „Flash“ auf den Button
<Program>
Ihr Programm wird in den Microcontroller geschrieben.
32
Kommunikation von PC und Interface
Ab jetzt führt Ihr Microcontroller das soeben geschriebene Programm aus. Er wartet also auf Eingaben
über die serielle Schnittstelle. Zur Kommunikation zwischen Ihrem PC und dem Microcontroller benötigen Sie ein Terminalprogramm. Bei Windows ist bereits ein solches im Funktionsumfang enthalten:
Start - Programme – Zubehör – Kommunikation – Hyperterminal. Auch Bascom bietet ein Terminal,
welches Sie wie folgt aufrufen: Tools – Terminal emulator:
Unter Terminal – Settings stellen Sie den COM-Port Ihres PCs ein, an den Sie das Null-Modem-Kabel
zum Microcontroller angeschlossen haben. Die Übertragungsrate beträgt 9600 Baud. Jetzt können Sie
beliebige Texte zum Microcontroller senden und erhalten eine Antwort von diesem.
33
Installation des Webservers
Damit man auf Ihren PC mit einem Browser zugreifen und Ihre Internetseiten betrachten kann, benötigen Sie einen „WebServer“. Dies ist eine Software, welche Webseiten, die auf Ihrem PC gespeichert
sind, für das Internet zugänglich macht. Wir empfehlen den Apache Webserver, bei dem es sich um
ein kostenloses Produkt handelt, welches sowohl für Windows als auch für Linux erhältlich ist. Weiterhin benötigen Sie PHP, eine Programmiersprache, die zusammen mit Apache arbeitet und den phpProgrammcode in den Webseiten, der zur Ansteuerung des Interfaces notwendig ist, verarbeitet. Auch
dieses Produkt ist für Windows und Linux frei erhältlich. Diese beiden Programme finden Sie im Internet zum Download, sowie zahlreiche Tutorials zu deren Installation.
In diesem Tutorial greifen wir auf das Paket „xampp“ zurück, welches Apache und PHP (und einige
weitere, hier nicht benötigte Produkte) in einem Paket vereint.
Die folgenden Bildschirmfotos zeigen Ihnen schrittweise die Installation von xampp. Nach Abschluss
der Installation ist ihr PC ein Webserver mit php-Unterstützung:
Laden Sie die „Installer“-Version von xampp von der Seite www.apachefriends.org und starten Sie das
Programm durch einen Doppelklick.
Wählen Sie die Optionen entsprechend den folgenden Fotos:
1.
2.
3.
4.
5.
6.
34
Nach der Installation finden Sie ein neues Symbol „xampp control panel“. Über dieses Programm können Sie die verschiedenen Module von xampp starten:
Für ein RCL muss NUR Apache gestartet werden. Sie können optional dieses Modul als „Service“
installieren (SVC anwählen). Dann werden diese bei jedem Systemstart automatisch gestartet. Falls
Sie hier Ihre ersten Erfahrungen mit einem Webserver sammeln, empfehlen wir die Module „MySQL“,
„FileZilla“ und „Mercury“ NICHT zu starten, da sie hier unnötige Angriffspunkte auf Ihr System über
das Internet bieten würden.
Sobald Apache gestartet ist, können Sie mit einen Browser unter http://127.0.0.1 auf Ihren eigenen PC
zugreifen. Sie bekommen jetzt die xampp-Webseite angezeigt, die sich auf Ihrem PC im Ordner
c:\xampp\xampp\htdocs befindet. Dieses Verzeichnis wird als „root“ bezeichnet, da auf alle darin befindlichen Dateien und Unterverzeichnisse mit einem Browser über das Internet zugegriffen werden
kann. Möchten Sie eine eigene Webseite erstellen, sollten Sie diese in diesem Verzeichnis ablegen.
Hinweis zur Sicherheit:
Es ist ratsam, dass Sie sich mit der Konfiguration von Apache und PHP vertraut machen, bevor Sie
Ihren neu installierten WebServer mit dem Internet verbinden. Die Handbücher zu Apache und PHP
werden von xampp auf Ihren PC installiert, zahlreiche Infos finden Sie im Internet (google nach Apache, PHP). Die wichtigsten Einstellungen (incl. Erklärung) für den Apache WebServer finden Sie in der
Datei c:\xampp\xampp\apache\conf\httpd.conf. Die Konfiguration von PHP erfolgt über die Datei
c:\xampp\xampp\apache\bin\php.ini. Beide Dateien können Sie mit einem Texteditor bearbeiten. Vor
Änderungen sollten Sie eine „Sicherheitskopie“ beider Dateien anlegen.
35
Aufbau eines „elementaren“ RCLs
Ziel
Aufbau eines über Internet fernsteuerbaren „Experiments“, bestehend aus einer Leuchtdiode und einem Taster. Die Leuchtdiode soll an und ausgeschaltet werden, sowie deren Status abgefragt werden
können. Der Status des Tasters soll ebenfalls auf der Webseite angezeigt werden.
Voraussetzung
1. 1 LED (5mm, 2mA = LowCurrent), 1 Widerstand 1,8 kOhm, 1 Taster oder Schalter, 2 Wannenstecker (10polig) mit passendem Flachbandkabel und Buchsen
2. Grundversion des Interfaces + Null-Modem-Kabel + 12V D.C. Steckernetzteil
3. Bascom (Demo-Version)
4. AVR ISP-Programmer (mit 10poligem Programmierkabel) und Software AVR Studio
5. Apache+PHP und ein Texteditor
Mit den Punkte 2. – 5. sollten Sie nach Durcharbeiten der vorangegangenen Kapitel vertraut sein und
die benötigte Hardware und Software einsatzbereit vorliegen. Es muss also nur noch die Anpassung
der Interface-Grundversion an unser spezielles Experiment erfolgen.
36
Schaltplan und Montage
Sie sollten jetzt die Grundversion des Interfaces vorliegen haben, sowie eine LowCurrent LED (2mATyp), einen 1,8kOhm Widerstand und einen Schalter oder Taster. Empfehlenswert sind noch je 2
10polige Wannenstecker und passende Steckverbinder, sowie ca. 7cm 10poliges Flachbandkabel.
Der Microcontroller ATmega16 besitzt 32 Ein-/Ausgänge, d.h. 32 Beinchen des ATmega16 können
softwaregesteuert wahlweise als Ein- oder Ausgänge genutzt werden. In der Funktion als Ausgang
kann dieser per Software an- bzw. ausgeschaltet werden, es liegen dann +5V bzw. 0V an.
Die Ausgänge des Microcontrollers liefern nur geringe Ströme, die zum Betreiben einer LowCurrent
LED (2mA) jedoch ausreichen. Benötigen Sie größere Ströme, sind zusätzlichen Bauelemente (Transistor, Relais,...) zu verwenden. Mit den Details zu den I/O-Anschlüssen (=Eingänge/Ausgänge) des
ATmega16 sollten Sie sich mit Hilfe des Datenblattes vertraut machen.
µC PortA.0
(PIN40)
LED rot
1K8
µC PortA.1
(PIN39)
Taster
Schließen Sie die Leuchtdiode (LED) mit dem
Pluspol (langes Beinchen) an PortA.0 (PIN40
oben rechts) des Microcontrollers an. An das
kurze Beinchen löten Sie einen 1,8KOhm Widerstand, dessen anderes Ende Sie mit der Masse
(GND) verbinden.
Den Taster verbinden Sie mit PortA.1 (PIN39 = 2.
Beinchen von oben rechts) und Masse (GND).
So könnte der Aufbau aussehen. Die LED mit
Vorwiderstand und der Taster sind rechts neben
dem Microcontroller im Lochrasterbereich aufgebaut. Sie wurden in diesem Fall mit einem Flachbandkabel mit dem PortA verbunden. (Die drei
Bauteile direkt rechts des ATmega16 werden
nicht benötigt)
Belegung des 10poligen Wannensteckers:
1
2
3
Draufsicht
1: GND (Masse), im Foto oben links
2: +5V
3: PortA.0
4: PortA.1
...
10: PortA.7, im Foto unten rechts
37
Programmierung (Firmware) des Microcontrollers
Das folgende Programm geben Sie bitte in Bascom ein und erzeugen durch compilieren (F7) eine hex-Datei. Diese Datei wird dann mit AVR Studio mittels des
AVR-ISP-Programmers in den ATmega16 geschrieben. (Hinweis: die Kommentare in jeder Zeile müssen Sie nicht eingeben)
Das Programm besteht aus zwei Gruppen: Die Zeilen 1-15 enthalten die Systemparameter, Variablen und Initialisierung der Ein-/Ausgänge. Im zweiten Teil ab
Zeile 17 befindet sich das sogenannte „Hauptprogramm“. Hier werden die Benutzereingaben über die serielle Schnittstelle empfangen, interpretiert und die entsprechenden Anweisungen umgesetzt.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$regfile = "m16DEF.dat"
$crystal = 11059200
$baud = 9600
'Microcontroller ATmega16
'11.0592MHz Quarz
'Baudrate
'---[ Variables ]--------------------------------------------------------------Dim Rs232kommando As String * 10
'erst Befehlspuffer, dann Kommando
Dim Parameter As String * 10
'Parameter
Dim Str_pos As Byte
'Position von Leerzeichen, zur Trennung von Kommando und Parameter
'---[ Initialisierung ]--------------------------------------------------------Ddra.0 = 1
'PortA.0 als Ausgang für LED
Porta.0 = 0
'LED aus
Ddra.1 = 0
'PortA.1 als Eingang für Taster
Porta.1 = 1
'Pull-Up aktivieren
'---[ Main program loop ]------------------------------------------------------Do
'Start der Endlos-Schleife
If Ischarwaiting() = 1 Then
Input Rs232kommando
Parameter = ""
Str_pos = Instr(rs232kommando , " ")
If Str_pos > 0 Then
Incr Str_pos
Parameter = Mid(rs232kommando , Str_pos )
Parameter = Ucase(parameter)
Str_pos = Str_pos - 2
Rs232kommando = Left(rs232kommando , Str_pos)
Rs232kommando = Ucase(rs232kommando)
End If
'Zeichen über RS232 empfangen?
'neues Kommando lesen
'Parameter initialisieren
'Leerzeichen im Kommando suchen
'falls Leerzeichen, dann in Kommando+Parameter zerlegen:
'Str_pos soll jetzt auf 1.Zeichen des Parameters zeigen
'Parameter = Teilstring nach Leerzeichen
'in Grossbuchstaben umwandeln, damit unabhängig von Schreibweise
'Str_pos soll jetzt auf letztes Zeichen des Kommandos zeigen
'Kommando = Teilstring vor Leerzeichen
'in Grossbuchstaben umwandeln, damit unabhängig von Schreibweise
38
32
Select Case Rs232kommando
'Eventhandler: Interpretation der Kommandos
33
Case "?" : Print "Hilfe:"
'Hilfeseite anzeigen
34
Print "LED on - LED einschalten"
35
Print "LED off - LED ausschalten"
36
Print "LED?
- zeigt Status der LED an"
37
Print "SW?
- zeigt Status des Schalters an"
38
39
Case "LED" : If Parameter = "ON" Then
'LED schalten
40
Porta.0 = 1
41
End If
42
If Parameter = "OFF" Then
43
Porta.0 = 0
44
End If
45
46
Case "LED?" : If Porta.0 = 0 Then
'Status der LED ausgeben
47
Print "LED aus"
48
Else
49
Print "LED an"
50
End If
51
52
Case "SW?" : If Pina.1 = 1 Then
'Status des Schalters ausgeben
53
Print "Taster offen"
54
Else
55
Print "Taster geschlossen"
56
End If
57
58
Case Else : Print ">" ; Rs232kommando ; "< ungueltiger Befehl - weitere Infos mit ?"
'Info bei ungültigen Eingaben
59
End Select
60
61
End If
62
63 Loop
'Endlos-Schleife: Springe zu "Do"
64
65 End
'wird nie erreicht!
39
Erläuterungen zum Quelltext:
Zeile 1-3:
Diese Angaben teilen dem Compiler (Bascom) mit, welcher Prozessor eingesetzt wird, wie schnell
dieser getaktet (Quarz) ist und mit welcher Übertragungsgeschwindigkeit die Kommunikation über die
serielle Schnittstelle (RS232) mit dem PC erfolgen soll.
Zeile 6-8:
Es werden drei Variablen genutzt. Die Eingabe über die serielle Schnittstelle wird in „rs232kommando“
gespeichert. Es wird ein Text der Form „Kommando <Leerzeichen> Parameter“ erwartet, so dass die
Variable „Parameter“ denselbigen aufnimmt. Die Variable „str_pos“ wird für die Trennung von Kommando und Parameter benötigt.
Zeile 11-14:
Mit dem Befehl ddrP.X (ddr = data direction) wird festgelegt, ob ein Beinchen als Ausgang (=1) oder
als Eingang (=0) arbeiten soll. Der ATmega16 besitzt 32 Ein-/Ausgänge, die in vier Ports (P=A..D) zu
je 8 Pins (X=0..7) unterteilt sind. ddrA.0 = 1 legt also das 1. Beinchen (Pin 0) von PortA als Ausgang
(=1) fest. Mit dem Befehl PortA.0 =1 kann dieser Pin dann durch Zuweisen von 1 oder 0 an- bzw. ausgeschaltet werden. Im Datenblatt erfahren Sie, welches der 40 Beinchen des Microcontrollers wie
bezeichnet wird (Pin-Belegung). Wird ein Beinchen als Eingang verwendet (ddrA.1 = 0), können Sie
optional einen so genannten Pull-Up-Widerstand aktivieren (PortA.1=1) oder deaktivieren (PortA.1=0).
Auch hierzu sollten Sie sich unbedingt mit dem Datenblatt vertraut machen.
Zeile 17 und 63:
Das „Hauptprogramm“ besteht aus einer endlos-Schleife, d.h. der Microcontroller verrichtet ununterbrochen seinen „Job“, so lange er mit Strom versorgt wird.
Zeile 19-30:
Falls ein Zeichen über die serielle Schnittstelle empfangen wurde, wird dieses und alle folgenden gelesen. Anschließend wird geprüft, ob der empfangene Text von der Form „Kommando <Leerzeichen>
Parameter“ ist, so dass er gegebenenfalls in ein Kommando und einen Parameter zerlegt werden
kann.
Zeile 32-59:
Dieser Abschnitt wird mit „Event-Handler“ bezeichnet. Hier wird auf die Kommandos (Events) reagiert
und die entsprechenden Schritte ausgeführt, z.B. schalten LED, je nach Wert der Variablen „Parameter“ an- bzw. ausschalten.
Zeile 46 und Zeile 52:
In beiden Zeilen wird ein Wert eines Ports abgefragt. Unterschiedlich ist, dass in Zeile 46 der Status
eines Ausgangs abgefragt wird (porta.0) und in Zeile 52 der Zustand eines Eingangs (pina.0). Die
Anweisung IF porta.0 = 0 THEN prüft (hier ist „=“ ein Vergleich und KEINE Zuweisung!), ob zuletzt die
LED ausgeschaltet (Zuweisung porta.0 = 0) wurde. Die Anweisung IF pina.1= 1 THEN liest den Status
eines Eingangs. Hier kann festgestellt werden, ob der Eingang über den internen Pull-UP-Widerstand
auf +5V liegt (pina.1 liefert 1) oder ob der Schalter den Eingang mit Masse (0V) verbindet (pina.1 liefert 0).
40
Kommunikation zwischen PC und Interface
Verbinden Sie das programmierte Interface per Null-Modem-Kabel mit der seriellen Schnittstelle Ihres
PCs. Öffnen Sie anschließend das Terminal von Bascom (Tools – Terminal emulator) und stellen Sie
unter Terminal – Settings die richtige Schnittstelle ein.
Geben Sie „?“ im Terminal ein. Das Interface sollte jetzt mit einer Übersicht seiner Funktionen antworten. Sie können nun beispielsweise mit „LED on“ die LED anschalten oder mit „SW?“ den Status des
Tasters erfragen.
Alternativ können Sie auch das Hyperterminal von Windows (Start – Programme – Zubehör –
Kommunikation) verwenden. Dieses ist folgendermaßen zu konfigurieren:
Wählen Sie „neue Verbindung“ und geben Sie dieser einen sinnvollen Namen. Später können Sie
direkt durch Auswahl dieser Verbindung starten.
Wählen Sie den COM-Port, mit dem Ihr Interface
per Null-Modem-Kabel verbunden ist.
Konfigurieren Sie die Schnittstelle auf 9600 Baud, 8
Datenbits, keine Parität, 1 Stoppbit und keine Flusssteuerung.
Über das Terminal können Sie jetzt direkt mit Ihrem Interface kommunizieren, beispielsweise die unterstützen Funktionen auflisten lassen.
41
Webseite mit PHP
Zum Ansteuern des Interfaces und letztendlich zum Bedienen des Versuchsaufbaus über das Internet
wird eine Internetseite (html-Seite) benötigt, die dem Benutzer alle Bedienelemente des Experiments
zur Verfügung stellt:
1. Es ist ein Button oder Link notwendig, den der Benutzer in seinem Browser anwählen kann
und der die Information, dass er gedrückt wurde, an den Webserver sendet.
2. Der WebServer muss die Information, welcher Button / Link gedrückt wurde, empfangen und
ein entsprechendes Kommando über die serielle Schnittstelle an das Interface senden.
Beide Schritte können in einer html-Datei zusammengefasst werden. Bitte speichern Sie den folgenden Quellcode im Ordner c:\xampp\xampp\htdocs unter dem Namen „rcl.php“. Diese Datei ist eine
html-Seite, welche PHP-Code (Zeilen 9-35) enthält. Damit Apache zwischen html-Seiten mit und ohne
PHP-Code unterscheiden kann, müssen Seiten mit PHP-Code mit der Erweiterung „.php“ gespeichert
werden.
42
Programm-Code:
01
02
03
04
05
06
07
08
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>elementares RCL</title>
</head>
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
if (isset($_POST['Kommando'])){
//wurde bereits Kommando gesendet?
if( ! ( $handle = fopen( 'COM1:', 'w+' ) ) )
//Schnittstelle öffnen
{
throw new Exception( 'Can not access serial port', 2 ); //ohne Erfolg?
}
fwrite( $handle, $_POST['Kommando'] .chr( 13 ) );
//Befehl an Interface senden
switch ( $_POST['Kommando'] ){
//Antwort von Interface auswerten:
case 'LED?': {
$tmp = fgets( $handle );
//Echo von Interface ignorieren
$antwort = fgets( $handle ); //Antwort des Interfaces
echo 'Antwort: '.$antwort;
//Ausgabe auf Webseite
break;
//switch verlassen
}
case 'SW?' :{
$tmp = fgets( $handle );
//Echo von Interface ignorieren
$antwort = fgets( $handle ); //Antwort des Interfaces
echo 'Antwort: '.$antwort;
//Ausgabe auf Webseite
break;
//switch verlassen
}
}
<body>
fclose( $handle );
}
else {
`mode com1: BAUD=9600 PARITY=N data=8 stop=1 xon=off`;
}
?>
//Schnittstelle schließen
//Schnittstellenparameter setzen
43
37 <h3>Befehl senden:</h3>
38 <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
39
<input type="hidden" name="Kommando" value="LED ON" >
40
<input type="submit" value="LED anschalten" >
41 </form>
42 <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
43
<input type="hidden" name="Kommando" value="LED OFF" >
44
<input type="submit" value="LED ausschalten" >
45 </form>
46 <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
47
<input type="hidden" name="Kommando" value="LED?" >
48
<input type="submit" value="LED abfragen" >
49 </form>
50 <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
51
<input type="hidden" name="Kommando" value="SW?" >
52
<input type="submit" value="Taster abfragen" >
53 </form>
54 </body>
55 </html>
44
Erläuterungen zum Quelltext:
Hier können wir nur auf einige zentrale Punkte eingehen. Zum Verständnis von html-Seiten oder PHP
finden Sie im Internet zahlreiche Tutorials, Handbücher, Online-Hilfen. Empfehlenswert sind die Dokumente „selfhtml“ und „selfphp“. Weiterhin finden Sie unter www.php.net ein ausführliches OnlineManual.
Die Webseite zu unserem elementaren RCL entspricht dem „Standard“-Aufbau einer html-Seite
(head,body), in den in der ersten Hälfte (Zeile 9-35) ein PHP-Programm eingefügt ist und in der zweiten Hälfte die Buttons implementiert sind. Das PHP-Programm wird auf dem Server jedesmal ausgeführt, sobald die Seite von einem Browser angefordert wird. Es wertet die Eingaben des Benutzers
(welcher Button wurde gedürckt?) aus und kommuniziert mit dem Interface.
Im Beispiel wird für jede Funktion des Interfaces ein Button mit Hilfe der Formularanweisung ( <form
...> ... </form>) erzeugt. Werden Daten per Button durch den Browser an den Server übertragen, so
können diese auf dem Server mit PHP ausgewertet werden. Die übertragenen Variablen (=<input
...>Felder im html-Formular) stehen dann dem PHP-Programm als Variable unter dem Namen
$_POST[’ <input name ...’] zur Verfügung.
Zeile 10:
In der ersten PHP-Zeile wird geprüft, ob überhaupt schon ein Button gedrückt wurde, d.h. ob die Variable $_POST[’Kommando’] bereits existiert. Beim ersten Aufruf der Webseite ist dies natürlich nicht
der Fall, dann verzweigt das PHP-Programm in den else-Teil und konfiguriert über den mode-Befehl
die serielle Schnittstelle. Dies ist nur einmal vor dem ersten Zugriff nötig.
Zeile 11-29:
Wurde bereits ein Button gedrückt, so wird in Zeile 11 die serielle Schnittstelle geöffnet, in Zeile 15
das entsprechende Kommando zum Interface geschickt, in den Zeilen 17-27 wird bei Anfragen an das
Interface, dessen Antwort gelesen (fgets) und ausgegeben (echo). Anschließend wird in Zeile 29 die
Schnittstelle wieder geschlossen. Beim Lesen vom Interface nach einem Schreibbefehl, muss ein
„Dummy“-Lesebefehl erfolgen, da das Interface zuerst jede Eingabe, die es erhält, ähnlich einem Echo
nochmals zurücksendet. Erst danach wird die eigentliche Antwort gesendet. (Dieses Verhalten ist für
die Kommunikation per Terminal-Programm wichtig.)
Zeile 38-53:
Jeder Button wird als Formular definiert. Ausführliche Details finden Sie beispielsweise in der Anleitung selfhtml (mit google im Internet suchen). Auf einige Besonderheiten möchten wir dennoch hinweisen: Die Zuweisung action="<?=$_SERVER['PHP_SELF']?>" bewirkt, dass sich diese Webseite
beim Drücken eines Buttons selbst erneut aufruft. So ist sichergestellt, dass die gesendeten Daten
vom php-Programm im oberen Teil der Webseite empfangen und ausgewertet werden, unabhängig
davon, welchen Namen Sie der Datei geben. Die Zeile <input type = "hidden" name = "Kommando"
value = "LED ON" > definiert einen verborgenen Button. Dadurch wird Variable „Kommando“ eingeführt, deren Wert („LED ON“) später von PHP in der Form $_POST['Kommando'] ausgewertet werden
kann. Der Button <input type="submit" value="LED anschalten" > ist schließlich der sichtbare, den der
Benutzer drücken kann.
45
Inbetriebnahme des Webservers
Unter Windows gibt es das Problem, dass der Webserver nach einem Neustart des Systems erst auf
die serielle Schnittstelle zugreifen kann, wenn diese zuvor einmal mit dem Hyperterminal von Windows geöffnet und wieder geschlossen wurde. Deshalb müssen Sie zuerst wie oben beschrieben das
Hyperterminal öffnen, eine Verbindung zum Interface herstellen und (wichtig!) diese Verbindung wieder trennen, so dass Apache und PHP ab dann auf die serielle Schnittstelle zugreifen können.
Rufen Sie das XAMPP Control Panel auf
und starten Sie Apache.
Die Webseite „rcl.php“ sollte sich im Verzeichnis ..\htdocs befinden.
Öffnen Sie Ihren Browser und geben Sie die URL http://127.0.0.1/rcl.php ein. Sie „besuchen“ jetzt
Ihren eigenen PC, d.h. Ihr Computer ist Server und Client zugleich.
So sieht die Webseite im Browser aus.
Es wurde zuvor der Button „LED abfragen“ gedrückt.
Sie können jetzt das Interface steuern
und den Status von LED und Taster abfragen.
46
Erweiterungsmodule (Relais, Motor, Schalter, Lampe)
In den vorangegangenen Kapiteln haben Sie sich mit dem Microcontroller-Interface, insbesondere mit
dessen Aufbau und Programmierung vertraut gemacht. Wenn Sie die dort erarbeitete Grundversion
des Interfaces für die Steuerung eines von Ihnen individuell geplanten Versuchsaufbaus einsetzen
möchten, muss es an die speziellen Anforderungen angepasst werden. Dieses Kapitel zeigt Ihnen
einige Vorschläge zur Ansteuerung von üblichen Komponenten, die häufig beim Aufbau eines Experiments Verwendung finden.
Alle Schaltungen sind modular konzipiert und sind darauf ausgelegt, direkt im Lochrasterfeld auf der
Interface-Platine aufgebaut zu werden. Kurze BASCOM Programmsequenzen zeigen Ihnen, wie die
Baugruppen angesprochen werden können
Hinweis: Grundsätzlich sollten Sie immer die Datenblätter der verwendeten Bauteile lesen!
Gleichstromverbraucher: Relais, Lämpchen,...
Die Ausgänge des Microcontrollers dürfen nur mit kleinen Strömen (<10mA) belastet werden. Möchten
Sie größere Ströme schalten, bieten sich Transistoren oder Relais an, wobei Relais selbst wieder mit
einem Transistor angesteuert werden müssen.
Folgende Schaltung demonstriert die Verwendung eines Transistors zum Schalten von 12V Gleichspannung. Als Verbraucher wird ein Relais eingesetzt. Es können natürlich beliebige Verbraucher
verwendet werden, beispielsweise ein Lämpchen, ein Elektromagnet oder ein Heizelement. Je nach
benötigtem Stromfluss müssen unterschiedliche Transistormodelle verwendet werden. Der BC337
kann maximal 800mA schalten.
Der Emitter des npn-Transistors (Ende mit Pfeilspitze) wird
dazu direkt an Masse angeschlossen, der Verbraucher (hier
Relais mit Schutzdiode) wird zwischen Versorgungspannung
und Kollektor geschaltet. Die Basis wird über einen Schutzwiderstand zur Begrenzung des Stromes mit einem Ausgang des
Microcontrollers verbunden. Liefert der Microcontroller +5V,
wird der Transistor leitend und „verbindet“ den Verbraucher mit
Masse – er schaltet also den Verbraucher ein. In diesem Beispiel schaltet dann auch das Relais. Die Diode schützt den
Transistor bei induktiven Verbrauchern (Spule, Relais, Motor,...), indem sie die beim Ein- und Ausschalten entstehenden
Induktionsspannungsspitzen ableitet.
+12V
1N4001
µC:PortA.0
10K
BC337
Bascom – Beispielprogramm zum Ein- und Ausschalten von PortA.0:
ddrA.0 = 1 'Pin 0 von Port A als Ausgang (=1) schalten (ddr=datadirection)
portA.0 = 1 'Pin 0 von Port A einschalten (d.h. +5V)
portA.0 = 0 'Pin 0 von Port A ausschalten (d.h. Masse)
Diese Schaltung spielt in der Praxis, insbesondere mit einem Relais als Verbraucher, eine sehr wichtige Rolle. Mit Hilfe des Relais können Sie (nahezu) beliebige Spannungen schalten, sowohl Gleich- als
auch Wechselspannungen. Dadurch wird es möglich mit dem Microcontroller Netzspannungsgeräte zu
betreiben. (ACHTUNG: beim Umgang mit Spannungen größer 40V besteht LEBENSGEFAHR. Machen Sie sich unbedingt mit den entsprechenden Sicherheitsbestimmungen vertraut, ebenso mit den
Richtlinien zur Erdung und zur galvanischen Trennung der Stromkreise)
In dieser Schaltung werden also „zwei“ Schalter genutzt: Der Transistor schaltet das Relais und das
Relais schaltet dann erst den eigentlichen Verbraucher (im Schaltbild nicht eingezeichnet). Durch die
Verwendung des Relais erhalten Sie auch eine galvanische Trennung zwischen Microcontroller und
den Geräten des Versuchsaufbaus. Dies ist insbesondere bei Fehlfunktionen oder Defekten der Versuchsapparatur notwendig, damit der Microcontroller auf keinen Fall mit Netzspannung (230V) in Kontakt kommt.
47
+Ub
µC: PortA.0
1
18
µC: PortA.2
3
16
µC: PortA.1
2
µC: PortA.3
4
µC: PortA.4
5
µC: PortA.5
6
µC: PortA.6
7
µC: PortA.7
17
ULN2803A
Sollen mehrere Verbraucher gesteuert werden, bietet sich
der IC ULN2803A an. Er hat im Prinzip acht Transistoren
inklusive Schutzdioden integriert und vereinigt somit acht der
obigen Schaltungen in einem kleinen Gehäuse. Die
Verbraucher sind zwischen der Versorgungspannung und
den Pins 11-18 anzuschließen. Sie können über die Eingänge des ULN2803A (Pin 1-8) ein- bzw. ausgeschaltet werden.
Die Schutzdioden sind auf Pin 10 zusammengefasst und
müssen mit der Versorgungsspannung verbunden werden.
8
9
15
14
13
12
11
10
Beispiel für gleichzeitigen Zugriff auf alle 8 Pins eines Ports
ddrA
= 255 'alle Pins von Port A als Ausgang schalten
portA
= &10101010 'jeden zweiten Pin von Port A einschalten (&x = Binärzahl)
portA.7 = 0 'Pin 7 von Port A ausschalten
PortA
= 0 'alle Pins von Port A ausschalten
Gleichstrom-Motor
10k
+5V
Einen Gleichstrommotor können Sie natürlich als
Gleichstromverbraucher ansehen und ihn wie
1
16
zuvor beschrieben betreiben. Bei Motoren ist es
µC: PortA.0
µC: PortA.2
2
15
jedoch manchmal wünschenswert, die DrehrichMotor 1 “+”
Motor 2 “+”
3
14
tung durch den Microcontroller zu ändern. Hierfür
4
13
eignet sich der Treiber IC L293. Er kann zwei Mo5
12
toren betreiben und diese unabhängig voneinan6
11
Motor 1 “-”
Motor 2 “-”
der umpolen. In der gezeigten Schaltung sind die
10
µC: PortA.1
7
µC: PortA.3
Enable-Eingänge des L293 auf „high“ gelegt, d.h.
8
+U
der Stromfluss durch Motor 1 wird nur noch durch
den Zustand der Leitungen 1A und 2A bestimmt:
L293D
(1A = 2A = 0: Motor aus, 1A = 1 und 2A = 0: Motor
dreht sich, 1A = 0 und 2A = 1: Motor dreht sich entgegengesetzt). Der IC benötigt +5V als Spannungsversorgung für sich selbst, die Stromquelle für die Motoren wird an PIN 8 (Vcc2) angeschlossen.
Motor (max 36V)
Taster
Um den Zustand eines Schalters oder Tasters durch den µC: PortA.0
Microcontroller abzufragen, schließen Sie den Schalter
Kerko
wie gezeigt an. Der Kondensator ist optional und unter100nF
Schalter
drückt das Prellen des Tasters. Unter Prellen versteht
man die Schwingung des mechanischen Kontaktes des
Schalters, d.h. wenn ein Taster geschlossen wird,
schließt dieser nicht sofort „endgültig“, sondern im Bereich von einigen Millisekunden nach dem Betätigen des Schalters wird der Kontakt mehrmals geschlossen, wieder geöffnet und wieder geschlossen.
Beispiel zum Abfragen eines Eingangs:
ddrA.0 = 0
'Pin 0 von Port A als Eingang schalten
portA.0 = 1 'internen Pull-Up Widerstand aktivieren, d.h. an Pin0 liegen +5V an
und beim Schließen des Schalters wird er auf 0V gezogen
Print pinA.0 'Zustand des Eingangs Pin 0 von PortA auslesen
Print portA.0 'Achtung Verwechslungsgefahr: Zustand des Pull-Up auslesen
48
bipolarer Schrittmotor
Für die Ansteuerung von Schrittmotoren gibt es zahlreiche Lösungen. Grundsätzlich muss zwischen
unipolaren und bipolaren Schrittmotoren unterschieden werden. Unipolare können wie vier Gleichstromverbraucher behandelt werden, die in entsprechender Schrittfolge an- und ausgeschaltet werden. Bei bipolaren Schrittmotoren müssen die beiden Spulen jedoch umgepolt werden. Sie könnten
die Schaltung aus dem Abschnitt Gleichstrom-Motoren verwenden und mit einem L293 einen Schrittmotor ansteuern. Häufig wird auch eine Schaltung aus L297+L298 verwendet.
Die hier vorgestellte Schaltung verwendet den TMC222 von Trinamic und ist nur für bipolare Schrittmotoren geeignet. In diesem IC sind ein eigenständiger Schrittmotorkontroller und ein Motortreiber
integriert. Der TMC222 wird über I2C (von Atmel auch TWI genannt) vom Microcontroller angesprochen und übernimmt dann „selbstständig“ die Steuerung des Schrittmotors. Ein Vorteil dieser Schaltung ist der relativ geringe Programmieraufwand, da der TMC222 sich eigenständig um die richtige
Ansteuerung des Schrittmotors kümmert: Der TMC222 unterstützt Beschleunigen und Abbremsen des
Schrittmotors, Variation des Spulenstroms, Verwaltung der Motorposition uvm.
TMC222
Wir stellen hier ein Modul vor, welches Sie auf einer geätzten Platine aufbauen sollten und diese dann
mit einer Stiftleiste auf die Interface-Platine stecken. Da hier ein SMD-Bauteil (TMC222) verwendet
wird, können Sie diese Schaltung nicht direkt auf Lochrasterplatine bestücken. Wenn Sie das Herstellen einer eigenen Platine vermeiden möchten, können Sie auch einen „SMD auf Rastermaß 2,54“
Adapter kaufen. Hierbei handelt es sich um eine Platine mit Lötaugen für entsprechende SMDBauteile und Bohrungen für eine Stiftleiste.
Schaltplan des TMC222-Moduls
1 - TWI: SCL
2 - TWI: SDA
3 - A1
4 - A2
5 - B1
6 - B2
7 - VBAT
8 - SW -VBAT
9 - SW
10 - SW -GND
11 - GND
Ätzvorlage für die Platine (hier nicht maßstabsgerecht!)
Anordnung der Bauteile (der TMC wird auf die Unterseite gelötet)
49
+12V
7,8
10K
10K
+5V
1
2
PortC.0 (SCL)
PortC.1 (SDA)
TMC222
Modul
3
4
5
6
Schrittmotor
10,11
Das TMC222-Modul wird über zwei Leitungen an den Microcontroller angeschlossen.
Wichtig ist hierbei, dass in diesem Fall die
Anschlüsse PortC.0 und PortC.1 verwendet
werden sollten, da der ATmega16 auf diesen
Pins das I2C-Protokoll unterstützt. Weiterhin
sind noch zwei Widerstände und die Versorgungsspannung
anzuschließen.
Beim
Schrittmotor ist darauf zu achten, dass eine
Spule an die Anschlüsse 3 und 4, die andere
an 5 und 6 angeschlossen werden.
Ansteuerung des TMC222 Moduls über I C mit Bascom. Zum Verständnis der übertragenen Werte ist
das Datenblatt des TMC222 notwendig.
2
$regfile = "m16DEF.dat"
$crystal = 11059200
$baud = 9600
'****Definitionen:****
Config Scl = Portc.0
Config Sda = Portc.1
Const Adress = &B11000000
Const GetFullstatus1 = &B10000001
Const Resetpos = &B10000110
Const Motorparameter = &B10001001
Const Setposition = &B10001011
Dim Puffer(10) As Byte
'****Programm:****
I2csend Adress , GetFullstatus1
I2creceive Adress , 7 , Ack
Puffer(1)
Puffer(2)
Puffer(3)
Puffer(4)
Puffer(5)
Puffer(6)
=
=
=
=
=
=
Motorparameter
255
255
&B11110011
&B01110001
&B00010000
Puffer(7) = 0
Puffer(8) = &B00001100
00:nicht belegt
I2csend Adress , Puffer(1) , 8
'Taktleitung
'Datenleitung
'I2C Adresse des TMC222
'Kommando des TMC222
'Kommando des TMC222
'Kommando des TMC222
'GetFullstatus1 (Initialisierung des TMC222)
'Daten in Puffer auslesen
'puffer auffüllen
'nicht belegt
'nicht belegt
'1111:irun; 0011:ihold
'0111:vmax; 0001:vmin
'000:securepos(bit10-8); 1:shaft;
'0000:acceleration
'securepos(bit7-0)
'000:nicht belegt; 0:accshape; 11:stepmode;
I2csend Adress , Resetpos
'aktuelle Position auf 0 setzen
Puffer(1) = Setposition
Puffer(2) = 255
Puffer(3) = 255
Puffer(4) = &B01111111
Puffer(5) = &B11111111
I2csend Adress , Puffer(1) , 5
'Motor bewegen
'nicht belegt
'nicht belegt
'position(bit 15-8)
'position(bit 7-0)´
End