Поиск библиотеки для SPI DAC AD5310

Черная бригада
Пт 30 марта 2018 г. 10:44
Привет,
Я ищу библиотеку Arduino для 1-канальной 10-битной DAC DAC AD5310
--> http: // www.аналоговый.com/media/en/technica ... AD5310.PDF

В настоящее время я использую STM32F103Vet6 на данном оборудовании, где 2 из этого ЦАП подключены к SPI2:
PB12 - NSS ("Select")
PB13 - SCK
PB14 - Мисо
PB15 - Моси

Может быть, некоторые из вас сделали что -то подобное в прошлом,
Или кто-то знает, что этот вид ЦАП совместим с SW с более распространенным DAC SPI от E.глин. Ti или около того ...

Мадиас
Пт 30 марта 2018 г. 11:05
У меня был быстрый взгляд в таблицу данных:
На самом деле нет необходимости в библиотеке.
Просто напишите 16 -битный порт SPI (пример: считать от 0 до 65535), начните с низких тактовых частот и проверьте предел.
через таблицу данных: См. Рисунок 2. 3 максимальная частота SCLK составляет 30 МГц при VDD = 3.6 В до 5.5 В и 20 МГц при VDD = 2.От 7 V до 3.6 В. Что -то вроде этого: SPI.beginTransaction(SPISettings(18000000, MSBFIRST, SPI_MODE0, DATA_SIZE_16BIT));

Мадиас
Пт 30 марта 2018 г., 11:17
Так что ваш (сохраненный) код должен выглядеть так:
Вы можете попытаться подняться на тактовую частоту (30000000) #include #define CS PB13 // your Sync pin void setup() { //SPI.begin(); // not needed, done in beginTransaction() - edit by stevestrong pinMode(CS,OUTPUT); SPI.beginTransaction(SPISettings(18000000, MSBFIRST, SPI_MODE0, DATA_SIZE_16BIT)); } void loop() { for (uint16_t counter=0;counter<65535;counter++) { digitalWrite (CS, LOW); // assert Slave Select SPI.write (counter); // do a transfer digitalWrite (CS, HIGH); // de-assert Slave Select //SPI.endTransaction (); // transaction over } }

Черная бригада
Пт 30 марта 2018 г., 11:29
Спасибо,
Я попробую это,
Но зачем писать 16-битное слово на 10-битном ЦАП ?
Если вы посмотрите на страницу 11 из 16 листов данных, вы можете прочитать следующее: Регистр сдвига ввода имеет ширину 16 бит (см. Рисунок 25). Первый
Два бита Дон’Т заботы. Следующие два бита - это контрольные биты, которые
управляйте, какой режим работы находится в (нормальный режим или
один из трех режимов питания). Есть более полное
Описание различных режимов в режимах питания
раздел. Следующие 10 бит - это биты данных. Они передаются
в реестр ЦАП на 16 -м падающем краю SCLK. Окончательно,
Последние два бита - Дон’Т заботы.
Поэтому я думаю, что мне нужно сделать какой-то дополнительный сдвиг, а также установить два элемента управления правильно (?)

Мадиас
Пт 30 марта 2018 12:16
Я отредактировал код выше - незначительные ошибки. Просто попробуй. Даже с 10 -битным вы должны перенести 16 -битный

Черная бригада
Пт 30 марта 2018 г. 13:02
Другое дело
что 2 SPI-DAC связаны следующим образом с STM32 SPI2 (моя данная доска):
.
Schema.png
Схема.PNG (10.13 киб) просмотрено 368 раз

Стивестронг
Пт 30 марта 2018 г. 13:45
Вы также можете подключить PB14 к другому выводу, настроенный как выход, который затем будет управлять второй синхронизацией.

Черная бригада
Пт 30 марта 2018 13:50
Это заданное оборудование, которое я не могу изменить (не хочу менять)...

Вассилис
Пт 30 марта 2018 г. 16:56
Одновременно использование аппаратного порта SPI и штифта MISO в качестве вывода IMHO следует избегать. Он работает, однако, если вы устанавливаете его как вывод После инициализации SPI.
#include #define CS1 PB12 // your Sync pin of the first AD5310 DAC #define CS2 PB14 // your Sync pin of the second AD5310 DAC SPIClass SPI_2(2); void setup() { pinMode(CS1,OUTPUT); SPI_2.beginTransaction(SPISettings(18000000, MSBFIRST, SPI_MODE0, DATA_SIZE_16BIT)); pinMode(CS2, OUTPUT); //Initiallize the MISO pin as output. This line must be after SPI initiallization. } void loop() { for (uint16_t counter=0;counter<65535;counter++) { digitalWrite (CS1, LOW); // assert Slave Select SPI_2.write (counter); // do a transfer digitalWrite (CS1, HIGH); // de-assert Slave Select digitalWrite (CS2, LOW); SPI_2.write (65535 - counter); // do a transfer digitalWrite (CS2, HIGH); } }

Мадиас
Пт 30 марта 2018 г., 19:44
Формат: Да, вы должны сдвинуть 2 бита и добавить 1,2 или 3 (зависит от битов управления, вам нужно 1 = b01, 2 = b10, 3 = b11)
Макет платы очень странная, используя стандартный порт SPI и используя CS (2) на штифте MOSI.... Я бы перепродал эту причуды.
Конечно, вы можете переписать любую библиотеку Soft_spi от AVR-Aduino для нее и изменить подпрограммы переключения PIN-образного штифта AVR для STM32 (Leaflab Core) или использовать предложение Vassilis Made.
Может быть, это поможет нам, если вы сможете объяснить что -то большее:
Что это за доска?
Что вы собираетесь с этим делать? (Так вам нужна скорость вождения ЦАП....и так далее)

Мадиас
Пт 30 марта 2018 г., 19:46
Хорошо, я думаю, что вы используете одно из этого:
https: // barth-elektronik.com/en/mini-plc.HTML

Я прав?
Матиас

Черная бригада
Сб 31 марта 2018 г., 7:23
[Мадиас - Пт 30 марта 2018 г., 19:46] - Хорошо, я думаю, что вы используете одно из этого:
https: // barth-elektronik.com/en/mini-plc.HTML
неа ...
Я использую русский PLC Owen PR-200

----

Поскольку нет необходимости в двунаправленной SPI, и нет необходимости в самой высокой скорости,
Я попробую простой функции Shiftout (), подобной этим:
- в ядре: https: // github.com/rogerclarkmelbourne/ ... футов.CPP#229
- медленный: ViewTopic.PHP?P = 17090#P17090
- быстрый: ViewTopic.PHP?P = 17131#P17131

Но я попробую @Vassilis решение также...

Мадиас
Сб 31 марта 2018 г. 9:09
Я бы попробовал Vassilis версию, должен быть прост.
О двух битах управления: я думаю, что вы можете позволить первым двум MSB «0» для «нормальной работы»