Управление DDS AD9834
- Войдите на сайт для отправки комментариев
Ср, 28/01/2015 - 14:44
Здравствуйте, Господа!
Возникла проблема с Subj. DDS никак не реагирует на команды. Подскажите, пожалуйста, в чем проблема?
Вот код:
#define SCLK 8 #define FSYNC 9 #define DATA 10 #define pulse(pin) {digitalWrite(pin, LOW); digitalWrite(pin, HIGH); } int stp=10000; unsigned long currentTime; unsigned long loopTime; const int pina=2; const int pinb=3; unsigned char encoder_A; unsigned char encoder_B; unsigned char encoder_A_prev=0; double frq=7050000; void tfr_word(word data) { digitalWrite(FSYNC, LOW); for (int i=0; i<16; i++) { bool value=data & 0x8000; digitalWrite(DATA, value); data <<=1; data &=0xFFFF; pulse(SCLK); } digitalWrite(FSYNC, HIGH); } void sendFrequency(double frequency) { int32_t freq = frequency * 5.36870912; // note 50 MHz clock on 9834 word regLo=freq&0x3FFF; word regHi=freq>>14; regLo |=0x4000; regHi |=0x4000; tfr_word(0x2100); tfr_word(regLo); tfr_word(regHi); tfr_word(0xC000); tfr_word(0x2000); } void setup() { pinMode(FSYNC, OUTPUT); pinMode(SCLK, OUTPUT); pinMode(DATA, OUTPUT); pinMode(pina, INPUT); pinMode(pinb, INPUT); currentTime = millis(); loopTime = currentTime; digitalWrite(FSYNC, HIGH); digitalWrite(SCLK, HIGH); sendFrequency(frq); } void loop() { currentTime = millis(); if(currentTime >= (loopTime + 5)){ encoder_A = digitalRead(pina); encoder_B = digitalRead(pinb); if((!encoder_A) && (encoder_A_prev)){ if(encoder_B) { if(frq + stp <= 7200000) frq += stp; } else { if(frq - stp >= 7000000) frq -= stp; } sendFrequency(frq); } encoder_A_prev = encoder_A; loopTime = currentTime; } }
Оказалась дохлая микруха. Код рабочий.