| Ваш IP: 18.232.53.185 | Online(32) - гости: 14, боты: 18 | Загрузка сервера: 2.29 ::::::::::::

Генератор AD9833 + ПП8-8(8А) (Arduino)

Ранее в https://rcl-radio.ru/?p=120649 рассматривался пример взаимодействия переключателя программного поворотного ПП8-8(8А) с микроконтроллерами типа Atmega8, Atmega48, Atmega88, Atmega168, Atmega328 (Arduino Nano), на этой странице будет показан практический пример использования такого переключателя совместно с модулем AD9833.

AD9833 — генератор сигналов с низким энергопотреблением. Позволяет генерировать сигналы с частотой до 12.5 МГц синусоидальной, треугольной и прямоугольной формы. Управление осуществляется с использованием трехпроводного интерфейса SPI.

Основные характеристики микросхемы:

  • Цифровое программирование частоты и фазы.
  • Потребляемая мощность 12.65 мВт при напряжении 3 В.
  • Диапазон выходных частот от 0 МГц до 12.5 МГц.
  • Разрешение 28 бит (0.1 Гц при частоте опорного сигнала 25 МГц).
  • Синусоидальные, треугольные и прямоугольные выходные колебания.
  • Напряжение питания от 2.3 В до 5.5 В.
  • Трехпроводной интерфейс SPI.
  • Расширенный температурный диапазон: от –40°C до +105°C.
  • Опция пониженного энергопотребления.

Более подробно об генераторе на AD9833 можно узнать на странице https://rcl-radio.ru/?p=78387.

Переключатель программный поворотный ПП8-8(8А) позволяет задавать необходимую частоту генератора на базе AD9833 в диапазоне от 0 до 9 999 999 Гц, а так же менять форму выходного сигнала.

Форма сигнала (синус, меандр, треугольник) задается крайним слева переключателем. Генератор фактически может выдавать частоту до 12,5 МГц, на что рассчитан программный переключатель при использовании всех секций, но чтобы не делать отдельную кнопку для изменения формы сигнала, было принято решение ограничить частоту генератора до 10 МГц и отвести под переключатель формы сигнала одну из секций переключателя.

Установленная частота выводится на дисплей LCD1602 c I2C модулем.

//AD9833
#define CS    PC0
#define CLK   PC1
#define DATA  PC2

#include <Wire.h> 
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
unsigned long itog,itog_old,data[8];
long f=1000;
long b,h_bit,l_bit,f_lcd,f_ust;
const long f25 = 24999420;// частота кварца, если нет эталонного частотомера установите частоту 25000000 Гц
int form,sig,sig_old;

void setup() {
  lcd.init();lcd.backlight();Wire.begin();
  PORTB |=(1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3);
  DDRC |=(1<<CS)|(1<<CLK)|(1<<DATA);
  PORTC |=(1<CLK)|(1<<CS)|(1<<DATA);
  _delay_ms(500);
  ad_AD9833();
}

void loop() {
  for(int i=0;i<=7;i++){
  DDRD =(1<<i);
  PORTD = (1<<i);
  data[i] = PINB & 0b1111;
  }
  itog = data[6]*1000000+data[5]*100000+data[4]*10000+data[3]*1000+data[2]*100+data[1]*10+data[0];
  sig = data[7];
  if(itog_old!=itog || sig_old!=sig){
    f=itog;
    ad_AD9833();
    }

  itog_old = itog;
  sig_old = sig;
  
  lcd.setCursor(0,0);lcd.print("F ");
  lcd.print(data[6]);
  lcd.print(".");lcd.print(data[5]);lcd.print(data[4]);lcd.print(data[3]);
  lcd.print(".");lcd.print(data[2]);lcd.print(data[1]);lcd.print(data[0]);
  lcd.print(" Hz ");
  lcd.setCursor(2,1);
  lcd.print("AD9833");
  lcd.setCursor(11,1);
  switch(data[7]){ // форма сигн.
  case 0: lcd.print("DAC");WriteAD9833(0x2028);break;
  case 1: lcd.print("SIN");WriteAD9833(0x2000);break;
  case 2: lcd.print("TRI");WriteAD9833(0x2002);break;
  case 3: lcd.print("DAC");WriteAD9833(0x2028);break;
  case 4: lcd.print("SIN");WriteAD9833(0x2000);break;
  case 5: lcd.print("TRI");WriteAD9833(0x2002);break;
  case 6: lcd.print("DAC");WriteAD9833(0x2028);break;
  case 7: lcd.print("SIN");WriteAD9833(0x2000);break;
  case 8: lcd.print("TRI");WriteAD9833(0x2002);break;
  case 9: lcd.print("DAC");WriteAD9833(0x2028);break;
  }
  delay(100);
}

void WriteAD9833(int data){        // SPI
  PORTC |=(1<<CLK);PORTC &=~(1<<CS);
     for(int i = 15; i >= 0; i--){
        PORTC |=(1<<CLK);
       if(((data>>i)&0x01)==1){PORTC |=(1<<DATA);}else{PORTC &=~(1<<DATA);}
        PORTC &=~(1<<CLK);_delay_ms(1);}
        PORTC |=(1<<CS);
  }

void ad_AD9833(){
  b = f*pow(2,28)/f25;
  if(b<16383){l_bit = b + 0x4000 ;h_bit = 0x4000;}
  else{h_bit = (b>>14) + 0x4000;l_bit = b - (h_bit<<14) + 0x4000;}
  WriteAD9833(0x2100);// 0010 0001 0000 0000 - Reset + DB28
  WriteAD9833(l_bit); // 0100 0000 0000 0000 - Freq0 LSB 
  WriteAD9833(h_bit); // 0100 0000 0000 0000 - Freq0 MSB 
  WriteAD9833(0xC000);// 1100 0000 0000 0000 - Phase0 
  WriteAD9833(0x2028);// 0010 0000 0000 0000 - Exit Reset
  }   

Как отмечалось в начале скетч полностью совместим с микроконтроллерами Atmega8, Atmega48, Atmega88, Atmega168, Atmega328 (Arduino Nano).

Тестирование

 

Комментарии

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Входной делитель для частотомера

    Входной делитель для частотомера

    Данная приставка позволяет расширить диапазон частотомера до 100-300МГц при верхнем пределе частотомера в 10-30МГц, то есть приставка представляет собой ВЧ делитель частоты на 10. Входное сопротивление приставки 75 Ом, чувствительность по входу 0,5В. VD1 VD2 совместно с R1 представляют собой ограничитель входного напряжения. Далее следует ВЧ дифференциальный усилитель на D1.1, …Подробнее...
  • Простой генератор на 10МГц

    Простой генератор на 10МГц

    На рисунке представлена схема простого генератора на 10МГц, форма выходного сигнала на выходе 1 примерно близка к синусоидальной, на выходе 2 сигнал имеет прямоугольную форму. Частота генератора зависит от кварцевого генератора, частота 10 МГц выбрана для примера, максимально возможная частота может достигать до 20 МГц. Длительность сигнала можно менять подборкой …Подробнее...
  • Параметры отечественных биполярных транзисторов

  • STM32 ШИМ регулятор напряжения 0…25 В 2,5 А (Arduino)

    STM32 ШИМ регулятор напряжения 0…25 В 2,5 А (Arduino)

    В статье https://rcl-radio.ru/?p=77435 был рассмотрен пример создания ШИМ регулятора постоянного напряжения на базе Arduino, в этой статье будет рассмотрен пример создания ШИМ регулятора на базе отладочной платы STM32 (STM32F103C8T6). Характеристики ШИМ регулятора аналогичны предыдущему проекту, но благодаря высокому быстродействию микроконтроллера STM32F103C8T6 по сравнению с ATmega328 (Arduino Nano), улучшена стабильность работы …Подробнее...
  • УМЗЧ на LM1875

    УМЗЧ на LM1875

    На ИМС LM1875 можно собрать простой, но довольно качественный усилитель мощности звуковой частоты, с выходной мощностью до 25 Вт на нагрузке 4-8 Ом. Нелинейные искажения усилителя при выходной мощности 20 Вт на частоте 1 кГц не превышают 0,04 %. Частотный диапазон от 20 до 20000 Гц. Отношение сигнал/шум не хуже …Подробнее...