This is an old revision of the document!


Table of Contents

Schalter

Neccesary knowledge: [HW] User Interface Module, [AVR] Registers, [AVR] Digital Inputs/Outputs, [LIB] Pins, [PRT] Light-emitting Diode

Theorie

Ein Schalter ist ein elektromagnetisches Gerät, welches einen elektrischen Schaltkreis verbindet oder trennt. Es gibt viele Typen von Schaltern, die verbreitetsten sind einfache mechanische Schalter, wo elektrische Anschlüsse mechanisch geschaltet werden. Wenn die Anschlüsse verbunden sind wird der elektrische Schaltkreis geschlossen und Strom kann durch den Schalter fließen. Wenn die Anschlüsse nicht verbunden sind, kann keine Elektrizität fließen.

Schalter werden normalerweise benutzt um elektrische Schaltkreise an zuschalten, aber sie können auch als Sensoren benutzt werden. Der Schalter als Sensor ist auch Teil dieser Übung, daher werden Hochspannungsschalter ausgelassen. Schalter können unterschieden werden durch die Anzahl an Kontakten und deren Verbindungsmethode. Unterschiedliche Typen sind: zwei-Kontakt Schalter und Doppelschalter, wo Kontaktpaare verbunden werden, aber auch Druckknopf-, Hebel- , Wechselschalter sind auch Schalter, genau wie Schalter die Verbindungen trennen anstatt zu verbinden.

Unterschiedliche Schaltbildsymbole werden genutzt um die unterschiedlichen Typen von Schaltern zu identifizieren. Unterhalb sind Beispiele typischer elektrischer Schalter in einem Schaltbild:

Druckknopfschalter Wechselschalter Hebelschalter Microschalter DIL Schalter

Um einen Schalter als Sensor mit einem Microcontroller zu nutzen, muss ein Kontakt des Schalters am Pin des Microcontrollers verbunden sein und dieser muss als Input im Programm definiert werden. Wenn der Kontakt mit der Erde oder einem Inputpotential verbunden ist, wir die Bus Bitrate des Microcontroller-Pins geändert. Es erscheint logisch einen Wechselschalter zu nutzen, welcher es erlaubt einen Kontakt an den gewünschten Kontakt anzubringen. Für unseren Zweck ist es nicht ganz so einfach, denn im Moment des Schaltens sind die Kontakte nicht verbunden. Der Moment selber ist sehr kurz (ms), aber in diesem Moment ist der Inputpin des Microcontroller mit niemanden verbunden und hat daher einen unendlichen Wert. Auf Grund elektromagnetischer Interferenz (welche überall existiert) kann der InputPin der mit nichts angeschlossen ist, zufällig einen Wert von 0 oder 1 haben.

Die Interferenz verkompliziert die Benutzung von Schaltern. Die am häufigsten verwendete Methode um dies zu verhindern, ist es den Input des Microcontrollers durch einen Widerstand an die Erde oder das Inputpotential anzuschließen. Einen so benutzten Widerstand nennt man einen pull-down oder pull-up Widerstand. Normalerweise ist der Widerstand eines pull-down/pull-up zwischen 1kΩ bis 1 MΩ. Wenn der Schalter offen ist, wird der Input mit der Spannung des Widerstands geladen, wenn man den Schalter schließt, erfährt der Input die Spannung des Schalters, da der Widerstand des Schalters im Vergleich zum Widerstand beinahe 0 ist.

Switch connection scheme with pull-up resistor

Ein einfacher zwei-Kontakt Schalter kann als Sensor mit einen pull-up oder pull-down Widerstand genutzt werden, der Schalter wird mit einem Kontakt am Input verbunden und der andere am Widerstand. Normalerweise haben Microcontroller eingebaute pull-up/down Widerstand Optionen, daher ist es nicht notwendig ein Widerstand in den Schaltkreis einzubauen. Zum Beispiel, AVR Microcontroller haben 20 kΩ – 50 kΩ pull-up Widerstände an ihren I/O Pins. Es muss noch erwähnt werden, dass mechanische Schalter ein weiteres Problem haben - “switch bounce”. Dies bedeutet, dass beim Schalten in sehr kleinen Abständen die Verbindung abreißt durch die Schwingung des mechanischen Schalters. In den Beispielen dieses Kapitels werden nicht durch Switch bounce beeinflusst, das Problem wird im nächsten Kapitel bearbeitet.

Übung

Es gibt drei Druckknopf-Schalter am digitalen I/O Modul. Diese Schalter verbinden die Pins den Microcontrollers mit der Erde, aber nicht direkt durch einen Widerstand, um einen Kurzschluss zu vermeiden, wenn der Knopf gedrückt wird, während der Pin als Output definiert ist. Die Schalter haben einen pull-up Widerstand, aber diese haben einen viel größeren Widerstand als Schutzwiderstände, daher liegt beim Drücken des Schalter eine Spannung von nur nahe 0V am Pin an.

Die Schalter sind an den PC0, PC1 und PC2 Pins. Um den Status der Schalter zu lesen müssen die Pins des Microcontorllers als Input gesetzt werden. Man benötigt nicht die internen pull-up Widerstände des AVRS, da die Pins schon externe Widerstände haben. Wenn der Knopf gedrückt wird, hat der entsprechende Bus des Pins den Wert 0, wenn der Knopf losgelassen wird, den Wert 1. LED Indikatoren können benutzt werden, um der Micrcontroller den Status den Knopfs verstanden hat.

Der Beispielcode um die Knöpfe zu nutzen basiert auf der HomeLab Pins Library, welche im LED Abschnitt eingeführt wurde.

//
// Program for testing the buttons of the Digital i/o module
//
#include <homelab/pin.h>
 
//
// Determining the pins of LED-d and buttons.
//
pin leds[3]    = { PIN(C, 5), PIN(C, 4), PIN(C, 3) };
pin buttons[3] = { PIN(C, 2), PIN(C, 1), PIN(C, 0) };
 
//
// Main program
//
int main(void)
{
	unsigned char i;
 
	// Setting the LED pins as outputs and buttons pins as inputs.
	for (i = 0; i < 3; i++)
	{
		pin_setup_output(leds[i]);
		pin_setup_input(buttons[i]);
	}
 
	// Endless cycle
	while (true)
	{
		// Each button has a corresponding LED,
		// which lights when button is pressed.
		for (i = 0; i < 3; i++)
		{
			pin_set_to(leds[i], pin_get_value(buttons[i]));
		}
	}
}

Im Beispiel werden LEDS und Knöpfe als Array definiert - das erlaubt es Sie im for loop zu nutzen. Wenn das Programm startet, sind die LED Pins als output und die Knöpfe als Input gesetzt. In der Endlosschleife des Programms wird ein konstant der Status der Knöpfe abgefragt, welcher den Status der dazugehörigen LED bestimmt. Der erste Knopf ist für die grüne LED, der Zweite für die Gelbe und der Dritte für die Rote.

de/examples/digi/switch.1289346929.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0