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

Spi Конфигурирование Pcm1738


Рекомендуемые сообщения

Доброго времени суток. Обратил внимание на этот кристалл производства техасцев. Высокая линейность и низкий выходной ток подуляторов представляют разработчику большую свободу в выборе ОУ для преобразователей ток - напряжение. В отличие от 1792/94, в преобразователях которых нужно применять либо достаточно мощные ОУ, либо дополнительные интегральные или дискретные буферы для получения низких искажений.

Все бы хорошо, да только конфигурирование предусмотрено только по SPI, а дефолтные настройки не те, что нужны. Немного владею микроконтроллерами фирмы Atmel (уровень чуть выше нулевого :help: ). Решил попробовать сделать конфигуратор самостоятельно, но сразу столкнулся с некоторыми трудностями после изучения даташита 1738.

Так как алгоритм работы интерфейса у 1738 несколько отличается от обычного SPI, в котором данные непрерывно "циркулируют" между мастером и слейвом. Насколько я понял, данные на выводе MDO присутствуют только после предварительной команды чтения.

Мыслю следующий алгоритм работы управляющего контроллера:

при записи конфигурации:

при использовании аппаратного SPI шлем 2 байта (с адресом регистра и значениями).

примерно такой код:

SPI transfere
out spdr, data (в этом байте передаем байт с номером регистра)
rjmp wait spi

out spdr, data2 (в этом байте передаем байт конфигурацией)
rjmp wait spi
ret
wait spi:
sbis SPSR, SPIF (ждем конца передачи)
rjmp wait spi
ret

При чтении засылаем байт с номером регистра, в ответ получаем данные (для проверки установленных настроек).

SPI read
out spdr, data (в этом байте передаем байт с номером регистра)
wait spi:
sbis SPSR, SPIF (ждем конца передачи)
rjmp wait spi
in temp, SPDR (читаем ответ)
ret

Правильный ход мыслей?

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Привет, Антон!

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

В такой конфигурации МК работает как ведущий, а ЦАП - ведомый. Можно наоборот, но двунаправленный обмен с реверсом управляющих сигналов (Clock и Chip Select) в SPI не предусмотрен.

Если не читал, то почитай со страницы 419 эту книгу: http://rbook.ucoz.ru...lja/19-1-0-2119 Там все подробно о SPI.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Приветствую, Алексей.

Чтение регистров хотел сделать для проверки записанной конфигурации. Жаль что средствами аппаратного SPI это сделать не получится. Сделаю тогда без верификации установок. Я бы оставил и дефолтные настройки, но там по умолчанию поток 16 бит. Это единственный критичный момент пока в применении этого ЦАП. Вообще из всего множества настроек, предлагаемых производителем для меня интересны только настройка входного формата (которую можно будет выполнить однократно), характеристика цифрового фильтра и кратность передискретизации.

Алексей, а алгоритм записи я вроде описал правильно?

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

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Проверка лишней не будет, но и без нее должно работать нормально. Процесс то простой: переключить в лог. 0 пин /CS, отправить пустой байт, переключить в лог. 1 /CS и ожидать загрузки данных в регистр. Практически та же запись регистров.

Алгоритм отправки у тебя правильный, только не забывай перед отправкой данных в лог. 0 устанавливать пин /CS, а по окончании отправки возвращать его в лог. 1.

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

Спасибо, Алексей. про Chip Select написано в даташите, поэтому не стал об этом писать).

Попробую на днях написать листинг. Мне почему-то кажется, что проверку лучше все-таки сделать. Жаль не получится такую ситуацию просимулировать в протеусе, предется все в железе все отлаживать. У Ревича в книге "Программирование микроконтроллеров AVR на языке ассемблера" приведен пример программной имитации SPI. Попробую осилить.

Думаю для отладки примерно такую схему использовать:

post-122868-0-19256900-1375896945_thumb.jpg

Светодиоды для проверки, джамперы управляют характеристикой фильтра и кратностью передискретизации. Светодиоды для проверки записанной конфигурации. Алгоритм простой: пишем, считываем, показываем на диодах.

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

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

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

Начал писать... Не так то оно все красиво получается, как я хотел.

Настройка формата входного потока, характеристика фильтра и кратность передискретизации находятся в разных регистрах. Формат решил утсановить I2S, а фильтр и передискретизацию настраивать с помощью джамперов. Т.е. считываем положение джамперов и устанавливаем нужные биты в регистрах. Но вот в 20 регистре (где выбирается кратность) 7 бит занят под заводские тесты и дефолтное его значение не приведено в документации, так что придется сначала считывать регистр, чтобы не записать туда противоположное значение. Что-то становится сложнее, чем я предполагал.

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

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

Жаль не получится такую ситуацию просимулировать в протеусе, предется все в железе все отлаживать.

Получится и без "железа". Добавь при моделировании еще один контроллер, назначь работу SPI в ведомом режиме (Slave) и составь соответствующую программу.

Но вот в 20 регистре (где выбирается кратность) 7 бит занят под заводские тесты и дефолтное его значение не приведено в документации, так что придется сначала считывать регистр, чтобы не записать туда противоположное значение.

Биты зарезервированы. Это значит, что записать в них что-либо не получится. Вот и все. Разве не обращал внимание, что в регистрах МК та же ситуация? Можешь единицу вписывать, можешь нуль - без разницы.

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

Добавь при моделировании еще один контроллер, назначь работу SPI в ведомом режиме (Slave) и составь соответствующую программу.

С моими познаниями количество багов в таком случае как минимум удвоится).

Биты зарезервированы. Это значит, что записать в них что-либо не получится. Вот и все

Не знал, спасибо.

В общем подбираюсь к программной имитации SPI. Возник вопрос. В даташите вижу такую картину:

post-122868-0-69075900-1376036683_thumb.png

Значит в моем протоколе должны быть выданы подряд адрес регистра и байт данных, не отпуская чип селект?

Как бы сделать это надежнее: попытаться в одной подпрограмме отправить оба байта или для каждого вызывать подпрограмму, не отпуская CS?

Для каждого получится листинг проще, но как контроллер ЦАПа отнесется к небольшой паузе между данными?

Набросал подпрограмму для посылки байта:


write_SPI: cli
ldi temp, 8
clr data_out
spi_loop: lsl data_out
brcc out_0
sbi PORTC, mosi
nop
rjmp sync
out_0: cbi PORTC, mosi
nop

sync: sbi PORTC, sck ;выдаем тактовый сигнал
nop
cbi PORTC, sck
nop
dec temp
brne spi_loop
sei
ret

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

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

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

Видимо алгоритм не совсем верный я выбрал.

Нашел аппнот от авр (AVR320) с программной симуляцией SPI. Пока курю листинг.

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

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

  • 4 недели спустя...

собрал схему на макетной плате, подключил китайский клон логического анализатора Saleae. Как и предполагал ничего пока не заработало. Хотя можно сказать что наполовину.

В общем ситуация такая: CS и Clock линии работают согласно предполагаемому алгоритму.

На линии данных в начале эксперимента были последовательности, мало напоминающие необходимые. Да и в целом алгоритм постоянно повторялся, т.е. после передачи трех 16 битовых слов, после паузы примерно в 5 мс все опять повторялось, несмотря на то, что в конце программы контроллер получает команду sleep. После нескольких запусков программы на линии данных начали появляться полная хрень.

post-122868-0-59010100-1378305556_thumb.jpg

post-122868-0-61714000-1378305549_thumb.jpg

Со спящим режимом разобрался) Забыл включить его в MCUCR

В общем слать стал опять, но опять не то, что нужно. В байтах с данными все "1", в байтах с адресами тоже не то, что задаю.

Начал курить код. Попробовал в студии прогнать программу посылки байта - все данные посылаются корректно. Не пойму в чем дело.

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

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

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

Антон, а ты так и оставил программную реализацию SPI? У Mega8 есть ведь встроенный SPI, им гораздо удобнее пользоваться, и контроллер при этом не зависает на участке кода, можно прерываниями пользоваться.

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

Алесей, программную реализацию SPI взял из аппнота AVR320.

В моем случае получился такой код (убрал чтение):

write_spi: ldi temp, 16

spi_loop: lsl spi_lo
rol spi_hi
brcc lo_mosi
mosi_hi
rjmp mosi_done
lo_mosi: mosi_lo
nop
mosi_done: sck_hi
nop
nop
nop
nop
sck_lo
nop
nop
; sbic pinc, miso
; inc spi_lo
dec temp
brne spi_loop
ret

Программно решил реализовать, чтобы МС ЦАПа не колбасило при прошивке контроллера.

От МК в этой схеме нужно лишь сконфигурировать МС ЦАП и пойти спать. Хотя может еще сделаю управление реле в режиме mute (сигнал дает транспорт).

Действительно наверное стоит попробовать аппаратный вариант. В крайнем случае при первой прошивке можно не запаивать резисторы в линии)

Между тем плату-то почти нарисовал:

post-122868-0-66316500-1378365099_thumb.jpg

Действительно вариант с аппаратным SPI оказался проще и заработал.

post-122868-0-71458200-1378386391_thumb.jpg

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

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...