V27 - Mikrocontroller

Ähnliche Dokumente
Nachtaktiver Blinker. Ralf Pongratz. 11. November 2012

Der Magnetfeldsensor HMC5883L

Für schnelle und bequeme Entwicklungen wird gern Basic eingesetzt.

Die Software zum Unser kleiner Computer

Stefan Hoffmann. Leichter Start mit BASCOM und myavr

Temperaturmessung mit dem ATmega8

RalfPongratz. Grundversion. Reaktivlichtmit7SegmentAnzeige

Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein:

LED Skalenbeleuchtung mit einem Arduino

AVR-Mikrocontroller in BASCOM programmieren, Teil 2

Daten loggen mit der STI100-Platine

3 Achsen Accelerometer

Arduino Kurs Das LC-Display. Stephan Laage-Witt FES Lörrach

LED Skalenbeleuchtung mit einem Arduino

LCD-Ansteuerung mit MikroForth

qfix ASCII-Protokoll

Arduino Kurs Timer und Interrupts. Stephan Laage-Witt FES Lörrach

Befehlstabelle awapswitch Anwendung

150 ma (bei eingeschalteter Hintergrundbeleuchtung)

Mikrocontroller. eine Einführung. Florian Schmitt / 34

Mikrocontroller. Vortrag von Louis Liedtke. 8. Dezember Fakultät Elektrotechnik und Informatik. Bild 1: Atmel ATmega8

'

Klausur PHMJ02 SS2012. Mikrocontroller und Robotik. Mittwoch GUTEN ERFOLG!!!

Ansteuerung eines LCD-Screens

Atmega Interrupts. Rachid Abdallah Gruppe 3 Betreuer : Benjamin Bös

Gemischte Schüler-Übungen Abbrechende Schleifen und Unterprogramme

SIOSLAB. Technische Daten:

Die Temperaturmessung mit dem Sensor LM75. Andreas Heller & Eduard Auer

Lösungen der Aufgaben

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil 8: gavrasmw und weitere Beispiele

Geschrieben von: Malte Freitag, den 16. Juli 2010 um 21:28 Uhr - Aktualisiert Montag, den 05. Dezember 2011 um 18:09 Uhr

Arduino Kurs Bits und Bytes. Stephan Laage-Witt FES Lörrach

Ruecklicht-V1 von Peter Krueger /

Ampelsteuerung Merkblatt 2 Wie wird der Arduino programmiert?

Puls Weiten Modulation (PWM)

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

Aufgaben zur Attiny-Platine

Einführung Microcontroller

TM1638-Anzeige-Taster-Modul

Parallel-IO. Ports am ATmega128

Bauanleitung Öltemperaturanzeige für Mercedes W124

Befehlstabelle awapswitch

Selbstschließende Hand (SsH)

Serielle Kommunikation - Kodierung

Mini- Mikroprozessor-Experimentier-System. Version 1.0b vom :21. mit einem 8051-Mikrocontroller

Johannes Kelper Universität Linz. Institut für Elektrische Messtechnik. Dokumentation. ATmeag8-USB Modul. Bernd R. Arminger ATmega8-USB Modul 1

TTL-GPS-Modul an Attiny2313-Platine

Servo-Modul Version

AVR-Mikrocontroller in BASCOM programmieren

Aufgabenstellung Praktikum Mikrorechentechnik Sommersemester 2014

PROFE 2. Lycée Technique des Arts et Métiers Projet de fin d' études 2014/2015. FELTES Jean Claude Messstation im Musée Nationale des Mines

Einführung in die Welt der Microcontroller

Tag 2 Eingabe und Interrupts

Zeitrelais PL0045 mit optionaler PC-Anbindung

Rauschgenerator mit AVR

Forth-Vokabular. Vokabular für Attiny2313-Forth Stand: A: Assembler-Wort F: Forth-Wort C: Compiler-Wort

grifo Mini Module Test 2

4-Kanal-Analoglogger für die Regelungstechnik

Mikrocontroller - Schnelleinstieg

Projektlabor. LCD Ansteuerung

Infokarte: Snap4Arduino

USB > I2C- Bus Modul. Startet den I2C-Bus. Daten einlesen NACK senden

Mikrocontroller: Einführung

Praktische Einführung in die AVR-NET-IO. Programmierung

FRANZIS PC & ELEKTRONIK

Über die Status-Befehle kann die Peripherie der gesamten Hard- und Firmware abgefragt werden.

C++ mit dem Arduino (Uno und Mega2560)

IR-Schaltinterface IR-001

Projektdokumentation: DCF 77 Funkuhr

RN-LCD-Adapter - STD. Doku vom (stets aktuelle Dokumentation verwenden)

foexlab-materialien Arduino-Schaltungen First Steps Gottfried Wilhelm Leibniz Universität Hannover

Grundlegende Programmiertechniken

ARDUINO KENNENLERNEN WAS IST EIN ARDUINO?

Die AVR Mikrocontrollerfamilie

SMP Übung 8 - Lösungsvorschlag

Einführung in die Informationstechnik. Eingabe - Verarbeitung - Ausgabe CIUS - KREISLICHT. Realschule Tamm Technik Axel Steinbach

Alkoholsensor MQ135, Time-Delay, Mailbox und LCD

Bootloader FastBoot von Peter Dannegger

Mikrocontroller Einstieg ATmega 8

Jan Monsch. Donnerstag, 2. Mai 13

Einführung Arduino - Aufbau

Funk - Was ist das überhaupt?

Arduinio Projekt. Inhaltsverzeichnis

Der BBC Micro:Bit. B) Physical Computing. 1) Experimente mit LEDs a) Grundlagen

#include <pic.h> #include <pic1687x.h> #define FOSC L #define BAUD 9600L

Institut für Computational Science Prof. Dr. H. Hinterberger. Praxismodul 1. Einführung in die Programmierung Erste Programme

1 Die CD-ROM zum Buch Inhalt der CD-ROM GPL (General Public License) Systemvoraussetzungen Updates und Support 13

Entwicklungsboard 16F1824

Computergestützter IC- Entwurf

Das kleine Einmaleins

5-Tonfolgen Dekodierung mittels AVR

SINNsorik Wahrnehmen durch Sensoren NAME, KLASSE:

Praktikum Komponenten & Programmierung von Automatisierungssystemen

Vielleicht weil das Beschleunigungssensor- Modul von ELV so ein Verkaufsschlager war, hat

SCHÜEX MECKLENBURG-VORPOMMERN

Die Sonne spielt Musik

Arbeitsblatt Nr.19: RFID Kit

Bisher hatten immer nur als Ausgänge geschaltet und hierfür folgende Befehle benutzt:

Transkript:

V27 - Mikrocontroller Christian Wagner 13. Mai 2008 Protokoll von und Datum, Uhrzeit: Betreuer: Michael Dieblich Christian Wagner 07.05.2007, 8:00-15:00 Uhr Herr DI Axel Fechner

Inhaltsverzeichnis 1 Einleitung 2 2 theoretische Vorbereitung 2 2.1 allgemeine Bemerkungen.............................. 2 2.2 benötigte Untensilien................................ 3 2.3 Versuchsaufbau................................... 3 3 Durchführung 3 3.1 der erste Versuch: ein Lauflicht bzw. ein Schrittmotor............. 3 3.2 Das erweiterte Lauflicht.............................. 5 3.3 Temperaturmessung und Ausgabe auf dem Display............... 5 3.4 Auswertung einer Fernbedienung mit Soundausgabe und vielen Extras.... 6 3.5 Visionen....................................... 10 4 Zusammenfassung 12 5 Anhang, letzte Angaben, Literaturverzeichnis 12 1

1 Einleitung Braucht man für eine automatisierte Messung immer einen ganzen Computer, der alles steuert? Oder wie ist das mit einfachen, Schaltungen, die über einen Lautsprecher Musik abspielen? Dazu wird offensichtlich nicht immer ein ganzer Rechner benötigt. Nicht jeder will 900 für eine Geburtstagskarte ausgeben, die einfach nur happy birthday abspielen soll. Genausowenig für ein einfaches, digitales Thermometer, das hierzulande weniger als 5 kostet. Oder braucht man für eine Netzwerkanbindung eines Druckers oder einer Internetcamera immer einen funktionierenden Computer, an den das Gerät angeschlossen ist? Der Schlüssel zum ganzen sind programmierbare Mikrocontroller, die auch in unseren PCs herumwerkeln. Sie erledigen kleine, lästige Arbeiten völlig unabhängig von anderen Komponenten und können fast alles, was ein Computer auch kann - aber nur eine spezielle Aufgabe innerhalb einer Schaltung. 2 theoretische Vorbereitung Die Theorie zu diesen Mikrocontrollern ist entweder sehr kurz oder sehr lang, je nachdem, welche Bedürfnisse gestillt werden sollen. Man könnte Bücher schreiben oder auch einfach eine kurze Doku zur Programmiersprache. Weil es das alles schon gibt, soll in diesem Protokoll keine grundlegende Einführung dieser Sprache geschrieben werden, sondern nur die grundlegendsten Befehle anhand von Anwendungen dargestellt werden. 2.1 allgemeine Bemerkungen Ein AVR ist ein Mikrocontroller, der von der Firma Atmel vertrieben und weiterentwickelt wird. Ursprünglich wurde er an der Universität Trondheim/Norwegen entwickelt. Der Name AVR hat an sich keine Bedeutung, laut Entwickleraussagen (siehe [2]). Der Kern eines AVRs ist der Prozessor, der nur etwa 4000 Gates besitzt (im Vergleich zu einem aktuellen Prozessor: Intel Itanium 2 Montecito mit 1.720.000.000 Gates, 2006 entwickelt, siehe [1]). In Ihm steckt also nicht die Rechenleistung von heutigen PCs, aber dennoch ausreichend viel, um sehr viele Anwendungen zu ermöglichen. Der Prozessor ist ein RISC-Prozessor ( Reduced Instruction Set Computer ), d.h. er arbeitet mit einem vereinfachten Befehlssatz. Dadurch wird der Prozessor so schnell und komplexe Befehle werden softwareseitig aus diesen einfachen zusammengesetzt. Man kann den AVR also auch direkt in Assembler programmieren mit dem Nachteil, dass der Aufwand zu groß und die Anwendung des Codes auf einen AVR spezifiziert ist. Deshalb wurde die Software BASCOM entwickelt (Programmiersprache basierend auf BASIC), die einen Compiler besitzt und dadurch die Programmierung deutlich erleichtert. Außerdem kann man durch Abändern einer Zeile das Programm auf einem anderen AVR laufen lassen. Der Nachteil dieser Methode ist, dass für extrem schnelle und kleine Anwendungen mehr Code erzeugt und durchlaufen wird, sodass schnellere Chips als eigentlich nötig wären herangeschafft werden müssen. 2

2.2 benötigte Untensilien Bei diesem Versuch benötigt man grundlegend folgende Geräte: ˆ einen Computer mit einer Anbindung zum Programmiergerät und Programmiersoftware ˆ ein Programmiergerät für den AVR ˆ den AVR selbst ˆ Peripherie um den AVR wie LEDs, Schrittmotor, IR-Sensor und Lautsprecher 2.3 Versuchsaufbau Wir verwendeten einen ATmega16. Das ist ein recht großer Prozessor mit 16 kb Programmspeicher. Dieser wird über den Computeranschluss und der Programmiereinheit mit dem Programm bespielt. Anschließend wird der AVR in der Testschaltung verbaut, sodass das gewünschte Ergebnis zu sehen ist. Die Schaltung für einen AT90S1213 sieht folgendermaßen aus: Abbildung 1: Der Aufbau eines Testschaltkreises für einen AVR: Den Baustin MAX232ACPE gibt es bei uns nicht. Die Anbindung an den Rechner zum Brennen besteht aus den 5 Pins 1 und 17-20, die Pins 2-5 sind für die Kommunikation mit dem Rechner vorgesehen und die freien Pins können beliebig als Ein- oder Ausgänge in den AVR benutzt werden, z.b. für die 3 LEDs 3 Durchführung 3.1 der erste Versuch: ein Lauflicht bzw. ein Schrittmotor Das erste Programm stellt ein Lauflicht dar und sieht folgendermaßen aus: 3

$regfile = "m16def.dat" $crystal = 1000000 Config Lcd = 24 * 2 Config Lcdpin = Pin, Db4 = Portd.4, Db5 = Portd.5, Db6 = Portd.6, Db7 = Portd.7, E = Portd.3, Rs = Portd.2 Config Portd = Output Config Portb = Output Deflcdchar 1, 32, 10, 32, 14, 18, 18, 14, 32 replace? with number (0-7) Deflcdchar 2, 32, 10, 32, 17, 17, 17, 17, 31 replace? with number (0-7) Config Rc5 = Pinc.0 Enable Interrupts Dim A As Integer Dim B As Integer Portb = 0 Lcd "Chrisware presents" Lowerline Lcd "Lauflicht Nr. 1" A = 1 B = 0 Do Portb = A A = A * 2 Verschiebung des Bits nach rechts Rücksetzung des Bits If A = 256 Then A = 1 Waitms 100 Loop End Mit $regfile wird gekennzeichnet, um welchen AVR es sich handelt, mit $crystal legt man die Taktfrequenz fest. Config Lcd = 24*2 wird ein Display konfiguriert, das 24 Zeichen in 2 Zeilen besitzt. Mit den Zeilen Config Lcdpin = Pin, Db4 = Portd.4, Db5 = Portd.5, Db6 = Portd.6, Db7 = Portd.7, E = Portd.3, Rs = Portd.2 Config Portd = Output Config Portb = Output werden die Pins konfiguriert, sodass die Ports Portd und Portb als Ausgang dienen. Ports sind sozusagen Untereinheiten der Pins der AVR. Auf der Schaltung werden die LEDs also an den Portb angeschlossen und das LCD-Display an den Portd. Die Zeilen Dim A As Integer Dim B As Integer legen zwei ganzzahlige Variablen fest. Dafür wird im AVR Speicherplatz reserviert. Nun beginnt das eigentliche Programm. Mit wird der Bildschirm des Displays gelöscht und es erscheint der Text Chrisware presents auf der ersten Zeile, gefolgt von Lauflicht Nr. 1 auf der zweiten Zeile. 4

Durch die Do... loop - Schleife wird nun eine Endlosschleife erzeugt, die das Lauflicht zum Leuchten bringt. Die Binärzahlen der variablen A, auf die hier nicht weiter eingegangen werden soll, stellen den Leuchtzustand der 8 LEDs dar. Dabei ist die Augabe jedoch invertiert, d.h. an der Stelle, wo eine 1 steht, wird die LED ausgeschalten. Zum Schluss wird der AVR dazu gezwungen, 100 ms zu warten und schließlich die Schleife erneut zu durchlaufen. Das Ergebnis ist ein Lauflicht, wobei 8 LEDs in Reihe angeschaltet sind und immer eine ausgeschaltet wird. Die ausgeschaltete LED läuft sozusagen Vom Anfang ans Ende uns springt zurück an den Anfang. Die Schrittmotorsteuerung erfolgte analog, aber nur mit 4 LEDs, sodass im Quellcode If A = 16 Then A = 1 steht. Der Schrittmotor kennt insgesamt 4 Stellungen zwischen Rotor und Stator. Je nachdem, welcher Ausgang angesteuert wird, richtet sich der Rotor in Richtung des stromdurchflossenen Spule aus. Lässt man die Ausgänge wie beim Lauflicht durchlaufen, dann dreht sich der Schrittmotor entsprechend. Dadurch kann man diesen sehr gut steuern. 3.2 Das erweiterte Lauflicht Man kann nun mit der Programmierung herumspielen, sodass sich andere Lauflichter ergeben bzw. variierende Schrittmotorgeschwindigkeiten. Die Quellcodes dazu sind reine Platzverschwendung und zeigen keine neuen Erkenntnisse - sie sind mehr Spielerei. 3.3 Temperaturmessung und Ausgabe auf dem Display Nun soll die Temperatur dargestellt werden. Die Temperatur wird durch einen Heißleiter gemessen, der eine Spannung zwischen 0 und 5V zurückgibt. Dieser Wert gibt die absolute Temperatur, wobei T = 0.1V/K ist. Dazu kommt die AD-Wandlung. Die 5V werden in 1024 Teile unterteilt, weshalb die AD-Wandlung einen Integer zwischen 0 und 1024 erzeugt. 5

$regfile = "m16def.dat" $crystal = 1000000 LCD Config Config Lcd = 24 * 2 Config Lcdpin = Pin, Db4 = Portd.4, Db5 = Portd.5, Db6 = Portd.6, Db7 = Portd.7, E = Portd.3, Rs = Portd.2 LED Config Config Portb = Output Led Alias Portb Config Adc = Single, Prescaler = Auto Start Adc Dim W As Word, Channel As Byte Dim Temp As Long Temp = 0 Led = 255 Channel = 0 Do W = Getadc(0) Temp = 5 * 100 Temp = Temp * W Temp = Temp / 1024 Temp = Temp - 273 Lcd "Temperaturfuehler" Lowerline Lcd "Temperatur: " ; Temp ; " Grad C" Waitms 1000 Loop End In diesem Programm muss zuerst die AD-Wandlung vollzogen werden. Sie muss vorerst eingestellt werden mit den Kommandos Config Adc = Single, Prescaler = Auto Start Adc Die erste Zeile bedeutet, dass ein einzelner Wert übergeben wird und der erhaltene Integerwert automatisch skaliert werden soll, d.h. dass die Länge des Binärstrings automatisch bestimmt werden soll. In der 2. Zeile wird die AD-Wandlung gestartet. Mit der Zeile W = Getadc(0) wird der Variablen W der Wert zwischen 0 und 1024 zugewiesen. Diese Zahl wird in den folgenden Rechenschritten in eine Temperatur umgerechnet. Wichtig hierbei ist, dass der Temperatureingang an dem Eingang (= Channel) 0 hängt. Unser AVR besitzt 8 Eingangskanäle, die alle separat ausgelesen werden können. Man kann also viel mehr Sensoren einbauen. 3.4 Auswertung einer Fernbedienung mit Soundausgabe und vielen Extras Nun stellt sich die Aufgabe, das Signal einer Fernbedienung auszuwerten. Dazu muss es dekodiert werden, was uns der Schaltkreis (unter Förderung der Programmierfaulheit) automatisch abnimmt. Wichtig ist immer, den richtigen Pin für die richtige Aufgabe auszuwählen. Ein Hochfrequenzausgang für das Samplen der Tonsequenz, den Decodereingang für das Fernbedienungssignal,... 6

$regfile = "m16def.dat" $crystal = 1000000 LCD Config Config Lcd = 24 * 2 Config Lcdpin = Pin, Db4 = Portd.4, Db5 = Portd.5, Db6 = Portd.6, Db7 = Portd.7, E = Portd.3, Rs = Portd.2 Config Adc = Single, Prescaler = Auto, Reference = Internal Start Adc LED Config Config Portb = Output Led Alias Portb Fernbedienung an Pina.1 Config Rc5 = Pina.1 Enable Interrupts Dim Address As Byte Dim Command As Byte Dim A As Integer A = 1 Dim W As Word Dim Temp As Long Dim C As Integer Dim X As Integer Dim Y As Integer Temp=0 Lcd "Warte Auf Eingangssignal..." Do Getrc5(address, Command) If Command = 1 Then For A = 1 To 3 Sound Porta.6, 1000, 10 Led = 0 Lcd "Techno-Sound!" Waitms 125 Led = 255 Waitms 125 Next End If If Command = 2 Then W = Getadc(0) Temp = 5 * 100 Temp = Temp * W Temp = Temp / 1024 Temp = Temp - 273 Lcd "Temperaturfuehler" Lowerline Lcd "Temperatur: " ; Temp ; " Grad C" Waitms 1500 End If If Command = 3 Then For C = 1 To 10 Lcd C Lowerline Lcd "Lauflicht Extended" 7

Toggle Portb.0 Waitms 1 Toggle Portb.1 Toggle Portb.0 Waitms 2 Toggle Portb.2 Toggle Portb.1 Waitms 4 Toggle Portb.3 Toggle Portb.2 Waitms 8 Toggle Portb.4 Toggle Portb.3 Waitms 16 Toggle Portb.5 Toggle Portb.4 Waitms 32 Toggle Portb.6 Toggle Portb.5 Waitms 64 Toggle Portb.7 Toggle Portb.6 Waitms 128 Toggle Portb.6 Toggle Portb.7 Waitms 64 Toggle Portb.5 Toggle Portb.6 Waitms 32 Toggle Portb.4 Toggle Portb.5 Waitms 16 Toggle Portb.3 Toggle Portb.4 Waitms 8 Toggle Portb.2 Toggle Portb.3 Waitms 4 Toggle Portb.1 Toggle Portb.2 Waitms 2 Toggle Portb.1 Next End If If Command = 4 Then Lcd "Musik aus der" Lowerline Lcd "Konserve" Sound Porta.6, 1000, 23 Sound Porta.6, 1000, 17 8

Sound Porta.6, 1000, 23 Sound Porta.6, 1000, 17 Sound Porta.6, 1000, 23 Sound Porta.6, 1000, 17 Sound Porta.6, 1000, 23 Sound Porta.6, 1000, 23 Sound Porta.6, 1000, 23 Sound Porta.6, 1000, 17 End If If Command = 5 Then Getrc5(address, Command) Waitms 250 X = Address Lcd "Eingabe Zahl 1: " ; X Getrc5(address, Command) Y = Address Lowerline Lcd "Einagbe Zahl 2: " ; Y 0 Lcd "Berechne " ; X ; " + " ; Y 0 X = X + Y Led = 0 Lcd "Ergebnis: " ; X 0 End If Led = 255 Lcd "Warte auf Eingangssingal..." Waitms 100 Loop End 9

Dieses Programmbeispiel ist recht komplex; es enthält fast alles, was wir mit dem Mikrocontroller gemacht haben. Es realisiert folgendes: Wird aus der Fernbedienung die Taste 1 gedrückt, dann erscheint der Text TTechno-Soundäuf dem Display und die LEDs gehen komplett aus. Taste 2 startet die Temperaturmessung und Taste 3 startet ein Lauflicht. Über Taste 4 kann man sich eine kurze Techno-Sequenz anhören und Taste 5 bildet die Summe der beiden Kommandos der Fernbedienung. Neu ist das Auslesen der Fernbedienung: Zuerst muss der Eingang der Fernbedienung ausgewählt werden. Das erfolgt mit dem Kommando Config Rc5 = Pina.1. Dieses Pin ist also für den Fernbedienungseingang zuständig. Die Abfrage erledigt die Zeile Getrc5(address, Command). Dabei wird die Adresse (Videorekorder, Fernseher,... ) des Signals und das Kommando den ensprechenden Variablen, die als Byte definiert werden müssen, übergeben. Das Kommando wird nun mit mehreren If-Abfragen ausgewertet. Man kann mit dem Leuchtdiodenausgang auch einzelne LEDs ansprechen anstelle der Byteweisen Zuweisung. Das hat den Vorteil, dass man sofort weiß, welche LED angesprochen wird, erzeugt aber mehr Code. Ensprechend wird der Lautsprecher angeschlossen: Dieser hängt an Porta.6. Der Befehl Sound Porta.6, 1000,20 sagt dem Mikrocontroller, dass er an den Ausgang Porta.6 das Soundsignal 1000 µs lang mit einer An-Aus-Zeit von 2 ms (entspr. 500 Hz) übergeben soll. Dadurch entsteht ein Rechtecksignal, das an den Lautsprecher angelegt wird und den typischen, synthetischen Rechteckton erzeugt. Dieser wird als sehr unangenehm empfunden, weil bei einer Rechteckfunktion sehr viele, hochfrequente Oberwellen eine Rolle spielen, die mit relativ hoher Intensität gesendet werden. Dennoch ist die Soundsequenz, die das Programm liefert, so manchem Technofreak bekannt. [Auch andere Leute kennen diese Sequenz, empfinden sie aber nach einer bestimmten Einwirkzeit als unangenehm.] Ansonsten bietet dieses komplexe Programmbeispiel keine qualitativen Neuerungen zum alten. 3.5 Visionen Anstelle der Auswertung einer Fernbedienung können 2 AVRs Sender und Empfänger spielen. Der eine sendet ein Signal mit der IR-Diode, die an einen Ausgang angeschlossen wird und der andere empfängt das Signal. Diese IR-Übertragung ist recht langsam, aber funktioniert dennoch, wenn es z.b. um das Übertragen einer Temperatur geht. Dieses Projekt wollten wir jedoch nicht in Angriff nehmen, sondern nur die grundlegende Funktionalität des Programms zeigen. Hier der Quellcode für den Sender: $regfile = "m16def.dat" $crystal = 1000000 LCD Config Config Lcd = 24 * 2 Config Lcdpin = Pin, Db4 = Portd.4, Db5 = Portd.5, Db6 = Portd.6, Db7 = Portd.7, E = Portd.3, Rs = Portd.2 LED Config Config Portb = Output Led Alias Portb 10

Enable Interrupts Dim Togbit As Byte, Command As Byte, Address As Byte Do Address = 1 Command = 1 Togbit = 0 Rc5send Togbit, Address, Command Waitms 1 Loop End Der Befehl Rc5send Togbit, Adress, Command sendet einen Command über eine Adresse ( Adress) mit einem speziellen Togbit. Das ist sozusagen ein Fernbedienungssignal. Dieses wurde mit folgendem Testprogramm empfangen: $regfile = "m16def.dat" $crystal = 1000000 Config Lcd = 24 * 2 Config Lcdpin = Pin, Db4 = Portd.4, Db5 = Portd.5, Db6 = Portd.6, Db7 = Portd.7, E = Portd.3, Rs = Portd.2 Config Portd = Output Config Portb = Output Config Rc5 = Pina.2 Enable Interrupts Dim A As Integer Dim B As Integer Dim C As Integer Dim Adress As Byte, Command As Byte Lcd "Kommando:" Portb = 0 Do Getrc5(adress, Command) Locate 1, 10 Lcd Command ; " " If Not(command = 255) Then For A = 1 To 5 Portb = 255 Sound Porta.6, 300, 50 Waitms 100 Portb = 0 Waitms 100 Next Waitms 300 End If Waitms 100 Loop End Sobald ein reguläres Signal empfangen wurde, blinkt die LED-Anzeige und ein Ton wird ausgegeben. Dazu wird das Kommando auf dem Display angezeigt. Dieser Teil konnte mit der Fernbedienung ohne Probleme getestet werden. Schließlich probierten wir die IR-Übertragung aus, die nach mehreren Fehlschlägen endlich funktionierte. Unsere kollektive Vermutung ist, 11

dass die Sender-LED sehr schwach war und durch die Verringerung des Vorwiderstands an der LED die Lichtausbeute erhöht werden könnte. Möchte man nun eine beidseitige Temperaturübertragung basteln, muss man sich erst auf ein Übertragungsprotokoll einigen, bevor man das Projekt beginnen kann. Das sollte einfach gehalten sein, damit die Kommandos möglichst schnell übertragen werden bzw. um Störungen so wenig Chancen wie möglich zu geben. 4 Zusammenfassung Dieser Versuch ist hervorragend dafür geeignet, um zu sehen, was mit einzelnen Bauteilen der Mikroelektronik möglich ist und auszuprobieren, was man alles machen kann. Er kann eine Grundlage dafür sein, später an Messapparaturen einzelne, günstige Sensoren zu basteln und damit ganz spezielle Messanforderungen zu erfüllen. Man kann damit auch problemlos Nachbarn ärgern, indem man einen IR-Sender baut, der ständig ein Signal zum An- und Ausschalten des Fernsehers sendet und damit jedem Fernsehvergnügen eine Absage erteilt. Diese Anwendung verbietet sich, wenn man nette Nachbarn hat. Wie man sieht, sind der Kreativität keine Grenzen gesetzt. Folgende Aufgaben konnten von uns bewältigt werden: ˆ Ansteuerung einzelner LEDs und Erzeugung von Blinkmustern ˆ Textausgabe auf einem Display ˆ Ansteuerung eines Schrittmotors ˆ Auswertung von Signalen einer Fernbedienung und Ausführung bestimmter Befehle ˆ Ausgabe von Geräuschen auf einem Lautsprecher ˆ Infrarotübertragung eines Signals 5 Anhang, letzte Angaben, Literaturverzeichnis Unterschrift:................................................13. Mai 2008 (Christian Wagner) Unterschrift:................................................13. Mai 2008 (Michael Dieblich) Literatur [1] http://de.wikipedia.org/wiki/transistor [2] http://www.rowalt.de/mc/index.htm 12