naja, der timer ist auf 0,001 eingestellt und setzt ein flag. Ist dieses gesetzt, dann wird im Main-Teil eine if-Schleife durchlaufen und ein paar Zeitzähler erhöht.
und anhand dieser Zähler wird dann sowohl der ADC (alle 10ms) als auch die Display-Ausgabe (alle 500ms) durchgeführt - so zumindest die Theorie. In der Praxis kommt halt ein zigfaches an Ausführungszeit herraus.
Da Timer1 mit Icp1 und Ovf1, sowie RS232 (9600) bestens funktionieren, habe ich die Hoffnung noch nicht aufgegeben, daß ich den Rest auch irgendwie noch gerade gebogen bekomme.
Hier mal das Grundgerüst
Code:
Do
If H_flag = 1 Then 'alle 0,001Sek ausführen
Incr H 'Zeitzähler Displayanzeige
Incr H1 ' Zeitzähler für ADC-Auswertung
Incr Rr 'Zeitzähler allgemein
H_flag = 0
End If
If H1 = 10 Then 'die Getadc-Anweisungen fressen Zeit
Ad0 = 0
For X = 1 To 16
Mtemp = Getadc(0)
Ad0 = Ad0 + Mtemp
Next X
Shift Ad0 , Right , 4
Ad0 = 1
For X = 1 To 16
Mtemp = Getadc(1)
Ad1 = Ad1 + Mtemp
Next X
Shift Ad1 , Right , 4
Ad0 = 2
For X = 1 To 16
Mtemp = Getadc(2)
Ad2 = Ad2 + Mtemp
Next X
Shift Ad2 , Right , 4
Ad3 = 0
For X = 1 To 16
Mtemp = Getadc(3)
Ad3 = Ad3 + Mtemp
Next X
Shift Ad3 , Right , 4
Bissel Ganzzahlrechnungungen mit AD0-AD3
H1 = 0
End If
If H = 500 Then 'alle 0,5Sek anzeigen
Locate 1, 1
Lcd Rr
Zeige noch einiges an auf dem Display
H = 0
End If
Loop
End
Timer0_isr:
Load Timer0 , Ticks0
H_flag = 1 'alle 0,001 flag setzen
Return
RR müßte ja vom Start ab innerhalb einer Minute 60000 groß sein (rr wird alle 0,001 Sek um 1 erhöht), ist aber bei vollem code 18000, also nicht einmal ein 3tel.
Wenn ich die Schleifen für die 16Messungen weglasse auf 4 erniedriege, ist RR 34500, also fast 50%.
Lasse ich die Getadc-Anweisungen komplett weg, komme ich auf RR 50000
Lasse ich alles weg, nur die Zählerhochzähler und eine einfache Display ausgabe ohne Rechnen etc komme ich gerade mal auf 59000.
Sobald aber Code hinzukommt, sinkt die Zahl.
Und das finde ich schon arg krass, das kann es nicht sein, oder?
aber irgendwas sollte man wirklich auslagern, sonst wartet sich der µC dumm
Was meinst du damit genau?
Ich dachte der MC ist im "Leerlauf" und wenn der gewünschte Zeitpunkt erreicht wird, dann macht er mal schnell ein paar Befehle - oder ist der Ansatz von mir da Falsch?
Wie soll zb sonst programmiert werden, daß nach xxZeit YYY ausgeführt wird?
Lesezeichen