dB-Messung mit dem ATmega32
Der AD-Wandler des Mega32 kann Differenzmessungen mit einfacher,
10-facher und 200-facher Verstärkung ausführen. Damit hat man
alles für ein AC-Pegelmessgerät mit großem Messumfang
von über 80 dB. Das hier verwendete Messverfahren ist
inspiriert von Martin Ossmanns SDR-Kurs in Elektor und wurde hier auf dem ES-M32 umgesetzt.
Im kleinsten Messbereich arbeitet das Programm mit
200-facher Verstärkung. Die Software bildet jeweils die Differenz zwischen ADC0
und ADC1 und summiert den Absolutwert von 1000 Messungen auf. Damit erhält man
die mittlere Wechselspannung.
Sobald sich die Spannung dem Ende des Messbereichs
nähert, wird automatisch auf den nächst höheren Bereich umgeschaltet. Der
jeweilige Bereich 1, 2 oder 3 wird mit angezeigt.
Das
Programm wurde in Bascom geschrieben. Messungen zeigen, dass die
Frequenz des Messsignals nur wenig Einfluss auf die Messung hat. Mit
guter Genauigkeit darf die Frequenz im Bereich 50 Hz bis 500 kHz liegen.
Download: ESM32ACdB.zip
'ATmega32, AD-Wandler dB-Meter 40...120 dBµV
$regfile = "m32def.dat"
$crystal = 11059200
$hwstack = 16
$swstack = 32
$framesize = 32
Baud = 9600
Dim N As Integer
Dim D As Integer
Dim Dd As Long
Dim Db As Single
Dim Bereich As Byte
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 2
Initlcd
Cls
Locate 1 , 1
Lcd "AD"
Config Adc = Single , Prescaler = 64 , Reference = Internal
Start Adc
Waitms 1000
Cls
Bereich = 1
Do
If Bereich = 1 Then
Dd = 0
For N = 1 To 1000
D = Getadc(11) ' (ADC1-ADC0)*200
If D > 512 Then
D = D - 1024
End If
D = Abs(d)
Dd = Dd + D
Next N
Dd = Dd / 33
If Dd > 5000 Then Bereich = 2
End If
If Bereich = 2 Then
Dd = 0
For N = 1 To 1000
D = Getadc(9) ' (ADC1-ADC0)*10
If D > 512 Then
D = D - 1024
End If
D = Abs(d)
Dd = Dd + D
Next N
Dd = Dd / 33
If Dd > 5000 Then Bereich = 3
If Dd < 300 Then Bereich = 1
Dd = Dd * 20
End If
If Bereich = 3 Then
Dd = 0
For N = 1 To 1000
D = Getadc(16) ' (ADC0-ADC1)*1
If D > 512 Then
D = D - 1024
End If
D = Abs(d)
Dd = Dd + D
Next N
Dd = Dd / 33
If Dd < 300 Then Bereich = 2
Dd = Dd * 200
End If
Locate 1 , 1
Lcd Dd
Lcd " uV "
Lcd Bereich
Lcd " "
Db = Dd
Db = Log10(db)
Db = Db * 20
Locate 2 , 1
Dd = Db
Lcd Dd
Lcd " dBuV "
Waitms 1000
Loop
End
Elektronik-Labor Projekte AVR