| Ваш IP: 3.238.186.43 | Online(53) - гости: 34, боты: 19 | Загрузка сервера: 3.39 ::::::::::::

AD9833 — генератор сигналов (Arduino)(2)

Ранее в https://rcl-radio.ru/?p=78387 был показан пример создания генератора сигнала синусоидальной, треугольной и прямоугольной формы на базе модуля AD9833.

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

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

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

На этой странице показан аналогичный пример создания генератора с использованием платформы Arduino, но в место энкодера для задания необходимой частоты будет использована гибкая матричная клавиатура 4 на 3, что значительно упрощает ввод необходимой частоты.

Дополнительно помимо гибкой матричной клавиатуры будет использована одна кнопка, которая позволяет изменять форму сигнала.

Вся информация будет как и предыдущем примере выводится на дисплей LCD1602 + I2C (I2C модуль на базе микросхем PCF8574 позволяют подключить символьный дисплей 1602 к плате Arduino всего по двум проводам SDA и SCL (А4 и А5), что дает возможность не использовать цифровые выходы Arduino при подключении дисплея.)

Частота генератора устанавливается при помощи клавиатуры, Вы просто набираете необходимую частоту и нажимаете кнопку «*», для удаления текущей частоты для ввода нового значения частоты нажимается кнопка «#».

#include <SPI.h>
#include <EEPROM.h> 
#include <iarduino_KB.h>  // https://github.com/tremaru/iarduino_KB.git
#include <LiquidCrystal_I2C.h> //Библиотека -  http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
  LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей 
  iarduino_KB KB(6,5,4,3,2,1,0); /// 6543 210
 
long b,h_bit,l_bit,f_lcd,f_ust;
const long f25 = 25000985;// частота кварца, если нет эталонного частотомера установите частоту 25000000 Гц
bool w=1,on;
long times,code[8],ccc;
int i,i1,form;
 
 
void setup() {
  Wire.begin();lcd.init();lcd.backlight(); KB.begin(KB3);
  pinMode(8,INPUT_PULLUP);   // форма сигнала
  lcd.setCursor(0,0);lcd.print("     AD9833   ");delay(3000);lcd.clear();// ЗАСТАВКА
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
  ad();
}
 
 
void loop() {
/////////////////// клавиатура + кнопка //////////////////////////////////////////////////////////////////////////////////////// 
  if(digitalRead(8)==LOW){form++;w=1;if(form>2){form=0;};delay(300);} 
  if(KB.check(KEY_DOWN )){
 
     if(KB.getNum==15){i=0;ccc=0;w=1;on=0;for(i1=0;i1<8;i1++){code[i]=0;}} // # стереть число
     if(KB.getNum==14&&on==0&&w==0){w=1;on=1;delay(200);} // * вкл.ген
     if(KB.getNum==14&&on==1&&w==0){w=1;on=0;delay(200);} // * откл.ген
     if(KB.getNum<10&&i<8){
      code[i] = KB.getNum; 
   switch(i){
     case 0: ccc = code[0];break;
     case 1: ccc = code[0]*10 + code[1];break;
     case 2: ccc = code[0]*100 + code[1]*10 + code[2];break;
     case 3: ccc = code[0]*1000 + code[1]*100 + code[2]*10 + code[3];break;
     case 4: ccc = code[0]*10000 + code[1]*1000 + code[2]*100 + code[3]*10 + code[4];break;
     case 5: ccc = code[0]*100000 + code[1]*10000 + code[2]*1000 + code[3]*100 + code[4]*10 + code[5];break;
     case 6: ccc = code[0]*1000000 + code[1]*100000 + code[2]*10000 + code[3]*1000 + code[4]*100 + code[5]*10 + code[6];break;
     case 7: ccc = code[0]*10000000 + code[1]*1000000 + code[2]*100000 + code[3]*10000 + code[4]*1000 + code[5]*100 + code[6]*10 + code[7];break;
    }i++; if(i>7){i=8;}delay(200);}
    }
 
///////////////// вывод на lcd ////////////////////////////////////////////////////////////
   lcd.setCursor(0,0);lcd.print("F ");lcd.print(ccc/10000000);lcd.print(ccc/1000000%10);lcd.print(".");lcd.print(ccc/100000%10);lcd.print(ccc/10000%10);
   lcd.print(ccc/1000%10);lcd.print(".");lcd.print(ccc/100%10);lcd.print(ccc/10%10);lcd.print(ccc%10);lcd.print(" Hz ");
   if(on==1){lcd.setCursor(0,1);lcd.print("OUT_ON ");i=100;}else{lcd.setCursor(0,1);lcd.print("OUT_OFF");}
 
  if(w==1){ad(); 
  lcd.setCursor(11,1);
  switch(form){ // форма сигн.
  case 0: lcd.print("DAC");WriteAD9833(0x2028);break;
  case 1: lcd.print("SIN");WriteAD9833(0x2000);break;
  case 2: lcd.print("TRI");WriteAD9833(0x2002);break;
  }
  w=0;}
 
 }// loop
 
void WriteAD9833(uint16_t Data){
  SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV2, MSBFIRST, SPI_MODE2));
  digitalWrite(SS, LOW);
  delayMicroseconds(1);
  SPI.transfer16(Data);
  digitalWrite(SS, HIGH);
  SPI.endTransaction();
}
void ad(){
  if(on==1){b = ccc*pow(2,28)/f25;}else{b=0;}
  if(b<16383){l_bit = b + 0x4000 ;h_bit = 0x4000;}
  else{h_bit = (b>>14) + 0x4000;l_bit = b - (h_bit<<14) + 0x4000;}
  SPI.begin();
  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(0x2000);// 0010 0000 0000 0000 - Exit Reset
  }

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=1857#p1857

Комментарии

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

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

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

  • Светодиодный драйвер 2Вт на таймере 555

    Светодиодный драйвер 2Вт на таймере 555

    На рисунке показана схема простого драйвера светодиода, с напряжение питания от 3 до 18В. Основу устройства составляет таймер 555 или  LMC555 на напряжение 5В. На таймере 555 собран ШИМ — регулятор выходной мощности драйвера. Светодиоды суммарной мощностью 2Вт подключены через MOSFET транзистор IRLU3802PBF. Радиатор транзистору не нужен, но если необходима дополнительная мощность (более …Подробнее...
  • Условные графические обозначения электрических машин

    А. Элементы электрических машин (табл.1) 1. Обмотка: а) общее обозначение; б) параллельного возбуждения; в) последовательного возбуждения; г) компенсационная; д) вспомогательного полюса. 2. Статор, общее обозначение. 3. Ротор: а) общее обозначение, короткозамкнутый; б) без обмотки полый немагнитный или ферромагнитный; в) без обмотки с явно выраженными полюсами (с прорезями по окружности); г) …Подробнее...
  • Предусилитель на 3 микрофона

    Предусилитель на 3 микрофона

    Схема приведенная здесь имеет три микрофонных входа, схема выполнена на микросхеме LM348 IC.LM348 обладает высоким коэффициентом усиления, схема выполнена на четырех операционных усилителя с выходным каскадом класса AB. Микросхемы имеет очень низкий ток покоя (0.6mA) и работают от двухполярного источника питания. Заметки. * Сборка схемы на хорошее качество печатной плате. …Подробнее...
  • MP7720 — миниатюрный усилитель класса D

    MP7720 — миниатюрный усилитель класса D

    На микросхеме MP7720 можно собрать миниатюрный усилитель класса D. Особенностью данной микросхемы является отсутствие радиатора охлаждения, так КПД микросхемы более 90%, что позволяет уменьшить размеры конечного устройства. Характеристики усилителя: встроенная система устранения акустических щелчков включения/выключения встроенная защита от короткого замыкания выходная мощность на нагрузке 4 Ом 20 Вт при напряжении …Подробнее...
  • УМЗЧ 2*20Вт на LA4450

    УМЗЧ 2*20Вт на LA4450

    На рисунке показана схема двухканального усилителя мощности звуковой частоты на ИМС LA4450. Выходная мощность усилителя при напряжении питания 26,4В (рекомендованное) 12Вт (на канал) на нагрузке 8 Ом и 20 Вт (на канал) на нагрузке 4 Ом. ИМС LA4450 имеет тепловую защиту, защиту от перенапряжения и импульсных помех. Основные характеристики Максимальное напряжение …Подробнее...