Автор Тема: Опорник от Владимир_К  (Прочитано 38090 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Core

  • Гость
Re: Опорник от Владимир_К
« Ответ #240 : Май 15, 2021, 07:41:20 pm »
Ок. Я пока ее впаяю. Вы только скажите какие порты задействуем под ее управление.

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1102
Re: Опорник от Владимир_К
« Ответ #241 : Май 16, 2021, 10:50:40 am »
Вы только скажите какие порты задействуем
Написал тестовый код управления AD9850.
Подключение:
PC1 - подключаем к 25 выводу микросхемы (Data);
PC2 - подключаем к 7 ноге микросхемы (WCLK);
PB4 - подключаем к 8 выводу микросхемы (FQ_UD;
С опорником 125 мгц, микросхема должна выдать сигнал частотой 10 мгц.
Это тестовая прошивка, никакие функции синтезатора работать не будут, только ДДС и должен моргать светодиод, подключенный на вывод PD4 (Lock).
Файл назван AD9832, не обращайте внимание, он для AD9850.
Если будет работать, прицеплю ее к синтезатору.
« Последнее редактирование: Май 16, 2021, 10:52:30 am от Владимир_К »

Core

  • Гость
Re: Опорник от Владимир_К
« Ответ #242 : Май 16, 2021, 11:01:03 am »
Паяю ддс.

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1102
Re: Опорник от Владимир_К
« Ответ #243 : Май 16, 2021, 11:18:18 am »
1. Ничего сложного, 40 бит (с 8 "нулями" в конце) из одного расчета и все.
Добрый день!
У меня к Вам пара вопросов. В Вашей прошивке, последнее слово, которое Вы загружаете в AD9850 "0b00000000".

 shiftOut(DATA, W_CLK, LSBFIRST, 0b00000000);

 В даташите "0b001xxxxx" где d6 это  Power-Down. Уточните пож. что туда ставить?
И еще, например частота 500 гц, в двоичном коде это 111110100. Как надо загружать в микросхему, в каком порядке?
Я понял что - сначала младший бит, т.е. 0, потом 0, 1,0 и так далее, или наоборот? LSBFIRST- это значит с младшего бита?

Оффлайн veso74

  • Hero Member
  • *****
  • Сообщений: 944
Re: Опорник от Владимир_К
« Ответ #244 : Май 16, 2021, 11:58:30 am »
Все из pdf-а (9850.jpg). LSB first = "младший значащий бит первым". LSBFIRST, MSBFIRST находятся во встроенной функции shiftOut(dataPin, clockPin, bitOrder, value) в Arduino IDE.
Просто нужно вызвать функцию, она готова.

shiftOut():
https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout\
и
http://arduino.ru/Reference/ShiftOut

a если нужно ее сам сделать:
(C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\wiring_shift.c)
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val) {
  uint8_t i;

  for (i = 0; i < 8; i++)  {
    if (bitOrder == LSBFIRST) {
      digitalWrite(dataPin, val & 1);
      val >>= 1;
    }
    else {
      digitalWrite(dataPin, (val & 128) != 0);
      val <<= 1;
    }
    digitalWrite(clockPin, HIGH);
    digitalWrite(clockPin, LOW);
  }
---
A ето "младший бит" :).
(lsb.jpg)
« Последнее редактирование: Май 16, 2021, 12:08:29 pm от veso74 »

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1102
Re: Опорник от Владимир_К
« Ответ #245 : Май 16, 2021, 12:05:25 pm »
val >>= 1;
Спасибо. Вот это мне и нужно было, куда двигать?
Так val >>= 1, или наоборот val <<= 1.
если нужно ее сам сделать:
Да я так обычно и делаю, только было сомнение, куда двигать.

Оффлайн veso74

  • Hero Member
  • *****
  • Сообщений: 944
Re: Опорник от Владимир_К
« Ответ #246 : Май 16, 2021, 12:26:16 pm »
Если используемом IDE или у Вас нет своего, я бы экспортировал множество макросов/функции, уже встроенных в Arduino IDE, в вн. файл, библиотека. Они экономят время для писания кода и строки давно проверены (bitRead, bitSet, lowByte(w) ... max(a, b) ... abs(x), map(...), constrain(amt, low, high)). Часто обращаюсь к Arduino сроки, которые даже за CCS для PIC я недавно переписал, уже строко на полстраницы :). Кто как привык.
« Последнее редактирование: Май 16, 2021, 12:29:51 pm от veso74 »

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1102
Re: Опорник от Владимир_К
« Ответ #247 : Май 16, 2021, 01:33:44 pm »
я бы экспортировал множество макросов/функции, уже встроенных в Arduino IDE,
Я иногда это делаю, но, потом забываю, что у меня есть, а чего нет. Программированием я не часто занимаюсь, больше времени уделяю слесарным работам, да паяю..

Оффлайн zenit

  • Full Member
  • ***
  • Сообщений: 130
Re: Опорник от Владимир_К
« Ответ #248 : Май 16, 2021, 01:54:30 pm »
У меня к Вам пара вопросов. В Вашей прошивке, последнее слово, которое Вы загружаете в AD9850 "0b00000000".
Это регистр фазы который по сути не используем и там же младший бит включение внутреннего умножителя такта.  Если ноль то не умножать, если единица включено умножение на шесть для 9851. Зависит какой опорник на плате ддс 30 или 180МГц. Кстати АД9850 с алиэкспресса все работают с умножением на четыре если этот бит установить. А так же без проблем с внешним тактом до 200МГц. Естественно при питании 5 вольт. На 40МГц тактовый генератор умножается на четыре. Расчёт такта ведётся всегда с учётом множителя если он включен. Если генератор 30 то такт 180 и т.д.  9851 и 9850 самые простые в управлении ддс.

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1102
Re: Опорник от Владимир_К
« Ответ #249 : Май 16, 2021, 02:06:12 pm »
Это регистр фазы который по сути не используем и там же младший бит включение внутреннего умножителя такта. 
Не, меня немного смутил 5 бит последнего байта. Пример на Ардуино, там ноли, а в даташите - 1. Обозначен этот бит как Power Down. И как это понимать, выключение это когда, если 1 или наоборот?. И вообще, что это за отключение. Спящий режим?

Оффлайн veso74

  • Hero Member
  • *****
  • Сообщений: 944
Re: Опорник от Владимир_К
« Ответ #250 : Май 16, 2021, 02:09:44 pm »
Цитировать
а в даташите - 1.
Дайте точного цитата из pdf (скрийн екрана), пожалуйста.
---
нашел Figure 13:
W32 = 0, W33 = 0, W34 = 1, W35..39 = x ето режим Serial Load Power-Down Sequence / Последовательность отключения. Точно, "спящий режим".

Нам нужна непрерывная работа AD (без программно выключения), фаза 0, без уножитель, поэтому все биты равны нулю.
Даже пробовал там телеграфная манипуляция (директно на основняя частота), рядом в приемника звучит неплохо.
« Последнее редактирование: Май 16, 2021, 02:22:45 pm от veso74 »

Core

  • Гость
Re: Опорник от Владимир_К
« Ответ #251 : Май 16, 2021, 02:45:49 pm »
Припаял DDS, залил программный код. Мигает светодио, на выходе DDS ничего нет.  dontt44

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1102
Re: Опорник от Владимир_К
« Ответ #252 : Май 16, 2021, 02:49:35 pm »
на выходе DDS ничего нет.
Ну вот, чего я и боялся. Если бы у меня была микросхема, мог бы попытать у себя. Если бы у меня не работала, тогда 100% надо ковыряться в программе. А что сейчас думать, не знаю. Хотя, остается небольшая надежда, прогоню в пошаговом режиме, может где "косяк" допустил..
Покажите схему подключения. Обратите внимание, для переключения в последовательный режим записи, надо ногу 2 на землю, ноги 3 и 4 на + питания. Проверьте генерацию опорника.
« Последнее редактирование: Май 16, 2021, 02:55:46 pm от Владимир_К »

Core

  • Гость
Re: Опорник от Владимир_К
« Ответ #253 : Май 16, 2021, 02:57:05 pm »
 123123 123123 123123

Core

  • Гость
Re: Опорник от Владимир_К
« Ответ #254 : Май 16, 2021, 02:59:47 pm »
Опорник генерит 125мгц.  123123