Na - das sollte doch aber auch noch zu lösen sein - wo Du schon so weit bist...Leider kann ich die Frequenz nur in 10-Schritten darstellen.
Als Auflösung haben ich 100 ms gefällt. Sonst kann ich nicht bis zu 1KHz messen.
Eine Frage erstmal: Möchtest Du den Frequenzwert tatsächlich über den PortC ausgeben? Das könnte nämlich schwierig werden, weil Du Freq als Integer dimensioniert hast (=16 bit), während der Port ja nur 8 bit breit ist.
Falls nicht - dann lass Freq ruhig als Integer, damit kannst Du nämlich auch bis 32768 zählen lassen (und somit auch 1000Hz auf 1Hz genau auflösen). Oder als Word: Das sind 16 Bit ohne Vorzeichen, d.h. es kann Werte von 0 bis 65535 annehmen.
Dazu müsstest Du den Timer1-Interrupt auf 1 Sekunde verlängern, also z.B. mit einem Prescaler von 256 und einem Preset von 3025.
Im Moment kann Timer0 ja nicht überlaufen, weil er in 1/10 Sek selbst bei 1KHz nur bis 100 zählt. Bei 1 Sekunde wäre das schon anders - dann gäbe es ab 256Hz regelmäßige Überläufe - und in der Tim0_isr muss dann stehen
Pulselo = Pulselo + 256
damit bei jedem erneuten Überlauf 256 dazugezählt werden. Sonst wäre Pulselo auch nach dem 2. und 3. Überlauf immer 256 - und die Frequenz würde ziemlich falsch angezeigt werden.
Die Zeile mit Freq10 = Freq * 10 bräuchte es dann gar nicht mehr - außerdem kann man Variablen übrigens auch ganz bequem mit sich selbst verwurschteln, also z.B. Freq = Freq*10. Auch wenn man von jedem Mathe-Lehrer für diese Gleichung ´ne glatte Sechs bekommen würde- in Bascom ist das durchaus richtig.
Viel Spaß beim weiterentwickeln!!
Lesezeichen