gesamtplan
22.10.2009, 21:31
Hallo,
ich habe da ein kleines Verständnisproblem was den Overlayvariable machen. Ich habe eine sehr schönes Worddokument im WWW entdeckt wo einige Beispiele zum Bascom programmieren drin sind. Allerdings checke ich den Code nicht so ganz. (Was macht der Programmierer da?).
Das Grundprinzip ist der Periodendauermessung ist mir klar.
Warten bis Eingang = 0: definierter Beginn
Warten bis Eingang = 1
Zähler starten
Warten bis Eingang = 0
Warten bis Eingang = 1
Zähler stop
Zähler auslesen und Wert ggf. umrechnen
'Testprogramm für T-Messung über Timer0/Int0
'Messwerte:
'Tsoll Tmess /us
'10 keine Reaktion (Int nicht schnell genug)
'100 98
'1000 998/999
'10000 10010
'100000 100041
'1000000 1000424
'---------------------------------------------------
$regfile = "2313def.dat"
$crystal = 8000000
$baud = 2400
'Periodendauermessung benutzt Int0 und Timer0
Config Pind.2 = Input
On Int0 Int0serv
Config Int0 = Rising
Enable Int0
'Timer0 für Periodendauermessung
Config Timer0 = Timer , Prescale = 8 'Timer-CLK = 8MHz -> TCLK = 1us
Enable Timer0 'Overflow alle 256us
On Timer0 Timer0overflow
Enable Interrupts
'-----------------------------------------------------
'Variablen Periodendauermessung
Dim T As Long At &H60 'Periodendauer
Dim Tvaluel As byte At &H60 Overlay 'Periodendauer low byte
Dim Tvalueh As word At &H61 Overlay 'Periodendauer high word
Dim T0overflowctr As Word 'Zähler für Timer1Overflow
T = 0
'--------------------------------------------------------------------
Do
Print "T=";
print T;
print "us"
waitms 1000
Loop
'---------------------------------------------------------------------
Int0serv: 'Impulsflanke Lichtschranke
'Periodendauermessung
'Werte der alten Periodendauermessung übernehmen:
Stop Timer0
Tvaluel = Timer0 'Low word von T
Tvalueh = T0overflowctr 'High word von T
'neue Periode messen:
Timer0 = 0
Start Timer0
T0overflowctr = 0
Return
'-----------------------------------
Timer0overflow:
Incr T0Overflowctr 'wieder auf 1.Flanke warten
return
'-------------------------------------------
Allerdings kapier ich nicht, wie und vor allem warum die T-Variable aus zwei Overlayvariablen zusammengesetzt, die man sich aus den zwei Subroutinen holt, und wie dabei das Ergebnis stimmen kann? Kann mir das vielleicht jemand erklären?
Viele Grüße
R.
ich habe da ein kleines Verständnisproblem was den Overlayvariable machen. Ich habe eine sehr schönes Worddokument im WWW entdeckt wo einige Beispiele zum Bascom programmieren drin sind. Allerdings checke ich den Code nicht so ganz. (Was macht der Programmierer da?).
Das Grundprinzip ist der Periodendauermessung ist mir klar.
Warten bis Eingang = 0: definierter Beginn
Warten bis Eingang = 1
Zähler starten
Warten bis Eingang = 0
Warten bis Eingang = 1
Zähler stop
Zähler auslesen und Wert ggf. umrechnen
'Testprogramm für T-Messung über Timer0/Int0
'Messwerte:
'Tsoll Tmess /us
'10 keine Reaktion (Int nicht schnell genug)
'100 98
'1000 998/999
'10000 10010
'100000 100041
'1000000 1000424
'---------------------------------------------------
$regfile = "2313def.dat"
$crystal = 8000000
$baud = 2400
'Periodendauermessung benutzt Int0 und Timer0
Config Pind.2 = Input
On Int0 Int0serv
Config Int0 = Rising
Enable Int0
'Timer0 für Periodendauermessung
Config Timer0 = Timer , Prescale = 8 'Timer-CLK = 8MHz -> TCLK = 1us
Enable Timer0 'Overflow alle 256us
On Timer0 Timer0overflow
Enable Interrupts
'-----------------------------------------------------
'Variablen Periodendauermessung
Dim T As Long At &H60 'Periodendauer
Dim Tvaluel As byte At &H60 Overlay 'Periodendauer low byte
Dim Tvalueh As word At &H61 Overlay 'Periodendauer high word
Dim T0overflowctr As Word 'Zähler für Timer1Overflow
T = 0
'--------------------------------------------------------------------
Do
Print "T=";
print T;
print "us"
waitms 1000
Loop
'---------------------------------------------------------------------
Int0serv: 'Impulsflanke Lichtschranke
'Periodendauermessung
'Werte der alten Periodendauermessung übernehmen:
Stop Timer0
Tvaluel = Timer0 'Low word von T
Tvalueh = T0overflowctr 'High word von T
'neue Periode messen:
Timer0 = 0
Start Timer0
T0overflowctr = 0
Return
'-----------------------------------
Timer0overflow:
Incr T0Overflowctr 'wieder auf 1.Flanke warten
return
'-------------------------------------------
Allerdings kapier ich nicht, wie und vor allem warum die T-Variable aus zwei Overlayvariablen zusammengesetzt, die man sich aus den zwei Subroutinen holt, und wie dabei das Ergebnis stimmen kann? Kann mir das vielleicht jemand erklären?
Viele Grüße
R.