Jump to content

    
Sign in to follow this  
Dikoy

Вопросы по AD7609 (AD7608)

Recommended Posts

AD7609: http://www.analog.com/static/imported-file...eets/AD7609.pdf

 

В ДШ написано лишь:

 

The falling edge of CS takes the bus out of three-state and clocks out the MSB of the 18-bit conversion result. This MSB is valid on the first falling edge of the SCLK after the CS falling edge. The subsequent 17 data bits are clocked out of the AD7609 on the SCLK rising edge. Data is valid on the SCLK falling edge.

 

Значит, данные выдвигаются на подъёме, а защёлкиваются на спаде.

Соответственно, у АВР это SPI Mode 2, если я всё правильно понял. http://www.atmel.com/Images/doc2585.pdf

 

Однако они пишут, что как только /CS уходит в ноль, данные сразу доступны, т.к. встаёт флажок FRSTDATA, указуя на MSB результата первого канала, а падает он после 18-го спада, на котором выводится последний бит результата 1-го канала.

When the CS input is high , the FRSTDATA output pin is in three-state. In serial mode, the falling edge of CS takes FRSTDA TA out of three- state and sets the FRSTDATA pin high indicating that the result from V1 is available on the DOUTA output data line. The FRSTDATA output returns to a logic low following the 18 th SCLK falling edge.

 

Примерно это же и следует из Figure 6. Serial Read Operation . По этому рисунку видно, что клок изначально должен быть в hi и защёлкнуть бит по первому спаду. И после выдвижения 18-го бита спадом, снова уйти в hi и там остаться.

Тогда это уже Mode 1...

Ничего не понимаю (с)! Помогите разобраться.

Share this post


Link to post
Share on other sites
Что удивительно, вариантов всего - 4. И намного быстрее просто попробовать.

Как минимум 2 варианта будут работать сразу. А то и все 4. Зато потом обязательно вылезет и начнёшь вылавливать...

 

SPOL =1 SPHA =1

Это же Mode 3 - вывод по спаду, защёлка по подьёму... От куда такой вывод?

Share this post


Link to post
Share on other sites

А мне кажется, что 1...

По фиг 6 видно, что первый бит выводится по CS через t25, при этом до спада клока. И далее смена бита происходит в высоком состоянии клока. ИМХО диаграмма для моде 1 более похожа...

А в моде 3 вывод по спаду, защёлка по подьёму. Посмотрите последний бит на фиг 6 - данные снимаются через t23 после подёма. То есть подъём, это признак смены бита, а не защёлки. Да и в тексте они так же пишут.

Как мне кажется...

Share this post


Link to post
Share on other sites

Вообще-то для SPI не имеет значения природа смены бита.

Главное, что бит ДЕЙСТВИТЕЛЕН относительно обоих фронтов.

То, что сигнал НАЧИНАЕТ меняться по фронту - не имеет никакого значения.

Главное - небольшая пауза после CS, и не привысить минимальный полупериод т25.

 

Share this post


Link to post
Share on other sites

Да CS можно вообще посадить на GND и забыть о нем, если у Вас одно устройство SPI

А мне кажется, что 1...
Что Вы под эим подразумеваете, попробуйте изобразить как я

Share this post


Link to post
Share on other sites

Я же давал ссылку на официальный атмелоский тугамент.

 

28474c860055.gif

 

Там и диаграммы есть.

 

Соответственно mode 1 == CPOL =0 CPHA =1

 

Вообще-то для SPI не имеет значения природа смены бита.

Главное, что бит ДЕЙСТВИТЕЛЕН относительно обоих фронтов.

То, что сигнал НАЧИНАЕТ меняться по фронту - не имеет никакого значения.

Главное - небольшая пауза после CS, и не привысить минимальный полупериод т25.

Чтобы бит был действителен, в момент защёлки в регистре приёмника состояние на линии должно быть устоявшимся, за вычетом дребезгов и прочая. По этом выдвижение/чтение должны быть сдвинуты по фазе на 180.

С учётом того, что у АЦП SPI "тянет" 20 МГц на клоке, АЦП успеет вывести бит на линию прежде чем АВР с её 8 МГЦ успеет его защёлкнуть. Но это на идеально коротких проводниках.

По этому я и пишу - 2 режима будут работать. Возможно, все 4. Но как и до какого момента - не известно. От того хочется понять, что конкретно ей надо.

Edited by Dikoy

Share this post


Link to post
Share on other sites
Соответственно mode 1 == CPOL =0 CPHA =1

Ну батенька, однозначно нет. Как кстати и mode 0. Так , что два варианта из четырёх - псу под хвост.

Смотрим на график фиг 6 сей микрухи и видим что CLK начинает формироваться из состояния лог 1 - отсюда следует , что нам нужно установить полярность сигнала CLK ( CPOL) =1

Осталось выбрать , какой же должен быть CPHA. Из тогоже графика видим , что данные появляются на шине по спаду CLK поэтому по фронту следующего импульса мы уже можем их забрать , о чём ксати сообщает нам и Table 3.

t19 Data access time after SCLK rising edge

post-33339-1341809618_thumb.jpg

Share this post


Link to post
Share on other sites

Всякая теория должна уметь предсказывать.

Вот предсказываю.

Установите полярность CLK в 1.

Установите максимальную частоту клока.

Защелкивайте по любому фронту. Будет работать.

Если коснуться пинцетом до линии данных (хорошим большим пинцетом хорошими большими влажными пальцами), то перестанет работать по спадающему фронту, но все еще будет работать по нарастающему. (так же можно вредить линии клока. Что еще эффективнее)

 

Собственно, именно так вы бы могли проверить на устойчивость оба варианта. Чисто практически. Минут за 5.

Можно вместо пинцета заливать кофием с сахаром.

 

Вот тут вы будете иметь подтвержденное практикой решение.

Edited by DpInRock

Share this post


Link to post
Share on other sites
Из тогоже графика видим , что данные появляются на шине по спаду CLK поэтому по фронту следующего импульса мы уже можем их забрать , о чём ксати сообщает нам и Table 3.

Ну не знаю что там видно в графике. Если смотреть на него, то данные на линии сразу после спада CS, при высоком клоке. И именяются на высоком клоке. И вообще до сигнала CS полярность клока не нормируется. Значит он либо ждёт первого подъёма, либо реагирует на изначальную единицу в линии клока. В общем, странный график...

Впрочем, вы оказались правы, ваш вариант всех битов в 1 работает устойчивей всего.

 

Всякая теория должна уметь предсказывать.

Ну, я это ещё пару сообщений сверху предсказал. И частота клока тут не при чём - если есть дребезг, он проявится одинаково на любой частоте.

Что касается пинцета, то данный тест не гарантирует 100% результата, а значит "не научен!" (с). В одних условиях сработает, в других прокатит. Я это ещё лет 8 назад осознал, когда SD флешки к атмеге подключал. Не вижу в нём никакого практического смысла.

Вот кофе с сахаром куда более близко к реальности. Только прототипчик жалко :)

 

Меня сейчас вот что волнует...

Куда делся целый бит? :blink:

 

Имеем AD7609. Питание 5 вольтов. На REF напряжение идёт через делитель на резисторах 1к (пока китайские полосатики, в конечном девайсе будут прецизионные). Такое включение в связи с ратиометрическими датчиками.

Датчик имитирует потенциометр, включённый между питанием (5 вольт) и землёй. Соответственно на входе имеем 0-5 вольт. Вход V8- АЦП соединён с общей землёй, на V8+ подаётся напряжение с потенциометра.

Входной диапазон АЦП включён +-5 вольт.

Снимаю график:

73ecf55d554a.gif

Максимальный код 00FDD6 (64982). То есть 16 бит.

Ну ладно один бит я теряю за счёт двуполярности. Но куда делся второй?

Она, конечно, посностью дифференциальная, но должна же от заданной земли работать? Или таки от внутреннего смещения? :05:

 

 

ПС. Для будущих поколений настройка USART AVR (ATmega640, 16 MHz) для этой МС:

 // инициализация порта для АЦП   
UBRR1 = 0;
// Установка XCKn, Tx и CS как выходов
PORTD |= (1<<CS);
DDRD  |= (1<<XCKn)|(1<<Tx)|(1<<CS);
// Set MSPI mode of operation and SPI mode. 
UCSR1C = (1 << UMSEL11)|(1 << UMSEL10)|(1 << UCPHA1)|(1 << UCPOL1); // биты 7,6,1,0.
// Enable receiver and transmitter. 
UCSR1B = (1<<RXEN1)|(1<<TXEN1);
UCSR1A = 0x00;
// Устанавливаем скорость. 
// Важно. Скорость надо устанавливать ПОСЛЕ включение приёмника и(или) передатчика.  
UBRR1H = 0;
UBRR1L = 68; // 115200    (16000000/(2*115200)-1) = 68,44444444444

Edited by Dikoy

Share this post


Link to post
Share on other sites
И вообще до сигнала CS полярность клока не нормируется

Опять ошибаетесь. Вас сбивает с понтолыку , что при отсутствии сигнала CS на графике показан clock . Но если присмотреться , то можно видеть , что clock может отсутствовать и при этом находится в лог.1 и после окончания считывания снова переходит в лог 1. Я думаю , что каринку снова выкладывать нет необходимости.

Зачем это сделано:

Как я уже писал выше CS можно принебречь и использовать только 2 порта MCU. CLK и DATA. Но CLK должен находится в состоянии лог1. до начала считывания данных , что на графике и отражено. - Это первый способ

Второй способ - Clock генерит постоянно (тоже есть на графике) - безостановочно и всегда, но чтобы считать данные надо сформировать CS и не абы как , а строго в соответствии с графиком , по нарастающему фронту тактового импульса, чтобы по спаду данные появились на шине и по фронту .....хотя писал выше. Но в данном случае Вы используете уже 3 ноги MCU.

Это Ваш случай , так вот посмотрите как Вы формируете start CS в Вашей проге.

 

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