Там на выбор от 20МГц до 32МГц, устанавливается конфигом прошиваемым в EEPROM, конфиги есть под частоту 1.75 и 2 МГц,
Рекомендую использовать в реале не менее 24-25МГц, иначе может не успевать
Вид для печати
Версия 22 эмулятора для Atmega8, новый принцип работы в режиме чтения параллельного режима, теперь еще быстрее идет обработка и более безопасно для шины данных.
В турборежиме вроде как тоже работает от 25МГц и выше, но так как мало контроллеров которые тянут кварцы более 25МГц рекомендуется использовать внешний генератор, в этом случае фьюзы будут -U lfuse:w:0xD0:m -U hfuse:w:0xCF:m
внешний генератор подключается к PB6
PS: и еще раз поясню, почему не нужны конденсаторы на кварц в данном варианте, если посмотреть даташит на атмегу8 "By programming the CKOPT Fuse, the user can enable an internal 36pF capacitor between XTAL1 and GND, and XTAL2 and GND." Т.е. если фьюз CKOPT включен (а в приводимых в readme.txt фьюзах он включен), то включаются внутренние конденсаторы на 36пФ
В версии 23 исправлен генератор шума.
PS: версии 22,23 будут работать, если у вас подтянута шина данных (а на реалах она всегда подтянута)
PS2: если у вас реализованы оба #7FFD и #FD, то менеджер памяти может быть медленным и тогда может глючить, в остальных случаях должно быть всё ок.
PS3: добавил новый RC фильтр, т.к. достаточно всего лишь ФНЧ, проверил, работает отлично, гораздо лучше предыдущих монстров, при подключении к звуковой карте она не входит в ступор, как с предыдущим фильтром, так что рекомендую! Можно на выходе еще поставить конденсаторы 1-10мкФ
На основе эмулятора версии 23 сделана так же очень простая реализация TurboSound на двух МК Atmega8, подробности в архиве. К сожалению, без исходников.
Если есть вопросы - пишите в ПМ или сюда.
PS: в данной версии в порт данных шлется и 1 и 0, версию с HI-Z выложу чуть позже, будет в имени файла добавлено hi-z
Благодаря Василию Лисицыну удалось улучшить схему избавишись от второго кварца, схема прилагается, в архивах схема тоже обновлена.
PS2: опытная эксплуатация показала, что резисторы лучше ставить не 10кОм, а 1кОм, а то сильно гасится сигнал.
так же не всегда корректно на реале работает режим чтения, буду пытаться оптимизировать
PS3: оказалось плохо пропаял первый МК, после исправления глюки исчезли, так что всё нормально, пригодно к использованию :)
Может, кому-то пригодится версия 21 для последовательного интерфейса для ATmega8515 Вложение 56102
В ближайшие дни будет новая версия со следующими исправлениями: улучшен генератор шума, улучшена генерация огибающих, в двухканальной версии улучшено смешивание каналов.
Напомните как звук получается? ШИМ?
Новая версия, как и обещал.
Улучшен генератор шума, улучшена таблица громкости огибающих, улучшено смешивание каналов в двухканальной версии.
Чисто на слух :) у меня он вроде как идеальный :v2_walkm:
Генератор шума сделан так
http://www.avray.ru/wp-content/uploa.../noise-gen.png
нулевой бит так же идет в шум
PS: если вопрос более глобальный, про эмулятор в целом, то да, за основу был взят тот что изначально был в этой теме, затем была изучена куча мануалов и исходников, различные недокументированные вещи, и, через 3 года вы имеете то что имеете :)
UPD: оказалось это не совсем корректно, по последним данным нужно двигать значение генератора на 1 бит вправо, затем, если вытолкнутый бит равен единице, то сигнал шума становится равен единице (иначе нулю) а значение генератора ксорится с 0x14000
Алгоритм шума (как в оригинальном чипе) в версии 24.2
Вложение 57992
Хорошо, постараюсь завтра сделать, запишу YM2149 на эве и то же самое на кворуме с эмулятором, потом наложу на 2 дорожки в MP3. Утомительно конечно это будет, но для чистоты эксперимента придется :)
Вот, дошли руки музыка из дизи 6
1: левый канал на ЭВЕ - YM2149F
2: правый канал эмулятор на кворуме, немного замедлен питчем примерно на 1% из-за разницы частот процессоров, чтобы совпадала скорость.
Короче, там где слышно треск спикера это канал с эмулятором.
http://www.avray.ru/Lym_Remu.mp3
PS: оба на эве делать не стал, т.к. нет большого желания делать макаронного монстра... лето... лень одолевает...
Не удается получить доступ к сайту
Превышено время ожидания ответа от сайта www.avray.ru.
Попробуйте сделать следующее:
Проверьте подключение к Интернету.
Проверьте настройки прокси-сервера и брандмауэра.
Были небольшие технические проблемы.
Кстати, еще один момент, по самому сигналу. Если сравнивать форму сигнала в редакторе, то в эмуляторе сигнал получается инвертированным, но форма похожа на оригинал.
UPD: в 24 версии обнаружилось несколько недочетов, в 24.1 будет исправлен генератор шума, микширование канала B и таблица громкости огибающей. В генераторе шума счетчик будет считаться в сторону увеличения, так что со всеми исправлениями шум будет звучать идентично оригинальному чипу.
Версия 24.1
Отличия:
1. Исправлена таблица громкости
2. Улучшено микширование каналов
3. Улучшен генератор шума
Теперь все версии 2-х канальная и 3-х канальная в одном архиве.
Так же добавлена версия с поддержкой порта спикера на PD1 чтобы он звучал прямо из эмулятора
Напоминаю, что с 22 версии эмулятор работает в режиме HI-Z, т.е. высокий уровень сигнала это не единица, а высокоимпендансное состояние (это относится к параллельному соединению, в последовательном режиме всё как обычно)
PS: на всякий случай напомню, что мой вариант эмулятора работает на частоте 250кГц (125кГц, если говорить про звук) для версии 2МГц, и 218.75кГц(109.375кГц) для версии 1.75МГц, так что скорость работы генераторов идентична оригинальному чипу.
UPD: в связи с тем, что обнаружился оригинальный алгоритм заложенный в чипе, генератор шума будет поправлен в версии 24.2, в 24.1 еще была допущена ошибка в микшировании канала B в двухканальной версии
Для тех кто еще сомневается в качестве звучания эмулятора
Супер микс, сделан на моем Кворум БК-04 (1024кб) с установленным эмулятором версии 24.2, кварц 28.332МГц
http://www.avray.ru/AYEmulDemoMusic.mp3 (12Мб)
EvgenRU, супер проект !!!
Можно Вас попросить пояснить подключение данного эмулятора AY к ZX ?
Было бы неплохо разместить эту информацию на сайте, + печатная плата.
Хорошо бы, также, выложить описание использования реального AY с ZX с описанием количества каналов, частоты.
Есть ZX Ленинград-1 и давняя мечта поцепить на него AY, но мне не совсем понятно, какую частоту и колличество каналов использовать...
Спасибо.
Каналов 3 у AY, а частота на ZX - 1.75 МГц, насчет подключения смотрите pinmap2(3)ch.png и outputcircuit2ch.png
Если вы его хотите подключить к ZX а не просто вставить в уже разведенную плату, то проще поставить двухканальную версию с фильтром и сразу можете снимать звук с него. Если же цель сделать именно заменитель AY, тогда нужно брать трехканальную версию, ставить фильтры на каждый канал и тогда уже выводить выводы на место микросхемы AY
PS: даташит на AY можете посмотреть здесь http://www.colecovision.dk/PDF/ay-3-8910.pdf
PS2: по поводу того куда подключать BC1/BDIR D0-D7 эмулятора смотрите соответствующие темы по подключению AY к ZX
Вот это я неожиданно так оптимизировал генератор огибающей и шума... :v2_confu:
Вот только на картинке ничего не разобрать...
Ну, тут вверху генератор огибающей, внизу генератор шума. Смысл в том, что код уменьшился, хотя, до этого казалось, что уменьшить его уже нереально :)
UPD: последние достижения, количество циклов МК в цикле генерации звука
Версия 24.2 MIN - 72, MAX - 132
Версия 24.3 MIN - 75, MAX - 115
Выигрыш на макс нагрузке - 17 циклов, это существенно, особенно для кварца в 20МГц, где на один цикл генерации звука отводится 90 циклов МК, меньше шансов пропуска прерываний, более качественный звук.
Конечно максимальная нагрузка это очень редкий случай, но он приводит к пропуску прерываний таймера и некачественной генерации.
Для 115 циклов, чтобы всё успевало отрабатывать (имеется в виду прерывания по приходу регистров) рекомендуется использовать для конфига 1.75МГц кварц от 27МГц (122 цикла), для 2МГц конфига от 30МГц (119 циклов). Но, практика показывает, что даже для версии 24.2 (132 цикла) вполне приемлемое звучание дает кварц 24МГц.
Предыдущие версии имеют еще большее количество циклов на максимуме.
Мне еще удалось сделать версию со всеми счетчиками считающими в сторону увеличения с макс 128 циклов, но по звучанию она мало чем отличается от считающей в сторону уменьшения (за исключением генератора шума), так что я решил её не выкладывать, следующая будет версия 24.3, возможно удастся еще немного уменьшить количество циклов на максимуме.
Выкладываю версию 24.3
Улучешния - оптимизация описанная в предыдущем сообщении + небольшая оптимизация режима записи параллельного режима
Проверил на реале, определяется в тесте 4.30 как YM2149F :) работает отлично
ДОП ИНФО:
режим чтения - 15 + 3*X циклов - X это количество циклов ожидания режима неактивности (Inactive Mode) после режима чтения.
режим записи - 33 цикла
режим адреса - 17 циклов
Новая 24.4 версия
Что-нового:
1. Количество циклов МК в коде генерации звука MIN - 69, MAX - 110 (если со спикером, то еще + 4 цикла, если трехканальная, то -5 циклов)
1.1 оптимизированы генераторы тона на 1-2 цикла каждый
1.2 снова вернул для шума понижающий отсчет
2. Режим чтения уменьшился на 1 цикл, теперь для кварцев от 24МГц всё четко укладывается в минимальные 350нс (как указано в даташите) для установки шины данных и 400нс для её освобождения.
PS: наверное это уже будет последняя версия, т.к. оптимизировать с виду уже нечего...
PS2: для тех, кто до сих пор не понимает как подключить это дело к ZX выкладываю картинку
Вложение 58338
Изображение полностью
24.4 версия почему то плохо работает (искаженный звук) кварц 27
а 24.2 нормально работает..
24.4 работает отлично, уже проверено много раз мной и другими, это самая лучшая версия звучащая наиболее близко к оригиналу, если даже не лучше :) Насчет 27, может не тянет атмега, попробуйте 25 и 24МГц или резистор в 1-5МОм на ноги кварца попробуйте напаять.
Фактически эмулируется YM2149F, но отличие только в генераторе огибающей, в цикле в 2 раза больше ступенек у YM (т.е. огибающая более плавная), чем в AY-8910, разница в звучании конечно заметна слегка, но только на огибающих, в остальном чипы ничем не отличаются. Уровни тона в эмуляторе больше соответствуют AY, поэтому, это, скажем так, улучшенная версия обоих чипов :))))
PS: на всякий случай продублирую ссылку на версию 24.4, чтобы долго не искали.
PS2: добавил экспериментальную 2 канальную версию со спикером и без спикера для Atmega48
Ну, это теоретичеки, а на самом деле они ощутимо по-разному звучат - послушайте и сравните. Причём, AY звучит чётко и звонко, а у YM какой-то мягкий приглаженный звук. Большинству демомейкеров и музыкантов нравится звук AY, хоть там и меньше градация огибающих... Предполагаю, причина отличий в аналоговой части чипов, а не в цифровой...
Собираю автономный AY-плеер типа айпода с сенсорным экраном (HMI экранчик от Nextion). В качестве основного контроллера взял ESP8266-ESP01.
Собрал на макетке эмулятор на ATMega48 (только он запустился на 25 мгц, имеющиеся меги 8 оказались нестабильные уже на 24). Файлы читаю с MicroSD карты.
Т.к. у ESP очень ограничено количество GPIO-портов, то эмулятор пришлось подключать через последовательный интерфейс.
Внимание вопрос: насколько критичным будет добавить поддержку режима чтения в последовательный режим (поковырял исходники, ничего не нашел), т.к. очень хочется реализовать индикаторы уровня?
http://leproimg.com/2556317
http://leproimg.com/2556320
Могу предложить вариант эмулятора с 4 битной шиной, т.е. байт шлется в параллельном режиме, но за 2 раза по 4 бит, типа как в 1602 дисплее, я такой фигней заморочился когда делал автономный проигрыватель на 2х атмега8 :)
UPD: посмотрел описание, там всего 3 GPIO, так что этот вариант отпадает :)
PS: еще вопрос, зачем для проигрывателя режим чтения? у вас же все регистры есть в памяти контроллера, это в ZX он был нужен для организации резидентного проигрывателя работающего по прерываниям, а считывание регистров которые играют производилось уже отдельным интерфейсом.
На самом деле там GPIO портов несколько больше, просто не все выведены на разъём с чипа. Я расширил их до 8 штук + 2 UART вот таким колхозным способом:
http://leproimg.com/2556372
4 порта идут на подключение SD-карты, 2 на подключение экрана (софтовый сериал), 1 TX аппаратного UART идёт к эмулятору
Итого у меня есть ещё 2 свободных порта общего назначения + 1 RX от UART.
Короче не густо.
Изначально я пробовал делать на меге328 управляющий контроллер, но мне тупо не хватило оперативки под всё (но в тот момент у меня был подключен OLED экранчик, который требовал наличие знакогенератора и экранного буфера), но с переходом на Nextion потребность в оперативке снизилась, поэтому можно вернуться обратно к avr-варианту )
А по поводу режима чтения, хм. т.е. предлагается анализировать отправляемые значения регистров и высчитывать уровень трёх каналов?
Смысла переходить на мегу особо нет, параллельный режим в основном нужен, чтобы гонять оцифровки, а для этого нужно много памяти или специальный формат на SD, да и нет уверенности, что потянет. Если 50Гц, то последовательный режим самое то, я проверял, тянет аж до 2 килогерц в последовательном режиме, но нужно поднимать скорость TTL (текущая 57600).
Насчет режима чтения, да, если у вас регистры в памяти, то просто берете их из памяти, а не из AY, ибо там они точно такие же, подозреваю, что в ZX режим чтения использовался потому, что проигрыватель писался одними товарищами, а использовался в программах других товарищей, которые не знали где в памяти располагаются данные регистров + во время прерывания значения в памяти могли изменяться.
UPD: обновил архив с версией для Atmega48, добавил туда версию без спикера, т.к. в вашем случае он может издавать посторонние звуки из-за не подключенного порта спикера.
Спасибо за совет, всё получилось. Выхватываю состояние регистров R8, R9 и R10 прямо перед отправкой в UART и с частотой 10 раз в секунду обновляю состояние индикаторов на экранчике. Если сделать чаще, то почему-то падает отзывчивость экрана на нажатия.
Вышло как-то так:
https://www.youtube.com/watch?v=VW-dP6kd4n0
запилите 2 разных версии Ау и ум
с разными огибающими
и разными таблицами громкости
и будет усем счастие
труЪ таблицы громкости можно взять сдеся
http://forum.tslabs.info/viewtopic.php?f=6&t=539
так же от туда можно наклацать и таблицы громкостей от всяких WF19054
Ок, сделал новую версию. Взял таблицы оттуда, подогнал под 8 битные значения в пределах диапазона ШИМ.
В данной версии включены прошивки под Atmega8/48/88/168/328 и по 4 версии для каждой 2 таблицы громкости и версия со спикером для прямого подключения к порту спикера, при этом спикер подмешивается к звучанию эмулятора программно!
PS: для AY я все-таки сделал 32 уровня для огибающих (промежуточные подогнал), а то 16 уровней звучит не очень на слух.
UPD: Поставл сейчас 48 атмегу проверить, гудит и не играет :) значит накосячил где-то, буду исправлять, на 8 атмеге всё ок.
UPD2: оказалось не учел, что в 48/88/168/328 больше прерываний и прерывание USART на 7 прерываний дальше расположено, передвинул и всё норм стало. В параллельном режиме должно работать нормально. Кстати, на Atmega48 у меня отлично запустилось на 28МГц, никаких проблем ) Еще проблема с 3 канальной версией у всех кроме Atmega8, некорректно инициализировал второй таймер :)
UPD3: ОБНОВИЛ архив с эмулятором, все косяки исправлены, можно пользоваться! :)
UPD4: проверил еще на Atmega328p заработало отлично с кварцем на 32МГц
UPD5: попробовал в очередной раз сделать TS на одной атмеге... опять фэйл, видимо это нереально :)
UPD6: блин, как же мне нравится как звучит новая версия на 48 и 328 атмегах с 28МГц кристаллом...
UPD7: 48 атмега запустилась аж на 40МГц у меня :) ATMEGA48PA-PU
Протестировал новую версию на Atmega48 (25Мгц) - особой разницы не заметил, разве что звук стал немного другим. А вот на Atmega168, которая завелась на 27 Мгц (был кварц на 32, но с ним не запустилась), звук вообще отличный.
Спасибо!