Für eines meiner Projekte benötigte ich vor einigen Wochen ein IC, das bei 5 V Gleichspannung folgendes Verhalten zeigt: Der Ausgang nimmt für eine bestimmte Zeit High-Pegel an und danach wieder Low-Pegel, und zwar bei auslösendem kurzem Steuerimpuls oder bei länger anstehendem High-Pegel am Eingang. Es ist dies das Verhalten einer monostabilen Kippschaltung (Monoflop), konnte ich in einem Fachbuch zur Digitaltechnik [1] nachlesen.
Für diese Zwecke gibt es ICs, wie z. B. das
74LS221 mit zwei solchen Kippgliedern oder das CMOS-IC 4047 und andere.
Da ich mich aber gerade ein wenig mit der Programmierung des ATtiny13
beschäftigte, wollte ich versuchen, mit diesem ein Monoflop per
Assembler-Programm mit so wenig externen Bauteilen wie möglich zu
verwirklichen.
Bei einem Monoflop-IC wie den oben genannten
wird normalerweise die Verweildauer durch einen Widerstand und einen
Kondensator festgelegt. Da diese in bestimmten Bereichen einstellbar
sein soll, erfolgt dies durch ein Potenziometer oder Trimmerpoti
zusammen mit einem Kondensator.
Diese Möglichkeit schloss ich
für den ATtiny13 aus und fand im Kapitel „6 Der Timer/Counter" des
Handbuchs zum Lernpaket Mikrocontroller [2] mit der Überschrift
"Minuten-Timer" entscheidende Hilfen für die Gestaltung meines
Assembler-Programms für die Verwendung des Mikrocontrollers als
Monoflop. Der Nachteil eines in Anlehnung an das dort abgedruckte
Listing gestaltetes Assembler-Programm besteht allerdings darin, dass
die Verweildauer für bestimmte Fälle stets neu programmiert werden
müsste.
Wie konnte ich die Zeit einstellbar machen? Beim
intensiven Lesen im Handbuch fand ich eine weitere Hilfe im Kapitel „7
Der AD-Wandler" mit der Überschrift "7.2 8-Bit-Messung". Das Ergebnis
einer solchen Messung ist je nach Eingangsspannung von 0 bis 5 V ein
Zahlenwert von 0 bis 255. Diesen Wert wollte ich zur Einstellung der
Verweildauer des Monoflops nutzen.
Es sollte mit einem High-Pegel an PB3 aktiviert werden können.
Dazu
sah ich mir die Ausführungen zum Auswerten eines Eingangs im Kapitel
„4.7 Digitale Eingänge" genau an und gestaltete auf der Grundlage der
oben drei genannten Beispiel-Programme aus dem Handbuch zum Lernpaket
Mikrocontroller mein Assembler-Programm für den ATtiny13, damit dieser
sich wie ein Monoflop verhält.
Dies ist hier ist ein Ausschnitt aus diesem Assembler-Programm.
Dies ist der Anschlussplan, nach dem ich die Bauteile an den Mikrocontroller anschloss.
Die Bedienung des Monoflops geschieht nach Übertragung der Hex-Datei zum ATtiny13 folgendermaßen:
Durch
kurzes Berühren bzw. lange dauerndes Verbinden des Anschlusses 1 des
10k-Widerstandes mit Vcc wird das Monoflop gestartet, nachdem die
Verweilzeit zuvor mit dem Trimmerpoti eingestellt wurde.
Dieses
stellt je nach Einstellung eine Gleichspannung zwischen 0 und ca. 5 V
bereit, die an ADC2 (PB4) eingelesen und im Programm des ATtiny13 als
Zeitkonstante mit einem Wert zwischen 0 und 255 ausgewertet wird.
Es lässt sich über das Trimmerpoti eine Verweildauer von bis zu etwa 10 Sekunden einstellen.
Eine Vergrößerung der Verweildauer um den Faktor 4 ist auch über eine 10-Bit-Messung möglich.
Hier folgt ein Ausschnitt aus dem Assembler-Programm, das dies berücksichtigt.
Ich probierte auch diese Version des Schaltungsaufbaus aus. Der Widerstand von 10 k ist als Pull-up-Widerstand angeschlossen. Das Monoflop wird mit einem Low-Pegel aktiviert.
Die wesentlichen Programmänderungen sind hier im Ausschnitt eines der jeweiligen Assembler-Listings (8-Bit- Version und 10-Bit-Version) zu erkennen. Diese Zeilen sind bei beiden Listings gleich.
Download: Quelletexte T13_MF