Ein Teil des Programms für den Attiny13a auf der
Sparrow-Platine, mit dem der Mikrocontroller als einfacher Frequenzmesser
dient, lässt sich z. B. auch in einer
„Sparrow-Netzausfallanzeige“„ verwenden. Der Sparrow im Bild bestimmt
fortwährend über ein kurzes Drahtstück als Antenne die Frequenz der Netzspannung.
Solange der ATtiny13 bei der
Netzfrequenz von 50 Hz „feststellt“, dass deren Wert größer als 45 ist, leuchtet
die grüne LED.
Wird die Netzspannung wie in diesem Bild unterbrochen, wird
vom ATtiny13 ein Frequenzwert kleiner als 43 ermittelt, und die rote LED blinkt
etwa im Rhythmus des für „Irrung“ verwendeten
Morsezeichens „di di di di di di
di dit“. Darauf erfolgt eine erneute
Bestimmung der Frequenz, dann wird wieder „Irrung“ geblinkt usw.
Dies geschieht solange, wie die
Netzspannung unterbrochen ist. Bei dem oben erwähnten Blinken der roten LED
wird PB3 bewusst mehrmals für 1
Millisekunde ein- und ausgeschaltet,
damit man zusätzlich zu der optischen Anzeige
zwischen diesem Portpin und Masse
einen vorhandenen Piezo-Schallgeber bzw.
einen kleinen Lautsprecher über einen geeigneten Vorwiderstand
anschließen kann, um die „Irrung“
bei einem Netzausfall auch hörbar zu
machen.
'29.04.2015
$regfile = "attiny13a.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4
Config Portb = &B00001010
Declare Sub Initialisierung
Declare Sub Freq_mes
Declare Sub Netzausfall
Dim Timer_2 As Byte
Dim Sek As Byte
Dim Freq As Word
Dim Freq_wert As Word
Dim Ziffer As Byte
Dim N As Byte
Dim K As Byte
Config Portb = &B00001010
Initialisierung
Set Portb.1
Waitms 1000
Reset Portb.1
Do
Do
Freq_mes
If Freq > 45 Then
Set Portb.1
End If
Loop Until Freq < 43
If Freq < 43 Then
Reset Portb.1
Netzausfall
End If
Loop
Sub Netzausfall
Reset Portb.1
For K = 1 To 8
For N = 0 To 75
Set Portb.3
Waitms 1
Reset Portb.3
Waitms 1
Next N
Waitms 150
Next K
'Waitms 100
End Sub
Sub Freq_mes
Timer_2 = 0
Sek = 0
Freq = 0
Zaehler1:
Enable Timer0
If Pinb.4 = 1 Then
Goto Zaehler2
End If
If Sek = 1 Then
Goto Zaehler4
End If
Goto Zaehler1
Zaehler2:
If Pinb.4 = 0 Then
Goto Zaehler3
End If
If Sek = 1 Then
Goto Zaehler4
End If
Goto Zaehler2
Zaehler3:
Incr Freq
Zaehler4:
If Sek < 1 Then
Goto Zaehler1
End If
Disable Timer0
End Sub
Sub Initialisierung
Enable Interrupts
Config Timer0 = Timer , Prescale = 64
On Timer0 Tim0_isr
End Sub
'1200000:64:125:150=1
Tim0_isr:
Timer0 = 131
Incr Timer_2
'war 150, durch Veraendern gewisse
'Eichmoeglichkeit des Sparrow-Frequenzzaehlers
If Timer_2 < 148 Then
Goto Timer0_end
End If
If Timer_2 = 148 Then
Timer_2 = 0
Incr Sek
End If
Timer0_end:
Return
Es lässt sich
„umgekehrt“ zu dem oben vorgestellten
Programmlisting auch eines für eine „Sparrow-Netzanzeige“ entwerfen.
'Sp_Netzanzeige3.bas
'29.04.2015
$regfile = "attiny13a.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4
Config Portb = &B00001010
Declare Sub Initialisierung
Declare Sub Freq_mes
Declare Sub Netzanzeige
Dim Timer_2 As Byte
Dim Sek As Byte
Dim Freq As Word
Dim Freq_wert As Word
Dim N As Word
Config Portb = &B00001010
Initialisierung
Do
Do
Freq_mes
If Freq > 45 Then
Netzanzeige
End If
Loop Until Freq < 43
If Freq < 43 Then
Set Portb.1
End If
Loop
Sub Netzanzeige
Reset Portb.1
For N = 0 To 250
Set Portb.3
Waitms 1
Reset Portb.3
Waitms 1
Next N
Waitms 500
End Sub
Sub Freq_mes
Timer_2 = 0
Sek = 0
Freq = 0
...
Der übrige Teil des Programmlistings entspricht demjenigen
für die „Sparrow-Netzausfallanzeige“. Ist die vom Mikrocontroller bestimmte Netzfrequenz kleiner
als 43, leuchtet als „Bereitschaftsanzeige“ die grüne LED. Wird bei der Netzfrequenz von 50 Hz deren Wert größer als 45 „erkannt“ erlischt die grüne LED. Nun blinkt
die rote LED mit einer niedrigen Taktfrequenz solange, wie die Netzspannung
ansteht. Auch in diesem Fall besteht ähnlich wie bei der oben
vorgestellten Programmversion die Möglichkeit, z. B. einen Piezo-Schallgeber
zwischen PB3 und Masse anzuschließen.