Mert Ncoef = 1 volt? (For 1 to 1)-nek pedig nem láttam értelmét!
Ez már kész!
Kód: Egész kijelölése
'$regfile = "m128def.dat"
$regfile = "m64def.dat"
$crystal = 16000000
$hwstack = 174
$swstack = 174
$framesize = 174
$baud = 19200
'-------------------------------------------------------------------------------
' ADC
'-------------------------------------------------------------------------------
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Const Ncoef = 5
Const Dcgain = 128
Dim Acoef(ncoef) As Word
Dim Bcoef(ncoef) As Integer
Acoef(1) = 5055
Acoef(2) = 20222
Acoef(3) = 30333
Acoef(4) = 20222
Acoef(5) = 5055
Bcoef(1) = 8192
Bcoef(2) = -19411
Bcoef(3) = 18956
Bcoef(4) = -8639
Bcoef(5) = 1535
Dim Iiry(ncoef) As Dword ' //output samples
Dim Iirx(ncoef) As Word '//input samples
Dim N As Byte , Ir As Byte
Dim Adcw As Word , Iirw As Word
Declare Function Iir(byval Newsample As Word)as Word
Do
For Ir = 1 To Ncoef
Adcw = Getadc(1)
Iirw = Iir(adcw)
' Waitms 20 'Vajon kel ide WAIT? Vagy elég időt tölt az "Iir" rutinba?
Next Ir
Print Iirw
Loop
End 'end program
Function Iir(byval Newsample As Word)as Word
Local Dw As Dword
Local Dw2 As Dword
' //shift the old samples
For N = Ncoef To 1 Step -1
IirX(n) = IirX(n - 1)
IirY(n) = IirY(n - 1)
Next N
' //Calculate the new output
IirX(1) = Newsample
IirY(1) = Acoef(1) * IirX(1)
For N = 1 To Ncoef
Dw = Bcoef(n) * Iiry(n)
Dw2 = Acoef(n) * Iirx(n)
Dw2 = Dw2 - Dw
Iiry(1) = Iiry(1) + Dw2
Next N
Iiry(1) = Iiry(1) / Bcoef(1)
Iir = Iiry(1) / Dcgain 'Return=
End Function