Mr-400-Volt
27.05.2007, 21:21
Hallo, ich bin gerade dabei mir einen Frequenzzähler zu bauen. Bei der Testhardware lege ich das zu messende Signal an den PinD4 eines Mega8 an, der mit 16Mhz getacktet ist. Ohne einen Teiler erreiche ich eine max. Frequenz von 5Mhz. Ich habe einen Oszillator mit 4.915200Mhz angeschloßen, und erhalte 4.917504Mhz als ergebniss. Ich würde euch bitten, mal über meinen Code zu fliegen, ob mann das ganze noch etwas besser machen kann.
Danke !!!
$regfile "m8def.dat"
$crystal = 16000000
Cls
Cursor Off
Dim Var As Word
Dim Frequ As Long
Config Portb = Output
Config Portd = Input
Config Timer0 = Counter , Edge = Rising 'Eingangssignal
Config Timer1 = Timer , Prescale = 256 ' Messzeit 1 sec.
On Timer0 Timer0_irq
On Timer1 Timer1_irq
Const Timervorgabe = 3036
Enable Timer0
Enable Timer1
Enable Interrupts
Start Timer1
Start Timer0
Dim Var1 As Byte
Dim Freq As Long
Dim W As Long
Portd.4 = 0
Do
Locate 1 , 1
Lcd Frequ
Waitms 60
Loop
Timer0_irq:
Incr Var
Return
Timer1_irq:
Timer1 = Timervorgabe
Stop Timer0
Stop Timer1
Frequ = Var * 256
Var = 0
Timer0 = 0
Start Timer1
Start Timer0
Return
Danke !!!
$regfile "m8def.dat"
$crystal = 16000000
Cls
Cursor Off
Dim Var As Word
Dim Frequ As Long
Config Portb = Output
Config Portd = Input
Config Timer0 = Counter , Edge = Rising 'Eingangssignal
Config Timer1 = Timer , Prescale = 256 ' Messzeit 1 sec.
On Timer0 Timer0_irq
On Timer1 Timer1_irq
Const Timervorgabe = 3036
Enable Timer0
Enable Timer1
Enable Interrupts
Start Timer1
Start Timer0
Dim Var1 As Byte
Dim Freq As Long
Dim W As Long
Portd.4 = 0
Do
Locate 1 , 1
Lcd Frequ
Waitms 60
Loop
Timer0_irq:
Incr Var
Return
Timer1_irq:
Timer1 = Timervorgabe
Stop Timer0
Stop Timer1
Frequ = Var * 256
Var = 0
Timer0 = 0
Start Timer1
Start Timer0
Return