19-06-2014, 20:30
Od czasu pierwszej publikacji zrobiłem kilka poprawek w kodzie mojej biblioteki. Zaimplementowałem też uproszczony algorytm ustawiania częstotliwości zaproponowany przez SP6VWX.
Wykonałem proste testy szybkosci działania tych procedur uśredniając czas z 10000 wywołań dla różnych częstotliwości. Wyniki uzyskane na moim Arduino Nano z ATmega328P @ 16MHz są następujące:
algorytm uproszczony - 1.94ms
algorytm dokładny - 4.47ms
Ponieważ użyłem standardowej biblioteki Wire do obsługi I2C, magistrala chodzi z zegarem 100kHz. Aby ustawić zegar na 400kHz (według noty katalogowej maksimum obsługiwane przez Si5351) trzeba uciec sie do niewielkiej sztuczki zaraz po inicjacji Wire:
Skraca to czas potrzebny na ustawienie częstotliwości wyjściowej Si5351 o mniej więcej 1ms:
algorytm uproszczony - 0.90ms
algorytm dokładny - 3.43ms
Wykonałem proste testy szybkosci działania tych procedur uśredniając czas z 10000 wywołań dla różnych częstotliwości. Wyniki uzyskane na moim Arduino Nano z ATmega328P @ 16MHz są następujące:
algorytm uproszczony - 1.94ms
algorytm dokładny - 4.47ms
Ponieważ użyłem standardowej biblioteki Wire do obsługi I2C, magistrala chodzi z zegarem 100kHz. Aby ustawić zegar na 400kHz (według noty katalogowej maksimum obsługiwane przez Si5351) trzeba uciec sie do niewielkiej sztuczki zaraz po inicjacji Wire:
Kod:
#define TWI_SPEED 400000L
Wire.begin();
TWBR = ((F_CPU / TWI_SPEED) - 16) >> 1; // Set I2C speed to 400kHz
Skraca to czas potrzebny na ustawienie częstotliwości wyjściowej Si5351 o mniej więcej 1ms:
algorytm uproszczony - 0.90ms
algorytm dokładny - 3.43ms