Управление DDS AD9834

UB8JAK
Offline
Зарегистрирован: 28.01.2015

Здравствуйте, Господа!

Возникла проблема с 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;
   }                      
}

 

UB8JAK
Offline
Зарегистрирован: 28.01.2015

Оказалась дохлая микруха. Код рабочий.