Перейти к содержанию
    

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

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...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что удивительно, вариантов всего - 4. И намного быстрее просто попробовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что удивительно, вариантов всего - 4. И намного быстрее просто попробовать.

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

 

SPOL =1 SPHA =1

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

28474c860055.gif

 

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

 

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

 

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

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

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

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

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

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

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

Изменено пользователем Dikoy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Соответственно 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

 

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

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

 

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

Изменено пользователем DpInRock

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из тогоже графика видим , что данные появляются на шине по спаду 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

Изменено пользователем Dikoy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И вообще до сигнала CS полярность клока не нормируется

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

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...