Hallo, da mein letztes Topic eigentlich Titelmäßig großartiger Mist war, hier nochmal ein neues, mit besserer Frage ;) Also, ich habe ein Rechtecksignal, dessen Frequenz ich messen möchte. Nun muss ich eine vernünftige Methode finden, um die Länge der Takte zu bestimmen. Dafür habe ich mir gedacht, verwende ich einen 16-Bit Timer, der mit der Option Gate auf INT0 läuft. TR0 setze ich auf eins, sodass der Timer sofort anläuft, wenn INT0 High ist. INT0 (Also den Pin) setze ich auf High. Wenn dann die erste negative Flanke erscheint, wird der Timer angehalten. Während er läuft, zähle ich natürlich die Überläufe (TF0==1) mit. Dann weiß ich z.B. das (Überlauf*65535 + aktueller Zählerstand) * Zeit pro 1 inkrement *2 = meiner Zählzeit ist. Das multiplizieren mit 2 am Ende, findet deshalb statt, da ich ja nur die länge von positiver Flanke, zu negativer Flanke messe. Der Bereich, wo das Signal low ist, ist proportional dazu und zählt natürlich auch noch zur taktlänge. Dann würde ich für kurze Zeit (150ms) keine Messung vornehmen. Währenddessen den TH0 und TL0 sowie Register für das mitzählen der überläufe löschen. Die gezähle Zeit teile ich dann noch durch eins und schon habe ich die frequenz. Gibt es da noch eine bessere Lösung für? Mein Prozessor ist ein AT89S52 mit einem 11,058Mhz quarz.
Also mit dft/fft hat das garnix zu tun. Deine Variante ist schon OK. Ich habe es mit dem Capture Eingang gemacht, der reagiert jeweils auf eine Flanke und speichert automatisch start und endwert ab. Dann nur noch die Überläufe mitzählen und ein bisschen rechnen.
Alles klar, ungefährt so habe ich mir das auch vorgestellt. Jetzt muss ich noch ein bischen rumprobieren.... Und schauen, wie ich das alles ans laufen kriege. (da ich ja keinen capture eingang habe)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.