реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Кто работал с AD9953 не могу записать в регистры данные
beeper
сообщение May 5 2013, 18:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 21-02-11
Пользователь №: 63 148



AD9953
подключена к SPI stm32. Интерфейс работает корректно. Попытка записи в регистры ни к чему не приводит.
При чтении так же всегда читаю 0. Подключена по 3х проводной схеме....
Где грабли? Буду признателен за совет.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 5 2013, 19:00
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(beeper @ May 5 2013, 22:18) *
AD9953
подключена к SPI stm32. Интерфейс работает корректно. Попытка записи в регистры ни к чему не приводит.
При чтении так же всегда читаю 0. Подключена по 3х проводной схеме....
Где грабли? Буду признателен за совет.


Схема?
ad9953 reset?
Пробовали на других SPI девайсах?
spi mode3?


miso, MOSI, SCLK, CS - четыре сигнала для получения данных с AD9953
Go to the top of the page
 
+Quote Post
beeper
сообщение May 6 2013, 10:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 21-02-11
Пользователь №: 63 148



Цитата(Genadi Zawidowski @ May 5 2013, 22:00) *
Схема?
ad9953 reset?
Пробовали на других SPI девайсах?
spi mode3?


miso, MOSI, SCLK, CS - четыре сигнала для получения данных с AD9953


ДА, все четыре сигнала и использую. На этой же плате стоят ацп подключенные к этому же spi они отзываются корректно.
Что я делаю.
Формирую высокий уровень на входе сброса, затем опускаю сброс, опускаю чип селект, вывожу 0х00 ( инструкция записи в регистр 0), вывожу 0х00, 0х02 ( включаю трех проводный режим SPI поднимая бит SDIO input only), 0х00, 0Х00, поднимаю чип селект.
После этого опускаю чип селект, вывожу 0х01 ( инструкция записи в первый регистр), вывожу 0х00, 0х02 ( включаю crystal out), 0x00,0x00, поднимаю чип селект.
Что я ожидаю... Во первых микросхема должна перейти в трех проводной режим обмена, те одна линия на ввод данных одна на вывод и клок.
Во вторых на выходе crystal out я должен увидеть сигнал тактового генератора, я его не вижу, хотя на самих лапах кварца ( я использую кварц 24Мгц) я вижу осциляцию.. Попытка прочитать два упомянутых выше регистра дает нули....
Вывод PWRDWNCTL у меня на земле, те по умолчанию все включено......
Питание и все прочее по даташиту и схеме кита от аналог девайс, все многократно проверил....


Цитата(Genadi Zawidowski @ May 5 2013, 22:00) *
Схема?
ad9953 reset?
Пробовали на других SPI девайсах?
spi mode3?


miso, MOSI, SCLK, CS - четыре сигнала для получения данных с AD9953



Схема включения

Сообщение отредактировал beeper - May 6 2013, 10:23
Прикрепленные файлы
Прикрепленный файл  DDS.pdf ( 101.41 килобайт ) Кол-во скачиваний: 28
 
Go to the top of the page
 
+Quote Post
Xenia
сообщение May 6 2013, 11:16
Сообщение #4


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



С AD9953 дела не имела, но у большнства прочих АЦП чипселект служит еще и для синхронизации. Например, если я скармливаю ему команду, состоящую из нескольких байт (например, команды установки режимов), а потом вдруг "забыла" сколько байт успела передать, то дернув чипселектом туда-сюда, могу начать передачу сызнова, т.к. после этого АЦП забывает незавершенные процедуры.

Это же механизм обычно используется при чтении посылок из АЦП, содержаних более одного байта. Ведь если хотя бы один байт пропустишь, старшие байты числа перепутаются с младшими. Что бы такого не случилось, полезно делать встряску чипселектом с начала приема каждого значения. Обычно это реализуется так - CS всегда держат выключенным, а включает только на время чтения посылки. Когда автоматически получается, что АЦП выдаст посылку сначала, и байты от прошлых посылок в нем не застрянут.

В отношении "программирования" АЦП работает тот же механизм. А потому никак нельзя дёргать чипселектом в процесе одного и того же акта приема-передачи. Например, если это не перидический режим выдачи, а режим получения одного значения по запросу, то между подачей запроса и чтением ответа чипселект отключаться не должен! А то получим одни нули sm.gif.
Go to the top of the page
 
+Quote Post
Radiocomp
сообщение May 6 2013, 12:28
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 5-03-12
Пользователь №: 70 614



Попробуйте сделать I/O Update после записи в регистр. Для этого надо сформировать положительный перепад на 1 ноге AD9953.
Go to the top of the page
 
+Quote Post
beeper
сообщение May 6 2013, 17:09
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 21-02-11
Пользователь №: 63 148



Цитата(Xenia @ May 6 2013, 14:16) *
С AD9953 дела не имела, но у большнства прочих АЦП чипселект служит еще и для синхронизации. Например, если я скармливаю ему команду, состоящую из нескольких байт (например, команды установки режимов), а потом вдруг "забыла" сколько байт успела передать, то дернув чипселектом туда-сюда, могу начать передачу сызнова, т.к. после этого АЦП забывает незавершенные процедуры.

Это же механизм обычно используется при чтении посылок из АЦП, содержаних более одного байта. Ведь если хотя бы один байт пропустишь, старшие байты числа перепутаются с младшими. Что бы такого не случилось, полезно делать встряску чипселектом с начала приема каждого значения. Обычно это реализуется так - CS всегда держат выключенным, а включает только на время чтения посылки. Когда автоматически получается, что АЦП выдаст посылку сначала, и байты от прошлых посылок в нем не застрянут.

В отношении "программирования" АЦП работает тот же механизм. А потому никак нельзя дёргать чипселектом в процесе одного и того же акта приема-передачи. Например, если это не перидический режим выдачи, а режим получения одного значения по запросу, то между подачей запроса и чтением ответа чипселект отключаться не должен! А то получим одни нули sm.gif.


Да я не дергаю CS. Я его опускаю перед передачей и поднимаю после окончания передачи.... передача состоит из байта инструкции и трех или четырех байт значений регистра....
Go to the top of the page
 
+Quote Post
beeper
сообщение May 6 2013, 18:31
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 21-02-11
Пользователь №: 63 148



Цитата(Radiocomp @ May 6 2013, 15:28) *
Попробуйте сделать I/O Update после записи в регистр. Для этого надо сформировать положительный перепад на 1 ноге AD9953.

Делаю, не помогает.
Вообще на сколько я разобрался, сигнал I/O Update нужен для синхронизации... Те, для того чтобы регистры приняли его значение, совсем не обязательно формировать фронт на нем.....
Go to the top of the page
 
+Quote Post
Radiocomp
сообщение May 6 2013, 19:44
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 5-03-12
Пользователь №: 70 614



Цитата
Вообще на сколько я разобрался, сигнал I/O Update нужен для синхронизации... Те, для того чтобы регистры приняли его значение, совсем не обязательно формировать фронт на нем.....

Там два уровня регистров, в регистры первого уровня информация записывается и передается в регистры второго уровня по I/O Update для исполнения. Какой уровень регистров считывается, я не помню.
Цитата
Формирую высокий уровень на входе сброса, затем опускаю сброс, опускаю чип селект, вывожу 0х00 ( инструкция записи в регистр 0), вывожу 0х00, 0х02 ( включаю трех проводный режим SPI поднимая бит SDIO input only), 0х00, 0Х00, поднимаю чип селект.
После этого опускаю чип селект, вывожу 0х01 ( инструкция записи в первый регистр), вывожу 0х00, 0х02 ( включаю crystal out), 0x00,0x00, поднимаю чип селект.

Здесь есть как минимиум две ошибки:
1. Запись по умолчанию - MSB (см. стр. 27 datasheet), т.е. чтобы включить SDIO input only надо записывать 0x00,0x00,0x00,0x02,0x00.
2. Регистр 0x01 24-битный, в него можно записать только 3 байта. В Вашем случае последовательность должна быть 0x01,0x00,0x02,0x00
Go to the top of the page
 
+Quote Post
beeper
сообщение May 6 2013, 20:00
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 21-02-11
Пользователь №: 63 148



Цитата(Radiocomp @ May 6 2013, 22:44) *
Там два уровня регистров, в регистры первого уровня информация записывается и передается в регистры второго уровня по I/O Update для исполнения. Какой уровень регистров считывается, я не помню.

Здесь есть как минимиум две ошибки:
1. Запись по умолчанию - MSB (см. стр. 27 datasheet), т.е. чтобы включить SDIO input only надо записывать 0x00,0x00,0x00,0x02,0x00.
2. Регистр 0x01 24-битный, в него можно записать только 3 байта. В Вашем случае последовательность должна быть 0x01,0x00,0x02,0x00


Вы правы, последовательность как вы указали( я просто из кода переписал не так).
Без I\O update не принимает к исполнению, так же правы....
Вообще нашел проблему... плата четерехслойная на Радаре сделанная)))) питание интерфейса то было то не было.....
Спасибо всем кто откликнулся.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 15:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.0135 секунд с 7
ELECTRONIX ©2004-2016