Frequenzmessung mit der Ping-Pong-Platine

von Hermann Nieder

Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller


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.


  

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. 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: ping_frqm2_gr.zip


Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller