www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzzähler mit Counter-Überlauf


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Kürzlich habe ich ein Assembler Programm für den AT90S2313 geschrieben,
mit dem ein einfacher Frequenzzähler entstehen sollte. Das ganze hat
funktioniert mit 1s Meßzeit, realisiert per Warteschleife im
Hauptprogramm und Zählen der Überläufe des 16-Bit-Counters per
Überlauf-Interrupt, dann Auslesen der beiden Counter-Bytes. Die
Genauigkeit sollte 32 Bit betragen. Klar, mehr als 5MHz lassen sich so
nicht messen. Dann ist mir aufgefallen, daß bei jedem Interrupt sich
die Meßzeit verlängern muß, da zusätzlich die Befehle der
Interruptroutine beim Überlauf ausgeführt werden. Je höher der Meßwert,
desto größer die Ungenauigkeit nach oben hin. Wie würde man so etwas
korrekt programmieren? Falls der 8-Bit-Timer für die Meßzeit
herangezogen würde, könnten zwei Interrupts etwa gleichzeitig auftreten
oder man könnte welche verlieren. Die Grobmethode wäre das Vermindern
von Werten der Warteschleife durch die Interruptroutine. Also eine
Korrektur. Aber je nach Register-Überlauf ist der Wert für die
Verminderung auch nicht immer bekannt. Die Verwendung von Polling
bringt vermutlich ähnliche Probleme. Jedenfalls hat Kollege Sprut über
seinen Zähler mit dem PIC16F84 von Problemen und Tricks beim Auslesen
des Timer0 bei seinem 50MHz-Zähler berichtet aber nicht näher
ausgeführt.
http://www.sprut.de/electronic/pic/projekte/freque...
Allerdings sieht in der PIC-Welt manches anders aus.
Ich bitte um Eure Ideen.

Gruß Chris

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besser du mißt die Periodendauer mit dem Timer (extern run).

Josef

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Josef,

damit wären wir beim reziproken Frequenzzähler, der aber erst in einem
späteren Projekt geplant ist. Der eignet sich ja speziell, um niedrige
Frequenzen mit hoher Auflösung zu messen. Im oben genannten Fall sollen
aber Eingangsimpulse gezählt werden, so lange das Zähltor offen ist und
dieser Wert dann angezeigt werden. So wie man das klassisch mit CMOS-
oder TTL-Bausteinen früher als aufwändiges Bauprojekt gemacht hat. Die
geringe Auflösung bei niedrigen Frequenzen stört mich dabei nicht.

Gruß

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie Du schon richtig erkannt hast, funktionieren Warteschleifen nur ohne
Interrupts exakt.

Der 2313 hat ja 2 Timer, also kannst Du sie auch benutzen, einer als
Zeitbasis, der andere als Zähler.

Der Trick ist nur die Kaskadiereung per Softwareregister im Interrupt.

Z.B. bei T0 liest man zuerst das Highbyte (Softwareregister) und dann
den Timer aus.
Wenn der Timer nahe 0 ist (<0x80), kann es aber sein, daß just nach dem
Lesen des High-Registers ein Interrupt erfolgte und dieses hochgezählt
hat. Dann liest man es nochmal aus und alles ist in Butter.


Peter

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Chris

Ich habe mich auch mit diesem Problem beschäftigt,
anfangs dachte ich, dass das Einganssignal einfach einen Interrupt
auslösen sollte um die Impulse zu zählen, aber das war der falsche Weg,
da die Interruptverarbeitung zu viele kostbare Prozessor-Takte
benötigte.

Die Lösung war: Einen 2-Byte-Timer extern takten lassen

Bis 5 MHz:

http://www.mikrocontroller.net/forum/read-4-230466.html

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.