| Weitere Artikel aus dem Elo-Magazin |
Frequenzmessung mit der Ping-Pong-Platine
von Hermann Nieder
Lässt sich der Mikrocontroller auf der Ping-Pong-Platine [1] so programmieren, dass man mit wenigen zusätzlichen Bauteilen in einem bestimmten Bereich Frequenzen messen und ihren Wert mit den Leuchtdioden als ganze dreistellige Zahl anzeigen lassen kann? Dies ist möglich, wie ich im Folgenden aufzeigen werde.
| Ganzen Artikel lesen... | ![]() |

Die zusätzliche Schaltung passt auf ein kleines Steckboard. Sie besteht aus einer Transistorstufe mit Gegenkopplung, der das Wechselspannungssignal, dessen Frequenz gemessen werden soll, an der Basis von T1 über einen Kondensator zugeführt wird. Das Ausgangssignal steht zur Impulsformung am Eingang einer Schmitt-Triggerstufe eines Bausteins CD4093 an. Sein Pin 11 (B) ist mit Anschluss INT0 (Portd.2) des ATMEGA8 der Ping-Pong-Platine verbunden. Mit einer anderen Schmitt-Triggerstufe, zwei Widerständen und einem Kondensator ist ein Taktgenerator aufgebaut. Dessen Ausgangssignal steht am Eingang einer weiteren Stufe an, wird negiert und steht am Ausgang A zur Verfügung. Beim Anschluss eines Verbrauchers werden auf diese Weise Rückwirkungen auf die Frequenz des Taktgenerators vermieden. Durch Austausch des abgebildeten Kondensators durch ein Exemplar mit einer anderen Kapazität kann der Frequenzbereich des Signals an Anschluss A grob festgelegt werden, während die Feineinstellung durch das Trimmpotenziometer P1 erfolgt. Im Initialisierungsteil des Programmlistings wird u. a. 256 als Vorteiler für den Timer0 festgelegt und dieser gestartet.
Sub Initialisierung
...
Config Timer0 = Timer , Prescale = 256
Enable Timer0
Start Timer0
On Timer0 Tim0_isr
End Sub
...
Um bei einer Frequenz von 8000000 Hz mit dem Vorteilerwert von 256 eine Torzeit von 1 Sekunde für den Frequenzzähler einzustellen, wird Timer0 mit 6 geladen, damit bis zum Überlauf (Overflow) 250 Schritte erforderlich sind. Der Inhalt der Variable Timer_2 darf schrittweise vom Anfangswert 0 bis zum Betrag 125 steigen.
...
'8000000:256:250:125=1
Tim0_isr:
Timer0 = 6
'250 bis Overflow
Portb.6 = Not Portb.6
Incr Timer_2
If Timer_2 < 125 Then
Goto Timer0_end
End If
If Timer_2 = 125 Then
Timer_2 = 0
Incr Sekunde
End If
Timer0_end:
Return
...

Der Inhalt der Variablen „Timer_2", „Sekunde" sowie „Frequenz" ist jeweils zunächst 0. Anschließend wird ähnlich wie in einem Programmlisting zur Frequenzmessung im Handbuch eines Lernpakets von Burkhard Kainka [2] während der Torzeit des Frequenzzählers die Anzahl der Impulse am Messeingang gezählt, um den Inhalt der Variablen Frequenz anschließend als Dezimalwert anzeigen zu können.
...
Do
Timer_2 = 0
Sekunde = 0
Frequenz = 0
Z1:
Enable Timer0
Z_bit = Pind.2
If Z_bit = 0 Then
Goto Z2
End If
If Sekunde = 1 Then
Goto Z4
Else
Goto Z1
End If
Z2:
Z_bit = Pind.2
If Z_bit = 1 Then
Goto Z3
End If
If Sekunde = 1 Then
Goto Z4
Else
Goto Z2
End If
Z3:
Incr Frequenz
If Frequenz < 10000 Then
Goto Z4
End If
Z4:
If Sekunde < 1 Then
Goto Z1
End If
Disable Timer0
Z5:
Dat = Frequenz
Gosub Dez_darst
Gosub Darst_hz_zi1
Loop
Es wird zunächst der Betrag der Frequenz, wie z. B. im Bild oben 530, ermittelt, um ihn anschließend zusammen mit dem Kurzzeichen der Einheit "Hz" wie im Bild anzeigen zu können. Dies geschieht in den folgenden Programmschritten.

...
Darst_hz_zi1:
' Datei: Hz_u
'Leds(1) = Splt1_1
Leds(2) = Splt2_1
Leds(3) = Splt3_1
Leds(4) = Splt4_1
Leds(5) = 992 + Splt5
Leds(6) = 128 + Splt6
Leds(7) = 992 + Splt7
Leds(8) = Splt8
Leds(9) = 576 + Splt9
Leds(10) = 832 + Splt10
Leds(11) = 704 + Splt11
Leds(12) = 576 + Splt12
Return
...
Die Ziffern werden auf der Ping-Pong-Platine „rechtsbündig" dargestellt. Neun der Leuchtdioden der ersten Spalte werden zur Anzeige der Tausenderstelle genutzt.Der gemessene Wert der Frequenz im folgenden Bild lautet: 1175 Hz.

...
'Darstellung der Frequenz im Dezimalformat
Dez_darst:
Tausender = Dat / 1000
Tausender1 = Tausender * 1000
Dat = Dat - Tausender1
Hunderter = Dat / 100
Zeichen = Hunderter
Gosub Darstellung1
Hunderter1 = Hunderter * 100
Dat = Dat - Hunderter1
Zehner = Dat / 10
Zeichen = Zehner
Gosub Darstellung2
Zehner1 = Zehner * 10
Dat = Dat - Zehner1
Einer = Dat
Zeichen = Einer
Gosub Darstellung3
'Anzahl der Punkte in 1. Spalte = Anzahl der Tausender (maximal 9)
Select Case Tausender
Case 0 : Splt1_1 = 0
Case 1 : Splt1_1 = 16
Case 2 : Splt1_1 = 24
Case 3 : Splt1_1 = 28
Case 4 : Splt1_1 = 30
Case 5 : Splt1_1 = 31
Case 6 : Splt1_1 = 63
Case 7 : Splt1_1 = 127
Case 8 : Splt1_1 = 255
Case 9 : Splt1_1 = 511
End Select
Return
...
Die Werte zur Darstellung der Buchstaben „Hz" sowie die der einzelnen Ziffern wurden mit einer verbesserten Version des Programms „Mustergenerator" [3] bestimmt und in das Programmlisting in BASCOM AVR übernommen. Hier ist ein Auszug davon für die Anzeige der Ziffern 0 bis 2:
...
Zeichen_z:
Select Case Zeichen
'Zifferndarstellung oben
Case 0:
Splt1 = 0
Splt2 = 31
Splt3 = 17
Splt4 = 31
Case 1:
Splt1 = 0
Splt2 = 0
Splt3 = 2
Splt4 = 31
Case 2:
Splt1 = 0
Splt2 = 29
Splt3 = 21
Splt4 = 23
...
Mit der Ping-Pong-Platine als Frequenzmesser kann z. B. die Frequenz des Taktgenerators auf dem Steckboard gemessen werden und ihre Veränderung beim Ändern der Schleiferposition des Trimmpotenziometers mit einem Schraubendreher beobachtet werden. Die Anzeige im Bild lautet: 2546 Hz. Sollen höhere Frequenzen als 9999 Hz gemessen werden können, ist zwischen den Ausgang der Verstärkerstufe mit dem Transistor und den Eingang INT0/Portd.2 der Ping-Pong-Platine ein Vorteiler zu schalten. Hinweise dazu sind in einem anderen ELO-Beitrag [3] zu finden. Mit zwei Ics des Typs 74HC390, die jeweils zwei Dekadenzähler enthalten, ist sogar eine Frequenzteilung durch 10 000 möglich.
Die komplette Schaltung passt auf ein kleines Steckboard. Das IC CD4093 entfällt in diesem Fall. Für eine feste Teilung der zu messenden Frequenz durch 1000 kann die LED-Anzeige z. B. wie im folgenden Bild aussehen.

Download: Programmlisting ping_frqm2_gr.bas
Literatur, Bezugsquellen:
[1] www.conrad.de, Ping-Pong-Bausatz
[2] B.Kainka „Lernpaket Mikrocontroller", www.franzis.de, www.franzis.de, 2007
[3] www.elo-web.de, Beitrag „Experimente mit dem Attiny13 und einem VCO-IC 74LS624"
[4] www.elo-web.de, Beiträge zu Ping-Pong, u. a. diejenigen mit Hinweisen zur selbständigen Entwicklung von Programmen in BASCOM AVR für die Ping-Pong-Platine sowie „Mustergenerator"
[5] B. Kainka, M.Häßler, H.W. Straub "Grundwissen Elektronik", www.franzis.de, 2004
[6]Ulli Sommer „Lernpaket Mikrocontrollertechnik mit BASCOM", www.franzis.de, 2009













