Zwei astabile Multivibratoren mit Attiny13          

von Hubert Freisinger, OE3FHA                       
 
                      Elektronik-Labor  Bastelecke  Projekte  Mikrocontoller                         




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



Elektronik-Labor  Bastelecke  Projekte  Mikrocontoller