Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

analog devices / ADUC824

.PDF
Источник:
Скачиваний:
73
Добавлен:
06.01.2022
Размер:
149.9 Кб
Скачать

Схемотехника № 2 февраль 2001

компоненты: особенности

ADuC824 –

первое знакомство

О микроконвертерах от Analog Devices серии ADuC немало сказано в различных журналах – “Электронике и Компонентах”, “Чип Ньюс”, “Компонетах и Технологиях” и т. д. Однако все сказанное принадлежит менеджерам дистрибьюторов Analog Devices, которые не имеют собственного опыта практического ис4 пользования описываемых микросхем, а лишь оперативно доносят до нас информацию, подготовленную сотрудниками Analog Devices. При этом могут упускаться некоторые тонкие моменты, самостоятельное выявление которых порой требует от разработчика немалых затрат времени. В этой связи, особенно на начальном этапе знакомства с микросхемой, бывает полезным опыт, приобретенный теми, кто уже про4 шел этот путь. Авторы настоящей статьи имели возможность поработать с бета4версией кристалла ADuC824 и делятся первыми впечатлениями.

М

ADuC824

является

вторым

икросхема

п р е д с

т а

в и т

е

лем микроконвертеров, продвигаемых фирмой Analog Devices на мировой рынок. Для тех, кто еще не знаком с идеологией микроконвертера, вкратце

скажем, что это такое.

По мере развития микроконтроллеров, фирмы произво дители все чаще и чаще стали включать в состав их пери ферийных устройств аналого цифровые преобразователи. Вначале их разрядность была 8 бит, затем появились 10 , 12 и даже 14 битные АЦП. Однако они были как бы при датком к контроллеру. Разработчики микросхемы в первую очередь “вылизывали” сам контроллер, а АЦП получался таким, каким получался. В итоге очень часто в процессе работы контроллера его внутренние сигналы оказывали такое воздействие на АЦП, что реальный динамический диапазон последнего оказывался на 1–2, а то и на 3 бита хуже заявленного, что проявлялось в “дрожании” младших разрядов при неизменном входном сигнале и опорном на пряжении.

Analog Devices пошла по иному пути. За основу микро схемы был взят добротный 12 разрядный АЦП, и в каче стве интерфейса к нему был добавлен контроллер се мейства х52. При этом от контроллера не требовалось никаких уникальных характеристик (лишь бы корректно работал), а вся оптимизация микросхемы была направлена на то, чтобы контроллер не портил исходные характеристики АЦП. В итоге Analog Devices получила “честный” 12 разрядный АЦП (речь идет о первом члене семейства, ADuC812) с микроконтроллером в качестве интерфейса. Для того, чтобы подчеркнуть его коренное отличие от выпущенных доселе микроконтроллеров со встроенными АЦП, разработчики назвали его микроконвертером.

Убедившись в востребованности полученного изделия, Analog Devices приступила к созданию микроконвертера, основанного на многоразрядном сигма дельта АЦП. Так возник ADuC824, содержащий 24 разрядный основной и 16 разрядный вспомогательный АЦП (это помимо ЦАПа, источников опорного напряжения, усилителей с переключаемым коэффициентом усиления, сторожевого таймера, часов и календаря реального времени, флэш памяти и ряда других приятных для разработчика осо бенностей, перечисление которых выходит за рамки настоящей статьи). На момент подготовки публикации 824 й кристалл еще не был официально объявлен, и вы при благоприятном стечении обстоятельств могли бы получить лишь его бета версию, содержащую некоторое количество ошибок. Именно такой кристалл и оказался в нашем распоряжении.

Первая проблема, возникшая на пути его использова ния, состояла в том, что его крайне сложно макетировать без соответствующей печатной платы (кристалл выпускается в 52 выводном PQFP, выводы короткие, расстояние между ними менее 1 мм). Кстати, обращаем внимание читателей на то, что шаг между выводами мик росхемы выполнен не по дюймовой, а по миллиметровой сетке. Последнее отражено в datasheet’е, но, как оказалось, разработчики иногда не учитывают это. Далее,

2

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

Авторы настоящих строк пока не располагают паяльным оборудованием требуемого уровня. Поэтому мы вынуж дены были обратиться к тем, кто его имеет – в фирму Argus Limited, дистрибьютора американской фирмы Pace, одного из мировых лидеров в производстве оборудования для монтажа и демонтажа электронных компонентов. Дмитрий Колесов (спасибо ему за это) любезно согласился помочь запаять микросхему на плату, изба вив нас от лишней головной боли и еще раз наглядно про демонстрировав, как удобно работать с хорошей паяльной станцией. Десять минут – и микросхема была смонтиро вана с нужным качеством на нужном месте.

Как следует из описания, микроконвертер может быть запрограммирован по каналу RS 232, без использования какого либо специального программатора. Программа download.exe, программирующая микроконвертер ADuC812, была доступна на сайте Analog Devices еще с 1999 г., однако из описания на нее не следовало, в состоянии ли она программировать ADuC824. Опасение вызывало то, что последний рекомендуется использовать

с32 килогерцовым кварцевым резонатором (внутри чипа происходит умножение частоты на величину, определяемую содержимым регистра PLLCON, и в зависимости от занесенного в него числа контроллер может работать на частоте 12,6; 6,3; 3,15; 1,57 МГц и т.д. вплоть до 99 кГц). При старте тактовая частота 824 го равна 1,57 МГц. Программа download.exe требовала при запуске указывать в качестве параметров не только файл

сзаносимой программой в Intel HEX формате, но и номер порта (COM1 или 2), и частоту кварцевого резонатора. Возникал вопрос – какую частоту указывать – 32 кГц, 1,57 МГц или вообще этот параметр опустить (последнее рекомендуется в том случае, когда частота кварца равна 11059 кГц). Как ни удивительно, корректным оказался именно последний вариант – если в вашем устройстве ADuC824 работает с кварцем 32 кГц, download.exe нужно запускать без параметра f. Видимо, последовательный канал ADuC824 настраивается таким образом, что при тактовой частоте 1,57 МГц он ведет обмен на скорости 9600 бод (это скорость обмена ADuC812 на частоте 11,059 МГц).

Обмен по RS 232 осуществляется при помощи сигналов

суровнями, отличными от ТТЛ. В описании нигде явно не указывалось, что для программирования ADuC824 нужно снабдить преобразователями уровня типа ADM 232, MAX 202 и им подобными. Однако это действительно необхо димо. Схема соединения ADuC824 и ADM 232 приведена на рис. 1.

Режим программирования по последовательному каналу запускается в том случае, когда при включении питания выход PSEN (вывод 41) соединен с общим проводом через резистор 1 кОм. Требуемое замыкание

 

 

 

 

 

 

компоненты:особенности

производится

 

при

помощи

 

 

перемычки S1. Как выяснилось

 

 

(потом мы это, естественно,

 

 

нашли и в описании на микрокон

 

 

вертер), перемычка должна быть

 

 

установлена именно в момент

 

 

включения питания, а не в

 

 

момент сброса – если в процессе

 

 

работы микроконвертера замк

 

 

нуть перемычку S1, а затем на

 

 

жать на кнопку “сброс” (S2),

 

 

режим программирования не ак

 

 

тивируется,

и

download.exe

 

 

проходит некорректно.

 

 

 

В распоряжении авторов име

 

 

лись программы download.exe

 

 

версий 2.05 и 2.07. Первая про

 

 

граммировала микроконвертер

 

 

ADuC824 устойчиво, вторая, хоть

 

 

и более поздняя по времени со

 

 

здания,

по

 

невыясненным

 

 

причинам

 

 

его

не

 

 

программировала.

 

 

 

В качестве первой программы

 

 

использовалась приведенная

 

 

ниже примитивная программка

 

 

proba.asm, которая при функци

 

 

онировании

 

осуществляла

 

 

мигание светодиода на выводе

 

 

Р2.1 (схема включения – на рис.

 

 

1). Последовательность загрузки

 

 

в итоге оказалась следующей.

 

 

При выключенном питании плата

 

 

с микросхемой соединялась ка

 

 

белем

со

 

свободным

 

 

последовательным портом, и ус

Ðèñ. 1

 

танавливалась перемычка S1.

 

Затем на плату подавалось пи

 

 

тание,

и

 

запускалась

 

светодиодом, а работа основного элемента

download.exe с параметрами – именем proba.hex и

микроконвертера – 24 разрядного АЦП. Программа,

номером СОМ порта (см. описание на download.exe, файл

реализующая измерение при помощи этого АЦП,

uC004.pdf). Иногда, если загрузка не получалась (после

завершения download.exe сообщает о том, с каким ре

aduc.asm, приведена ниже. Там же приведена программа

lcd_h.asm, осуществляющая вывод информации на ЖК

зультатом прошла загрузка), операцию приходилось

повторить. После этого от платы с микроконвертером

индикатор МТ10Т7 (подробнее см. Схемотехника, №2,

2000, стр. 16, 17). Измеряемое напряжение

отключалось питание, снималась перемычка S1, снова

формировалось при помощи переменного резистора,

подавалось питание, и микроконвертер начинал выпол

нять занесенную программу (в конкретном случае – мигать

включенного параллельно прецезионному источнику

LM336Z 2.5 (рис. 1). АЦП программировался на работу в

светодиодом на Р2.1).

 

 

 

 

непрерывном режиме в диапазоне

;—————————————————

 

 

1,25 В, с внутренним источником опорного напряжения.

;Proba. asm

 

 

 

 

 

 

 

 

Одна из ошибок бета версии ADuC824 состоит в том, что

;—————————————————

 

 

в регистр SF, задающий частоту измерения, нельзя

org 0

 

 

 

 

 

 

 

 

 

 

заносить числа больше 200 дес., вследствие чего

ajmp START

 

 

 

 

 

 

 

 

невозможно осуществить работу на самой низкой

;

 

 

 

 

 

 

 

 

 

 

скорости, где достигается самая высокая точность. (К

org 100

 

 

 

 

 

 

 

 

 

 

сожалению, мы вначале пытались запустить АЦП с

START:

 

 

 

 

 

 

 

 

 

 

SF=0FFH, и два дня не могли понять, почему чип ничего не

clr P2.1

 

 

 

;pin 29

 

 

 

 

 

измеряет. Файл errata.doc, где описаны эта и другие

;……………………

 

 

 

 

 

 

ошибки, мы удосужились прочесть лишь после того, как

mov R0,#50

 

 

 

 

 

 

 

 

нашли, что АЦП на низких частотах не работает). Мы

lbl:

 

 

 

 

 

 

 

 

 

 

заносили в регистр SF число 128 дес., что задало частоту

mov R1,#255

 

 

 

 

 

 

измерения примерно 10 Гц. При этом мы наблюдали, что

djnz R1,$

 

 

 

 

 

 

 

 

при неизменном положении движка подстроечного

djnz R0,lbl

 

 

 

 

 

 

 

 

резистора даже при измерении относительно малого на

;……………………

 

 

 

 

 

 

пряжения (около 200 мВ) старшие 16 бит результата ос

setb P2.1

 

 

 

 

 

 

 

 

тавались неизменными, а “дрожание” наблюдалось лишь

;……………………

 

 

 

 

 

 

в младших 8 битах.

mov R0,#50

 

 

 

 

 

 

 

 

Внутренний источник опорного напряжения имеет тем

lb2:

 

 

 

 

 

 

 

 

 

 

пературную стабильность порядка 100 ppm/C, что явно

mov R1,#255

 

 

 

 

 

 

недостаточно для 24 х разрядного АЦП.

djnz R1,$

 

 

 

 

 

 

 

 

Даже коррекция с использованием встроенного датчика

djnz R0,lb2

 

 

 

 

 

 

 

 

температуры вряд ли поможет, разумнее использовать хо

;……………………

 

 

 

 

 

 

роший внешний источник.

sjmp START

 

 

 

 

 

 

 

 

То, что уже в первом приближении удалось

end

 

 

 

 

 

 

 

 

 

 

получить точность в 15–16 бит, по нашему мнению,

 

 

 

 

 

 

 

 

 

 

 

 

хороший признак – заявленная фирмой точность 18–19

Основной интерес, конечно, представляет не мигание

бит представляется реально достижимой. Конечно, весь

 

3

Схемотехника № 2 февраль 2001

компоненты: особенности применения

узел потребует тщательной проработки: продуманной разводки проводников, хорошей развязки питания, экранировки входных цепей.

;—————————————————————————— ; aduc.asm ;——————————————————————————

 

; оригинальные SFR ADuC824

;регистр режимов АЦП

 

 

ADCMODE

equ

0D1h

;регистр управления основным АЦП

ADC0CON

equ

0D2h

;регистр цифрового фильтра

 

SF

 

equ

0D4h

;регистры результата преобразования

;основного АЦП

 

 

ADC0H

equ

0DBh

ADC0M

equ

0DAh

ADC0L

equ

0D9h

 

;флаг готовности данных

 

 

RDY0

equ

0DFh

 

;бит разрешения прерывания от АЦП

EADC

equ

0AEh

 

;

 

 

 

 

;порт модуля МТ10Т7

A0

 

equ

P2.5

WR1

 

equ

P2.4

DB3

 

equ

P2.3

DB2

 

equ

P2.2

DB1

 

equ

P2.1

DB0

 

equ

P2.0

;………………………………………

 

;

 

 

 

org

0h

 

 

ajmp

MAIN

 

 

;————————————————————————

;обработка прерывания от АЦП

;(так можно делать, только если запрещены

;следующие прерывания – обработчик длинный !)

org

033h

; вектор прерывания от АЦП

mov

R5,ADC0H

; перегружаем регистры

mov

R4,ADC0M

; результата преобразования

mov

R3,ADC0L

; в R5R4R3

call DISP_HEX ; выводим на дисплей

clr

 

RDY0

; сбрасываем флаг готовности

reti

 

 

 

;————————————————————————

org

0100h

 

 

$lcd_h.asm

; библиотека для модуля МТ10Т7

;

 

 

 

MAIN:

 

 

 

call INIT_LCD ; инициализация дисплея

;

 

 

 

mov

SF,#080h ; см. в тексте статьи !!!

mov

ADC0CON,#00001111b ; int. reference

 

 

 

; input pair AIN1, AIN2

 

 

 

; unipolar coding

 

 

 

; range +/ 2.56V

; т.к. используется внутренний источник опорного

;напряжения, реальный входной диапазон +/ 1.25 В.

mov

ADCMODE,#00100011b ; prim. ADC enable

 

 

 

; continuous conversion

setb

EADC

; разрешаем прерывание от АЦП

setb

EA

 

;

 

 

 

loop:

 

; холостой цикл,

jmploop

; ждем прерывание

end ;——————————————————————————

Далее приведен полный текст подпрограмм, ис пользованных для работы с ЖК модулем МТ10Т7. На дисплей выводится содержимое регистров R5R4R3, 6 ше стнадцатиричных цифр.

;—————————————————————————— ; lcd_h.asm ;——————————————————————————

;

MACRO %STROB_WR1

setb WR1

clr WR1 ENDMAC

;

MACRO %STROB_ADDR clr A0

setb WR1 clr WR1 setb A0

ENDMAC ;————————————————————————

;подпрограмма вывода

;содержимого аккумулятора

 

SET_BUS:

 

; на шину DB

 

clr C

 

 

 

rrc A

 

; загружаем в порт

mov DB0,C

 

; младшую тетраду

rrc A

 

 

 

mov DB1,C

 

 

 

rrc A

 

 

 

mov DB2,C

 

 

 

rrc A

 

 

 

mov DB3,C

 

 

 

ret

 

 

 

;————————————————————————

INIT_LCD:

 

 

 

mov A,#0Fh

 

 

 

call SET_BUS

 

; устанавливаем адрес 0Fh

%STROB_ADDR

 

 

mov A,#01h

 

 

 

call SET_BUS

 

; устанавливаем данные

01h

 

 

 

%STROB_WR1

 

 

;

 

 

 

mov A,#0

 

; cброс всех знакомест

call SET_BUS

 

; устанавливаем на шине 0

%STROB_ADDR

; генерируем строб записи адреса

mov R0,#0

 

; на шине уже установлен 0,

lbl_int:

; инкремент адреса производится

%STROB_WR1

; автоматически,

inc R0

 

; так что просто 20 раз

cjne R0,#20,lbl_int

; выдаем строб

данных

ret

 

 

 

;——————————————————————

CODE_7:

 

; таблица семисегментных

кодов

 

 

 

; цифр

 

 

 

DB 0EEh, 060h, 02Fh, 06Dh, 0E1h

;

0,1,2,3,4

 

 

 

DB 0CDh, 0CFh, 068h, 0EFh, 0Edh

;

5,6,7,8,9

 

 

 

DB 0EBh, 0C7h, 08Eh, 067h, 08Fh, 08Bh

; A,b,C,d,E,F

;——————————————————————

CODER:

 

; подпрограмма кодировки

;в семисегментный формат

 

mov DPTR,#CODE_7

 

 

mov A,@R0

; адрес кодируемой цифры в R0

movc A,@A+DPTR

 

 

mov @R0,A

; замещаем исходную цифру кодом

ret

 

 

 

;————————————————————————

PREP_HEX:

 

; подрограмма подготовки числа

mov 020h,#0

 

; для индикации

 

mov 021h,#0

 

 

 

mov 022h,#0

 

 

 

mov 023h,#0

 

 

 

mov 024h,#0

 

 

 

mov 025h,#0

 

 

 

;

 

 

 

mov A,R5

 

; младшую тетраду R5 помещаем

mov R0,#021h

; в ОЗУ по адресу 21h

xchd A,@R0

 

 

 

swap A

 

 

 

mov R0,#020h

 

 

xchd A,@R0

 

; старшую тетраду в 20h

;

 

 

 

mov A,R4

 

; аналогично для R4

mov R0,#023h

 

 

4

компоненты: особенности применения

 

xchd A,@R0

 

 

 

 

 

 

swap A

 

 

 

mov R0,#022h

 

 

 

xchd A,@R0

 

 

 

;

 

 

 

mov A,R3

; аналогично для R3

 

mov R0,#025h

 

 

 

xchd A,@R0

 

 

 

swap A

 

 

 

mov R0,#024h

 

 

 

xchd A,@R0

 

 

 

;

 

 

 

mov R0,#020h

; заменяем двоично десятичный код

 

call CODER

; на семисегментный

 

mov R0,#021h

 

 

 

call CODER

 

 

 

mov R0,#022h

 

 

 

call CODER

 

 

 

mov R0,#023h

 

 

 

call CODER

 

 

 

mov R0,#024h

 

 

 

call CODER

 

 

 

mov R0,#025h

 

 

 

call CODER

 

 

 

ret

 

 

 

;——————————————————————————

 

 

 

; подпрограмма вывода со

 

держимого

 

 

 

OUT_A:

 

; аккумулятора на шину DB

 

clr C

 

 

 

rrc A

 

; загружаем в порт

 

mov DB0,C

 

; младшую тетраду

 

rrc A

 

 

 

mov DB1,C

 

 

 

rrc A

 

 

 

mov DB2,C

 

 

 

rrc A

 

 

 

mov DB3,C

 

 

 

%STROB_WR1

; генерируем первый

 

 

; строб WR1

 

rrc A

 

; загружаем в порт

 

mov DB0,C

 

; старшую тетраду

 

rrc A

 

 

 

mov DB1,C

 

 

 

rrc A

 

 

 

mov DB2,C

 

 

 

rrc A

 

 

 

mov DB3,C

 

 

 

%STROB_WR1

;

генерируем второй

 

 

;

строб WR1

 

ret

 

 

 

;——————————————————————————

 

DISP_HEX:

; вывод 6 разрядного hex

 

 

; числа в модуль МТ10Т7

 

call PREP_HEX

; подготовка числа для индикации

;

 

 

 

mov A,#4

 

 

 

call SET_BUS

; определяем знакоместо

 

%STROB_ADDR

; 1 ой цифры

;

 

 

 

mov R0,#020h

 

; последовательно выводим

 

lbl_dis:

; в порт 6 цифр, лежащих в

mov A,@R0 ; ОЗУ по адресам 20h 25h call OUT_A

inc R0

cjne R0,#026h,lbl_dis ret

;——————————————————————————

Потребление микроконвертера в активном режиме (с ЖК модулем) составило 5 мА, что также неплохо согласуется с характеристиками, заявленными производителем.

Авторы выражают надежду, что приведенная в статье информация поможет пользователям ADuC824 в их первых экспериментах.

Владимир Уголев, ugolev@vniiofi.ru

Александр Фрунзе,

alex_fru@mtu net.ru

5

Соседние файлы в папке analog devices