- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: Abfragen von bis zu 110 Impulsen in einer 1/2sek

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.07.2008
    Ort
    Höchberg
    Beiträge
    155
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    das mit dem Timer0 und am Pin T0 habe ich gewusst.
    Mein Problem ist aber vielmehr der Code.
    Ich kriegs einfach nicht hin das der zählht. Im Moment mache ich das einer While/For schleife. Aber dort kann ich nicht einfach nach einer halben sekunde aus der Schleife herausspringen. Oder doch?

    @stefan_Z: Das LCD wird nicht 110 oder 10mal die Sekunde gerefresht. Sondern nur 1 Mal die Sekunde!

    Also:
    in der ersten halben sekunde:
    -Impulse Zählen die in einer halben sekunde kommen
    -2 Rechenaufgaben und LCD refreshen

    MFG

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    54
    Beiträge
    524
    Hallo,

    du lässt einen zweiten Timer jede 1/2 Sekunde einen Interrupt auslösen. In der ISR ließt du die Anzahl der Impulse aus und setzt den Zähler zurück. Wenn du möchtest, kannst du noch ein Flag setzen, dass dir in der Hauptschleife signalisiert, dass eine Messung abgeschlossen ist. Dann hast die nächst halbe Sekunde bis zum Interrupt Zeit für deine Rechnungen und die Ausgabe.

    Gruß

    Jens

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.191
    Also ich würd da eine Impulszyklenmessung machen.

    Also:
    Der Timer 1 läuft frei und hat zusätzlich noch einen Überlauftimer, der im Timer1 Overflow Interrupt hochgezählt wird.
    Tritt nun ein Zählereignis ein wird am Besten der Input Capture Pin -> Interrupt getriggert, der den Timer 1 respektive das input capture Register + den überlauf zähler ausliest.
    In dieser Routine wird der Zählerstand des vorherigen Capture Impulses vom aktuellen Zählerstand abgezogen.
    Somit erhält man die Zeit in halben µs ( bei 16MHz und Prescaler 8 ).
    Um eine Mittelung der gemessenen Impulse zu erhalten wird eine Variable hochgezählt und die aktuellen Zählerstände auf eine Summenvariable aufaddiert.
    Der aktuelle Zählerstand wird, nachdem alles gemacht wurde in die Old Variable für die nächste Impulsdauermessung eingeschrieben.
    In dieser Interruptroutine werden nur Additionen, bzw. Subtraktionen verwendet, die der Controller schnell abarbeiten kann.

    In der Hauptroutine kannst Du dann jede die Summenvariable durch die Zählvariable teilen und Du erhältst eine mittlere Impulslänge daraus.
    Aus dieser Impulslänge lässt sich dann alles mögliche errechnen Zeit, Drehzahl, Geschwindigkeit oder sonstwas.
    Nach der Berechnung wird die Summenvariable und die Zählvariable wieder auf 0 gesetzt und das Spielchen kann von vorne beginnen.

    Der Vorteil der Methode ist, das man schon mit 2 Impulsen eine Aussage über die Zeitlänge machen kann und die Werte gerade bei niedrigen Impulsraten sehr hoch auflösen.

    Der Nachteil ist, wenn innerhalb der Überlaufparameter kein Impuls mehr kommt, entstehen Meßfehler.
    Diesen Zustand muß man in der Software abfangen.
    Ist aber eigentlich auch kein Problem, wenn man dazu die Zählvariable benutzt und alle Werte unter 2...3 als Impulse 0 ansetzt.

    Diese Methode benötigt prinzipiell 2 Timer, wobei der Timer 1 frei läuft und somit auch für die 1 Sekundenintervalle verwendet werden könnte, das würde ich dann per Comparematch machen.
    Wenn man noch einen Timer frei hat ist natürlich die 2 Timer Methode eleganter.

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad