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:
#define W_CLK 2 // Pin 2 - Sygnał zegarowy magistrali komunikacyjnej (W_CLK) #define FQ_UD 3 // Pin 3 - Zmiana częstotliwości (FQ) #define DATA 4 // Pin 4 - Linia danych interfejsu szeregowego (DATA) #define RESET 5 // Pin 5 - Reset modułu (RESET) #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); } // funkcja puls ustawia na moment stan wysoki // przesyłanie bajtu, bit po bicie do modułu AD9850 przez linię DATA void tfr_byte(byte data) { for (int i=0; i<8; i++, data>>=1) { digitalWrite(DATA, data & 0x01); pulseHigh(W_CLK); // po każdym bicie sygnał CLK ustawiany w stan wysoki } } // częstotliwość obliczona według wzoru na 8 stronie dokumentacji = */2^32 void sendFrequency(double frequency) { int32_t freq = frequency * 4294967295/125000000; // zegar 125 MHz na AD9850 for (int b=0; b<4; b++, freq>>=8) { tfr_byte(freq & 0xFF); } tfr_byte(0x000); // bajt kontrolny, same zera "0" dla modułu AD9850 pulseHigh(FQ_UD); // aktualizacja częstotliwości } void setup() { // konfiguracja pinów Arduino pinMode(FQ_UD, OUTPUT); pinMode(W_CLK, OUTPUT); pinMode(DATA, OUTPUT); pinMode(RESET, OUTPUT); pulseHigh(RESET); pulseHigh(W_CLK); pulseHigh(FQ_UD); // włączenie trybu interfejsu szeregowego } void loop() { sendFrequency(100000); // podanie częstotliwości do generatora while(1); }
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. |