oleg110592 писал(а):Чен из двух выходов 8 бит шима сделал 16-битный шим
Ну, я этого не вижу, если честно. Как оно задумывалось работать? Сложение 1 к 256?
ptr128 писал(а):Используейте Fast PWM и сможете до 4МГц получить.
у меги-8 максимальная частота 16 МГц. 8-разрядный ШИМ (Fast PWM) делит частоту на 256 (без предделителя, с — больше). Итого 62,6 кГц уже на 8 битах. Что тут ещё можно такого приготовить чтобы получить 4 МГц?
у меги-8 максимальная частота 16 МГц. 8-разрядный ШИМ (Fast PWM) делит частоту на 256
В Phase correct PWM mode - да. В Fast PWM - можно делить на два, что я и написал. Просто управлять частотой нужно будет не только загружая регистр сравнения, то и меняя TOP таймера.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
oleg110592, крайне тяжело будет подогнать сопротивления, потому что точность должна быть бешеной. Либо придётся калибровать коэффициент подаваемых на младший ШИМ величин.
ptr128 писал(а):Просто управлять частотой нужно будет не только загружая регистр сравнения, то и меняя TOP таймера.
Ну, это, конечно, замечательная идея — увеличить густоту сетки не за счёт понижения частоты, а за счёт использования отношения двух небольших целых чисел. Однако, чтобы реализовать даже 12 бит какую же надо таблицу составить? Или есть какая-то замечаельная формула превратить число X из 12 бит в два числа N и M по 7-8 бит так, чтобы выполнялось соотношение
X / 2^12 ≈ M / N
с точностью не хуже 1/2^13?
Vov123 писал(а):...и MP3 плейер за 70 руб. Ничего кодировать-декодировать не надо...
Ничего вы не понимаете в суровой мужской радиотехническо-программисткой романтике.
B@R5uk писал(а):крайне тяжело будет подогнать сопротивления, потому что точность должна быть бешеной. Либо придётся калибровать коэффициент подаваемых на младший ШИМ величин.
oleg110592 писал(а):для нормального звука, точность местный народ подбирает методом тыка
Логично. Но вся прелесть ШИМа в том, что шикарная линейность достигается за счёт стабильности частоты. Никаких настроек не надо.
Между тем я тут покрутил формулы для рациональных отношений, чтобы увеличить точность ШИМа за счёт дополнительной регулировки периода, что предложил ptr128. Действительно, сетка уровней квантования становится гуще, но слишком неравномерно. В одних местах целые скопления новых уровней, в других — прорехи величиной в половину от максимально возможного. То бишь, в одних местах точность растёт на 1 бит, в других — чуть ли не в два раза.
Всё-таки сигма-дельта модуляция гораздо предпочтительней любого ШИМа. Не только точностью, но и отсутствием проблем с фильтрацией.
Внешняя SPI-flash трямкает. Использовал MX25L1605. Флеш шил с помощью PROTOSSA. Для этого нужно прошить его ПО с поддержкой SPI-flash. Программа-прошивальщик флеш AsProgrammer и прошивка для PROTOSS тут. Поддержка прошивки AVR сохраняется, фьюзы не трогал. Флеш к PROTOSS для программирования подключается таким образом:
MOSI - DIO
RESET - CS
SCK - CLK
MISO - DO
WP и HOLD подтянуты к питанию.
Заливается во флеш тот же самый sound.raw как есть с нулевого адреса.
После прошивки флеш прошиваем наш МК программой. Исправьте частоту в BAS, я подключил внешний кварц 14.319МГц
Я подключал по сл схеме. WP и HOLD так и остались на питании для дальнейших опытов над крысами.
Трямкает по нажатию кнопки. Звук пока грязненький, надо подключить к УНЧ и поиграться.Есть подозрение что работа SPI влияет на работу таймера ШИМ.
Во, замечательный подход.
Теперь, если прям нужно будет, можно и с кодеками поиграться, не опасаясь, что что-то куда-то не влезет.
Я бы добавил заливку с ПК во флэш средствами самого МК по UART-у.
Если надо, могу поискать софтину для ПК, когда-то писал на дельфи.
, тогда звук лучше становится. Таймеры использовать не стал. На ебее десяток Atmega8A-PU стоит дешевле десятка Tiny85 (которые в плеере Чана на SD-карте). Тем самым выигрываем по деньгам и ногам, и длине кода. А вывод можно попробовать ещё упростить без ШИМ - весь байт выборки выдавать в порт на резисторный ЦАП. Можно как есть в часы делать внедрёж.
===
Опыты делал на такой плате. Дополнительно разведена всякая всячина.
===
abc писал(а):Я бы добавил заливку с ПК во флэш средствами самого МК по UART-у.
Если надо, могу поискать софтину для ПК, когда-то писал на дельфи.
Это единственное чего не хватает. Нифига не смог придумать. Если просто транслировать на флешку протокол программатора, то мешает ресет.
Тогда стоит сначала придумать протокол общения, под него смогу адаптировать софт.
У меня было так, можно взять за основу :
параметры UART-а : 57600-8-N-1
Первый байт - 0xFE, второй - номер трека, затем данные в raw непрерывно льются без каких-либо проверок.
Весь поток разбивается на блоки по 4кБ (вроде) с небольшой паузой между ними, чтобы МК успевал писать сектор во флэш.
Окончание записи - просто по таймауту, когда ПК перестает слать данные.
Отдельная команда - стирание трека (0xFE,0xAA,0xCC и один байт с номером трека).
Проще нужно. Я сделал так: объединил все звуковые файлы в один, а в код вставил параметры треков (длина, страница начала трека, смещение трека от начала страницы). Думаю использовать eeprom МК для таблицы параметров треков заморочно (если это сам МК не делает).
Это не срочно. Но функция чтения не помешает на всякий случай.
Ближайшую поделку сделаю прямой прошивкой памяти. Файлы raw можно объединять в winhex через меню tools -> file tools -> concatenate. Программа предложить указать выходное имя файла и будет запрашивать файлы для объединения до тех пор пока не будет выбрано done. Удобнее чем копипастить.
===
Готовый код для последовательного воспроизведения файлов. Проверено на 25X80VSIG. Звук подшипливает, но не из-за ШИМ, а из-за 8 бит, в аудиоредакторе тоже подшипливает. Будем думать как улучшить. У меня конечно есть SPI-ЦАП... но это слишком просто.
Ишь...барыгам на 70р гешефта... Нам бесплатно надо.
===
Sound Forge на выходе даёт raw без шума. Видимо Audacity автоматом делает дизеринг. Теперь норма.
Я не шибко большой программер, поэтому прочитать чип и собрать из нескольких файлов один - сделать можно, но это уже будет ооочень небыстро.
Пока только то, что есть.
При запуске программа выдает предупреждение о том, что ком-порт не найден, выставляем нужный руками.
Скорость жестко установлена в 115200.
Если память уже была прошита, то перед записью надо ее стереть, последовательность кодов на стирание - 0xFE, 0xAA, 0xCC, 0x00
При нажатии на Save первый байт - 0xFE, затем идет бинарник покетами по 256 байт, между которыми - небольшие паузы в 10 мс.
Так они сейчас автоматом отправляются при нажатии соответствующей клавиши.
Это МК должен, получив ту или иную команду, либо стирать, либо писать в память.
Сделал на Tiny13a, а он хренакс и на 4,800МГц работает вместо 9,6. То ли перемаркированный без "а" (васик ругается что не тот подсовываю), то ли не хочет от 3.1В на 9,6 работать. В итоге частота ШИМ ниже, звук дрянной выходит. Буду пробовать на mega8a с R-2R.
кстати, встроенный генератор можно "калибровать" - если верить даташиту, то можно увеличить частоту тактовую практически в 2 раза. так что есть шанс улучшить качество малой кровью
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...