
Zwei astabile Multivibratoren mit Attiny13
von Hubert Freisinger, OE3FHA
Vor einiger Zeit benötigte ich zwei astabile Multivibratoren. Dafür
gibt es die verschiedensten Lösungen, die bekanntesten sind NE555 oder
RS-Flip Flop oder JK- Flip Flop oder diskret mit Transistoren etc. Alle
haben eines gemeinsam, man benötigt externe Bauteile, dies hätte nur
durch Bestellung dieser ICs für mich realisiert werden können, mein
Lager ist in diese Richtung ziemlich aufgebraucht. Wie wäre es,
gänzlich ohne externer Bauteile dies mit einem Attiny13 zu realisieren,
diese habe ich in besseren Zeiten in großer Stückzahl in China geordert
und es ist kein einziger Kondensator oder Widerstand nötig, das
bedeutet erhebliche Verringerung der Ausfallquote und gezielte
Definition des Ausgangsimpulses mit hoher Langzeitstabilität. Gesagt,
getan.
Gefordert waren zwei Flipflops mit Low Eingangsimpuls von unbestimmter
Dauer auf High Ausgangsimpuls von jeweils 50 und 100 msek. Erst nach
einem kompletten Low-High Durchgang sollte in meinem Fall ein neuer
Ausgangsimpuls dieser definierten Länge generiert werden. Da entstand
mein kleines Programm für den Tiny13. Es ist relativ einfach die
Eingangs und Ausgangsbedingungen zu ändern um andere Funktionalitäten
zu erreichen. Ich überlasse es gerne jedem der es benötigt die
Parameter nach Belieben zu ändern.
Download: T13Flipflop.zip
'
'Astabiles Duo-FipFlop mit frei einstellbarer Kippzeit
'
'pinb.0 = Eingang Flip-Flop1 (aktiv L)
'pinb.1 = Eingang Flip-Flop2 (aktiv L)
'portb.2 = Ausgang Flip-Flop1 (aktiv H)
'portb.3 = Ausgang Flip-Flop2 (aktiv H)
'
'Die Zeit des Ausgangsimpuls bezieht sich auf 9,6MHz Takt!
'
'-------------------------------------------------------------------------------
$regfile = "attiny13.dat" 'verwendeter Prozessor
$crystal = 9600000 'Definition des Takt
Ddrb = &B0000_1100 'konf Port's B auf > 0=Eingabe 1=Ausgabe
Pinb = &B0000_0011 'Pullup-Widerstand setzen
Dim A as Word 'Zähler Flip-Flop A
Dim B as Word 'Zähler Flip-Flop B
config debounce = 0 'Zeit für Tastenentprellung auf 0 setzen
'Programm ======================================================================
do
if portb.2=0 then debounce pinb.0,0,FFA,sub 'Flip-Flop A
if portb.3=0 then debounce pinb.1,0,FFB,sub 'Flip-Flop B
'Flip-Flop A
if portb.2=1 then A=A+1
if A=16000 then 'A=16000 ~100ms Ausgangsimpuls
portb.2=0
A=0
endif
'Flip-Flop B
if portB.3=1 then B=B+1
if B=8000 then 'B=8000 ~50ms Ausgangsimpuls
portb.3=0
B = 0
endif
loop
'Unterroutine ==================================================================
FFA:
PortB.2=1
return
FFB:
portb.3=1
return