Jump to content

    
Sign in to follow this  
stepolton77

Кто работал с AD9953 не могу записать в регистры данные

Recommended Posts

AD9953

подключена к SPI stm32. Интерфейс работает корректно. Попытка записи в регистры ни к чему не приводит.

При чтении так же всегда читаю 0. Подключена по 3х проводной схеме....

Где грабли? Буду признателен за совет.

Share this post


Link to post
Share on other sites
AD9953

подключена к SPI stm32. Интерфейс работает корректно. Попытка записи в регистры ни к чему не приводит.

При чтении так же всегда читаю 0. Подключена по 3х проводной схеме....

Где грабли? Буду признателен за совет.

 

Схема?

ad9953 reset?

Пробовали на других SPI девайсах?

spi mode3?

 

 

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

Share this post


Link to post
Share on other sites
Схема?

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 у меня на земле, те по умолчанию все включено......

Питание и все прочее по даташиту и схеме кита от аналог девайс, все многократно проверил....

 

 

Схема?

ad9953 reset?

Пробовали на других SPI девайсах?

spi mode3?

 

 

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

 

 

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

DDS.pdf

Edited by beeper

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


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

 

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

 

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

 

Да я не дергаю CS. Я его опускаю перед передачей и поднимаю после окончания передачи.... передача состоит из байта инструкции и трех или четырех байт значений регистра....

Share this post


Link to post
Share on other sites
Попробуйте сделать I/O Update после записи в регистр. Для этого надо сформировать положительный перепад на 1 ноге AD9953.

Делаю, не помогает.

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

Share this post


Link to post
Share on other sites
Вообще на сколько я разобрался, сигнал 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

 

Share this post


Link to post
Share on other sites
Там два уровня регистров, в регистры первого уровня информация записывается и передается в регистры второго уровня по 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 не принимает к исполнению, так же правы....

Вообще нашел проблему... плата четерехслойная на Радаре сделанная)))) питание интерфейса то было то не было.....

Спасибо всем кто откликнулся.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this