Open form

Arduino w połączeniu z generatorem AD9850

 

Moduł AD9850 służy do generowanie dwóch przebiegów sinusoidalnych i dwóch prostokątnych o częstotliwości do 40 MHz. Układ komunikuje się przy pomocy magistrali szeregowej lub wysyłając bity równolegle. Został wyposażony w przylutowane złącza golpin raster 2,54 mm umożliwiające wpięcie w płytkę stykową lub podłączenie za pomocą przewodów.

 

W przykładzie zostały zastosowane następujące elementy:

 

Podłączenie AD9850 z Arduino:

W celu obsługi generatora z wykorzystaniem interfejsu szeregowego należy połączyć układ z Arduino w następujący sposób:

 

Pin AD9850 Pin Arduino
W_CLK 2
FQ_UD 3
DATA 4
RESET

5

VCC 5 V
GND GND

 

 

Schemat połączenie układu AD9850 z Arduino Uno.

 

Program do Arduino

W przykładzie został wykorzystany następujący kod:

 

  1. #define W_CLK 2 // Pin 2 - Sygnał zegarowy magistrali komunikacyjnej (W_CLK)
  2. #define FQ_UD 3 // Pin 3 - Zmiana częstotliwości (FQ)
  3. #define DATA 4 // Pin 4 - Linia danych interfejsu szeregowego (DATA)
  4. #define RESET 5 // Pin 5 - Reset modułu (RESET)
  5. #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); } // funkcja puls ustawia na moment stan wysoki
  6. // przesyłanie bajtu, bit po bicie do modułu AD9850 przez linię DATA
  7. void tfr_byte(byte data)
  8. {
  9. for (int i=0; i<8; i++, data>>=1) {
  10. digitalWrite(DATA, data & 0x01);
  11. pulseHigh(W_CLK); // po każdym bicie sygnał CLK ustawiany w stan wysoki
  12. }
  13. }
  14. // częstotliwość obliczona według wzoru na 8 stronie dokumentacji = */2^32
  15. void sendFrequency(double frequency) {
  16. int32_t freq = frequency * 4294967295/125000000; // zegar 125 MHz na AD9850
  17. for (int b=0; b<4; b++, freq>>=8) {
  18. tfr_byte(freq & 0xFF);
  19. }
  20. tfr_byte(0x000); // bajt kontrolny, same zera "0" dla modułu AD9850
  21. pulseHigh(FQ_UD); // aktualizacja częstotliwości
  22. }
  23. void setup() {
  24. // konfiguracja pinów Arduino
  25. pinMode(FQ_UD, OUTPUT);
  26. pinMode(W_CLK, OUTPUT);
  27. pinMode(DATA, OUTPUT);
  28. pinMode(RESET, OUTPUT);
  29. pulseHigh(RESET);
  30. pulseHigh(W_CLK);
  31. pulseHigh(FQ_UD); // włączenie trybu interfejsu szeregowego
  32. }
  33. void loop() {
  34. sendFrequency(100000); // podanie częstotliwości do generatora
  35. while(1);
  36. }

 

Wygenerowany przebieg można obserwować np. na ekranie oscyloskopu.

 

Jeśli sygnał prostokątny nie pojawia się należy przekręcić potencjometr wbudowany w moduł AD9850. Służy on do regulacji wypełnienia przebiegu prostokątnego.

 

zapraszamy do współpracy!