Sparrow-Frequenzmesser
von Hermann Nieder
Der ATtiny13 auf der Sparrow-Platine lässt sich auch als recht brauchbarer Frequenzmesser z.
B. zum Überprüfen von Digitalschaltungen
verwenden. Portpin PB4 dient dabei als Eingang. Das Bild zeigt als
einfache Anwendungsmöglichkeit die
Anzeige der Netzfrequenz beim Anschluss eines Wechselstromverbrauchers.
Das Programm wurde u. a. auch an einer
Baudratengeneratorschaltung mit einem 74HC4060 und einem 4,9152 MHz-Quarz erprobt,
die an der gleichen Spannungsquelle wie die Sparrow-Platine angeschlossen war. Bei Erfassen der Frequenz am
19,2 kHz-Ausgang blinkte der
ATtiny13 z. B. nacheinander die
Ziffern 1 9 2 2 6. Eine gewisse Eichmöglichkeit besteht im schrittweisen Ändern des Wertes 150 innerhalb der Interruptroutine. Darauf wird
im Programmlisting hingewiesen.
Die Anzeige des Frequenzwertes erfolgt ähnlich wie bei dem
Projekt „Sparrow-Voltmeter mit
Messbereich von 0 bis etwa 9, 99 V“, das
an anderer Stelle auf diesen Seiten bereits vorgestellt worden ist, indem die
Leuchtdiode an Portpin PB3 im Rhythmus von Morsezeichen blinkt. Das Programm in Bascom AVR ist in Anlehnung an
dasjeinge Listing zu einem Beitrag
über eine Frequenzmessung mit dem
Atmega8 auf der Ping-Pong-Platine (www.elektronik-labor.de/Lernpakete/LProehren2.html)
entstanden.
Wird S1 gedrückt, erfolgt in der einen Programmversion die Darstellung der Frequenz. In der geringfügig anderen Programmversion wird auf das
Drücken von S1 verzichtet. In diesem Fall erfolgt ein fortwährendes
Bestimmen und anschließendes Anzeigen
der Frequenz. In beiden Programmversionen wird die erfasste Frequenz jeweils mit fünf Zeichen ausgegeben, also
werden z. B. auch bei einem Frequenzwert
von 50 Hz zuerst drei Nullen „geblinkt“, bevor die beiden in diesem Fall
wesentlichen Zeichen angezeigt werden. Der Programmspeicher des Attiny13a ist fast vollständig belegt.
Auch wenn kein Wechselstrom-Verbraucher angeschlossen ist,
erfolgt durch den ATtiny13a eine Anzeige der Netzfrequenz.
Download: Sp_freqmsT13_a_b.zip
Direkt laden: http://tiny.systems/categorie/cheepit/Frequenzmesser.html
'Sp_Freqms02a.bas
$regfile = "attiny13a.dat"
$crystal = 1200000
$hwstack
=
8
$swstack
=
4
$framesize = 4
Config Portb = &B00001010
Declare Sub Initialisierung
Declare Sub Ausgabe
Declare Sub Dez_darst
Declare Sub Blink_rt_l
Declare Sub Blink_rt_k
Declare Sub Warten_l
Declare Sub Warten_k
Declare Sub Zwei_l
Declare Sub Zwei_k
Dim Timer_2 As Byte
Dim Sek As Byte
Dim Freq As Word
Dim Freq_wert As Word
Dim Ziffer As Byte
Config Portb = &B00001010
Initialisierung
Do
Timer_2 = 0
Sek = 0
Freq = 0
Set Portb.1
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
'Gruene LED erlischt
Reset Portb.1
Waitms 1000
'fortwaehrende Anzeige
'ohne Betaetigung von S1
Dez_darst
Loop
'"Blink-Darstellung" im Dezimalformat
Sub Dez_darst
'Zehntausender
Freq_wert = Freq \ 10000
Ziffer = Freq_wert
Ausgabe
Waitms 300
'Tausender
Freq = Freq Mod 10000
Freq_wert = Freq \ 1000
Ziffer = Freq_wert
Ausgabe
Waitms 300
'Hunderter
Freq = Freq Mod 1000
Freq_wert = Freq \ 100
Ziffer = Freq_wert
Ausgabe
Waitms 300
'Zehner
Freq = Freq Mod 100
Freq_wert = Freq \ 10
Ziffer = Freq_wert
Ausgabe
Waitms 300
'Einer
Freq_wert = Freq Mod 10
Ziffer = Freq_wert
Ausgabe
Waitms 300
End Sub
Sub Ausgabe:
Select Case Ziffer
Case 0:
Blink_rt_l
Zwei_l
Zwei_l
Waitms 300
Case 1:
Blink_rt_k
Zwei_l
Zwei_l
Waitms 300
Case 2:
Zwei_k
Blink_rt_l
Zwei_l
Waitms 300
Case 3:
Zwei_k
Blink_rt_k
Zwei_l
Waitms 300
Case 4:
Zwei_k
Zwei_k
Blink_rt_l
Waitms 300
Case 5:
Zwei_k
Zwei_k
Blink_rt_k
Waitms 300
Case 6:
Blink_rt_l
Zwei_k
Zwei_k
Waitms 300
Case 7:
Zwei_l
Zwei_k
Blink_rt_k
Waitms 300
Case 8:
Zwei_l
Blink_rt_l
Zwei_k
Waitms 300
Case 9:
Zwei_l
Zwei_l
Blink_rt_k
Waitms 300
End Select
End Sub
Sub Zwei_l
Blink_rt_l
Blink_rt_l
End Sub
Sub Zwei_k
Blink_rt_k
Blink_rt_k
End Sub
Sub Blink_rt_l
Set Portb.3
Waitms 450
Reset Portb.3
Waitms 150
End Sub
Sub Blink_rt_k
Set Portb.3
Waitms 150
Reset Portb.3
Waitms 150
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