Koleżankom i Kolegom Radioamatorom, Krótkofalowcom,
Konstruktorom i Waszym Rodzinom – w tych trudnych czasach –
po dotkliwej awarii naszego forum
Pogodnego czasu po Bożym Narodzeniu,
Dosiego Nowego Roku
oraz Radosnych Trzech Króli

Życzy Zespół Home Made

Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Synteza na AT89C51 i AD9835
#5
EDIT #2: Obliczenia są złe, wyjaśnienie w poście poniżej.

Jeśli bardzo chcesz trzymać się czterech bajtów, a kilka herców nie zrobi Ci różnicy to możesz skorzystać z takiej (brzydkiej, ale działającej) metody dla słabych mikrokontrolerów (przyjmuję f. osc = 125MHz):

Zmiana o 1Hz = (1/125000000)*2³² ~= 34.359738368 bity - magiczna stała

Zakładając że chcemy VFO nastroić na 14230.5 kHz, liczymy:

Kod:
reg = 14230500 * 34 + (14230500 * 35)/100 + (14230500 * 97)/10000 + (14230500 * 33)/1000000
reg == 488956179
(488956179/2³²) * 125000000 == 14230497.73 [Hz]
Tracimy więc ok. 2,3 Hz przy 14 MHz; dla 29,620 MHz analogicznie:

Kod:
>>> f=29620000
>>> reg = f * 34 + (f * 35)/100 + (f * 97)/10000 + (f * 33)/1000000
>>> 29620000-(reg/2**32.0)*125000000
Tracimy ~4.64 [Hz], co jest wartością zdecydowanie mniejszą niż dryft częstotliwościowy syntez AD i łatwo kompensowalną (dodając ~1.55Hz na każde 10MHz trafiamy zawsze z dokładnością +/- 1Hz.

Dla założonych parametrów i częstotliwości z zakresu KF nie wyskoczymy poza 32 bity, gdyż 30000000 * 99 / 2^32 < 1.

Piękne to nie jest, ale jak inaczej nie można.. Smile

EDIT: Widzę, że dla AD9835 zegar wynosi zazwyczaj 50MHz. Błąd będzie więc mniejszy niż zaprezentowany.
Odpowiedz


Wiadomości w tym wątku
Synteza na AT89C51 i AD9835 - przez SP3WSK - 09-12-2016, 23:48

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości