‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

Categories:

DAC7512(2)

Перевязал схему так, что данные идут от микроконтроллера к ЦАПу сквозь ПЛИС, но без каких-либо изменений (т.е. ПЛИС выполняет роль крутой такой перемычки между выводами микросхем). Подал линейно растущие коды - артифакта нет.

Похоже, ЦАП не виноват - это я сам где-то налажал.


Победил. Лажа была отчасти моей - я немного напутал порядок записи байтов :) Это когда идёт чтение, то сначала читается младший (что вызывает защёлкивание старшего байта в теневой регистр), потом читается старший (как раз из "тени"). Но когда идёт запись, то порядок обратный - сначала записывается старший в "тень", потом уже младший (и это вызывает фактический перенос данных из "тени" в старший регистр). Я же ошибся и перепутал порядок следования при записи. Поэтому так и получалось, что при изменении младшего байта он мог не записаться куда надо (т.е., например, в регистре лежало 0x01FF, и мы пытаемся записать туда 0x0200 - но фактически записывается 0x02FF, что и вызывает 200 мВ скачок на выходе)

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

Но попутно нашлось нечто странное, как обычно.
Когда я пишу в теневой регистр ЦАП, то включаю флажок "данные ждут переноса". Оный флажок анализируется при записи в младший регистр, и если он установлен, то это и вызывает перенос всех шестнадцати бит сразу. Но почему-то при этом данный флажок таинственным образом стал влиять на доступность данных АЦП, хотя он никак и нигде на них не завязан! Бред какой-то.
Tags: приключения Электроника
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments