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. |