in einem anderem Projekt nutze ich ein Raspberry Pico um mit dem internen Timer eine einstellbare Frequenz zu erzeugen.
PureBasic nutze ich gerade um herzauszufinden, wie ich die Parameter effizient errechnen (effizent ausprobieren ist auch ok) kann.
Wunschfrequenz 10Hz - 2MHz
Die Formel (nach f aufgelöst) ist:
Code: Alles auswählen
#CPU_FREQ = 125000000 ; 125MHz
; Wertebereiche
; TOP = 0 - 65535 (16 bit)
; DIV_INT = 1 - 255 ( 8 bit)
; DIV_FRAC = 0 - 15 ( 4 bit)
; => Sollte es ein gutes Ergebnis sowohl mit DIV_FRAC = 0 und DIV_FRAC > 0 geben,
; ist DIV_FRAC = 0 immer vorzuziehen, da DIV_FRAC > 0 zusätzlichen Jitter verursacht
f = #CPU_FREQ / ((TOP + 1) * (DIV_INT + (DIV_FRAC / 16)))
Aktuell sehe ich nur den Weg für 65536x256x16 Schleifendurchläufe:
- Alle 65536x256x16 Werte zu durchlaufen
- Dabei die Abweichung zur Soll-Frequenz bei den einzelnen Durchläufen zu ermitteln. Die Sache mit dem DIV_FRAC = 0 zu berücksichtigen.
- Am Ende die "besten Parameter" auszugeben.
- => Dauert sogar auf dem PC ein paar Sekunden, was zu lange ist
Code: Alles auswählen
Beispiel:
für Soll-Frequenz = 18673 Hz
Bestes Ergebnis ermittelt durch Durchlaufen und Prüfen aller möglichen Werte:
DIV_INT = 4
DIV_FRAC = 13
TOP = 1390
Proberechnung ergibt für f = 18672,9160... Hz