Главная » Статьи » Proton PICBasic

Создание ЦАП. Пример

Как и обещал, пишу. Сегодня мы будем управлять напряжением с помощью самодельного цифро-аналогового преобразователя, собранного на одном порту микроконтроллера. 

Кто-то скажет, что ЦАП можно сделать и с помощью ШИМ. Но это понятно. Мне хотелось осветить создание ЦАП именно без ШИМ. Поскольку не все МК имеют модуль PWM. Правда, что самое интересное, я буду использовать микроконтроллер, который содержит модуль PWM. Но дело, все-таки, не в этом. Итак:

Будем использовать так называемую матрицу R2R. Это обыкновенный резистивный делитель на 8 портов.  Также запланируем использование двух кнопок - для увеличения и уменьшения выходного напряжения.

Рисуем схему:


А вот и сама программа:

DEVICE = 16F628A                        'Микроконтроллер

XTAL = 12                                      'Частота микроконтроллера

'-----------------Переменные----------------------------

DIM       Vout AS WORD                   'Требуемое напряжение (500 условно = 5 вольтам)

'------------------Константы-----------------------------

'5/256 = 0.0195... 5 Вольт делим на максимальное значение порта

'Для оперирования с целыми числами умножим на 10000

SYMBOL Koeff = 195                       'Получаем такое значение

SYMBOL DecOut = PORTA.0             'Кнопка уменьшения выходного напряжения

SYMBOL IncOut = PORTA.1              'Кнопка увеличения выходного напряжения

'---------Начало основной программы----------------------

    PORTA=0                                    'Очистим PORTA

    PORTB=0                                    'Очистим  PORTB

    CMCON=7                                   'Отключим компаратор

    TRISA=%00011                           'PORTA.0..1 - на вход для кнопок

    TRISB=0                                     'Установим на выход

    Vout = 250                                  'Установим начальное значение выходного напряжения

Main:

IF  DecOut = 0 THEN                       'Если нажата кнопка уменьшения,

    DEC Vout                                     'то уменьшаем значение(на выходе это будет примерно 0.1 вольта

    IF Vout < 1 THEN Vout = 1          'Если значение меньше 0.1 вольта, то держим на этом уровне

ENDIF

IF  IncOut = 0 THEN                         'Если нажата кнопка увеличения,

    INC Vout                                      'то увеличиваем на 0.1 вольта

    IF Vout > 500 THEN Vout = 500   'Не выходим за предел 5 вольт

ENDIF

                PORTB=(Vout*100)/Koeff  'Вычисляем значение порта для данного напряжения

                                                       'и сразу помещаем в порт

     DELAYMS 80                              'Небольшая задержка для плавности изменения

                                                       'выходного напряжения

GOTO Main                                       'На начало

Вот и все! Думаю, трудностей в понимании не возникнет. Если все же будут вопросы, то задавайте в форум.

В следующий раз, думаю, мы рассмотрим пример работы с внешней EEPROM

Спасибо за внимание.

P.S. Компания «УпакТехнологии» https://upack.ru/ более 20 лет выпускает современный тип упаковочной продукции – пакеты из высококачественного первичного полиэтилена высокого давления (ПВД) с застежкой ziplock, а также дой-пак и трехшовные пакеты с застежкой или без неё. Наша продукция сохраняет ваши товары и выгодно представляет их покупателю, обеспечивая увеличение продаж и рост прибыли.




Категория: Proton PICBasic | Добавил: ADMIN (11.05.2011)
Просмотров: 10246 | Комментарии: 4 | Теги: Программа, блок питания, ЦАП, пример, статья, порт | Рейтинг: 5.0/5
Всего комментариев: 4
1 777grey   (17.05.2011 22:35) [Материал]
Хорошая статья! Вроде бы как про данную схему все знают, но используют редко! А раньше вообще звук в игрушках с помощью паралельного порта и резисторов выводили, и нормальны звук получался, вполне играбельный! smile

2 ADMIN   (18.05.2011 17:05) [Материал]
Спасибо за отзыв. Хотелось бы, чтобы все принимали участие.

3 mikhail09p   (15.10.2011 15:07) [Материал]
Интересно, с какой максимальной скоростью возможно изменение напряжения (синусоиды)? Имеется ввиду, возможно ли выводить музыку? Или хотя-бы речь...

4 MiXaS   (19.10.2014 11:14) [Материал]
Думаю можно выводить и звук и речь, остается вопрос качества, связанное с частотой дискретизации и битрейт. На рыбе есть пример вав плеера. там тоже используют цап такого порядка

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]