Hallo, bräuchte mal ein Tip wie ich meine Berechnung am besten angehen soll, ich muss jede Sekunde den Strom auslesen und der 3600 Teil zu einer Variablen hinzu addieren um die entnommenen Ah zu berechnen. Ich hab da 2 Ideen wie ich das realisieren könnte: 1) while(1) { Strom lesen und auf LCD ausgeben Ah Berechnung und auf LCD ausgeben 1000ms warten } 2) Mit dem RTC Chip jede Sekunde einen IRQ auslösen IRQ Routine ruft Berechnung auf Im ersten Fall muss ich aufpassen wenn ich andere Dinge im Programm mache, z.B. noch Spannungen einlese und auf dem LCD ausgebe, ich müsste immer asprobieren wie lange die ganzen Prozesse benötigen und die Zeit von den 1000ms abziehen. Im zweiten Fall werden unheimlich viele Interrups generiert, geht das, ist das so gängige Parxis? Hier hätte ich den Vorteil, dass ich beliebige andere Dinge tun könnte ohne die Berechnung zu verfälschen. Gruss Gerd
@ Gerd F. (gerd_f) >Im zweiten Fall werden unheimlich viele Interrups generiert, Unheimlich viele? 1 mal pro Sekunde? Der Mikrocontroller sitrbt vor Langeweile. Wie man es richtig macht, siehe Interrupt. MFG Falk
Falk Brunner schrieb: > @ Gerd F. (gerd_f) > >>Im zweiten Fall werden unheimlich viele Interrups generiert, > > Unheimlich viele? 1 mal pro Sekunde? Der Mikrocontroller sitrbt vor > Langeweile. > > Wie man es richtig macht, siehe Interrupt. > > MFG > Falk Ahja, die eingebauten Timer hab ich ja auch noch, das ist noch besser als den RTC Chip zu verwenden. Dann probier ich das mal so, Danke! Gruss Gerd
> Im zweiten Fall werden unheimlich viele Interrups generiert, geht > das, ist das so gängige Parxis? Naja, Du musst halt aufpassen, dass sich das Interrupt-Register nicht ungleichmäßig abnutzt...
Schlaumeier schrieb: >> Im zweiten Fall werden unheimlich viele Interrups generiert, geht >> das, ist das so gängige Parxis? > > Naja, Du musst halt aufpassen, dass sich das Interrupt-Register nicht > ungleichmäßig abnutzt... G Genau! Aber im Ernst: Da man eigentlich immer irgendeine Zeitbasis braucht, habe ich praktisch in jedem meiner Projekt einen Zähler, der die verstrichene Zeit hochzählt und zwar in Millisekunden. Der Interrupt wird also 1000 mal pro Sekunde aufgerufen! Ich kann Dir versichern, dass zwischen diesen Aufrufen - aus Sicht des Controllers - riesige Zeiträume liegen, in denen er andere Aufgaben erledigen kann - 2 UARTS bedienen, 6 ADC auslesen per I2C kommunizieren unde wenn er damit fertig ist, ist ihm immer noch langweilig.
Gerd F. schrieb: > Mit dem RTC Chip jede Sekunde einen IRQ auslösen > IRQ Routine ruft Berechnung auf Ne RTC braucht man heutzutage nicht mehr, die MCs haben interne Timer. Und für Batteriebetrieb gibt es extra Stromsparmodi, wo nur der Timer weiterläuft (<1µA). Peter
Gerd F. schrieb: > 1) while(1) > { > Strom lesen und auf LCD ausgeben > Ah Berechnung und auf LCD ausgeben > 1000ms warten > } Das läuft dann aber nicht im Sekundenraster, denn die ersten beiden Schritte werden zwar nicht lange laufen, aber ein bisschen Zeit benötigen sie schon. Du müsstest also beim dritten Schritt die Zeitdauer bis zur nächsten vollen Sekunde bestimmen und nur so lange warten. Stabiler aber ist eine von einem Timerinterrupt gesteuerte Variante. Das bedeutet nicht, daß Du die Berechnungen in Deiner Interruptroutine ausführen musst, das kannst Du nach wie vor in der Hauptschleife machen, aber statt 1000 msec lang zu warten, wartest Du auf ein Flag, das von der Interruptroutine gesetzt wird. Und der Timerinterrupt kommt halt jede Sekunde. Das Flag muss als volatile deklariert werden, damit es nicht dem Optimizer des C-Compilers zum Opfer fällt.
Peter Dannegger schrieb: > Ne RTC braucht man heutzutage nicht mehr, die MCs haben interne Timer. Naja, für die Zeit vieleicht nicht unbedingt aber fürs Datum ist es schon praktisch. Ich hab den rtc72421 mit einer Lithium Stützbatterie mal mit aufs Board genommen, dann hab ich Zeit und Datum immer abrufbereit und kann dann leichter datums- und zeitbezogene Schaltvorgänge durchführen. Gerd
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.