Для преобразования цифрового сигнала в аналоговый, используют устройства под названием цифро-аналоговые преобразователи. Как правило, они существуют в виде отдельных микросхем которые порой труднодоставаемы. Если к ЦАПу не предъявляются серьёзные требования, то его можно сделать самостоятельно из обычных резисторов. Называется такой ЦАП — R 2R. Своё название он получил из-за номиналов применяемых в нём резисторов с сопротивлениями R и 2*R. Сопротивления по идее могут быть любыми, но в разумных пределах разумеется. Если поставить очень большие например по несколько мегаом, то нагрузка которая подключена к выходу, внесет существенные искажения в сигнал. Напряжение начнёт проседать. Я взял резисторы с сопротивлениями 1Ком и 2Ком (просто первое что попалось под руку).R 2R ЦАП схема Hint: Если есть много резисторов одного сопротивления, то получить сопротивление вдвое меньшее, можно просто запараллелив два одинаковых резистора. Для такого ЦАПа желательно использовать резисторы с 1%-м допуском. У меня к сожалению таких не нашлось, и я использовал обычные. На моей отладочной плате этот ЦАП выглядит так:

R 2R ЦАП

Как оно работает
Каждый вход ЦАПа имеет свой «вес». Входы расположены в порядке уменьшения веса слева направо. Т.е. левый вход оказывает самое большое влияние на выходной сигнал следующий за ним вдвое меньше итд. Ну а самый последний (правый)  вход изменяет выходной сигнал на ничтожные милливольты. Если известна комбинация бит поступающая на вход ЦАПа, то рассчитать напряжение очень легко. Предположим, что на входе у нас число 10010101 тогда выходное напряжение можно рассчитать по формуле

Uвых=Uпит * (1 * 1/2 + 0 * 1/4 + 0 *1/8+ 1*1/16 +0*1/32+1*1/64+0*1/128+1*1/256)

Формула простая, и мозг ни кому взорвать не должна. Согласно ей, напряжение на выходе будет равно 2.91 вольта. Uпит — напряжение питания микроконтроллера. При расчете использовалось значение 5 вольт. Таким образом, восьмибитный ЦАП способен выдать 256 различных напряжений с шагом около 20 милливольт, что вполне неплохо.

Применение
Применений у данного данного ЦАПа несколько. К примеру можно сделать генератор сигналов различной формы. Например пилы:

SAW

или скажем треугольника:

triangle

ну или можно вывести сигнал эротической экзотической формы:

tits

А можно еще выводить звук. Звук конечно не самого хорошего качества, но для создания какого-нибудь дверного звонка, его вполне достаточно. Проще всего воспроизводить звук формата WAV т.к. он не сжат ни какими аудиокодеками и не потребуется его декодировать перед воспроизведением. Из-за того что звук ни чем не сжат, размер звукового файла не внушает оптимизма. Во флеш микроконтроллера много не влезет. Для эксперимента по выводу звука через ЦАП было решено заюзать SD карту памяти на 2 гб. Не буду рассказывать всех тонкостей работы с картой, (возможно напишу об этом подробно в следующий раз) хочу лишь дать возможность оценить качество звучания такого ЦАПа (звук 8 бит 16 кГц моно):

Преимущества и недостатки
К преимуществам можно отнести:

  • Возможность увеличения разрядности
  • Неплохая частота дискретизации
  • Схемотехническая простота и повторяемость

Недостатки тоже есть :

  • Качество ЦАПа сильно зависит от применяемых резисторов
  • Сопротивление ключей порта микроконтроллера вносят искажения
  • Громоздкость на плате

Благодарности
Спасибо DiHalt’у за функцию выводящую последнюю осциллограмму ;-)