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