Impulsschalter mit PIC10F200
und Kodierung des Startverhaltens
Mit drei Anschlüssen, die als Ein- oder Ausgänge definiert werden können, und einem Anschluss, der konstant als
Eingang fungiert, eignet sich der Mini-Mikrocontroller PIC10F200 ausgezeichnet für kleine Aufgaben. Für einen Impulsschalter werden
nur ein Eingang und ein Ausgang benötigt. Damit stehen bei dem kleinen Mikrocontroller noch zwei Anschlüsse, die für andere Zwecke
verwendet werden können, frei zur Verfügung.
Die Aufgabe der Schaltung ist simpel. Mit einem Knopfdruck wird ein Abnehmer, in diesem Fall eine Leuchtdiode, eingeschaltet.
Mit einem weiteren Knopfdruck wird er wieder ausgeschaltet.
Um die beiden freien Anschlüsse nicht unbenutzt zu lassen, erweitern wir die Schaltung um noch eine zusätzliche Funktion. Mit
weiterem Eingang, der optional verdrahtet werden kann, wird der Zustand des Schaltausganges nach Spannungswiederkehr (Startverhalten)
bestimmt.
Trotz dieser Erweiterung der Grundfunktion eines Impulsschalters bleibt die Anzahl der Komponenten, die an der Schaltung
teilnehmen, sehr gering. Neben dem Mikrocontroller werden ein Taster, eine Leuchtdiode und drei Widerstände benötigt. Ein in der
Testschaltung eingebauter Codierschalter kann mit einer Brücke ersetzt werden.
PIC10F200
Der kleine Mikrocontroller gehört zu den kleinsten PICs überhaupt. Er stellt uns für das Programm einen Speicher, der 256
Words vertragen kann, zur Verfügung. Ganz große Sprünge sind mit dem PIC nicht zu machen. Für ganz kleine Aufgabe steht er jedoch
als Alternative in der ersten Reihe.
// ***************************************************************************
// Impulsschalter mit PIC10F200 und Kodierung
// MPLAB X IDE v6.00
// XC8-Compiler 2.4
// ***************************************************************************
#include <xc.h>
#include <stdbool.h>// PIC10F200 Konfiguration
#pragma config WDTE = OFF // Watchdog Timer
#pragma config CP = OFF // Code Protect
#pragma config MCLRE = OFF // Master Clear (GP3/MCLR)
#define _XTAL_FREQ 4000000 // Taktfrequenz
#define LED_Ausgang GPIObits.GP0 // GP0 ist LED-Ausgang
#define Taster GPIObits.GP1 // GP1 ist Taster-Eingang
#define Kodierung GPIObits.GP2 // GP2 ist Eingang für Kodierung
_Bool LED_Merker; // Aktueller Stand des Ausgangs
_Bool Um_Merker; // Hilfsmerker Umschaltung
void main(void) {
LED_Ausgang = 0; // LED AUS
TRIS = 0b00000110; // GP0=Ausgang, GP1=GP2=Eingang
if (Kodierung == 0) // Startverhalten laut Kodierung
LED_Merker = true; // Kodierung aktiv = LED AN
while(1) { // Endloschleife
LED_Ausgang = LED_Merker; // LED EIN oder AUS
if (Taster == 0) { // Taster betätigt?
if (Um_Merker == false) { // Merker deaktiviert?
Um_Merker = true; // Neuer Wert
if (LED_Merker == false) { // LED AUS?
LED_Merker = true; // LED_Merker setzen
goto OK; // Keine Abfrage mehr
}
if (LED_Merker == true) //LED EIN?
LED_Merker = false; // Neuer Wert
OK: // Goto Sprungziel
__delay_ms(50); // Prellen abwarten
}
}
if (Taster == 1) { // Taster losgelassen?
if (Um_Merker == true) { // UM_Merker noch aktiv?
Um_Merker = false; // UM_Merker zurücksetzen
__delay_ms(50); // Prellen abwarten
}
}
}
}
Die Testschaltung
Impulsschalter mit PIC10F200 - Testschaltung
Nachdem die GPIOs passend eingestellt wurden (GP0 als Ausgang, GP1 und GP2 als Eingänge) fragt das Programm nach
dem Start (Spannung EIN), ob der Codierungsschalter geöffnet oder geschlossen ist. Bei dem geschlossenen Codierungsschalter
bekommt der „LED_Merker“ den Wert “true“. Dieser Wert entscheidet, ob nach dem Einschalten die Leuchtdiode ein- oder ausbleibt.
Bei „LED_Merker = true“ wird die Leuchtdiode nach dem Start eingeschaltet. Ansonsten bleibt sie aus. Mit dem Codierungsschalter
kann man also das Startverhalten der Leuchtdiode bestimmt.
Anschließend geht das Programm in eine Endlosschleife und fragt permanent GP1, der als Eingang definiert ist (Taster), ab. Wird
der Taster betätigt, kommt der „UM_Merker“ ins Spiel. Mit diesem Merker wird verhindert, dass der Ausgang, falls jemand den Taster
über längeren Zeitraum gedrückt hält, ständig umschaltet wird.
Die Umschaltung der Leuchtdiode darf bei einem Tastendruck nur einmal erfolgen. Der nächste Umschaltvorgang darf erst dann
stattfinden, wenn der Taster losgelassen und anschließend wieder betätigt wird.