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