Комментарии 13
Переписанный (а, возможно, роландовский вариант, мне то неведомо) еще более прекрасен: https://www.youtube.com/watch?v=FpIUxjGfkXg
Есть проекты, проигрывающие классические мелодии трёхголосием с помощью таймеров этого же микроконтроллера.
А у "Острова обезьян" еще вторая часть была, там эта же мелодия проигрывалась уже через Sound Blaster.
Нам нельзя доводить транзистор до насыщения, так как звук получится искаженный.
Поэтому мы выбираем умеренное значение в 1К – этот базовый ток удержит транзистор в более-менее линейной области.
Нам также нельзя подавать на динамик постоянный ток, ведь мы не хотим его сжечь.
Да ладно, вы ж и так прямоугольный сигнал выводите. Насыщение его уже не исказит. Удержание транзистора в линейной области приведет только к лишним потерям на нагрев транзистора. Без конденсатора постоянный ток через динамик все равно был бы ограничен резистором в 220 Ом и составил бы 5 В / (220 Ом + 8 Ом) = 22 мА Такой ток привел бы к тепловыделению 0.022² * 8 = 0.0039 Ватт в динамике. Эти четыре милливатта его бы не разрушили, разве что немного сместили бы центральное положение катушки и диффузора. Правда в этом случае динамик надо было бы последовательно с резистором в цепь коллектора поставить. Если просто выкинуть конденсатор, то резистор 220 Ом и сопротивление динамика 8 Ом образуют делитель и напряжение на коллекторе составит (5 / (220 + 8)) * 8 = 0.175 В, что значительно меньше напряжения насыщения кремниевого транзистора, т.е. он никогда не откроется.
И, кстати, резистор с сопротивлением 1 кОм в цепи базу не удержит транзистор в линейной области. Ток базы будет равен напряжению на выходе микроконтроллера (которое при "единице" на выходе близко к напряжению питания) минус напряжение насыщения открытого перехода эмиттер-база (обычно около 0.7 вольт) и все это деленое на сопротивление в цепи базы. Итого, ток в цепи базы будет 4.3 В / 1000 Ом = 4.3 мА. Коэффициент передачи по току в схеме с общим эмиттером у транзистора 2N2222 где-то в диапазоне 40-325. Но даже если б был всего 10, это уже дает ток коллектора 10 * 4.3 = 43 мА. Что, как мы видим, недостижимо, т.к. ток в цепи коллектора ограничивается резистором в 220 Ом и выше 22 mA он быть не может. Транзистор гарантированно будет в насыщении. А резистор в 1 кОм нужен для того, чтоб ограничить выходной ток микроконтроллера и не повредить ни микроконтроллер ни транзистор, но никак не для удержания транзистора в линейной области.
P.S. Чёрт, вот так объясняешь автору, а автора тут и нет. Перевод же.
Коротко о производительности:
Сейчас: (разработчики): "нам нужно, чтобы у пользователя было >16 гигов ОЗУ, новый движок не тянет"
Тогда: (тоже разработчики): "нам нужно вставить саундтрек весом 2кб, но в оперативки только 512б"
Круто, но непонятно почему товарищ увидел герцовку и давай её хитрокодировать. Деревья всякие и т.п. Вместо того, чтобы использовать инструмент, который как бы предназначен для записи музыки - ноты. Ибо ноты - это словарь. Я не думаю, что мелодия для PC Speaker по диапазону шире 2-х октав. В результате мы имеем 24 полутона в словаре. А сама мелодия - это ссылки на элементы словаря. С длительностями то же самое.
Ну, короче, выглядит как перевести скриптом в миди, а потом уже его играть.
Я сперва тоже подумал, что всё излишне усложнено, пока не посмотрел внимательно код. Там исходные данные уже в подобном формате и представлены - набор частот в отдельном массиве, и набор задержек в другом, а в третьем индексы частот (8бит) и индексы задержек (тоже 8бит), склеенных в 16-битный инт. И таких "нот" там несколько тысяч. В общем, в атмегу пожирнее влезло бы и так, но не в эту, поэтому пришлось исхищряться. Да и иначе писать особо не о чем было бы, проект на пару часов по сути (если не считать сжатия)
Проигрыватель мелодий из игры Monkey Island