Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SPI и AD7895-10, ЦАП AD7233
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
e-moe
Есть АЦП AD7895-10 и ЦАП AD7233, каков алгоритм работы с этими устройствапи по интерфейсу SPI на ATmega128? Как добится посыла dword в регистр ЦАП, и получение dword с АЦП при помощи spi?
Laptop
А в чем сложность? В даташите на чистом английском языке все написано.
Для AD7233: SYNC- низким уровнем разрешает SPI, SCLK- спадами тактового сигнала защелкивает данные, SDIN- собственно данные, LDAC- управление защелкой ЦАП, низкий уровень переписывает данные в выходную защелку, если удерживать в 0, то будет автоматически обновлять защелку каждые 16 бит.
Для AD7895: CONVST- спадающим сигналом запускаем преобразование, при этом BUSY переходит в 1, ждем пока не спадет и читаем данные. Можно защелкивать и по фронту и по спаду. Вроде все.
Так что сложностей с подключением никаких.
e-moe
Проблема какраз в английском если бы я его хорошо зна, небыло бы вопросов... smile.gif
Значит я правильно всё понял?
Для AD7895:
CONVST=0 на время t1 начинаю преобразование
жду пока BUSY нестанет = 0, если 0 то байт1=SPDR, байт2=SPDR
(тут возникает вопрос: сразу же можно читать второй байт что бы получить 2 байта или же надо что то выжидать)
Для AD7233: сбрасываю SYNC в 0, заношу в SPDR=байт1, SPDR=байт2 (тут сразу вопрос: : сразу же можно заносить второй байт или же надо что то выжидать)
LDAC = 0 на время t7 данные перемещаются из регистра на выходной регистр
Снова заношу 2 байта.
И как добится на выходе с ЦАП импульсов? Записать в регистры данные и просто сбрасывать LDAC, тогда будет циклически данные перемещаться или данные с выхода затираются а входной регистр становится пустым?
ALexx
В приложении - код для работы с AD7894/95.
Линию занятости не контролировал - в моем случае время позволяло обойтись простой задержкой.
Обмен с АЦП сделан через SPI. Код под CodeVision.
e-moe
to ALexx: Спасибо за приведённый исходный код. Правильно я понял момент: что бы получить байт по интерфейсу spi нужно для начала туда записать (SPDR=xx) любой хх байт, и после происходит прерывание по SPI, означающее, что данные готовы, и надо считать (xx=SPDR) байт хх. Что бы прочитать 2 байта нужно второй раз заслать произвольный байт и снова прочитать его?

to ALL: А по какому принципу работать с передачей данных, скажем двух байт (unsigned int) по SPI?
И как конкретно это выглядело бы на AD7233 или ему аналогичном?
ALexx
Цитата(e-moe @ Feb 24 2006, 21:35) *
to ALexx: Спасибо за приведённый исходный код. Правильно я понял момент: что бы получить байт по интерфейсу spi нужно для начала туда записать (SPDR=xx) любой хх байт, и после происходит прерывание по SPI, означающее, что данные готовы, и надо считать (xx=SPDR) байт хх. Что бы прочитать 2 байта нужно второй раз заслать произвольный байт и снова прочитать его?


1)Совершенно верно!

2) Так же как и в первом случае, с той лишь разницей, что отсылаемые байты должны быть не произвольными, а осмысленными.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.