Sparrow-Frequenzmesser                

von  Hermann Nieder                                
      
Elektronik-Labor  Projekte  AVR  Sparrow  Contest          


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


Elektronik-Labor  Projekte  AVR  Sparrow Contest