Die Zahl sollte 62 sein für 1000 HZ. das reset für H_FLAG ?
If H_flag = 1 Then
H_flag = 0 ' fehlt das ?
Incr H
End If
Hallo Leute,
habe das forum schon durchsucht, aber scheinbar finde ich den wald vor lauter bäumen nicht.
habe bei einem mega8 und neuester Bascom full-version das problem,
daß irgendwie die zeit nicht stimmt.
jetzt bin ich schon so verzweifwelt,daß ich an meiner formel (aus schlauem buch) für die korrekte zeit zweifle
Const Ticks0 = 63
Config Timer0 = Timer , Prescale = 64
If H_flag = 1 Then
Incr H
End If
Timer0_isr:
Load Timer0 , Ticks0 '0,001sek
H_flag = 1
return
erhöht doch variable H alle 0,001sek, oder?
weil bei
if H=500 then display paar sachen
nicht alle 500ms, sondern so alle 666ms was angezeigt wird (jeweils eine minute gemessen, also kein rechenfehler)
timer und adc sind die einzigen interrupts, kein RS232 und keine versteckten waits oder so rekursion etc....einer ne idee?
ist ein 4mhr extern quarz am mega8 in einem professionellen board.
fuses etc stimmen...
besten dank
Die Zahl sollte 62 sein für 1000 HZ. das reset für H_FLAG ?
If H_flag = 1 Then
H_flag = 0 ' fehlt das ?
Incr H
End If
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Beim Testen von m_herr's Timer-Problem bekam ich folgende Fehlermeldung:
Error: 61 Label not found [Timer_Jump
Der Label erscheint auch nicht im IDE-Fenster
------------------------------------------------------------------------
version 1.11.8.1 / xp
kann das bitte mal einer testen - Danke
------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 4000000
Dim H_flag as byte
Dim H as word
Const Ticks0 = 62
Config Timer0 = Timer, Prescale = 64
On Timer0 = Timer_Jump
Enable Timer0
Enable Interrupts
H = 0
H_flag = 1
Do
If H_flag = 1 Then
Incr H
Print H
End If
loop until H = 500
end
Timer_Jump:
Load Timer0 , Ticks0 '0,001sek
H_flag = 1
return
If H_flag = 1 Then
Incr H ^
h_flag=0
End If
so die if-anweisung. habe es aus versehen gelöscht...
ich habe 63 genommen, weil meiner formel nach 62.5 rauskommt. hab da einfach aufgerundet....oder ist das schlimm?
habe den quelltext getestet, er findet da das label auch nicht, auch wenn ich den namen ändere...komisch.
Was soll das "=" ?
On Timer0 = Timer_Jump
Ich würde schreiben
On Timer0 Timer_Jump
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
wir haben einen gewinner *gg
bleibt nur noch die frage, warum bei mir die tatsächliche zeit zwischen 30% -60% höhe ist als die gewünschte zeit.
warum bei i alle 500ms was auf dem display ausgeben fast 700ms werden...einer ne idee?
In dieser Routine brauchst du länger als eine mS, d.h. du verlierst Ticks
If H_flag = 1 Then
H_flag = 0
Incr H
Print H ' bei 9600 braucht 1 Byte ~1 mS
End If
Loop Until H = 500 ' welchen zweck hat das ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
@ PicNick
Habe den Timer0 nur einfach so getestet,ohne irgendwelche Zeitmessung.Das mit "Print H" war nur eine Kontrolle, ob Schleife das "H" hoch zählt.
Mein Problem war eigentlich das mit dem "Label-Error"
Trotzdem Danke an Euch!
dann wäre das auch geklärt. *g
bei mir gibts kein print oder andere RS232 dinge. also was könnte noch dafür verantworlich sein, daß die gewünschte zeit von der realen abweicht?
Lesezeichen