www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Overflows im Interrupt zählen


Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mit einem Atmega 162 führe ich eine Frequenzmessung über ICP mit Timer 1 
durch, 0,5 bis 2 Hz. Nun möchte ich eine LED schalten, wenn innerhalb 
von ca 5 sec kein ICP ausgelöst wird. Habe die 50 Hz Auslösungen mit 
einem Stützkondensator abgefangen.

Die ISR (TIMER1_OVF_vect) zählt bei prescale 256 ca alle 4,5 sec 1 hoch.

In der ISR (TIMER!_CAPT_vect) wird die Overflow Variable 0 gesetzt.

Nun dachte ich, dass OHNE die Capture ISR der Wert nicht 0 gesetzt wird 
und sich, weil der timer 1 ja durchläuft, alle 4,5 sec die Variable um 1 
erhöht.
Ich lasse die Variable über UART ausgeben und sehe, dass sie sich NICHT 
erhöht. Ich verstehe nicht warum ;-(

Denn wenn das ginge, könnte ich ja über eine Bedingung NrOverflows > 2 
eine LED schalten, die anzeigt, dass das Messsignal fehlt.

Über einen Tipp würde ich mich freuen.

Thomas

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe da eigentlich nur 1 Möglichkeiten:

Dein Input Capture löst immer noch aus.
Leg doch den Input Capture Softwaremäsig still, dann weißt du es ganz 
genau.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, gut. werde ich machen
Danke

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So:

ich hatte übersehen, dass die Overflowvariable in einer if Schleife 
gesendet wurde, die als Bedingung die ICP ISR hatte

if (UpdateUart)

Habe die ICP ISR rausgeschmissen und in die Overflow ISR zu

NrOverflows++:
UpdateUart = TRUE;

geschrieben. Jetzt bekomme ich eine steigende Ausgabe , ca alle 4,5 sec, 
allerdings

6, 12, 18, 24, 30....etc.

habe doch kein 6er Increment?

Woran kann das liegen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> So:
>
> ich hatte übersehen, dass die Overflowvariable in einer if Schleife

if ist keine Schleife.

Zum Wesen einer Schleife gehört es, dass etwas wiederholt wird. Deshalb 
heißt es Schleife. So wie ein Tonband, das man zu einer Schleife 
zusammenklebt, wieder und immer wieder dasselbe abspielt.
Wo wird bei einem if etwas wiederholt? if trifft eine Auswahl aus 2 
Möglichkeiten, aber da wird nichts wiederholt! if ist so gesehen eine 
Verzweigung in eine von 2 Möglichkeiten. Eine Abfrage.

Nicht alles wo ein { - } vorkommt, ist automatisch eine Schleife.

>
> 6, 12, 18, 24, 30....etc.
>
> habe doch kein 6er Increment?

Doch.
Sieh dir deinen Code noch mal an. Du zählst da in der Hauptschleife an 
einer Stelle ziemlich unmotiviert noch 5 dazu.

(Und rechnest mit deinen Messwerten möglichst sinnlos rundherum um nur 
ja möglichst viel Genauigkeit bei Rundungsfehlern während der Berechnung 
zu verlieren. Aber das ist eine andere Geschichte. Etwas weniger naiv an 
die Sache rangehen! Nur weil Mathematiker und Computerprogramme 
dieselben Symbole benutzen, heißt das noch lange nicht, dass da ein 
Zusammenhang besteht. Für einen Mathematiker ist  3/5*2 identisch zu 
3*2/5. Für deinen Computer ist das aber nicht so. Dein Mathematiker 
bringt in beiden Fällen 1.2 heraus. Dein C-Programm berechnet den ersten 
Ausdruck als 0 und den zweiten als 1)

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@kbuchegg

Danke für die konstruktive Kritik! Werde die genannten Punkte nochmal 
nacharbeiten, insbesondere meine merkwürdigen Berechnungen..;-(

Gruß
Thomas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.