Gast
#60970
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/frequenz/freq.htm Allerdings sieht in der PIC-Welt manches anders aus. Ich bitte um Eure Ideen. Gruß Chris