Dikoy 3 7 июля, 2012 Опубликовано 7 июля, 2012 · Жалоба 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... Ничего не понимаю (с)! Помогите разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 7 июля, 2012 Опубликовано 7 июля, 2012 · Жалоба Что удивительно, вариантов всего - 4. И намного быстрее просто попробовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 7 июля, 2012 Опубликовано 7 июля, 2012 · Жалоба SPOL =1 SPHA =1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dikoy 3 7 июля, 2012 Опубликовано 7 июля, 2012 · Жалоба Что удивительно, вариантов всего - 4. И намного быстрее просто попробовать. Как минимум 2 варианта будут работать сразу. А то и все 4. Зато потом обязательно вылезет и начнёшь вылавливать... SPOL =1 SPHA =1 Это же Mode 3 - вывод по спаду, защёлка по подьёму... От куда такой вывод? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба От куда такой вывод? из Figure 6. Serial Read Operation Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dikoy 3 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба А мне кажется, что 1... По фиг 6 видно, что первый бит выводится по CS через t25, при этом до спада клока. И далее смена бита происходит в высоком состоянии клока. ИМХО диаграмма для моде 1 более похожа... А в моде 3 вывод по спаду, защёлка по подьёму. Посмотрите последний бит на фиг 6 - данные снимаются через t23 после подёма. То есть подъём, это признак смены бита, а не защёлки. Да и в тексте они так же пишут. Как мне кажется... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба Вообще-то для SPI не имеет значения природа смены бита. Главное, что бит ДЕЙСТВИТЕЛЕН относительно обоих фронтов. То, что сигнал НАЧИНАЕТ меняться по фронту - не имеет никакого значения. Главное - небольшая пауза после CS, и не привысить минимальный полупериод т25. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба Да CS можно вообще посадить на GND и забыть о нем, если у Вас одно устройство SPI А мне кажется, что 1... Что Вы под эим подразумеваете, попробуйте изобразить как я Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dikoy 3 9 июля, 2012 Опубликовано 9 июля, 2012 (изменено) · Жалоба Я же давал ссылку на официальный атмелоский тугамент. Там и диаграммы есть. Соответственно mode 1 == CPOL =0 CPHA =1 Вообще-то для SPI не имеет значения природа смены бита. Главное, что бит ДЕЙСТВИТЕЛЕН относительно обоих фронтов. То, что сигнал НАЧИНАЕТ меняться по фронту - не имеет никакого значения. Главное - небольшая пауза после CS, и не привысить минимальный полупериод т25. Чтобы бит был действителен, в момент защёлки в регистре приёмника состояние на линии должно быть устоявшимся, за вычетом дребезгов и прочая. По этом выдвижение/чтение должны быть сдвинуты по фазе на 180. С учётом того, что у АЦП SPI "тянет" 20 МГц на клоке, АЦП успеет вывести бит на линию прежде чем АВР с её 8 МГЦ успеет его защёлкнуть. Но это на идеально коротких проводниках. По этому я и пишу - 2 режима будут работать. Возможно, все 4. Но как и до какого момента - не известно. От того хочется понять, что конкретно ей надо. Изменено 9 июля, 2012 пользователем Dikoy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 9 июля, 2012 Опубликовано 9 июля, 2012 · Жалоба Соответственно 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 9 июля, 2012 Опубликовано 9 июля, 2012 (изменено) · Жалоба Всякая теория должна уметь предсказывать. Вот предсказываю. Установите полярность CLK в 1. Установите максимальную частоту клока. Защелкивайте по любому фронту. Будет работать. Если коснуться пинцетом до линии данных (хорошим большим пинцетом хорошими большими влажными пальцами), то перестанет работать по спадающему фронту, но все еще будет работать по нарастающему. (так же можно вредить линии клока. Что еще эффективнее) Собственно, именно так вы бы могли проверить на устойчивость оба варианта. Чисто практически. Минут за 5. Можно вместо пинцета заливать кофием с сахаром. Вот тут вы будете иметь подтвержденное практикой решение. Изменено 9 июля, 2012 пользователем DpInRock Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dikoy 3 11 июля, 2012 Опубликовано 11 июля, 2012 (изменено) · Жалоба Из тогоже графика видим , что данные появляются на шине по спаду CLK поэтому по фронту следующего импульса мы уже можем их забрать , о чём ксати сообщает нам и Table 3. Ну не знаю что там видно в графике. Если смотреть на него, то данные на линии сразу после спада CS, при высоком клоке. И именяются на высоком клоке. И вообще до сигнала CS полярность клока не нормируется. Значит он либо ждёт первого подъёма, либо реагирует на изначальную единицу в линии клока. В общем, странный график... Впрочем, вы оказались правы, ваш вариант всех битов в 1 работает устойчивей всего. Всякая теория должна уметь предсказывать. Ну, я это ещё пару сообщений сверху предсказал. И частота клока тут не при чём - если есть дребезг, он проявится одинаково на любой частоте. Что касается пинцета, то данный тест не гарантирует 100% результата, а значит "не научен!" (с). В одних условиях сработает, в других прокатит. Я это ещё лет 8 назад осознал, когда SD флешки к атмеге подключал. Не вижу в нём никакого практического смысла. Вот кофе с сахаром куда более близко к реальности. Только прототипчик жалко :) Меня сейчас вот что волнует... Куда делся целый бит? :blink: Имеем AD7609. Питание 5 вольтов. На REF напряжение идёт через делитель на резисторах 1к (пока китайские полосатики, в конечном девайсе будут прецизионные). Такое включение в связи с ратиометрическими датчиками. Датчик имитирует потенциометр, включённый между питанием (5 вольт) и землёй. Соответственно на входе имеем 0-5 вольт. Вход V8- АЦП соединён с общей землёй, на V8+ подаётся напряжение с потенциометра. Входной диапазон АЦП включён +-5 вольт. Снимаю график: Максимальный код 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 Изменено 11 июля, 2012 пользователем Dikoy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 11 июля, 2012 Опубликовано 11 июля, 2012 · Жалоба И вообще до сигнала CS полярность клока не нормируется Опять ошибаетесь. Вас сбивает с понтолыку , что при отсутствии сигнала CS на графике показан clock . Но если присмотреться , то можно видеть , что clock может отсутствовать и при этом находится в лог.1 и после окончания считывания снова переходит в лог 1. Я думаю , что каринку снова выкладывать нет необходимости. Зачем это сделано: Как я уже писал выше CS можно принебречь и использовать только 2 порта MCU. CLK и DATA. Но CLK должен находится в состоянии лог1. до начала считывания данных , что на графике и отражено. - Это первый способ Второй способ - Clock генерит постоянно (тоже есть на графике) - безостановочно и всегда, но чтобы считать данные надо сформировать CS и не абы как , а строго в соответствии с графиком , по нарастающему фронту тактового импульса, чтобы по спаду данные появились на шине и по фронту .....хотя писал выше. Но в данном случае Вы используете уже 3 ноги MCU. Это Ваш случай , так вот посмотрите как Вы формируете start CS в Вашей проге. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться