Hallo erst mal,
ich möchte mit einem Timer (0) die Pulslänge von 4 Eingängen messen. (Funkempfänger Cannel 1 -4) Jedoch arbeiter der Timer0 nicht so wie er soll. Also habe ich ein Testprog geschrieben und die Werte aufgezeichnet.
Hier mal dasTestprogramm:
$regfile = "m168def.dat"
$crystal = 4000000
$hwstack = 32 'hardware stack
$swstack = 10 'software stack
$framesize = 40 'frame space
' für eine serielle Ausgabe
$baud = 57600 ' use baud rate
'------------------------------------------------------------------------------
Config Portd.7 = Output 'Rechtecksignal
'------------------------------------------------------------------------------
Dim C_10us As Integer '10x Counter
Dim T_reload As Integer
T_reload = 50
Rechteck Alias Portd.7
'Timer 0 configurieren
' The TIMER can have the systemclock as an input or the systemclock divided
' by 8,64,256 or 1024
' The prescale parameter excepts 1,8,64,256 or 1024
' Ohne prescale
Config Timer0 = Timer , Prescale = 1
On Ovf0 Tim0_isr 'Define the ISR handler
Timer0 = T_reload
Enable Timer0 ' enable the timer interrupt
Enable Interrupts 'allow interrupts to occur
' Main
Do
' nichts
Loop
'------------------------------------------------------------------------------
Tim0_isr:
' Interrupt Timer 0
Timer0 = T_reload 'Reset auf Anfanswert
Incr C_10us '10x Counter erhöhen
If C_10us = 100 Then
Toggle Rechteck ' und Ausgeben
C_10us = 0
End If
Return
End
Anschliessen habe ich die Rechtecksignale an PORTD.7 gemessen:
T_reload = 1 Puls (h+l) = 63ms
T_reload = 10 Puls (h+l) = 61,7ms -Delta = 1,3ms
T_reload = 20 Puls (h+l) = 59,7ms -Delta = 2ms
T_reload = 30 Puls (h+l) = 57,7ms -Delta = 2ms
T_reload = 40 Puls (h+l) = 55,7ms -Delta = 2ms
T_reload = 50 Puls (h+l) = 53,7ms -Delta = 2ms
T_reload = 100 Puls (h+l) = 43,9ms -Delta = 9,8ms
T_reload = 150 Puls (h+l) = 33,9ms -Delta = 10ms
T_reload = 200 Puls (h+l) = 30,9ms -Delta = 3ms
T_reload = 250 Puls (h+l) = 30,7ms -Delta = 0,2ms
Für mich ergeben diese Werte keinen Sinn.
Rechnerrisch müsste doch: 1 / 4.000.000 Hz = 250ns
Bei einer t_reload differenz von 50 müsste der Unterschied doch:
50 *250ns * 100 (Streckfaktor) = 1,25ms sein.Da ich high und low messe muss der Uterschied 2* 1,25ms sein. Dies ist aber nur bei dem wechsel derT_reload Werte von 150 auf 200 messbar.
Ich hoffe einer von euch kann mir weiterhelfen.
Ansnst noch an ale einen schönen Tag und
Servus
ich möchte mit einem Timer (0) die Pulslänge von 4 Eingängen messen. (Funkempfänger Cannel 1 -4) Jedoch arbeiter der Timer0 nicht so wie er soll. Also habe ich ein Testprog geschrieben und die Werte aufgezeichnet.
Hier mal dasTestprogramm:
$regfile = "m168def.dat"
$crystal = 4000000
$hwstack = 32 'hardware stack
$swstack = 10 'software stack
$framesize = 40 'frame space
' für eine serielle Ausgabe
$baud = 57600 ' use baud rate
'------------------------------------------------------------------------------
Config Portd.7 = Output 'Rechtecksignal
'------------------------------------------------------------------------------
Dim C_10us As Integer '10x Counter
Dim T_reload As Integer
T_reload = 50
Rechteck Alias Portd.7
'Timer 0 configurieren
' The TIMER can have the systemclock as an input or the systemclock divided
' by 8,64,256 or 1024
' The prescale parameter excepts 1,8,64,256 or 1024
' Ohne prescale
Config Timer0 = Timer , Prescale = 1
On Ovf0 Tim0_isr 'Define the ISR handler
Timer0 = T_reload
Enable Timer0 ' enable the timer interrupt
Enable Interrupts 'allow interrupts to occur
' Main
Do
' nichts
Loop
'------------------------------------------------------------------------------
Tim0_isr:
' Interrupt Timer 0
Timer0 = T_reload 'Reset auf Anfanswert
Incr C_10us '10x Counter erhöhen
If C_10us = 100 Then
Toggle Rechteck ' und Ausgeben
C_10us = 0
End If
Return
End
Anschliessen habe ich die Rechtecksignale an PORTD.7 gemessen:
T_reload = 1 Puls (h+l) = 63ms
T_reload = 10 Puls (h+l) = 61,7ms -Delta = 1,3ms
T_reload = 20 Puls (h+l) = 59,7ms -Delta = 2ms
T_reload = 30 Puls (h+l) = 57,7ms -Delta = 2ms
T_reload = 40 Puls (h+l) = 55,7ms -Delta = 2ms
T_reload = 50 Puls (h+l) = 53,7ms -Delta = 2ms
T_reload = 100 Puls (h+l) = 43,9ms -Delta = 9,8ms
T_reload = 150 Puls (h+l) = 33,9ms -Delta = 10ms
T_reload = 200 Puls (h+l) = 30,9ms -Delta = 3ms
T_reload = 250 Puls (h+l) = 30,7ms -Delta = 0,2ms
Für mich ergeben diese Werte keinen Sinn.
Rechnerrisch müsste doch: 1 / 4.000.000 Hz = 250ns
Bei einer t_reload differenz von 50 müsste der Unterschied doch:
50 *250ns * 100 (Streckfaktor) = 1,25ms sein.Da ich high und low messe muss der Uterschied 2* 1,25ms sein. Dies ist aber nur bei dem wechsel derT_reload Werte von 150 auf 200 messbar.
Ich hoffe einer von euch kann mir weiterhelfen.
Ansnst noch an ale einen schönen Tag und
Servus