ATtiny13 als Monoflop

von Hermann Nieder
 aus ELO 2008
Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller

 

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.

;AD-Wandler-TeilzumEinlesendesFaktorsfürdieDauerdesImpulses

ldiADW1,3
outADCSRA,ADW1
sbiADCSRA,ADEN
decADW1
outADMUX,ADW1;ADC2(PB4)auswaehlen
sbiADMUX,ADLAR;8-Bit-Aufloesungfestlegen
sbiADCSRA,ADSC
AD_frt:
SbicADCSRA,ADSC;WertueberAD-Wandlereinlesen
RjmpAD_frt
SbiADCSRA,ADSC
AD_frt1:
SbicADCSRA,ADSC
RjmpAD_frt1
inADW1,ADCH;undnachADW1uebertragen
;EndedesAD-Wandlerteils

schl:;DerStartsollmitLogikpegelHighanPB3erfolgen.
sbicpinb,3;BeiHighanPB3Sprungzuweiter1
rjmpweiter1

sbispinb,3
rjmpschl;beiLowanPB3wiederzuruecknachschl.

weiter1:
sei;DurchSetzendesGlobalInterruptFlags
;globalenInterruptermoeglichen

schl0:
cpir20,1;IstderInhaltvonRegisterr20bereits1?
;GroessereWerteals1ergebenlaengereDauerdesImpulses.
brloschl0;wennnein,dannzuruecknachschl0
cli;DurchLoeschendesGlobalInterruptFlagsInterruptsperren
cbiportb,0;LEDanPortb.0ausschalten
;notwendigfuereinmaligeAusfuehrungbeiLogikpegelHighanPB3

schl1:
sbispinb,3;BeiHighanPB3gehtesnachweiter2
rjmpweiter2

sbicpinb,3;undbeiLowanPB3wiederzuruecknachschl1.
rjmpschl1

weiter2:
rjmpStart;DerEinfachheitwegenRuecksprungnachStart

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.

 

;AD-Wandler-TeilzumEinlesendesFaktorsfürdieDauerdesImpulses
LdiADW1,3
outADCSRA,ADW1
sbiADCSRA,ADEN
decADW1
outADMUX,ADW1;ADC2(PB4)auswaehlen
sbiADCSRA,ADSC
AD_frt:
SbicADCSRA,ADSC;10Bit-WertueberAD-Wandlereinlesen
rjmpAD_frt
sbiADCSRA,ADSC
AD_frt1:
SbicADCSRA,ADSC
rjmpAD_frt1
inADW1,ADCL;undnachADW1
inADW2,ADCH;sowieADW2uebertragen
incADW2;notwendig,damitderInhaltvonADW2
;auchbeikleinenEingangsspannungen
;mindestens1ist
;EinfuegenvonlslADW2
;Multiplikationmit2
;inderZeiledarunterfuehrtzueiner
;VerdopplungderImpulszeit
;EndedesAD-Wandlerteils


schl:;DerStartsollmitLogikpegelHighanPB3erfolgen.
sbicpinb,3;BeiHighanPB3erfolgteinSprungzuweiter1,
rjmpweiter1
sbispinb,3
rjmpschl;beiLowanPB3wiederzuruecknachschl.

weiter1:
sei;DurchSetzendesGlobalInterruptFlags
;GlobalenInterruptermoeglichen

schl0:
cpr20,ADW2;IstderInhaltvonRegisterr20
;bereitsgleichdemvonADW2?
brloschl0;wennnein,dannzuruecknachschl0
cli;DurchLoeschendesGlobalInterruptFlags
;Interruptsperren
cbiportb,0;LEDanPortb.0ausschalten

;notwendigfuereinmaligeAusfuehrungbeiLogikpegelHighanPB3
schl1:
sbispinb,3;BeiHighanPB3gehtesnachweiter2
rjmpweiter2

sbicpinb,3;undbeiLowanPB3zuruecknachschl1.
rjmpschl1

weiter2:
rjmpStart;DerEinfachheitwegenRuecksprungnachStart

 

 

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.

 

...
schl:;DerStartsollmitLogikpegelLowanPB3erfolgen.

sbispinb,3;BeiLowanPB3erfolgteinSprungzuweiter1,
rjmpweiter1

sbicpinb,3
rjmpschl;beiHighanPB3wiederzuruecknachschl.

weiter1:
....

;notwendigfuereinmaligeAusfuehrungbeiLogikpegelLowanPB3

schl1:
sbicpinb,3;BeiLowanPB3gehtesnachweiter2
rjmpweiter2

sbispinb,3;undbeiHighanPB3wiederzuruecknachschl1.
rjmpschl1

weiter2:
rjmpAnfang;DerEinfachheitwegenRuecksprungnachAnfang
....

Download: Quelletexte T13_MF