{ [тиков таймера подождать до этого события] [канал] [нота или 0 === отключить] } typedef struct { //highest bit is highest for channel index uint8_t m_noteNumber; ///15-3 bits - Delta value, 2,1,0 bits - channel index uint16_t m_delta; } TPlayerStateChange;
вот в комментариях я выписал значения delta и Nch: как проигрывается данный файл? 1) ждем 1 тик таймера с fдискретизации 2) выдаем в канал PWM ноту №42 3) ждем еще 1 тик? или сразу добавляем на выход ноту №30? 4)ждем 16 тиков 5)....
1) Так, только тики 255Гц. 2) минимальное значение тиков - 1, это сделано для того, чтобы плейер не обрабатывал несколько нот на одном событии. Даже если по нотам было по-другому, это незаметно при прослушивании. Значение тиков 0 обозначает конец мелодии.
ясно , спасибо. Хотелось еще уточнить: после того как обработано событие, например, { 42, 9 },//1-1, это значит, что нота 42 будет присутствовать на выходе до тех пор, пока не появится новое значение на 1м канале либо {0, 0b...001} ? накидал в виде диаграммы, правильно ли я понял? вместо частоты просто номер ноты поставил
Нота на канале звучит, пока не будет установлена другая нота на этот канал, или не придет событие отключения на этот канал(нота=0). На диаграмме все каналы включились одновременно, так быть не может - задержка минимум 1 тик. И я не понял, что обозначает диаграмма Вых.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
В 8-битном сэмпле, без знака, нет значения 00h (иначе сэмпл будет несимметричным).
Dmitry Dubrovenko, ты не прав, значение 0 имеет право быть. работа таймера в режиме Fast PWM такова, что при 0 в регистре сравнения таймер формирует импульс шириной в 1 такт таймера. а при числе 255 (ШИМ 8 бит) в регистре сравнения таймер формирует постоянную 1 на своем выходе. таким образом, "запрещенным" числом является число 255 в регистре сравнения, а не число 0. а идеально симметричный меандр (одинаковые длительности импульса и паузы) получаются в числе 127 в регистре сравнения. и таким образом, таблицу синуса нужно строить относительно числа 127 (ноль синуса), а максимальные пределы изменения синуса тогда будут от 0 до 254. при этом ширина импульса будет изменяться от 1 такта (при 0 в регистре сравнения) до 255 тактов (при 254 в регистре сравнения), и будем иметь идеальную симметрию сэмплов.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Ну, во-первых, речь шла не о работе АВР, а о формате звукового сэмпла Unsigned. Там используются значения от 1 до 255, а середина - 128. Про особенности работы АВРов я изрядно подзабыл, но вот из твоих слов не вижу никаких противоречий. Почему ты считаешь, что 255 - запрещённое состояние? Ну будут все 256 тактов, так и что? Главное, что б весь диапазон составлял нечётное количество уровней, тогда сэмпл будет симметричным. Кстати, насколько помнится, в АВРах был интересный режим PWM, когда использовался не один а два "симметричных" такта. В первом сперва шёл 0, а затем 1, а во втором - наоборот. Таким образом результирующий импульс изменялся симметрично относительно частоты PWM. Правда для этого её необходимо было повышать в два раза.
_________________ ICQ нет, и, в ближайшее время, не будет.
я уже достаточно подробно все объяснил, в том числе и почему 255 - запрещенное число. при 255 ШИМ "стоит" - на выходе держится постоянно 1. это нам не годится. а если "середина" равна 127 - то имеем идеальный, симметричный меандр. и изменения "туда-сюда" на 127 дадут нам диапазон от 0 до 254, всего 255 состояний - именно нечетное число.
"интересный режим" - это "PWM, Phase Correct". счетчик считает "туда и обратно". поэтому частота ШИМ получается в 2 раза ниже, чем при быстром ШИМе (Fast PWM). и этот режим нам не подходит именно из-за того, что частота в 2 раза ниже, чем при быстром ШИМе. и вот, в режиме "Phase Correct", как раз ноль будет запрещенным числом,так как при 0 импульс на выходе отсутствует - на выходе держится постоянно 0. и поэтому там, как раз, серединой будет 128, а изменения на 127 "туда-сюда" дадут нужное нам нечетное число состояний от 1 до 255.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Да почему не годиться-то? Конечный результат будет абсолютно одинаковый используем мы диапазон от 1 до 255, или от 0 до 254. Но в первом случае данные представлены в формате 8-bit Unsigned, а во втором их надо специально пересчитывать перед выводом в PWM.
Starichok51 писал(а):
этот режим нам не подходит именно из-за того, что частота в 2 раза ниже
Опять же, что в этом страшного? Вы путаете частоту PWM и частоту квантования.
_________________ ICQ нет, и, в ближайшее время, не будет.
опять-таки, ты задаешь вопрос, когда я чётко написал ПОЧЕМУ не годится. и в прошлый раз я всё четко расписал, но взялся задавать вопросы, как будто не понял написанного мной. мне совершенно не приходится ничего пересчитывать при диапазоне от 0 до 254 в режиме "быстрого" ШИМ. ничего я не путаю. я прекрасно различаю частоту сэмплирования частоту ШИМ, которая и воспроизводит звук. конешно, ничего страшного нет в том, что в режиме Phase Correct частота в 2 раза ниже, но лично мне это не нравится. и в режиме Phase Correct с диапазоном от 1 до 255 тоже не нужно ничего пересчитывать.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
не годится потому, что полное заполнение нарушает форму (симметрию) выходного сигнала ШИМ. с полным заполнением из-за нарушения симметрии будет подмагничивание динамика. хотя, на слух это обнаружить практически невозможно. нам нужно, чтобы ширина импульса изменялась от 1 такта таймера до 255 тактов. то есть, при 255 тактах импульса должна быть пауза в 1 такт. соответственно, при 1 такте импульса должна быть пауза в 255 тактов. и никаких полных заполнений не допускается. тогда будет абсолютная симметрия генерируемого синуса. у меня данные синуса хранятся в диапазоне 0-254 - пересчитывать ничего не надо. и середина диапазона, как я уже сказал = 127.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Господь с тобой! Что ж ты такое говоришь-то? Подмагничивание у тебя возникнет, если ты не уберёшь постоянную составляющую из РЕЗУЛЬТИРУЮЩЕГО сигнала (и без разницы, будешь ты менять от 0 до 254, или от 1 до 255, ибо это будет в диапазоне от 0 до Uпит МК). А для этого задаются минимальной частотой сигнала и ставят ФВЧ. Но это - уже аппаратная особенность и к формату хранения сэмпла не имеющая отношения.
Starichok51 писал(а):
нам нужно, чтобы ширина импульса изменялась от 1 такта таймера до 255 тактов
Да не нужно нам этого. Нам нужно, что б динамический диапазон составлял 255 значений и только, вот тогда и будет симметрия.
Starichok51 писал(а):
у меня данные синуса хранятся в диапазоне 0-254
А где ты их берёшь-то? Все редакторы создают звуковые файлы в формате 1-255. Следовательно, всё-равно конвертировать приходится. И так понимаю, ты ещё никакой арифметики с ними не производил.
_________________ ICQ нет, и, в ближайшее время, не будет.
подадим минимум диапазона на ШИМ - увидим редкие короткие импульсы. подадим максимум - увидим постоянную единицу. (для рассматриваемого режима ШИМ). несимметрия очевидна. какие еще вопросы? кстати, динамический диапазон для 1-байтного формата не 255 зачений, а 127.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
А где ты их берёшь-то? Все редакторы создают звуковые файлы в формате 1-255.
а мне не нужны редакторы. мне программа на С++ делает все расчеты. причем, на любое количество сэмплов (шагов) синуса, но всегда со смещением 127 нуля синуса. я сам задаю число шагов и величину смещения нуля синуса. у меня был даже вариант, где синус состоял из 122 шагов, чтобы при дельта=1 выходная частота была 256 Гц. а несимметрию при значении 128 ты легко можешь посмотреть в том же Протеусе. создай простенькую программу с таймером в режиме "быстрого" ШИМ (8 бит), и осциллографом увидишь, что при числе 128 длительность импульса больше длительности паузы. а при числе 127 длительность импульса точно равна длительности паузы.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Сейчас этот форум просматривают: alex-551 и гости: 95
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения