Автор Тема: О Xmos+Sabre9018 и других дешевых китайских ЦАПах  (Прочитано 1006498 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
Марат, спасибо за помощь!!!
Значит, если я подключу только

GND    -   GND
DA      -   A4 SDA
CLK     -   A5 SCL

а питание на Ардуино подам отдельно, скажем с USB, все должно заработать нормально и Ардуино будет менять значения регистров Сабре?

Я взял программу для Bufflo, хочу приспособить ее на двухстрочный дисплэй и переделать коммутацию для работы с четырьмя кнопками. Вместе с китайской платой я также заказал корпус, поэтому не хочу менять дисплей и кнопки.

Для начала я попробую просто прочитать значения регистров Сабре и вывести их на дисплэй Ардуино.

Я установил Atmel Studio и к нему Visual Micro плагин. Там есть отладчик, но он платный.

и добавил...
У меня на плате Сабре стоит кварц на 100MHz.
« Последнее редактирование: 01 Июля 2014, 14:05:09 от Morpheus123 »

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Успехов! Посмотри, какой выход с дуины идет сабре на вход ресета и соединяй.
Я обычным ардуинским воркшопом пользуюсь, пока контроллер не отрос в самостоятельную платку.

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
У тебя RESET не соединен? Надеюсь, он может работать без него.

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
У меня ресет с другого места берется. Я сделал i2c'шный регистр ввода-вывода прямо на плате ЦАПы, так что к контроллеру идет только i2c.

Оффлайн Злой

  • Старожил
  • *****
  • Сообщений: 2728
  • Репутация: 12
  • Марат Уфа
  • Поблагодарили: +652
Я так и не вдуплил, между чем и чем намеряется 120мВ.
Как это получается, я так и не пойму, но эти 120мВ есть везде. Цепляю землю щупа на полигон и тыкаюсь щупом по всей плате. Они есть даже на этом же полигоне в миллиметре от крокодила земли. Сегодня заменил полностью питание генератора, то есть транс, выпрямитель, стабилизатор сделал на 431. Шумы по питанию генератора осцилографом не просматриваются, минимальное разрешение 20мВ. Свои шумы осцилографа 15 мВ. Но стоит подключить выход генератора в схему, так по всему полигону земли, всем питаниям появляются теперь уже 50мВ. Теперь и у меня потихоньку появляется свой франкенштейнушка.

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
- Тут ткните, болит? - да! - и тут? - даа! Доктор, что со мной? - Палец ушиблен.
Мне кааца, ловишь на щуп. Заэкранировать кварц, м?

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
У меня ресет с другого места берется. Я сделал i2c'шный регистр ввода-вывода прямо на плате ЦАПы, так что к контроллеру идет только i2c.

В оригинальном контроллере ресет подключен к 10-ой ноге ATMEGA8, это получается пин A1 Ардуино. Подключил Ардуино таким образом, все работает, зависания прекратились.

Когда запускаю программу для Буффало, звук получается посредственный и очень тихий, видимо громкость ставится не на максимум. Если коментирую код, который устанавливает регистры Сабре, получаю дикие искажения звука. Получается, что без установки регистров Сабре нормально не работает. Утверждение очень нелогичное, возможно я что-то упустил из виду.

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Утверждение вполне логичное, оправданное и верное!
В баффале Сабря скоммутирована железно так, что входы I2S идут на выходы ВСЕХ каналов Сабри попарно. У китайца и у меня это не так, нужно коммутировать софтово. Покопайся в районе quantizer depth, нужно поставить 9 бит. Потом проверить, на все ли выходы идет сигнал, проверить полярности включения выходов, а уж потом начинать дошкуривать оставшиеся параметры.

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
Тогда мне не понятно, как работает китайская плата Sabre, которая идет без контроллера. Ведь там никто не коммутирует софтом входы Сабри и никто не меняет значения регистров.

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Оч просто. На два выхода из 8.

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Починил Франкенштейнушку. Живучая штука Сабря, как я ее только не мучил.
Включил ее с новым ХМОСом от Велосипеда.

[ Вложение: Вам нельзя просматривать вложения ]

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
Поздравляю!!!

А я сижу в Тель-Авиве под ракетными обстрелами Хамаса и пишу код для Сабри :)

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Поздравляю!!!

А я сижу в Тель-Авиве под ракетными обстрелами Хамаса и пишу код для Сабри :)
Возвращайся домой, нехрен там делать...

и добавил...
А, да, спасибо. :)
Как успехи-то?

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
А я у себя дома и никуда уезжать из Израиля не собираюсь. Я здесь живу уже более 20 лет и даже успел отслужить в армии...

Успехи есть. Я, с твоей помощью разобрался в логике программирования Сабри. На основе программы для Буфало, я написал свою, на C++. Программа обьектно-ориентированная, весь код сидит в классах. Сейчас пишу коммутацию входов, а также собираюсь добавить модуль, позволяющий менять кнопками значения любых параметров Сабри.

Я смог добиться неплохого звучания, подобрав значения регистров. Кстати, ты был прав, лучшее звучание я получил, устанавливая Quantizer на 9 или на 8 бит. 

Пока еще звучание с китайской программой мне кажется немного лучшим, чем с моей. Жалко, что нельзя достать сорсы китайской программы, хочется посмотреть значения регистров. Буду копать дальше.

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Так а отчего не слазить на шину Ардуиной с программкой-сниффером? Снюхать все коды и слить на комп по rs-232. Вдруг китаец допетрил что-то, чего мы не знаем.
Если мой код на полетевшем НАСе выживет (держите пальцы), смогу выложить почти готовую библиотеку работы с Сабрей... Если нет, придется либо с начала пилить, либо твою заюзать.

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
Это интересная идея!!! Сливать на комп по rs-232 не обязательно. Я пользуюсь дебаггером и могу посмотреть значения любых переменных в реальном времени.

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

Возможно, китаец действительно допетрил что-то. Его код дает неплохой звук.

Если нужно, могу прислать тебе свой код. Только он еще не доделан. Совместными усилиями можно много добиться.
« Последнее редактирование: 13 Июля 2014, 23:26:28 от Morpheus123 »

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
А отчего нет-то. Первая линка из гугля: http://www.johngineer.com/blog/?p=455
Вообще подмывает накупить полмешка ардуин подешевле и сделать себе гаджеты на все случаи.  ???

и добавил...
За предложение спасибо. А не лучше ли по окончании отладки выложить его всем? Будет статейка по прокачке китайца с нуля до вишенки на торте.

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
Здорово!!! А то я ломал голову, как можно узнать оригинальные значения регистров у китайца.

и добавил...
Я не против выложить свой код.

Думаю, сначала нужно дописать базовые функции. Если ты начнешь писать код с нуля, могу подкинуть тебе свой неготовый вариант, чтобы сэкономить время.

и добавил...
Ардуина - очень увлекательная игрушка. Я как начал на ней писать, не могу остановиться :)
« Последнее редактирование: 13 Июля 2014, 23:32:20 от Morpheus123 »

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Давай начнем с выкладывания значений китайца, а я их откомментирую. Чтоб всем владельцам ВейЛяньского агрегата было понятно, от какой печки плясать. У меня-то железка отличаться будет.

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
Спасибо за ссылку. В ближайшее время подпаяю провода к китайскому контроллеру к I2C, все кроме 5V: DA, CLK и GND. Надеюсь, ничего не сгорит. Получается, к шине будет подключена Сабря и 2 Ардуино.

Как получу значения регистров, выложу их сюда.

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Не, будет подключена Сабря и две атмеги, одна из которых Ардуина. :)
Давай, неплохо бы освежить вопрос и уже увековечить этот дамп, а то у меня он тоже на том НАСе лежал...

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
Именно это я и имел ввиду: Сабря, китайский контроллер на атмеге и Ардуина.

и добавил...
Интересно, как будет выглядеть дамп: можно ли будет понять какие значения к каким регистрам относятся?

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Я дописывал эту прогу так, чтоб она на старт/стоп реагировала и чепятала адрес from/to.
Вот есть готовый проект, который делает то же самое, но не для дуины, а для AVRstudio. http://we.easyelectronics.ru/AVR/sniffer-emulyator-i2c-i-1-wire.html

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
Может проще просто написать код, который читает значения регистров Сабри?

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Ну или так (с).
Просто китаец тесно интерактирует с Сабрей, я это точно помню. Опрашивает ее на Lock, Automute и т.д. Жаль, если это всё накрылось... ыы.

и добавил...
Только тогда на шине окажется два мастера: не поругаются?

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
Может и не поругаются. Нужно проверить экпериментально.

и добавил...
Посмотрел я статьи по этим двум ссылкам. Программа для Ардуино просто ждет, когда на линии SDA упадет напряжение и начинает запись данных. Если сначала подать питание на Аадуину, а потом на DAC с контроллером, то должно сработать. Проблема лишь в том, что полученные данные нужно как-то интерпретировать, а как это сделать, мне пока не ясно.
« Последнее редактирование: 14 Июля 2014, 00:18:03 от Morpheus123 »

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
К сожалению, не вспомню сейчас, много с тех пор прошло. Но там несложно выцепить старт-стоп и адреса.
У меня получалось в виде лога на компорт что-то вроде "0x1 to 0x80: write reg 0x0A, val 0x01..." и так дальше.

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
Нашел ссылку на готовую программу: http://jdesbonnet.blogspot.co.il/2010/05/using-arduino-duemilanove-as-quick-and_25.html
Она делает именно то, что нужно. Постараюсь найти время и получить дамп.

Оффлайн cu6apum

  • Старожил
  • *****
  • Сообщений: 4018
  • Репутация: 14
  • Естествоиспытатель
  • Поблагодарили: +366
Отлично, не придется делать уже сделанного.
Ждем успехов!

Оффлайн Morpheus123

  • Старожил
  • *****
  • Сообщений: 1562
  • Репутация: 7
  • Сергей, Тель-Авив
  • Поблагодарили: +4
Кое-что получилось!!! Сниффер работает и я смог получить дамп. Я понял, что китайская программа постоянно в цикле передает данные на Сабрю. Ниже привожу кусочек дампа. Я смог вручную интерпретировать некоторые строчки в соотвествии со статьей. В дамп я вставил свои коментарии.

Opening port
Port open

S 1001 0000 0 0000 1010 0 1100 1111 0    into 0x0A write 0x0CF //Register 10 (0x0A) 0xCF (MC1)(Jitter on, etc, MUTE DACs)
S 1001 0010 1
S 1001 0000 0 0000 111
S 0101 0101 0 0
S 1001 0000 0 0000 1111 0 1010 1010 0 P  into 0x0F write 0xAA  //Register 15 (0x0F) Quantizer bit depth 0xAA: 8-bit

S 1001 0000 0 0001 100
S 0000 0001 0 0
S 1001 0000 0 0001 1001 0 0000 0010 0 P  into 0x19 write 0x02   //Register 25 (0x19): DPLL Mode control Use best DPLL settings: 0x02

S 1001 0000 0 0000 1011 0 1000 010
S 0   
S 1001 0000 0 000 P

S 1S01 0000 1 0
S 0 P
S 1001 0000 0 0000 1110 0 1111 1001 0   into 0x0E write 0xF9    //Register 14 (0x0E) DAC source, IIR Bandwidth and FIR roll off:  11111001 or 0xF9 Default for BII wiring, true differential, IIR normal, FIR fast
S 1001 0000 0 0000 1110 0 1111 1001 0 P into 0x0E write 0xF9

S100100000000010100110011110 S100100000000010100110011110P
S100100000000011000001000000 S100100000000011000001000000 S1001000000001000 S0000111000 S1001000000001000 S0100111000P
S1001000000000100000111111S0S1001000000000100000111111S0P
S1001000000001001000
S100100000000000000000000000S100100000000000000000000000P
S100100000000000P
S000000000S100100000000000010000000000P
S100100000000000100000000000S100100000000000100000000000P
SS00100000000000110000000000SS001000000000001S0000000000S100100000000001000000000000S100100000000001000000000000P
S100100000000001010000000000S1001000000000010S0000000000P
S100100000000001100000000000S100100000000001100000000000P
S1001000000000011S0000000000S1001000000000011S0000000000P
S1001000000001101S0S100100010000000011S100100000000110110S
S000000011P
S100100000000110110S100100010000000011S1001000000001101S0S10P
S0010000000011P
S1001000000001101S0S100100010000000011S100100000000110110S1001000S0000000011P
S100100000000110110S100100010000000011S1001000000001101S0S1001000S0000000011P
S100100000000110110S1001000S0000000011S100100000000110110S1001000S0000000011P
S100100000000110110S1001000S0000000011S100100000000110110S1001000S0000000011P
S1001000000001101S0S1001000S0000000011S100100000000110110S1001000S0000000011P
S100100000000110110S1001000S0000000011S1
S11P
S100100010000000011P
S100100000000110110S1001000S0000000011S1001000000001101S0S100100010000000011P
S100100000000110110S1001000S0000000011S10010000000P
S1S0S1001000S0000000011P
S1001000000001101S0S1001000S0000000011S1001000000001101S0S1001000S0000000011P
S100100000000110110S100100010000000011S1001000000001101S0S100100010000000011P
S1001000000001101S0S100100010000000011S100100000000110110S1001000S0000000011P
S1001000000001101S0S100100010000000011S1001000000001101S0S1001000S0000000011P
S1001000000001101S0S10010001
S00000001101S0S100100010000000011P
S1001000000001101S0S1001000S0000000011S100100000000110110S1001000S0000000011P
S10010000000P
S1S0S1001000S0000000011S1001000000001101S0S1001000S0000000011P
S1001000000001101S0S1001000S0000000011S1001000000001101S0S1001000S0000000011P
S1001000000001101S0S1001000S0000000011S100100000000110110S100100010000000011P
S1001000000001101S0S100100010000000011S100100000000110110S1001000S0000000011P
S1001000000001101S0S100100010000000011S100100000000110110S1001000S0000000011P
S1001000000001101S
S00S0000000011S100100000000110110S1001000S0000000011P
S1001000000001101S0SS001000S0000000011S1001000000001101S0S1001000S0000000011P
S1001000000001101S0S1001000S0000000011S100S00000000110110S1001000S0000000011P
S100100000000110110S10P
S00S0000000011S1001000000001101S0S1001000S0000000011P
S1001000000001101S0S100100010000000011S1001000000001101S0S100100010000000011P
S100100000000110110S1001000S0000000011S100100000000110110S100100010000000011P
S100100000000110110S1001000S0000000011S1001000000001101S0S1001000S000000001
S100100000000110110S100100010000000011S1001000000001101S0S100100010000000P
SS001000000001101S0S1001000S0000000011S1001000000001101S0S1001000S0000000011P
S1001000000001101S0S1001000S000000001SS100100000000110110SS00100010000000011P
S100100000000110110S1001000S0000000011S100100000000110110S1001000S0000000011P
S1001000000001101S0S1001000S0000000011S100100000000110110S1001000S0000000P
S100100000000110110S1001000S0000000011S100100000000110110S100100010000000011P
S1001000000001101S0S1001000S0000000011S1001000000001101S
S1S0S1001000S0000000011P
S100100000000110110S1001000S0000000011S10P
S0000000110110SS001000S0000000011P
SS001000000001101S0S100100010000000011S1001000000001101S0S1001000S0000000011P
S100S000000001101S0S1001000S0000000011S100100000000110110S10P
S0010000000011P
S1001000000001101S0S1001000S0000000011S1001000000001101S0S1001000S0000000011P
S100100000000110110S1001000S0000000011S100100000000110110S1001000S0000000011P
S100100000000110110S100100010000000011S1001000000001101S0S100100010000000011P
S1001000000001101S0S10010001
S00000001101S0S100100010000000011P
S1001000000001S01S0S1001000S0000000011S100100000000110110S100S00010000000011P
S100S000000001101S0S1001000S0000000011S1001000000001101SP
S1001000S0000000P
S1001000000001101S0S1001000S0000000011S10000000000110110S1001000S0000000011P
S100100000000110110S1001000S0000000011S100100000000110110S100100010000000011P
S1001000000001101S0S1001000S0000000011S100100000000110110S1001000S0000000011P
S1001000000001101S0S100100010000000011S1001000000001101S0S100100010000000011P
S100100000000110110S
S000000011S1001000000001101S0S1001000S0000000011P
SS00100000000110110S1001000S0000000011S1001000000001101S0S1001000S0000000011P
S1001000000001101S0S1001000S0000000011S10010000000P
S1S0S10P
S0010000000011P
S10P
S00000001101S0SS001000S0000000011S100100000000110110S100100010000000011P
S1001000000001101S0S1001000S0000000011S100100000000110110S1001000S0000000011P
S1001000000001101SP
S100100010000000011S1001000000001101S0S1001000S0000000011P
S1001000000001101S0S1001000S0000000011S100100000000110110S1001000S0000000011P
S1001
S1001000000001101S0S100100P
S000000011P
S1001000000001101S0S1001000S0000000011S10P
S00000001101S0S100S000S0000000011P
S100100000000110110S1001000S0000000011S100100000000110110S1001000S0000000011P
S1001000000001101S0S100100010000000011S1001000000001101S0S100S000S0000000011P
S100100000000110110S100100010000000011S1001000000001101S0S1001000S0000000011P
S1001000000001101S0S1001000S0000000011S100100000000110110S1001000S0000000011P
S1001000000001101S0S1001000S0000000011S1001000000001101S0S100100010000000011P
S100100000000
S000000011S1001000000001101S0S1001000S0000000011P



и добавил...
Те строки, которые я смог интерпретировать соотвествуют документации Сабри. Все очень логично. Единственное, я не понимаю, какая информация передется между этими строчками. Ее я не могу никак интерпретиривать. Возможно, есть проблема в Снифере и поэтому он не может устойчиво словить все данные.

и добавил...
В статье есть пример дампа. Там все на месте и все можно интерпретировать. Буду думать, что делать дальше. 

и добавил...
Ручная интерпретация занимает много времени.
« Последнее редактирование: 15 Июля 2014, 00:51:30 от Morpheus123 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
19 Ответов
23489 Просмотров
Последний ответ 25 Декабря 2015, 15:07:02
от митяич
220 Ответов
188385 Просмотров
Последний ответ 31 Января 2017, 05:23:43
от den4
10 Ответов
13783 Просмотров
Последний ответ 11 Сентября 2016, 21:14:30
от xar
70 Ответов
26467 Просмотров
Последний ответ 22 Июня 2021, 19:07:30
от zorg
34 Ответов
3194 Просмотров
Последний ответ 24 Января 2024, 00:23:08
от GoRs