Параллельный Цифро Аналоговый Преобразователь по схеме R-2R

Распечатать

Порой надо выдать точный аналоговый сигнал, да еще с быстро менющийся. Например, функцию. Раньше я рассматривал как это можно сделать с помощью ШИМ, но у этого метода есть проблема — он очень медленный. В самом деле, чтобы получить один уровнь на ШИМ, нужно, по меньшей мере, 256 тиков таймера. А если надо развернуть функцию в которой 256 отсчетов? Да еще на каждый отсчет по 256 тиков? Это какая же должна быть частота процессора? Да еще надо учесть, что ШИМ требует интегрирующей цепочки с конденсатором. А значит для четкого установления уровня должно пройти еще несколько импульсов, что снижает скорость еще раза в три. Короче, получить что либо быстрей чем 50 ГЦ на ШИМ очень сложно. Я не говорю даже о том, что у ШИМ изза свойств емкостного заряда сильно плывет линейность, так что это приходится учитывать.

Тут на помощь приходит параллельный ЦАП. Суть его в том, что каждый его вход имеет свой вес в вольтах, которые потом складываются, образуя сумму на выходе. При этом работает вся конструкция очень быстро. Фактически, скорость тут ограничена только паразитными емкостями между элементами.

Опорное напряжение тут последовательно делится на резистивной матрице. Номиналы резисторов должны быть любыми. Главное, чтобы горизонтальные ветви были по номиналу ровно в два раза больше чем вертикальные. А вся резистивная цепь в своей нижней точке садится на землю через резистор равный номиналам в горизонтальных ветвях . Ну и кондерчик для фильтрации дополнительной. Самый старший разряд вверху, самый младший внизу, ближе к земле.

Теоретически, разрядность можно повышать практически до бесконечности. На практике же, уже на десятом разряде возникают проблемы из-за сопротивления ключей, что сказывается на точности и , главное, линейности выходных данных. Но в подавляющем большинстве случаев восьми разрядов хватает за глаза. Тем более их где то еще надо найти, это же целых 8 линий I/O которые надо урвать.

Также не помешает добавить операционный усилитель, включенный повторителем. Чтобы сопротивление нагрузки не вносило искажений. Я поначалу впаял OP07, но получил облом — у меня отрезало все, что ниже 2.5 вольт. Слишком маленькое напряжение питания. Тут нужен усилитель который может работать в режиме Rail-2-Rail то есть выдавать на выходе сигнал с амплитудой от плюса до минуса питания, с минимальным отклонением. При добавлении ОУ, надо учитывать тот факт, что почти у всех операционников максимальное выходное напряжение резко заваливается с ростом частоты — параметр Max Output Swing vs Freq. это показывает. Например, для LM324 выглядит так:

Я усилитель подходящий в запасах не нашел, поэтому пока так. Благо у осциллографа сопротивление высокое и на выходное напряжение он практически не влияет. Чтобы не подбирать номиналы резисторов я поступил проще — в вертикальную линию впаял по два резистора в параллель. При таком включении резистора его сопротивление уполовинивается. Таким образом, все резисторы у меня одного номинала.

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

Первым делом, выдал синус. Синус у меня чисто табличный. 256 значений, саму таблицу нарыл в инете. Функция получилась гладенькая. Прям заглядение.

Пробовал брать каждое второе значение из таблицы (при этом она ужалась до 128 значений) — тоже все очень красивое. И лишь когда стал брать чуть ли не каждое 16е значение, то тогда стали заметны лесенки на функции:

И то их можно было сгладить фильтром и опять будет красота. Зато на 8ми мегагерцовой Меге удалось добиться 20кГц синусоидального сигнала :)

Вот такой код получился, точнее это фрагмент.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Sine:		SetTask	TS_Sine		; Повторный вызов через API RTOS. Тут не имеет значения
 
		LDS	Counter,SinCT	; Загрузить из памяти текущее значение указателя
 
Loop:		WDR			; Сброс собаки
		LDPA	Sinus		; Макрос, загружающий в Z адрес таблицы с синусом
 
		CLR	OSRG		; Сбрасываем рабочий регистр
		ADD	ZL,Counter	; Вычисляем смещение по адресу таблицы
		ADC	ZH,OSRG
		LPM	OSRG,Z		; Грузим в рабочий регистр из таблицы байт
		OUT	PORTD,OSRG	; Выдаем его в порт
 
		INC	Counter		; Увеличиваем счетчик
		STS	SinCT,Counter	; Сохраняем значение счетчика в память
 
		RJMP	Loop		; Переход
 
		RET	
; Так как таблица на 256 значений, то проверку счетчика на переполнение делать не надо, он сам, достчитав до 255, 
; обнулится.
 
; А эта та самая таблица
Sinus:	.DB 64,65,67,68,70,72,73,75
	.DB 76,78,79,81,82,84,85,87
	.DB 88,90,91,92,94,95,97,98
	.DB 99,100,102,103,104,105,107,108
	.DB 109,110,111,112,113,114,115,116
	.DB 117,118,118,119,120,121,121,122
	.DB 123,123,124,124,125,125,126,126
	.DB 126,127,127,127,127,127,127,127
	.DB 128,127,127,127,127,127,127,127
	.DB 126,126,126,125,125,124,124,123
	.DB 123,122,121,121,120,119,118,118
	.DB 117,116,115,114,113,112,111,110
	.DB 109,108,107,105,104,103,102,100
	.DB 99,98,97,95,94,92,91,90
	.DB 88,87,85,84,82,81,79,78
	.DB 76,75,73,72,70,68,67,65
	.DB 64,62,61,59,58,56,54,53
	.DB 51,50,48,47,45,44,42,41
	.DB 39,38,36,35,34,32,31,30
	.DB 28,27,26,25,23,22,21,20
	.DB 19,18,17,15,14,13,13,12
	.DB 11,10,9,8,8,7,6,5
	.DB 5,4,4,3,3,2,2,2
	.DB 1,1,1,0,0,0,0,0
	.DB 0,0,0,0,0,0,1,1
	.DB 1,2,2,2,3,3,4,4
	.DB 5,5,6,7,8,8,9,10
	.DB 11,12,13,13,14,15,17,18
	.DB 19,20,21,22,23,25,26,27
	.DB 28,30,31,32,34,35,36,38
	.DB 39,41,42,44,45,47,48,50
	.DB 51,53,54,56,58,59,61,62

З.Ы.
Но синус это не прикольно. В конце концов, его можно и аналоговыми методами получить не сильно напрягаясь. А с ЦАП можно по таблицам задать любую форму. Вот, например,

А это рок концерт. Вид со сцены.

А напоследок, дабы меня не упрекали что тема сисек не раскрыта…

Сиське!

Запись опубликована в рубрике Начинающим с метками , , , . Добавьте в закладки постоянную ссылку.

100 комментариев: Параллельный Цифро Аналоговый Преобразователь по схеме R-2R

  1. _riko_ говорит:

    Гггг … титьки в осциле ! Это круто! :D А звуки сией штукой извлекать можно?

  2. Vasily говорит:

    Ди, а помнишь в конференции как то кидали линк, там часы аналоговые выводили на экран осцилла, там тот же метод, что и сдесь?

  3. Kail говорит:

    :)) Сиськи на осциле — это ж надо было догадаться. А статья полезная. Кстати весьма полезной будет статья про ОУ, реально как использовать какие нюансы, сомовщзбужение и проч. А то пишут много теории, а связи с практикой — нуль.

  4. Boltik говорит:

    Помимо паразитных емкостей там есть еще и конденсатор на выходе….он конечно мелкий, но надо же к чему то придраться;)

  5. z80 говорит:

    он убирает шумы интерференции

  6. genunix говорит:

    Хорошо написано, спасибо!
    Насчет ШИМ, та вроде как можно повысить частоту,заставив таймер считать не до 255, а меньше. Режим где WGM00, WGM01, WGM02 равны 1. В этом случае максимальное значение таймера ограничивается OCR0A, а скважность можно ставить через OCR0B. Правда теряется один канал ШИМ и уменьшается разрешающая способность оного. Или я где-то не прав? Смотрел в студии, вроде работает.

    • DI HALT говорит:

      Ну будет на 256, а 128 тиков. При этом ты потеряешь в разрешении. И чем больше снижаешь тем больше теряешь в разрешении. Здесь же от разрешения скорость не зависит (зависит от глубины таблицы, но это уже не столь критично, как показывает эксперимент)

  7. Oldman говорит:

    Хороший сайт, хорошая статья.
    Тем, кто хочет глубже вникнуть в данную тему, советую дополнительно сходить на http://www.limi.ru/dacs/dacsindex.htm.

  8. tripsin говорит:

    Прикольно! Я вот только что сделал такой же ЦАП. Но у меня он двухканальный. Порт В у tiny2313 разделил на 2 канала по 4 бит. схема — http://tripsin.narod.ru/2sin.png Разрешения для моей задачи достаточно. Возник вопрос. Синус получается нормальный, но когда я просто пробовал сделать пилу, т.е. просто инкрементил байт в порту, то верх у пилы получается сильно заваленным. Это особенно выражено на низких частотах. Причем в модели в Proteus тоже есть эта нелинейность, хотя и не так выраженная, как в реальном дивайсе. Может мне кто-нибудь объяснить почему так получается? В ЦАПах использованы резисторы 20к и 10к. ЦАПы нагружены на делители напряжения 20к, чтобы регулировать уровень выходного сигнала.
    Это пример пилы на 62Гц — http://tripsin.narod.ru/62Hz.png
    Кстати частоту сигнала я меняю методом накопления фазы. При частоте дискретизации 200кГц и 16-битном накопителе фазы шаг перестройки частоты получается 3Гц. Размер таблицы синусов 256 байт. Если сделать 24-битный накопитель (использовать 3 регистра), то шаг можно уменьшить до сотых долей герца.

    • Boltik говорит:

      А зачем? Есть куча готовых ЦАПов на любой вкус и цвет….
      PS Что-то меня эти конденсаторы на выходе смущают…может попробовать выкинуть их?

      • tripsin говорит:

        > А зачем? Есть куча готовых ЦАПов
        Можно считать, что это тренировочный проект. Это мое первое самостоятельное устройство на МК. Если потом потребуется что-то серьезнее, то сделаю на MAX522.

        > PS Что-то меня эти конденсаторы на выходе смущают
        Они режут постоянную составляющую, т.к. сигнал потом пойдет на звуковой усилок. А пила получается кривая и без кондеров.

    • Max говорит:

      между цапом и выходными делителями поставь ОУ в режиме повторителя, как это сделал DI HALT
      есть прекрасные сдвоенные ОУ с одним питанием, например LM358. если нужна скорость — эмиттерный повторитель но надо будет мудрить с линейностью около 0, видимо отрицательное смещение.

      • DI HALT говорит:

        Тут надо Rail-2-rail если с одинарным питанием работаешь. Либо теряешь все низы и все верхи. На дешевых ширпотребных усях очень сильно.

        • tripsin говорит:

          Max, DI HALT Спасибо за совет. Я понял. Из-за своего небесконечного сопротивления делитель влияет на линейность ЦАП. Повторитель с ОУ позволит резко увеличить входное сопротивление делителя.

  9. Litr Spirta говорит:

    Если кого заинтересует:
    http://www.nppsaturn.ru/book/fedorkovBG.zip
    Федорков Б. Г., Телец В. А. Микросхемы ЦАП и АЦП: функционирование, параметры, применение. Москва, Издательство Энергоатомиздат, 1990

  10. тут как раз бы еще это дело повесить на регистр ради интереса
    и возле выводов оу надо вешать блокировочный кондер, иначе будут шумы сильные
    а еще лучше питание оу включить через п-филтр

  11. cahbtexhuk говорит:

    а можно данные для сисек? :D

  12. CALLIKA говорит:

    а можно для новичка объяснить чем всетаки этот параллельный ЦАП улучшает нам жизнь ? Я понимаю что делать ШИМом например синусоиду будет долго, но как этот параллельный ЦАП сделает нам ее быстрее и почему, как он работает, в деталях?

    П.С. просьба не бить, просто растолковать на пальцах…

    • Boltik говорит:

      ШИМ используют в других случаях:
      1. Системы с большим током через нагрузку. ШИМ позволяет ставить в качестве силового элемента ключ (транзистор) с минимальным падением напряжения и минимальным рассеиванием тепла. Если поставить то же транзистор в рещиме усилителя и плавно регулировать напряжение на входе, то мы будем терять много мощности на самом транзисторе.
      2. Системы с небольшой скоростью реакции на импульс..например нагревательные элементы или двигатели…они же как правило принадлежат и к любителям покушать ток.

      На пальцах подробнее чем в статье не растолкуешь.

    • DI HALT говорит:

      Дело в том, что в ПАЦП мы выводим просто число в порт, как оно есть, а резистивная матрица мгновенно (считаем что паразитных емкостей нет) преобразовывает его в напряжение.
      Представь что у тебя во все регистры занесены нужные значения синусоиды. 32 точки. Вот такая конструкция выдаст в порт весь период за сущие мгновения.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      
      OUT PORTD,R0
      OUT PORTD,R1
      OUT PORTD,R2
      OUT PORTD,R3
      OUT PORTD,R4
      OUT PORTD,R5
      OUT PORTD,R6
      OUT PORTD,R7
      OUT PORTD,R8
      OUT PORTD,R9
      OUT PORTD,R10
      OUT PORTD,R11
      OUT PORTD,R12
      OUT PORTD,R13
      OUT PORTD,R14
      OUT PORTD,R15
      OUT PORTD,R16
      OUT PORTD,R17
      OUT PORTD,R18
      OUT PORTD,R19
      OUT PORTD,R20
      OUT PORTD,R21
      OUT PORTD,R22
      OUT PORTD,R23
      OUT PORTD,R24
      OUT PORTD,R25
      OUT PORTD,R26
      OUT PORTD,R27
      OUT PORTD,R28
      OUT PORTD,R29
      OUT PORTD,R30
      OUT PORTD,R31

      По такту на команду. При 8ми мегагерцах мы получим синус частотой 250кГц.

      Само напряжение складывается из весов разрядов. Самый младший разряд находится дальше всех от выхода и ближе всех к земле. Соответственно его 5 вольт высаживаются на куче резисторов и до выхода доходят считанные крохи.
      Чем старше разряд, тем он ближе к выходу и тем меньше он ослабляется резисторами (т.к. резисторов на его пути меньше). Соотвественно тем весомей его вклад.

      ШИМ так не может. Ему надо во-первых прорисовать импульс, на это уйдет как минимум 2n тактов. Где n разрядность нашего ЦАП, а во-вторых зарядить конденсатор в фильтре, чтобы получить устоявшееся напряжение, а не импульс. На это не помешает пустить еще два три периода ШИМ.

  13. Medved говорит:

    Тема сисек на сей раз раскрыта. Пешы исчо.

  14. YurkaM говорит:

    Сиськи — это конечно прикольно. А вот хотелось бы взглянуть на пилу. Хотя бы на глаз оценить линейность. Ведь применённые резисторы — обычный ширпотреб, наверное +-5%. Как это влияет?

  15. YurkaM говорит:

    Хм.. А мне чё-то не нравится.. Да, с линейностью вроде нормально (в глобальном плане). А вот эти вот мелкие «бугорки», «ямки», «пички» — это чего? Или это огрехи осциллографа? Вообще замечаю, что все осциллограммы с этого осцила (не только в этой теме) очень «шумные» — особенно заметно на горизонтальных участках.. Или это на всех осцилах с широкой полосой так??

  16. mtr говорит:

    Здорово.
    Мысли по улучшению схемы (без напрягов):
    1. Отвязать ФНЧ от выхода ЦАП, т.к. там все равно ОУ есть — сделать активный фильтр, и он не будет забирать ток от ЦАПа просаживая его. Ничего нового припаивать не придется, просто скоммутировать те же элементы в другом порядке)
    2. Сделать номиналы сопротивлений побольше — раз в 10 и хорошо отфильтровать питание мк.

  17. noblako говорит:

    В оконцовке какой ОУ выбрали? Может просто транзистор всандалить , а в коллектор ему поставить переменное сопротивление — будет амплитуду выходного сигнала регулировать.
    К примеру КТ3102 — Fmax около 300мГц, а с буковкой Е коэф.передачи(Н21) — 400….1000.Чем не ВЧ усилок?

  18. mmb говорит:

    старшие биты разбить, (вместо 3х битов будет 8 , 2^3=8), добавить остальные 13, коммутировать быстрой логикой. При точности резисторов 0,001 будет 16бит монотонность, при 0,01 13бит. Можно слушать музыку. Зазвучит на порядок лучше старых сигма-дельт, будете удивлены.

    ШИМ использовать для Ц\А преобразования не нужно, для это есть подуляция плотностью импульсов, тогда частоты большие не нужны… кол-во тактов = количество уровней. Пребразования, моя любимая тема ! Где бы взять деталей… =(((

  19. Ridik911 говорит:

    теперь собираем параллельный АЦП :)
    тобищ быстрее встроеного

    а если серьозно.. то возможно? и будет ли он быстрее? и насколько
    подозреваю схемку где будет групами сопр-стабилитрон

    • DI HALT говорит:

      Конечно возможно. Есть параллельный АЦП. И работает он очень быстро. но жутко горомоздкий. Там стоят операционные усилители с разным опорным напряжением, их выход шифруется и подается в МК. Чем больше нужно разрядов тем больше усилителей. Т.е. на 8 разрядов надо 256 усилителей и один невьебенный шифратор.

  20. Barbudas говорит:

    Дядьки, на приведенной в статье схеме величина самого нижнего сопротивления (LSB) должна быть не R а 2R, т.е. для номиналов схемы 2k вместо 1k. Надо бы подправить. В противном случае заметно ухудшится монотонность ЦАП-а. Причём на фотографии платы «лестница» сопротивлений набрана верно.

  21. sarmatych говорит:

    Кстати, DI HALT. Если совместить эту инфу с инфой из твоей статьи про сдвиговый регистр (http://easyelectronics.ru/sdvigovyj-registr.html), то можно наворотить сколько угодно ЦАПов на тех же 74HC164 и потратить всего 4 ноги контроллера… или я что-то не так понял?

  22. BarMaleY говорит:

    Жалко что в протеусе не получается нормально смоделировать :(

  23. Saneoc говорит:

    Народ , чет я не совсем догнал .
    Что надо в порт выводить значение от 0 до 255 и все , или всеткаи надо както хитро дергать ножками?

    • DI HALT говорит:

      Просто выводишь и все :) Круто да? ;)

      • Saneoc говорит:

        Конечно круто. Я когда первый раз прочитал эту статью ( тогда еще только собирал свою отладочную плату , хотя и щяс нахожусь на уровне «люблю машини но еще путю педали «) думал что отложу повторение этой идейки до тех пор пока по умнею , а как оказалось все очень просто. Какраз сейчас болею, делать нечего , буду пробовать. :)

  24. GoToXY говорит:

    Это я так понимаю, можно добавить сюда транзисторы, и изменять опорное напряжение в широких пределах, ограничиваясь только транзисторами?..)
    Если я прав, может подсказать, как тут стоило бы подключать транзисторы, а то я слишком начинающий в этих делах..)

    • Saneoc говорит:

      Для источника опорного напряжения этот преобразователь имеет слишком маленькую точность .

    • DI HALT говорит:

      Можно, если полученная точность устроит. Только транзисторы это громоздко. Примени лучше что нибудь вроде буффера 74HC244

      • Saneoc говорит:

        А мне кажется что GoToXY имел ввиду поставить транзисторы на выход ( вместо операционника )

        • GoToXY говорит:

          Да нет, я имел в виду использовать не внутренние транзисторы МК, которые большие напряжения не выдерживают, а внешние транзисторы, стоящие еще до сопротивлений…
          А можно немного подробнее объяснить, как 74HC244 включается и какие она напряжения через себя может пропускать?..)

          • DI HALT говорит:

            Вроде до 15 вольт. В зависимости от серии.

          • GoToXY говорит:

            То есть микросхема работает как набор ключей, замыкающих напряжение до 15 вольт от 5 вольт микроконтроллера?…
            А бывает нечто подобное но для напряжения вольт эдак на 30-50?..)

          • DI HALT говорит:

            эмм… тогда да, только ключи.

          • GoToXY говорит:

            Спасибо..)
            Хотя в принципе, это наверное избыточно будет, я думаю, достоточно будет просто операционник запитать напряжением выше и использовать как усилитель, а не как просто буфер..)

  25. dimfair говорит:

    на tuxgraphics.org продаётся кит лабораторного блока питания на AVR, который рулит силовым транзистором через R-2R: http://shop.tuxgraphics.org/electronic/detail_microcontroller_powersupply.html

  26. Blacky говорит:

    А ведь с помощью этой штуки можно, наверное, получить модулированный сигнал. Например, у нас есть два регистра — текущие значения 2х синусоид. Изменятся они будут с разными временными интервалами. Ну и каждый раз мы эти значения перемножаем и выдаем в порт. Это будет АМ. Для угловой модуляции, я так думаю, нужно менять время выдачи в порт значения второго регистра в зависимости от значения первого. Интересно, какую максимальную мастоту можно получить при этом?

    • Blacky говорит:

      Даа. Тут можно поизваращаться. Например «сиськи» промодулировать «рок концертом». В связи с этим у меня назрела мысль: используя некоторые элементарые преобразования (можно это даже назвать ЦОС), каковы шансы реализовать на меге некое подобие музыкального сопроцессора?

  27. majorka65 говорит:

    DI HALT, выходы имеют три состояния. ЦАПнем в троичной системе?

  28. majorka65 говорит:

    Вы расстраиваете меня. Hi-Z http://easyelectronics.ru/avr-uchebnyj-kurs-ustrojstvo-i-rabota-portov-vvoda-vyvoda.html
    Вывод микроконтроллера может подключаться к плюсу питания, минусу и никуда (как бы).
    http://kazus.ru/forums/attachment.php?attachmentid=6787&d=1271246904

  29. majorka65 говорит:

    Посмотрите, пожалуйста.
    Берем операционный усилитель, прямой вход гвоздями на 2,5 Вольта, на инвертирующий кроме обратки вешаем «весовой» резистор, второй конец этого резистора таскаем пином от МК:
    НОЛЬ троичный- физически выводим лог.0(ток через «весовой» резистор= минус I)
    ЕДИНИЦА троичная- физически переводим в Hi-Z (ток через «весовой» резистор= 0)
    ДВА троичная- физически выводим лог.1(ток через «весовой» резистор= плюс I)
    Ток через «весовой» резистор I равен 2,5 Вольта делить на номинал этого резистора.
    Матрица будет R-3R-9R-27R…
    http://kazus.ru/forums/showthread.php?t=14543&page=4

  30. Br.Misha говорит:

    а если прицепить это ЦАП к 9 ногам МК, на выходе поставить ВС547, то можно ли с помощью этого задавать нужное напряжение от 0 до 5 с точностью 0,01В.
    ОУ не могу поставить так как у меня остался только LM358 а он врятле подойдет.

    Спасибо!

  31. ProgrammerForever говорит:

    Я тут посчитал посидел. Оказывается максимальное напряжение не 5 вольт, а 5*(1-2^(-N)), где N — разрядность матрицы.

    Для 3х бит:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    U2	U1	U0	Рассчётное	Действительное
    0	0	0	0	0
    0	0	5	0,714285714	0,625
    0	5	0	1,428571429	1,25
    0	5	5	2,142857143	1,875
    5	0	0	2,857142857	2,5
    5	0	5	3,571428571	3,125
    5	5	0	4,285714286	3,75
    5	5	5	5,000000000	4,375
     
    Погрешность:
     
    бит	погрешность
    3	14,28571429
    4	6,666666667
    5	3,225806452
    6	1,587301587
    7	0,787401575
    8	0,392156863

    Может я конечно накосячил в рассчётах, но должно быть так.

  32. MAlexsis говорит:

    Доброго времени суток, LM324 конечно ничего.. но! Рекомендую AD8601 8602 8604 зверь, не пожалеете, а насчет резестивной матрицы, работает как часы, особенно как на фото с 1% резисторами.

  33. MAlexsis говорит:

    C этим сложнее, в Харькове спокойно в магазине по цене от 14 до 16 грн за шт.(AD8602 и AD8604) , как у Вас не знаю…

  34. lexxx говорит:

    В Спб AD8602DRZ в ИТИС стоит 25.80)

    А не посоветуете ОУ в корпусе DIP8? Просто собираю такой ЦАП на макетке)

  35. sasha2010 говорит:

    Здравствуйте, ребят я извеняюсь, а данной программки смоделированной в протеусе нету случайно? мне просто очень нужно, а я сам не разбираюсь в контроллерах и программировании

  36. rekkk говорит:

    Ребята а как вы делаете таблицы: синусов, пилы, «сисек». Каким то софтом пользуетесь, или по функциям вычисляете значение

  37. nitratus говорит:

    Я тут задумал сделать музыкальную штучку на МК с этим АЦП. ЛМ324 шипит, да и тихий он — в общем, не подходит совсем (хотя я может что-то неправильно сделал…)
    Если использовать ОУ + транзистор, инвертирующий вход на выход транзистора, выход ОУ — на его базу, то мне кажется что шипеть оно не перестанет. И у операционных усилителей недостаток что они используют не весь диапазон напряжения…

    По этому решил ставить звуковой усилитель(хотя я ещё не разобрался хороший у них диапазон напряжения, или нет), выбрал ЛМ386 — он дешёвый, но в нем очень сомневаюсь.

    Может кто-то уже использовал этот ацп для звукоизвлечения? Поделитесь тогда какой усилитель можно поставить.

    ЗЫ мне нужен обязательно дешёвый, по тому что я хочу около 10 устройств сделать

  38. rodonanto говорит:

    эм…
    созрел такой вопрос — сколько тактов уходит на то, чтоб изменить значение на одном из портов контроллера?

    • DI HALT говорит:

      Около двух. Т.е. за один такт ты выведешь значение из регистра в порт. Через такт оно устаканится на выходе. Примерно так. Не считая подготовку самого значения к выводу. Считаем, что он уже в нужном регистре готов.

      • rodonanto говорит:

        тогда получаетсяя что МК должен взять значение из массива, положить его в регитр, потом с регистра в порт, и только потом порт выведет его на лапки?
        итог 8 тактов, или я где-то провтыкал?

        • DI HALT говорит:

          Ну если подробно то даже так:
          выборка адреса из массива 1..2 такта в зависимости от того надо считать адрес или нет
          Выборка из массива в регистр 1 такт
          Выброс из регистра в порт 2-3 такта в зависимости от емкости проводов.
          Переход на начало цикла 1-2 такта. Точно не помню.

          • rodonanto говорит:

            гм…
            а в данной программе сколько тактов уходило?

          • DI HALT говорит:
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            
            Loop:		WDR			; Сброс собаки
            		LDPA	Sinus		; Макрос, загружающий в Z адрес таблицы с синусом
             
            		CLR	OSRG		; Сбрасываем рабочий регистр
            		ADD	ZL,Counter	; Вычисляем смещение по адресу таблицы
            		ADC	ZH,OSRG
            		LPM	OSRG,Z		; Грузим в рабочий регистр из таблицы байт
            		OUT	PORTD,OSRG	; Выдаем его в порт
             
            		INC	Counter		; Увеличиваем счетчик
            		STS	SinCT,Counter	; Сохраняем значение счетчика в память
             
            		RJMP	Loop		; Переход

            Ну вот посчитай. Каждая команда выполяется за такт. LDPA это макрос из двух команд.

  39. kama3er говорит:

    Вот бы то же самое только на С, моему респекту не было бы предела, а то асм для меня пока темный темный дремучий лес

    • DI HALT говорит:

      А в код посмотреть?

      Меняешь DB таблицу на обычный массив-строку. Да перебираешь его в цикле.

      • kama3er говорит:

        Это то я как раз и понял, как рассчитать приращение шага для разных частот??
        У меня такой же прожект, только нифига не получается, до 2000 Гц еще так сяк, а выше полная фигня… не влезаю по приращению, переполнение переменной add_value.. вот собственно кусочек кода (приращения от частоты) посмотреть как люди делают на С..

  40. Aneg говорит:

    Слушай DI, у тебя таблица для синуса всего лишь на 7 бит. Прилагаю настоящую 8-битную таблицу.

  41. Aneg говорит:

    Слушай DI, у тебя таблица для синуса всего лишь на 7 бит. Прилагаю настоящую 8-битную таблицу.

    http://easyelectronics.ru/repository.php?act=view&id=74

Добавить комментарий