Занимательная микроэлектроника

Ревич Юрий

ПРИЛОЖЕНИЯ

 

 

Приложение 1

Принятые условные обозначения

Физические величины и их единицы измерения по умолчанию

I — ток, ампер (А);

U — напряжение, вольт (В, V);

R — электрическое сопротивление, ом (Ом, Ohm);

Е — энергия, джоуль (Дж);

Р — электрическая мощность, ватт (Вт, W);

W — тепловая мощность, ватт (Вт, W);

С — электрическая емкость, микрофарад (мкФ, μF);

Q — заряд, кулон (Кл);

t — время, секунда (с);

T,0 — температура, градус Цельсия (°С);

L — длина, метр (м);

S — площадь (м2);

ρ — удельное сопротивление (ом∙м/мм2).

Примечание

Все наименования единиц измерения, которые названы по фамилиям ученых, в сокращении пишутся с большой буквы (вольт — В , ом — Ом , ватт — Вт , ампер — А ), а все остальные — с маленькой (секунда — с , метр — м ).

Приставки и множители для образования десятичных кратных и дольных единиц

В табл. П. 1.1 приведены приставки и множители для образования десятичных кратных и дольных единиц.

Некоторые буквенные обозначения в электрических схемах

R — резистор;

С — конденсатор;

VT — транзистор;

VD — диод;

Н — цифровой индикатор;

К — тумблер, кнопка;

Р — реле;

DA — аналоговая микросхема;

DD — цифровая микросхема;

D — микросхема, содержащая аналоговые и цифровые узлы;

Q — кварцевый резонатор;

L — лампа (газоразрядная или накаливания).

Некоторые символические обозначения в электрических схемах

В табл. П1.2 приведены символические обозначения в электрических схемах.

Символические обозначения мощности резисторов на схемах

В табл. П1.3 приведены символические обозначения мощности резисторов на схемах.

 

Приложение 2

Стандартные обозначения и размеры некоторых гальванических элементов

В табл. П2.1 приведены стандартные разновидности бытовых одноразовых электрохимических элементов питания. Элементы одного типоразмера взаимозаменяемы (а также заменяются на аналогичные типоразмеры аккумуляторов), однако могут различаться по энергоемкости. Щелочные (с буквой «L» или надписью «alcaline») элементы приблизительно в три раза превышают по емкости «обычные». Кроме указанных в таблице «пальчиковых» элементов, широко распространены «таблетки» — серебряно-цинковые или угольные малогабаритные элементы с напряжением питания обычно около 3 В, предназначенные для питания маломощных устройств.

* Буква L означает щелочной элемент.

** Для щелочных элементов.

 

Приложение 3

Справочные данные некоторых компонентов

Далее приведены справочные данные некоторых компонентов, которые мы использовали в схемах, размещенных в этой книге. Разумеется, поместить данные всех упомянутых в тексте компонентов, и к тому же в полном объеме невозможно, поэтому были выбраны лишь самые характерные и часто упоминающиеся полупроводниковые приборы, таким образом, что они в совокупности образуют некий базовый набор, достаточный, чтобы повторить примерно 9 из 10 радиолюбительских конструкций. Данные о некоторых типах приводятся также при описании соответствующей конструкции в тексте глав. Сведения далее «профильтрованы» на предмет реальной информативности: к примеру, нет никакой необходимости размещать информацию о прямом падении напряжения на кремниевых диодах, т. к. оно одно и то же для всех без исключения типов, в то же время такие, к примеру, параметры, как емкость коллекторного перехода или граничное напряжение транзисторов просто бесполезны для радиолюбителя и потому также не приводятся.

Такие характеристики, как предельно допустимая мощность рассеяния для транзисторов малой (но не средней и не большой!) мощности, также на практике требуются очень редко (можете спокойно принимать ее равной примерно 0,2–0,7 Вт, в зависимости от корпуса). Не привожу я и данные логических микросхем, т. к. их характеристики в целом одинаковы и описаны в главе 8, а разводка выводов приведена на ряде схем и в тексте. Исключение сделано только для сводной таблицы (табл. П3.1) соответствия отечественных и импортных КМОП-микросхем (базовой серии), потому что эту информацию разыскать не всегда просто.

Источники, откуда взяты приведенные данные, слишком многочисленны (это и официальные справочники, и справочные данные, размещенные в литературе и в Интернете, и информация из каталогов торгующих организаций, и фирменная документация, как в виде бумажных каталогов, так и в формате PDF), чтобы их перечислить, — вы не поверите, сколько бумажной «макулатуры» пришлось «перелопатить» и сколько интернет-часов потратить с целью найти, систематизировать и привести к более-менее единому «знаменателю» данные даже о таком небольшом количестве компонентов. Отечественные производители (и некоторые зарубежные тоже) просто «сговорились» в своем стремлении скрыть от пользователя как можно больше критически важных параметров. Часто для компонентов, аналогичных по назначению, но от разных производителей, приводится разный набор параметров, из-за чего сравнение приборов становится довольно нетривиальной задачей. Этот недостаток я по мере возможности также постарался устранить.

Заметки на полях

Яркий пример такой ситуации, к нашему изложению, правда, отношения не имеющий: характеристики чувствительности светочувствительных матриц для цифровых фотоаппаратов приводятся в единицах ISO, как для фотопленок, а для цифровых видеокамер — в единицах освещенности, хотя матрицы часто одни и те же! В нашем же случае можно привести пример статического коэффициента передачи тока для транзисторов, который у одних приборов приводится для режима, близкого к насыщению, у других — для активного режима, есть и третьи, не очень понятные случаи, поэтому я величину U к , при которой производились измерения β , просто опускаю, т. к. это только запутывает неискушенного пользователя, не давая никакой реальной информации, т. к. справочное значение коэффициента все равно есть величина ориентировочная.

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

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

Соответствие наименований зарубежных и отечественных микросхем КМОП

Примечание

CD4xxxx — наименование серии 4000, принятое в фирме Fairchild Semiconductor, МС14хххх — в фирме Motorola. У других фирм могут быть свои префиксы, например, НСС или HCF — у фирмы ST Microelectronics. Сами обозначения микросхем остаются одинаковыми независимо от производителя.

Диоды

• КД521

Кремниевые диоды.

Производитель: неизвестен (СНГ).

Назначение: предназначены для применения в импульсных устройствах.

Выпускаются в стеклянном корпусе с гибкими выводами. Тип и полярность диодов обозначается одной широкой и двумя узкими цветными полосками на корпусе со стороны положительного (анодного) вывода: КД521А — полосы синие; КД521Б — серые; КД521В — желтые; КД521Г — белые; КД521Д — зеленые. В табл. П3.2 приведены предельные значения обратного напряжения.

Постоянный или средний прямой ток при Т = -60…+50 °C, не более… 50 мА.

Перегрузка по прямому току не более 5 мин при Т = -60…+50 °C… 200 мА.

Постоянный обратный ток при U обр = U мax :

при Т = -60 и +25 °C… 1 мкА;

при Т = +125 °C… 100 мкА.

• 1 Nxxxx

Кремниевые диоды.

Производитель: Fairchild Semiconductor (США) и др.

Назначение: выпрямление переменного тока.

В табл. ПЗ.З приведены предельные значения токов и напряжений.

Примечание 1. Частота выпрямления до 1 МГц.

Примечание 2. Для диодов 1N54xx максимальная рассеиваемая мощность 6,25 Вт, макс. импульсный ток (одиночная синусоидальная полуволна 8,3 мс) -200 А.

• КД 202

Кремниевые диоды.

Производитель: неизвестен (СНГ).

Назначение: выпрямление переменного тока.

В табл. П3.4 приведены предельные значения обратного напряжения.

Постоянное обратное напряжение… 0,7 U обр. макс .

Постоянный (средний) прямой ток при Т = -60 до +75 °C… 5 А.

Макс. импульсный ток (одиночная синусоидальная полуволна 10 мс)… 30 А. Частота выпрямления до 1,2 кГц.

• КЦ 407А

Кремниевый выпрямительный мост.

Производитель: неизвестен (СНГ).

Назначение: выпрямление переменного тока.

Максимальное обратное напряжение… 400 В.

Средний выпрямленный ток при Т = -60…+55 °C, не более… 500 мА. Частота выпрямления до 20 кГц.

• КУ202Н

Кремниевый тиристор.

Производитель: неизвестен (СНГ).

Назначение: ключи средней мощности.

Напряжение в открытом состоянии… 1,5 В.

Импульсное отпирающее напряжение на управляющем электроде при t отп > 10 мс… 7 В.

Импульсный отпирающий ток управляющего электрода при t отп  > 10 мс, не более… 200 мА.

Постоянное прямое напряжение в закрытом состоянии, не более… 400 В.

Постоянный ток в открытом состоянии при Т < 50 °C, не более… 10 А.

Транзисторы

• КТ315, КТ361

Транзисторы кремниевые малой мощности высокочастотные.

Производитель: «Кремний» (г. Брянск, Россия), НИИПП (г. Томск, Россия). Структура: n-р-n (КТ315), р-n-р (КТ361).

Тип прибора указывается на корпусе в виде буквы номинала: для КТ315 буква слева, для КТ361 увеличенная и посередине корпуса.

Назначение: усилители НЧ и ВЧ.

Тип корпуса: КТ-13.

Статический коэффициент передачи тока ( I к = 1 мА):

КТ315А, КТ315В… 30—120;

КТ315Б, КТ315Г, КТ315Е, КТ361Б, КТ361Г, КТ361Е… 50—350;,

КТ315Д, КТ361А, КТ361Д… 20–90;

КТ315Ж… 30—250;

КТ315И… >30;

КТ361В… 40—160.

Макс. постоянное напряжение коллектор-эмиттер, В :

КТ315А, КТ361А… 25;

КТ315Б, КТ315Ж, КТ361Б… 20;

КТ315В, КТ315Д, КТ361В, КТ361Д… 40;

КТ315Г, КТ315Е, КТ361Г, КТ361Е… 35;

КТ315И… 60.

Максимальный постоянный ток коллектора, мА :

КТ315А, КТ315Б, КТ315В, КТ315Г, КТ315Д, КТ315Е… 100;

КТ361 (все буквы), КТ315Ж, КТ315И… 50.

Граничная частота… 250 МГц.

• КТ3102, КТ3107

Транзисторы кремниевые малой мощности высокочастотные.

Производитель: АО «Светлана» (г. Санкт-Петербург, Россия), АО «Кремний» (г. Брянск, Россия), Нальчикский завод полупроводниковых приборов (г. Нальчик, Россия).

Структура: n-p-n (КТ3102), p-n-p (КТ3107).

Тип прибора указывается на корпусе или непосредственно, или на торце корпуса наносится метка: КТ3102А — темно-красная, КТ3102Б — желтая, КТ3102В — темно-зеленая, КТ3102Г — голубая, КТ3102Д — синяя, КТ3102Е — белая, КТ3102Ж — две темно-красные, КТ3102И — две желтые, КТ3102К — две темно-зеленые, КТ3107А — голубая и розовая, КТ3107Б — голубая и желтая; КТ3107В — голубая и синяя; КТ3107Г — голубая и бежевая; КТ3107Д — голубая и оранжевая; КТ3107Е — голубая и цвета электрик; КТ3107Ж — голубая и салатовая; КТ3107И — голубая и зеленая; КТ3107К — голубая и красная; KT3107JT — голубая и серая. Другой способ маркировки состоит в том, что тип транзистора указывается условным значком-треугольником (см. рисунок корпуса). Иногда вместо этих значков ставится просто цифра (2 или 7). Кроме этого, на маркировочной поверхности ставится буква, соответствующая группе (А, Б, В и т. п.) и иногда еще дополнительно два значка, условно означающие год и месяц выпуска (например, М 6 означает июнь 2000).

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

Тип корпуса: КТ-26 (ТО-92).

Статический коэффициент передачи тока при ( I э = 2 мА; Т = +25 °C):

КТ3102А, КТ3102Ж… 100–250;

КТ3102Б, КТ3102В, КТ3102Г, КТ3102И, КТ3102К… 200–500;

КТ3102Г, КТ3102Е… 400—1000;

КТ3107А, КТ3107В… 70—140;

КТ3107Б, КТ3107Г, КТ3107Е… 120–220;

КТ3107Д, КТ3107Ж, КТ3107И… 180–460;

КТ3107К, КТ3107Л… 380–800.

Макс. постоянное напряжение коллектор-эмиттер, В:

КТ3102А, КТ3102Б, КТ3102Ж, КТ3102И… 50;

КТ3102В, КТ3102Д, КТ3102К… 30;

КТ3102Г, КТ3102Е, КТ3107Е, КТ3107Ж, КТ3107Л… 20;

КТ3107А, КТ3107Б, КТ3107И… 45;

КТ3107В, КТ3107Г, КТ3107Д, КТ3107К… 25.

Максимальный постоянный ток коллектора, мА… 100.

Граничная частота… 200 МГц (КТ3102А-Е… 150 МГц).

• КТ814, КТ815, КТ816, КТ817

Транзисторы кремниевые средней мощности низкочастотные.

Производитель: АО «Кремний» (г. Брянск, Россия), «Искра» (г. Ульяновск, Россия).

Структура: n-p-n (КТ815, КТ817), p-n-p (КТ814, КТ816).

Тип прибора указывается на корпусе.

Назначение: усилители низкой частоты, импульсные устройства.

Тип корпуса: КТ-27 (ТО-126).

Статический коэффициент передачи тока при ( I э = 1 А; Т = +25 °C):

КТ814А-В, КТ815А-В… 40;

КТ814Г, КТ815Г… 30;

КТ816А-Г, КТ817А-Г… 25.

Макс. постоянное напряжение коллектор-эмиттер, В :

КТ814А, КТ816А, КТ817А… 25;

КТ814Б, КТ815А…40;

КТ816Б, КТ817Б… 45;

КТ815Б… 50;

КТ814В, КТ816В, КТ817В… 60;

КТ815В… 70;

КТ814Г, КТ816Г, КТ817Г… 80;

КТ815Г… 100.

Максимальный постоянный ток коллектора, А :

КТ814, КТ815… 1,5;

КТ816, КТ817… 3.

Постоянная рассеиваемая мощность коллектора, Вт :

Без теплоотвода КТ814 — КТ817… 1;

С теплоотводом КТ814, КТ815… 10;

С теплоотводом КТ816, КТ817… 25.

Граничная частота… 3 МГц.

• КТ972, КТ973

Чертеж корпуса и разводку выводов см. КТ814—КТ817.

Транзисторы кремниевые средней мощности высокочастотные структуры Дарлингтона.

Производитель: «Транзистор» (г. Минск, Белоруссия).

Структура: n-p-n (КТ972), p-n-p (КТ973).

Тип прибора указывается на корпусе (зависит от производителя). Назначение: управление импульсными устройствами.

Тип корпуса: КТ-27 (ТО-126).

Статический коэффициент передачи тока при ( I э = 1 А; Т = +25 °C):

КТ972А.Б, КТ973А,Б… 750.

Макс. постоянное напряжение коллектор-эмиттер, В :

КТ972А, КТ973А… 60;

КТ972Б, КТ973Б… 45.

Максимальный постоянный ток коллектора… 4 А.

Постоянная рассеиваемая мощность коллектора (с теплоотводом)… 8 Вт.

Напряжение насыщения коллектор-эмиттер… 1,5 В.

Напряжение насыщения база-эмиттер… 2,5 В.

Граничная частота… 100 МГц.

• КТ818, КТ819

Транзисторы кремниевые большой мощности низкочастотные. Производитель: АО «Кремний» (г. Брянск, Россия).

Структура: n-р-n (КТ819), р-n-р (КТ818).

Тип прибора указывается на корпусе.

Назначение: усилители НЧ и переключающие устройства.

Приложение 3. Справочные данные некоторых компонентов

511

Тип корпуса: КТ-28 (ТО-220). Есть модификации в металлическом корпусе типа ТО-3, а также ТО-218 с шагом выводов 5,5 мм.

Минимальный статический коэффициент передачи тока при ( I э = 5 А: T =+25 °C):

КТ818А, КТ818В, КТ819А, КТ819В… 15;

КТ818Б, КТ819Б… 20;

КТ818Г, КТ819Г… 12.

Макс. постоянное напряжение коллектор-эмиттер, В :

КТ818А, КТ819А…40;

КТ818Б, КТ819Б… 50;

КТ818В, КТ819В… 70;

КТ818Г… 90;

КТ819Г… 100.

Максимальный постоянный ток коллектора… 10 А.

Постоянная рассеиваемая мощность коллектора (с теплоотводом)… 60 Вт.

Граничная частота… 3 МГц.

• КТ829

Чертеж корпуса и разводку выводов см. КТ818, КТ819.

Транзистор кремниевый большой мощности низкочастотный структуры Дарлингтона.

Производитель: АО «Элиз» (г. Фрязино, Россия).

Структура: n-р-n.

Тип прибора указывается на корпусе.

Назначение: усилители НЧ и переключающие устройства.

Тип корпуса: КТ-28 (ТО-220).

Статический коэффициент передачи тока при ( I э = 3 А; Т = +25 °C)… 750.

Макс. постоянное напряжение коллектор-эмиттер, В :

КТ829А… 100;

КТ829Б… 80;

КТ829В… 60;

КТ829Г… 45.

Максимальный постоянный ток коллектора… 8 А.

Постоянная рассеиваемая мощность коллектора (с теплоотводом)… 60 Вт.

Напряжение насыщения коллектор-эмиттер… 2 В.

Напряжение насыщения база-эмиттер… 2,5 В.

Граничная частота… 10 МГц.

• BDW93, BDW94

Транзисторы кремниевые большой мощности низкочастотные структуры Дарлингтона.

Производитель: Fairchild Semiconductor (США), ST Microelectronics (Европа).

Структура: n-p-n (BDW93), p-n-p (BDW94).

Тип прибора указывается на корпусе.

Тип корпуса: ТО-220.

Минимальный статический коэффициент передачи тока:

при I к = 3 А… 1000.

при I к = 10 А… 100.

Максимальный статический коэффициент передачи тока… 20 000.

Макс. постоянное напряжение коллектор-эмиттер, В :

BDW93, BDW94… 45;

BDW93A, BDW94A…60;

BDW93B, BDW94B… 80;

BDW93C, BDW94C… 100.

Максимальный постоянный ток коллектора… 12 А.

Постоянная рассеиваемая мощность коллектора (с теплоотводом):

при Т = +25 °C… 60 Вт;

при T = +100 °C… 35 Вт.

Напряжение насыщения коллектор-эмиттер (макс.)… 3 В.

Напряжение насыщения база-эмиттер (макс.)… 4 В.

Граничная частота [19] … 1 МГц.

• КП303

Транзистор кремниевый полевой малой мощности с затвором на основе pn-перехода и каналом n-типа.

Производитель: АООТ «Элекс» (г. Александров, Россия).

Тип прибора указывается на корпусе.

Назначение: общего назначения.

Тип корпуса: КТ-1-12 (ТО-17).

Начальный ток стока (при U зи = 0), мА :

КП303А, КП303Б… 0,5–2,5;

КП303В, КП303И… 1,5–5;

КП303Г… 3-12;

КП303Д… 3–9;

КП303Е… 5-20;

КПЗОЗЖ… 0,3–3.

Напряжение отсечки (при I с = 10 мкА), В :

КП303А, КП303Б… 0,5–3;

КП303В… 1–4;

КП303Г, КП303Д, КП303Е… < 8;

КП303Ж… 0,3–3;

КП303И… 0,5–2.

Максимальное напряжение сток-исток, В … 25.

Максимальное напряжение затвор-сток, В … 30.

Максимальный постоянный ток стока… 20 мА.

Электронные реле и оптроны

• АОД130

Диодный оптрон.

Производитель: з-д «Протон» (Россия). Тип прибора указывается на корпусе.

Тип корпуса: модифицированный DIP-8.

Постоянное прямое входное напряжение, В … 1,5. Максимальный входной ток, мА… 20.

Максимальный импульсный входной ток, мА …100.

Максимальное входное обратное напряжение, В … 3,5.

Максимальное выходное обратное напряжение, В … 30.

Коэффициент передачи тока, %… 1.

Максимальное напряжение изоляции, В … 1500.

• АОР124Б

Резисторный оптрон со светодиодом на входе. Производитель: неизвестен (Россия).

Тип прибора указывается на корпусе.

Тип корпуса: советский вариант ТО-39.

Постоянное прямое входное напряжение, В … 3,8.

Максимальный входной ток, мА … 15.

Максимальный импульсный входной ток, мА … 100.

Максимальное входное обратное напряжение, В … 6.

Максимальный выходной ток, мА … 9.

Максимальное напряжение изоляции, В … 1000.

• КР293КП1 (5П14)

Электронное реле малой мощности.

Производитель: з-д «Протон» (Россия).

Тип прибора указывается на корпусе.

Тип корпуса: DIP-6.

Постоянное прямое входное напряжение, В … 1,5.

Максимальный входной ток, мА … 25.

Минимальный входной ток, мА … 5.

Максимальный импульсный входной ток, мА … 150.

Максимальное коммутируемое напряжение, В :

КР293КП1А… 60;

КР293КП1Б… 230;

КР293КП1И… 400.

Максимальный коммутируемый ток, мА :

КР293КП1А… 250;

КР293КП1Б… 100;

КР293КП1И… 80.

Максимальное напряжение изоляции, В… 1500.

• PF240D25

Электронное реле большой мощности.

Производитель: CRYDOM (San Diego, США).

Тип прибора указывается на корпусе.

Управляющее входное напряжение, В … 3—15.

Входной ток при упр. напряж. 5 В, мА … 15.

Максимальное коммутируемое напряжение, В … 12—280 (действ, значение).

Коммутируемый ток, А … 0,06–25.

Перегрузка по току (1 полупериод 50–60 Гц), А … 250.

Примечание. При коммутируемых токах более 10 А требуется принудительной обдув корпуса.

Микросхемы

• 1019ЕМ1

Термодатчик с линейной зависимостью выходного напряжения от температуры.

Производитель: АООТ «Фотон» (г. Ташкент, Узбекистан).

Тип прибора указывается на корпусе.

Тип корпуса: ТО-18.

Ток питания, мА … 0,5… 1,5.

Выходное напряжение, мВ при токе питания 1 мА и температуре:

298 К (25 °C)… 2952–3012;

398 К (125 °C)… 3932…4032;

263 К (-10 °C)… 2582–2682 для К1019ЕМ1А;

228 К (-45 °C)… 2232…2332 для К1019ЕМ1.

Рабочий температурный интервал, ° С :

К1019ЕМ1… от-45 до +125;

К1019ЕМ1А… от-10 до+125.

• 7805, 7809, 7812, 7815, 7905, 7909, 7912, 7915

Стабилизаторы постоянного тока большой мощности.

Производитель: National Semiconductor (США), Fairchild Semiconductor (США), ST Microelectronics (Европа).

Отечественные аналоги:

КР142ЕН5А (7805), КР142ЕН8А (7809), КР142ЕН8Б (7812), КР142ЕН8В (7815), КР1162ЕН5 (7905), КР1162ЕН9 (7909), КР1162ЕН12 (7912), КР1162ЕН15 (7915).

Тип прибора указывается на корпусе.

Тип корпуса: ТО-220.

Выходное напряжение, В :

7805… +5 ±0,2;

7809… +9 ±0,36;

7812… +12±0,5;

7815… +15 ±0,6;

7905… -5 ±0,2;

7909… -9 + 0,36;

7912… -12 ±0,5;

7915…-15 ±0,6.

Максимальный постоянный выходной ток (внутреннее ограничение), А :

7805, 7905… 2,1;

7809,7909… 1,8;

7812,7912… 1,5;

7815,7915… 1,2.

Максимальное входное напряжение, В … 35 (для 78хх), — 35 (для 79хх).

Максимальная рассеиваемая мощность, Вт (Т = 0…+75 °C):

без теплоотвода… 3; с теплоотводом… 20.

• 78L05, 78L09, 78L12, 78L15, 79L05, 79L09, 79L12, 79L15

Стабилизаторы постоянного тока малой мощности.

Производитель: National Semiconductor (США), Fairchild Semiconductor (США), ST Microelectronics (Европа).

Отечественные аналоги:

КР1157ЕН5 (78L05), КР1157ЕН9 (78L09), КР1157ЕН12 (78L12), КР1157ЕН15 (78L15), КР1168ЕН5 (79L05), КР1168ЕН9 (79L09), КР1168ЕН12 (79L12), КР1168ЕН15 (79L15).

Тип прибора указывается на корпусе.

Тип корпуса: ТО-92.

Выходное напряжение, В :

78L05… +5 ±0,2;

78L09… +9 ±0,36;

78L12… +12±0,5;

78L15… +15 ±0,6;

79L05…-5 ±0,2;

79L09…-9 ±0,36;

79L12…-12 ±0,5;

79L15… -15 ±0,6.

Максимальный постоянный выходной ток, мА … 100.

Максимальное входное напряжение, В … 35 (для 78хх), — 35 (для 79хх).

Максимальная рассеиваемая мощность, Вт :

при Т= 0 °C… 1 Вт; при Т = +75 °C… 0,5 Вт.

• LM311 (521САЗ, 554CA3)

Быстродействующий компаратор.

Производитель: National Semiconductor (США).

Тип прибора указывается на корпусе.

Тип корпуса: DIP-8, ТО-99 (металлический круглый), DIP-14.

Максимальное напряжение питания, В … ±18 или +36.

Максимальное выходное напряжение (коллектор-отриц. напр, пит.), В … 50.

Максимальный выходной ток, мА … 50.

Входной ток смещения, нА … <10.

Входное напряжение сдвига при сопротивлении источника <10 кОм, мВ … <2.

• μА741 (140УД7)

Операционный усилитель общего назначения.

Производитель: Philips Semiconductors (Европа), ST Microelectronics (Европа) и др.

Тип прибора указывается на корпусе.

Тип корпуса: DIP-8.

Максимальный ток потребления ( R н = #b.jpg , U пит = ±15 В), мА… 2,8.

Напряжение питания, В … от ±5 до ±18.

Максимальное входное напряжение, В … ±15.

Максимальное выходное напряжение ( U пит  = ±15 В), В :

R н = 10 кОм… ±14;

R н = 2 кОм… ±13.

Выходное сопротивление, Ом … 75.

Коэффициент усиления… 50 000–200 000.

Входной ток смещения, нА … 80—500.

Разность входных токов смещения, нА … 20—200.

Входное напряжение сдвига при сопротивлении источника <10 кОм, мВ … 2.

Температурный дрейф напряжения сдвига (ТКЕ), мкВ/°С … 10.

Частота единичного усиления, МГц … 1.

Скорость нарастания, В/мкс … 0,5.

• μА747 (140УД20)

Два операционных усилителя типа μА741 в одном корпусе.

Производитель: Texas Instruments (США) и др.

Тип прибора указывается на корпусе.

Тип корпуса: DIP-14.

Максимальный ток потребления ( R н = #b.jpg , U пит = ±15 В), мА … 5,5.

Остальные характеристики — см. μА741.

• МАХ478

Два прецизионных операционных усилителя в одном корпусе.

Производитель: MAXIM/DALLAS (США).

Тип прибора указывается на корпусе.

Тип корпуса: DIP-8 (SO-8).

Максимальный ток потребления ( R н = #b.jpg , U пит = ±15 В), мкА … 50.

Напряжение питания, В … от ±2,2 до ± 18.

Максимальное входное напряжение, В… ± U пит .

Максимальное выходное напряжение ( U пит = ±15 В, R, = 2 кОм), В ±12,7.

Коэффициент усиления… 300 000—1200 000.

Входной ток смещения, нА … 5.

Разность входных токов смещения, нА … 0,25.

Входное напряжение сдвига при сопротивлении источника <10 кОм, мкВ … 100.

Температурный дрейф напряжения сдвига (ТКЕ), мкВ/°С … 0,9.

Частота единичного усиления, кГц … 60.

Скорость нарастания, В/мкс … 0,02.

• TDA3020

Усилитель мощности звуковой частоты.

Производитель: ST Microelectronics (Европа).

Тип прибора указывается на корпусе.

Тип корпуса: пятивыводной ТО-220.

Напряжение питания, В … от ±6 до ±18.

Максимальный выходной ток, А … 3,5.

Максимальная рассеиваемая мощность, Вт … 20.

Входной ток смещения, мкА … 2.

Входное напряжение сдвига, мВ … 20.

Ширина полосы пропускания по уровню 3 дБ, Гц … 10—140 000.

• AT90S2313, AT90S8515, AT90S8535

Микроконтроллеры AVR. Микросхемы с буквой «L» в наименовании обладают пониженным энергопотреблением. Как вы знаете из главы 12, в настоящее время указанные типы микроконтроллеров AVR «Classic» заменяются на более развитые версии, в названиях которых присутствуют приставки «Mega» или «Типу» (например, ATmega8515), но электрические характеристики у них одни и те же, за исключением быстродействия (до 16 МГц, а в случае ATtuny2313 до 20 МГц) и в некоторых случаях расширенного диапазона питания (до 1,8 В).

Производитель: Atmel (США).

Тип прибора указывается на корпусе.

Тип корпуса: DIP-20 (AT90S2313), DIP-40 (AT90S8515, AT90S8535) и др.

Основные электрические параметры

Напряжение питания, В … 2,7–6,0.

Входное напряжение лог. 0, не более, В … 0,2 U пит .

Входное напряжение лог. 1, не менее, В… 0,6 U пит .

Входное напряжение лог. 1 выводов XTAL, не менее, В… 0,8 U пит

Входное напряжение лог. 1 вывода Reset, не менее, В… U пит

Максимальное входное напряжение лог. 1, В…  U пит + 0.5 В.

Минимальное входное напряжение лог. 0, В… — 0,5 В.

Выходное напряжение лог. 0, не более, В… 0,6.

Выходное напряжение лог. 1, не менее, В:

Uпит = 5 В… 4,2;

Uпит = 3 В… 2,3.

Потребляемый ток в режиме:

Uпит = 3 В, FT = 4 МГц… 3,5 мА;

Power Down… 1 мкА;

Power Down + WDT… 50 мкА.

Входной ток утечки в режиме входа, мкА … 8.

Нагрузочный резистор по входу, кОм … 35—120.

Входное напряжение сдвига аналогового компаратора, мВ … 20.

Входной ток смещения аналогового компаратора, нА … 10.

Максимальный ток через вывод питания или «земли», мА:

AT90S2313, AT90S8515… 140;

AT90S8535… 200.

Максимально допустимый ток одного вывода порта, мА … 40.

Максимальный постоянный ток одного вывода порта, мА … 20.

Максимально допустимый суммарный ток всех выводов порта, мА :

для AT90S2313… 80 (каждый из портов В и D);

для AT90S8515… 80 (порт А), 80 (порты В, С и D в сумме);

для AT90S8535… 100 (порт А), 100 (порты В, С и D в сумме).

Максимальная частота тактового генератора, МГц :

при Uпит = 2,7–6,0 В… 10 (AT90S2313), 4 (AT90S8515, AT90S8535);

при Uпит = 4,0–6,0 В… 16 (AT90S2313), 8 (AT90S8515, AT90S8535).

 

Приложение 4

Базовые команды

Atmel AVR

Система команд микроконтроллеров Atmel AVR довольно обширна и включает в себя от 90 до 133 команд, в зависимости от разновидности микроконтроллера. Далее приводится выборочный перечень наиболее часто употребляемых команд по группам. Приведенных команд в принципе достаточно для того, чтобы составить большинство законченных программ для МК AVR, хотя многие полезные, но редко употребляемые команды (такие как eor, сом, neg и др.), здесь отсутствуют. Поэтому для полноценной работы следует иметь полный справочник по командам. Краткие таблицы команд прилагаются ко всем описаниям МК, полный перечень команд на русском имеется в пособиях [1]Меандр — тип геометрического узора с повторяющимися ломаными линиями (по названию извилистой реки Меандр в Малой Азии).
и [2]Префикс «К» в названии отечественных микросхем, обозначающий их принадлежность к бытовому/коммерческому диапазону температур, мы будем в этой книге опускать, подробнее см. главу 8 .
(берегитесь неточностей, которые встречаются в первых изданиях этих пособий!). Официальный перечень команд на английском (AVR Instruction Set) можно скачать с сайта atmel.com в виде PDF-документа.

Будьте внимательны при работе с командами: следует обращать внимание на то, что некоторые команды могут быть применены только к определенным регистрам (к примеру, операции с константами работают только со старшими 16 регистрами, начиная с R16), а сами константы не всегда могут иметь полный диапазон значений. Поэтому следует внимательно смотреть характеристики команд, прежде чем использовать их в программе. Команды, помеченные серым цветом, действительны не для всех моделей AVR (для семейства Mega, как правило, действительны все, но стоит уточнить по описанию конкретного контроллера).

В табл. П4.1—П4.6 приняты следующие сокращения: РОН (регистр общего назначения), РВВ — регистр ввода/вывода, PC — счетчик команд (программный счетчик, Program Counter). Буквой с в регистре флагов SREG обозначается флаг переноса (устанавливается при возникновении переноса при арифметических операциях), буквой z — флаг нуля (устанавливается по равенству операндов при сравнении). Последний не путать с парой регистров R31:R30, которые задействованы в командах переноса данных, и также обозначаются буквой z. В этих командах используются также обозначения X (пара регистров R27:R26) и Y (пара регистров R29:R28).

Арифметические и логические команды

Арифметические и логические команды приведены в табл. П4.1.

Команды операций с битами

Команды операций с битами приведены в табл. П4.2.

1 Команды SBI и CBI действительны для PBB по первым 32 адресам (0…31)

Команды сравнения

В операциях сравнения с регистрами производятся те же действия, что и в соответствующих арифметических и логических операциях, однако результат никуда не помещается (и, соответственно, операнды не портятся), лишь устанавливаются соответствующие флаги (C и Z) в регистре флагов SREG. Значением этих флагов в дальнейшем определяется работа тех команд условного перехода, которые употребляются в паре с командами сравнения (исключение составляет опущенная здесь и редко употребляемая команда CPSE, которая содержит сравнение и переход «в одном флаконе»). Описание команд сравнения приведено в табл. П4.3.

Команды передачи управления

Команды передачи управления делятся, с одной стороны, на команды безусловного перехода и похожие на них команды вызова подпрограмм (последние от первых отличаются тем, что явно размещают в стеке содержимое счетчика команд для последующего возврата из подпрограммы), с другой стороны, — на команды условного перехода, т. е. нарушения последовательности выполнения операторов по какому-то условию. Большинство таких команд оперируют с адресом в памяти (К) оператора, на который производится переход. В тексте ассемблерных программ абсолютные или относительные числа, обозначающие адрес, в команды передачи управления не подставляются, вместо них указывают метки, которые затем компилятор интерпретирует, как абсолютный адрес. Команды, начинающиеся с буквы «В» (от Branch— «ветка») предполагают предварительный вызов одной из команд сравнения. Описание команд передачи управления приведено в табл. П4.4—П4.5.

Команды безусловного перехода и вызова подпрограмм

1 Для устройств с максимально возможным объемом памяти программ до 64 К слов (128 кбайт).

Команды условного перехода

1 Значение 2 — если следующая команда занимает одно слово (два байта) и 3 — если следующая команда занимает два слова (четыре байта).

2 Команды SBIC и SBIS действительны только для РВВ по первым 32 адресам (0..31).

Команды переноса данных

В табл. П4.6 приведено описание команд переноса данных.

Команды управления системой

В табл. П4.7 приведены команды управления системой.

 

Приложение 5

Тексты программ

Далее приведены полные тексты микропрограмм для конструкций, разбираемых в книге. Каждая программа подробно описана в указанных далее главах. Для воспроизведения сканируйте исходный текст с помощью Fine Reader, проверьте и сохраните в виде текстового файла с расширением asm. После этого программу можно компилировать и загружать в память контроллера, как описано в главе 13.

Программа для часов

Описание схемы и программы часов см. главу 14. Программа (листинг П5.1) занимает в памяти МК 298 слов (596 байт).

Листинг П5.1

;============== Программа часов

;AT90S2313 4 МГц

.include "2313def.inc"

;==== Управление сегментами ====

.equ segA = 5; PD5 (pin 9)

.equ segB = 6; PD6 (pin 11)

.equ segC = 2; PB2 (pin 14)

.equ segD = 4; PB4 (pin 16)

.equ segE = 5; PB5 (pin 17)

.equ segF = 6; PB6 (pin 18)

.equ segG = 7; PB7 (pin 19)

;==== Управление разрядами ====

.еqu em = 0; PD0 (pin2)

.equ dm = 1; PD1 (pin 3)

.equ eh = 2; PD2 (pin 6)

.equ dh = 4; PD4 (pin 8)

;==== Рабочие переменные ====

.def POS = r16   ;отсчет разрядов для динамической индикации

.def sek = r17   ;число секунд

.def temp = r18   ;рабочая переменная

.def emin = r19   ;число единиц минут

.def dmin = r20   ;число десятков минут

.def ehh = r21   ;число единиц часов

.def dhh = r22   ;число десятков часов

.def set_up = r23 ;отсчет разрядов при установке

.def count = r24   ;счетчик для мигания

.def Flag = r25   ;флаги режимов

;в регистре Flag: если бит0=1, то идет установка часов

;если бит1=1, то внешнее напряжение пропало

;======== Прерывания =========

rjmp RESET   ;процедура Reset

reti

rjmp INTT1   ;прерывание INTI по нажатию Кн1

reti

rjmp TIM1   ;прерывание Timer1 по сравнению CompareA (счет времени)

reti

rjmp TIM0   ;прерывание Timer0 по переполнению (управл. разрядами)

reti

reti

reti

rjmp ACOMPI   ;прерывание аналогового компаратора

;===== Программа =====

;===== прерывание по нажатию кнопки Кн1 ====

INTT1:

         sbrc Flag,1   ;если бит1=1 напряжения нет

         rjmp END_SET   ;какая установка — на выход

         clr temp

         out GIMSK,temp   ;запрещаем INTI

         sbr Flag,1   ;устанавливаем бит 0 флага — идет установка

          inc set_up   ;отсчет, какой разряд устанавливаем

         clr count   ;очищаем счетчик мигания

         cpi set_up,5   ;если счетчик разрядов

         brne END_SET   ;еще не больше 4, то на выход

          clr set_up   ;если больше, то обнуляем счетчик

          ldi sek,59   ;и устанавливаем число секунд = 59

          cbr Flag,1   ;сбрасываем бит 0 флага — конец установки

END_SET:

reti   ;конец прерывания INT1

;===== прерывание Timerl — ход часов ====

TIM1:

         sbrc Flag,1   ;если бит1=1 напряжения нет

          rjmp mtime   ;сразу посылаем на счет времени

         sbrs Flag,0   ;если бит0=1 идет установка

         rjmp mtime   ;иначе сразу на счет времени

          ldi temp, 0b10000000   ;на всякий случай

         out GIFR,temp   ;очищаем прерывание INT1

         cpi count,0   ;если счетчик =0

         breq CONT_1   ;то на продолжение

          ldi temp,1<<INT1   ;иначе разрешаем прерывание INT1

          out GIMSK,temp

CONT_1:  ;установка

          inc count   ;увеличиваем счетчик мигания на 1

          cpi set__up,1   ;если первый разряд, устанавливаем его

         brne mm1   ;иначе на следующий

         sbis PinB,0   ;если Кн2 нажата

         inc emin   ;увеличиваем число единиц минут на 1

         cpi emin,10   ;если число единиц минут еще не равно 10

         brne END_TIM1   ;то на выход из процедуры

         clr emin   ;если =10, то обнуляем

         rjmp END_TIM1   ;на выход

mm1:    cpi set_up,2   ;если второй разряд, устанавливаем его

          brne mm2   ;иначе на следующий

          sbis PinB,0   ;если Кн2 нажата

          inc dmin   ;увеличиваем число десятков минут на 1

          cpi dmin,6   ;если число десятков минут еще не равно 6

         brne END_TIM1   ;то на выход из процедуры

          clr dmin   ;если =6, то обнуляем

         rjmp END_TIM1   ;на выход

mm2:    cpi set_up,3   ;если третий разряд, устанавливаем его

         brne mm3   ;иначе на следующий

         sbis PinB,0   ; если Кн2 нажата

         inc ehh   ;увеличиваем число единиц часов на 1

         cpi ehh,4   ;если число единиц часов еще меньше 4

         brio END_TIM1   ;то на выход из процедуры

          cpi dhh,2   ;если число десятков часов не равно 2

         brne mm21   ;то на метку mm21

          clr ehh   ;иначе обнуляем число единиц часов

         rjmp END_TIM1   ;на выход из процедуры

mm21:    cpi ehh, 10   ;если число единиц часов не равно 10

         brne END_TIM1   ;то на выход

         clr ehh   ;иначе обнуляем число единиц часов

         rjmp END_TIM1   ;на выход

mm3:    sbis PinB,0   ;четвертый разряд

          inc dhh   ;увеличиваем число десятков часов на 1

         cpi dhh,3   ;если оно еще не равно 3

         brne END_TIM1   ;то на выход

         clr dhh   ;иначе обнуляем

          rjmp END_TIM1   ;на выход

         ;счет времени

mtime:   inc sek   ;увеличиваем число секунд на 1

          cpi sek,60   ;если оно не равно 60

         brne END_TIM1   ;то на выход

          clr sek   ;иначе обнуляем секунды

         inc emin   ;и увеличиваем единиц минут

         cpi emin,10   ;если число единиц минут не равно 10

          brne END_TIM1   ;то на выход

          clr emin   ;иначе обнуляем единиц минут

         inc dmin   ;и увеличиваем число десятков минут

         cpi dmin,6   ;если оно не равно 6

          brne END_TIM1   ;то на выход

          clr dmin   ;иначе обнуляем число десятков минут

         inc ehh   ;и увеличиваем число единиц часов

          cpi ehh,4   ;если число единиц часов не равно 4

         brio END_TIM1   ;то однозначно на выход

          cpi dhh,2   ;если число десятков часов при этом не равно 2

          brne mhh   ;то на метку mhh

          clr ehh   ;иначе обнуляем число единиц часов

          clr dhh   ;и сразу число десятков часов тоже (это полночь)

          rjmp END_TIM1   ;на выход

mhh:

         cpi ehh,10   ;если число единиц часов не равно 10

         brne END_TIM1   ;на выход

          clr ehh   ;иначе обнуляем единиц часов

         inc dhh   ;увеличиваем число десятков часов

END_TIM1:

reti   ;выход из прерывания Timer1

;==== прерывание Timer0 управление разрядами ====

TIM0:

         sbrc Flag,1   ;если бит1=1 напряжения нет

         rjmp END_TIM0   ;тогда сразу на выход

          clr temp   ;все очищаем

         out PortD,temp

         out РогtB,temp

         andi POS,3   ;счет разрядов от 0 до 3

          sbis PinB,0   ;пока нажата кнопка Кн2

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

          cpi P0s,0   ;если счетчик разрядов не 0

         brne m0   ;то на метку m0 — следующий разряд

         cpi set_up,1   ;если set_up=1, мигает этот разряд

         brne sm_1   ;иначе на включение разряда

          sbrs count,0   ;если бит 0 в count=0

sm_1:      sbi PortD,em   ;то уст. PDO в 1, разряд единиц мин. светится

         ;иначе он останется темным, т. е. мигает с частотой count

          mov temp,emin   ;в temp — число единиц минут

         rcall SEG_SET   ;устанавливаем сегменты

          rjmp END_0   ;на выход

m0:        cpi POS,1   ; если счетчик разрядов не 1

         brne m1   ;то на сл. разряд

          cpi set_up,2   ;если set_up=2, то мигает этот разряд

         brne sm_2   ;иначе на включение разряда

         sbrs count,0   ;если бит 0 в count=0

sm_2:    sbi PortD,dm   ;то уст. PD1 в 1, разряд десятков мин. светится

         mov temp,dmin   ;в temp — число десятков минут

         rcall SEG_SET   ;устанавливаем сегменты

         rjmp END_0   ;на выход

m1:       cpi POS,2   ;если счетчик разрядов не 2

         brne m2   ;то на сл. разряд

         cpi set_up,3   ;если set_up=3, то мигает этот разряд

         brne sm_3   ;иначе на включение разряда

          sbrs count,0   ;если бит 0 в count=0

sm_3:    sbi PortD,eh   ;то уст. PD2 в 1, разряд единиц часов светится

         mov temp, ehh   ;в temp — число единиц часов

         rcall SEG_SET   ;устанавливаем сегменты

         rjmp END_0   ;на выход

m2:   ;обработка 4 разряда десятков часов

         cpi set_up,4  ;если set_up=4, то мигает этот разряд

         brne sm_4   ;иначе на включение разряда

         sbrs count,0   ;если бит 0 в count=0

sm_4:    sbi PortD,dh   ;то уст. PD4 в 1, разряд десятков часов светится

         mov temp,dhh   ;в temp — число десятков часов

         rcall SEG_SET   ;устанавливаем сегменты

END_0:

         inc POS

END_TIM0:

reti  ;выход из прерывания Timer0

;===== компаратор — батарейка =====

ACOMPI:

           sbis ACSR,АСО   ;если бит АСО =1, то продолжим

           rjmp СОМР_1   ;иначе на установку мигания ldi temp,0b11000000

            ut TCCR1A,temp   ;двоеточие включено постоянно

           rjmp END_comp   ;на выход

СОМР_1:

           ldi temp,0b01000000

           out TCCR1A,temp   ;двоеточие мигает

END_comp:

reti   ;выход из процедуры компаратора

;===== процедура Reset ====

RESET:

cli   ;запрещаем прерывания на время установки

ldi temp,low(RAMEND)   ;загрузка указателя стека

out SPL,temp

ldi temp,0b01110111  ;порт D разряды 0,1,2,4,5,6 на выход

out DDRD,temp

ldi temp, 0b11111100   ;порт В все на выход, кроме 0,1 (компаратор)

out DDRB,temp

;- таймеры —

ldi temp,0Ь00000010   ;запуск Timer0 входная частота 1:8

out TCCR0,temp   ;управление разрядами по переполнению,

;частота около 2 кГц (4/8=0,5 МГц/256)

ldi temp,high(62 500) ;старший байт

out OCR1AH,temp   ;вых. частота 1 Гц при вх. частоте 1:64

ldi temp,low(62500)   ;младший байт out

OCR1AL,temp

ldi temp,0b01000000

out TCCR1A,temp   ;включаем переключающую моду для вывода ОС1 (15)

ldi temp,0b01001011   ;запуск 1/64 timer1 с обнулением при сравнении

out TCCR1B,temp ;

;- прерывания —

ldi temp,1<<INT1   ;разрешаем прерывание INT1

out GIMSK,temp

ldi temp,(1<<TOIE0)|(1<<0CIE1A)   ;разр. прерываний Tim0 и Tim1

out TIMSK,temp

ldi temp,(1<<ACIE)   ;разр. прерывания компаратора при переключении

out ACSR,temp

sei   ;разрешаем прерывания

;======= основной цикл ========

G_cycle:   ;все время будем отслеживать пропадание внешнего питания

           sbrs Flag,0   ;если бит0=1 идет установка

          rjmp G_cycle   ;если так, то ничего не делаем

           sbic PinB,0   ;если напряжение есть

           rcall Restore   ;вызываем процедуру восстановления выходов

          sbis PinB,0   ;если напряжения нет

           rcall Disable   ;вызываем процедуру отключения выходов

rjmp G_cycle   ;зацикливаем программу

;======= конец основного цикла ========

Disable:   ;процедура отключения

          sbrc Flag,2   ;если бит1=1, то уже все сделали

          rjmp END_dis   ;выход из процедуры

           cli   ;запрещаем прерывания на время установок

          sbr Flag,2   ;устанавливаем бит1 Flag

          ;обрываем внешние соединения и обнуляем все порты:

           clr temp

          out PortD,temp

          out PortB,temp

          out DDRD,temp

          out DDRD,temp

          sei   ;разрешаем прерывания

END_dis:

ret   ;конец процедуры отключения выходов

Restore:   ;процедура восстановления

          sbrs Flag,2   ;если бит1=0, то уже все остальное сделали

           rjmp end_res   ;выход из процедуры

          ;восстановление

          cli   ;запрещаем прерывания на время установок

           cbr Flag,2   ;сбрасываем бит1 Flag

          ;восстанавливаем внешние соединения:

           clr temp

          ldi temp,0b01110111   ;порт D разряды 0,1,2,4,5,6 на выход

          out DDRD,temp

          ldi temp, 0b11111100   ;порт В все на выход, кроме 0,1

          out DDRB,temp

          sei   ;разрешаем прерывания

END_res:

ret  ;конец процедуры восстановления выходов

SEG_SET:   ;процедура установки сегментов

         cpi temp,0   ;ищем число, равное temp

          brne ss_0

         rcall OUT_0   ;и посылаем на нужную процедуру вывода сегментов

         rjmp END_seg

ss_0:    cpi temp,1

         brne ss_1

         rcall OUT_1

         rjmp END_seg

ss_1:    cpi temp,2

         brne ss_2

         rcall OUT_2

         rjmp END_seg

ss_2:    cpi temp,3

         brne ss_3

         rcall OUT_3

         rjmp END_seg

ss_3:    cpi temp,4

         brne ss_4

         rcall OUT_4

         rjmp END_seg

ss_4:    cpi temp,5

         brne ss_5

         rcall OUT_5

         rjmp END_seg

ss_5:    cpi temp,6

         brne ss 6

         rcall OUT_6

         rjmp END_seg

ss_6:    cpi temp,7

        brne ss_7

        rcall OUT_7

        rjmp END_seg

ss_7:    cpi temp,8

        brne ss_8

        rcall OUT_8

        rjmp END_seg

ss_8:    cpi temp,9

        rcall OUT_9

END_seg:

jret  ;конец процедуры установки сегментов

;процедуры для отображения цифр на семисегментном индикаторе

;ABCDEF(0);ВС(1)/ABDEG(2)/ABCDG(3)/BCFG(4);ACDFG(5)

;ACDEFG(6);ABC(7);ABCDEFG(8);ABCDFG(9)

Out_0:

        sbi PortD,segA

        sbi PortD,segB

        sbi PortB,segC

        sbi PortB,segD

        sbi PortB,segE

        sbi PortB,segF

        ret

OUT_1:

        sbi PortD,segB

        sbi PortB,segC

        ret

OUT_2:

        sbi PortD,segA

        sbi PortD,segB

        sbi PortB,segG

        sbi PortB,segE

        sbi PortB,segD

        ret

OUT_3:

        sbi PortD,segA

        sbi PortD,segB

        sbi PortB,segG

        sbi PortB,segC

        sbi PortB,segD

        ret

OUT_4:

        sbi PortD,segB

        sbi PortB,segC

        sbi PortB,segF

        sbi PortB,segG

        ret

OUT_5:

        sbi PortD,segA

        sbi PortB,segF

        sbi PortB,segG

        sbi PortB,segC

        sbi PortB,segD

        ret

OUT_6:

        sbi PortD,segA

        sbi PortB,segF

        sbi PortB,segG

        sbi PortB,segC

        sbi PortB,segE

        sbi PortB,segD

        ret

OUT_7:

        sbi PortD,segA

        sbi PortD,segB

        sbi PortB,segC

        ret

OUT_8:

        sbi PortD,segA

        sbi PortD,segB

        sbi PortB,segC

        sbi PortB,segD

        sbi PortB,segE

        sbi PortB,segF

        sbi PortB,segG

        ret

OUT_9:

        sbi PortD,segA

        sbi PortD,segB

        sbi PortB,segC

        sbi PortB,segD

        sbi PortB,segF

        sbi PortB,segG

        ret

Программа измерителя температуры и давления

Программа измерителя температуры и давления, описанного в главе 15, приведена в листинге П5.2.

Листинг П5.2

;ATmega853 5 кварц 4000 кГц

.include "m8535def.inc"

;==== Определения и константы ====

;Управление индикацией

.equ segG = 6  ;port С pin 28

.equ segF = 5   ;pin 27

.equ segE = 4   ;pin 26

.equ segD = 3   ;pin 25

.equ segC = 2   ;pin 24

.equ segB = 1   ;pin 23

.equ segA = 0   ;pin 22

.equ RazrTdH = 0   ;PortB,0 pin 1 десятки градуса

.equ RazrTdM = 1   ;PortB,1 pin 2 ед. градусов

.equ RazrTdL = 2   ;PortB,2 pin 3 десятые градусов

. equ RazrPdH = 3   ;PortB,3 pin 4 сотни давления

.equ RazrPdM = 4   ;PortB,4 pin 5 дес. давления

.equ RazrPdL = 5   ;PortB,5 pin 6 ед. давления

;адреса SRAM старший байт адреса SRAM=0x01

.equ Tram =: 0x0   ;0x0,0x1 — старш. и младш. байты температуры АЦП

.equ Pram =: 0x2   ;0x2,0x3 — старш. и младший, байты давления АЦП

.equ TdH = 0x04   ;температура старший дес.

.equ TdM = 0x05   ;темп. средний дес.

.equ TdL = 0x06   ;темп. младший дес.

.equ PdH = 0x07   ;давление старший дес.

.equ PdM = 0x08   ;давление средний дес.

.equ PdL = 0x09   ;давление младший дес.

.equ tZH = 0x20   ;ст. разряд коэффициента Z температуры

.equ tZL = 0x21   ;мл. разряд коэффициента Z температуры

.equ tKH = 0x22   ;ст. разряд коэффициента К температуры

.equ tKL = 0x23   ;мл. разряд коэффициента К температуры

.equ pZH = 0x24   ;ст. разряд коэффициента Z давления

.equ pZL = 0x25   ;мл. разряд коэффициента Z давления

.equ pKH = 0x26   ;ст. разряд коэффициента К давления

.equ pKL = 0x27   ;мл. разряд коэффициента К давления

.equ AtBCDO = 5   ;адрес ResL для процедуры преобразования Bin-Dee

.equ AtBCD2 = 6   ;адрес ResH

;переменные

.def AregH = r2   ;результат измерения hex, старший байт

.def AregL = r3   ;результат измерения hex, младший байт

.def KoeffH = r4   ;коэффициент, старший байт

.def KoeffL = r5  ;коэффициент, младший байт

.def ResL = r6   ;результат упакованный BCD, младший байт

.def ResH = r7   ;результат упакованный BCD, старший байт

.def temp = r16   ;рабочий регистр

.def temp1 = r17   ;вспомогательная переменная

.def temp2 = r18   ;вспомогательная переменная

.def count = r19   ;счетчик преобразований — до 64

.def countCyk = r20   ;счетчик до 32,

.def Flag = r21   ;регистр флагов, биты:

;измерение: 0 — температуры, 1 — давления,

.def cRazr = г22   ;счетчик до 6 мультиплексирования разрядов

;====== прерывания ======

rjmp RESET   ;Reset Handle

        reti   ;IRQ0 Handler

        reti   ;IRQ1 Handler

        reti  ;Timer2 Compare Handler

        reti  ;Timer2 Overflow Handler

        reti  ;Timer1 Capture Handler

        reti   ;Timer1 Compare A Handler

        reti  ;Timer1 Compare В Handler

        reti  ;TIM1_OVF  ;Timer1 Overflow Handler

rjmp TIM0   ;Timer0 Overflow Handler

         reti   ;SPI Transfer Complete Handler

         reti   ;USART RX Complete Handler

        reti  ;UDR Empty Handler

         reti   ;USART TX Complete Handler

rjmp readADC   ;reti;ADC  ;ADC Conversion Complete Handler

         reti   ;EEPROM Ready Handler

           reti   ;Analog Comparator Handler

           reti   ;Two-wire Serial Interface Handler

           reti   ;IRQ2 Handler

           reti   ;Timer0 Compare Handler

reti  ;Store Program Memory Ready Handler

;==================

OUT_N:   ;маски цифр

.db

0b00111111,0b0000110,0b01011011,0b01001111,0b01100110,0b01101101, 0b01111101,0b00000111,0b01111111,0b01101111

;seg ABCDEF(0);seg BC(1);seg ABDEG(2);seg ABCDG(3);seg BCFG(4);seg ACDFG(5)

;seg ACDEFG(6);seg ABC(7);seg ABCDEFG(8);seg ABCDFG(9)

TIM0:

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

          inc cRazr   ;счетчик разрядов

           cpi cRazr,6   ;всего б разрядов

          brne Set_razr

          clr cRazr   ;если равен 6, очищаем

Set_razr:

          cpi cRazr,0   ;десятки градусов

           brne Р1   ;если нет — на другие разряды

                 ldi r28,TdH   ;установка YL — старш. темп.

           ld temp,Y   ;в temp — значение десятков градусов

           ldi ZH,HIGH(OUT_N*2)   ;адрес констант в памяти — в Z

                  ldi ZL,LOW(OUT_N*2)

                 add ZL,temp   ;адрес маски цифры, равной temp

                 lpm   ;в r0 — маска

           out PortC,r0   ;установили сегменты

           ldi temp,1<<RazrTdH   ;устанавливаем разряд

           out PORTB,temp   ;установили разряды

           rjmp rADC

P1:

          cpi cRazr,1   ;единицы град

          brne P2

          ldi r2 8,TdM   ;установка адреса — ср. темп.

          ld temp,Y

          ldi ZH,HIGH()UT_N*2)

                 ldi ZL,LOW(OUT_N* 2)

                 add ZL,temp

                 lpm

out PortC,r0   ;установили сегменты

ldi temp,1<<RazrTdM   ;устанавливаем разряд

out PORTB,temp   ;установили разряды rjmp rADC

P2:

          cpi cRazr,2   ;дробные град

          brne P3

          ldi r2 8,TdL   ;установка Y — мл. темп.

          ld temp,Y

          ldi ZH,HIGH(OUT_N* 2)

                ldi ZL,LOW(OUT_N*2)

                add ZL,temp

                lpm

          out PortC,r0   ;установили сегменты

          ldi temp,1<<RazrTdL   ;устанавливаем разряд

          out PORTB,temp   ;установили разряды

          rjmp rADC

Р3:

          cpi cRazr,3   ;сотни давления

          brne Р4

          ldi r28,PdH  ;установка Y — сотн. prs

           ld temp,Y

          ldi ZH,HIGH(OUT_N*2)

                ldi ZL,LOW(OUT_N*2)

                add ZL,temp

                lpm

          out PortC, r0   ;установили сегменты

          ldi temp,1<<RazrPdH   ;устанавливаем разряд

           out PORTB,temp   ;установили разряды

          rjmp rADC

P4:

          cpi    cRazr,4   ;десятки давления

          brne P5

          ldi r2 8,PdM   ;установка Y — дес. prs

          ld temp,Y

          ldi ZH,HIGH(OUT_N*2)

          ldi ZL,LOW(OUT_N*2)

          add ZL,temp

          lpm

          out PortC,r0   ;установили сегменты

          ldi temp,1<<RazrPdM   ;устанавливаем разряд

          out PORTB,temp   ;установили разряды

          rjmp rADC

P5:

           cpi    cRazr,5   ;единицы давления

           brne rADC

           ldi r28,PdL   ;установка Y — ед. prs

           ld temp,Y

           ldi ZH,HIGH(OUT_N*2)

           ldi ZL,LOW(OUT_N*2)

           add ZL,temp

           lpm

           out PortC,r0   ;установили сегменты

            ldi temp,1<<RazrPdL   ;устанавливаем разряд

           out PORTB,temp   ;установили разряды

rADC:   inc countCyk   ;обработка АЦП

           sbrs countCyk,5   ;если бит 5 в countCyk равен 1, то прошло 32 такта таймера 0, будем запускать АЦП (см. readADC)

            reti

            clr countCyk

            inc count

            cpi count,65   ;если прошло 64 чтения, то сразу на обработку

            breq endADC

            sbrc Flag,0   ;если бит 0 флага — читаем температуру

            ldi temp,0

            sbrc Flag,1   ;если бит 1 флага — читаем давление

            ldi temp,1

            out ADMUX, temp   ;установили АЦП канал

            sbi ADCSRA, ADSC   ;запуск новое преобразование

             reti

endADC:

;расчет по 64 значениям

            clr count

            sbrc Flag,0

            ldi r28,Tram   ;установка адреса — T

            sbrc Flag,1

            ldi r28,Pram   ;установка адреса — P

            ld AregH,Y+   ;загрузка суммы из памяти

            ld AregL,Y

div64L:  ;деление на 64

            lsr AregH   ;сдвинули старший

             ror AregL   ;сдвинули младший

             inc count

            cpi count,6

            brne div64L   ;сдвинули-поделили на 64

             subi r28,1   ;в Y опять адрес Tram или Pram

              clr temp

             st Y+,temp

             st Y,temp   ;очистили память для следующего цикла

              sbrs Flag,0   ;расчет температуры

             rjmp prs   ;иначе давления

                   ldi r28,tZH   ;установка адреса коэфф. Z

                  ld temp,Y+

                  mov KoeffH,temp

                  ld temp,Y

                  mov KoeffL,temp   ;получили коэфф. Z температуры

;вычисление знака:

                          ср AregL,KoeffL

                          срс AregH,KoeffH

                          brsh b0

                          sub KoeffL,AregL

                          sbc KoeffH,AregH

                          mov AregL,KoeffL

                          mov AregH,KoeffH

                          sbi PortD,7   ;знак —

                          rjmp m0

Ь0:   ;если больше

                          sub AregL,KoeffL

                          sbc AregH,KoeffH

                          cbi PortD,7   ;знак +

m0:   ;умножение на коэфф. К

                          ldi r28,tKH  ;установка адреса коэфф. К

                          ld temp,Y+

                          mov KoeffH,temp

                          ld temp,Y

                          mov KoeffL,temp   ;получили К температуры

                          rcall Mp16   ;умножили

             ;деление на 1024

                   mov AregL,temp1

                   mov AregH,temp2   ;на 2 56

                   lsr AregH   ;сдвинули старший

                    ror AregL   ;сдвинули младший

                   lsr AregH   ;сдвинули старший

                   ror AregL   ;сдвинули младший; еще на 4

                   rjmp contPT

prs:

            sbrs Flag,1   ;расчет давления

            rjmp contPT

                   ldi r28,pZH   ;установка адреса коэфф. Z

                    ld temp,Y+

                   mov KoeffH,temp

                   ld temp,Y

                   mov KoeffL,temp   ;получили коэфф. Z давления

                        adc AregL,KoeffL

                        add AregH,KoeffH   ;прибавили к величине

                        ldi r28,pKH   ;установка адреса коэфф. К

                        ld temp,Y+ mov

                        KoeffH,temp

                        ld temp,Y

                        mov KoeffL,temp   ;получили коэфф. К давления

                        rcall Мр16   ;умножили

               ;деление на 1024

                         mov AregL,temp1

                        mov AregH,temp2   ;на 256

                        lsr AregH   ;сдвинули старший

                         ror AregL   ;сдвинули младший

                        lsr AregH   ;сдвинули старший

                        ror AregL   ;сдвинули младший; еще на 4

contPT:

             sbrc Flag,0

             ldi r28,TdH   ;установка адреса — T

             sbrc Flag,1

             ldi r28,PdH   ;установка адреса — P

             rcall bin2BCD16   ;преобраз в дв. дес.

              st Y+,ResH   ;запоминаем в памяти старший BCD

             mov temp,ResL   ;младший распаковываем

             swap temp

                    andi temp,0b00001111

             st Y+,temp

             mov temp,ResL

             andi temp,0b00001111

             st Y,temp   ;и тоже сохраняем в памяти

;установка флагов и переменных для следующего цикла

             clr count

             sbrc Flag,0

             rjmp _F0

             clr Flag

             sbr Flag,0x1   ;был бит 1, устанавливаем бит 0

reti

_F0:

             clr Flag   ;был бит 0, устанавливаем бит 1

             sbr Flag,0x2

reti  ;TIME0

readADC:  ;чтение АЦП по прерыванию

              sbrc Flag,0

              ldi r28,Tram   ;установка адреса — T

              sbrc Flag,1

              ldi r28,Pram   ;установка адреса — P

              ld AregH,Y+

              ld AregL,Y

              in temp1,ADCL   ;получаем младший

                     in temp,ADCH   ;старший

                      add AregL,tempi   ;суммируем

                     adc AregH,temp

              dec r28

              st Y+,AregH   ;запоминаем сумму

              st Y,AregL   ;в памяти

     reti   ;ADC

Мр16:   ;умножение двух 16-разрядных величин

;AregL multiplicand low byte

;AregH multiplicand high byte

;KoeffL multiplier low byte

;KoeffH multiplier high byte

;temp result byte 0 (LSB)

;tempi result byte 1

;temp2 result byte 2

            clr temp2   ;очистить ставший

           mul AregL,KoeffL   ;умножаем младшие

           mov temp,r0   ;в r0 младший результата операции mul

           mov temp1,r1   ;в r01 старший результата операции mul

           mul AregH,KoeffL   ;умножаем старший на младший

           add tempi,r0   ;в r младший результата операции mul

            adc temp2,r1   ;в r01 старший результата операции mul

            mul AregL,KoeffH   ;умножаем младший на старший

            add temp1,r0   ;в r0 младший результата операции mul

           adc temp2,r1   ;в r01 старший результата операции mul

           mul AregH,KoeffH   ;умножаем старший на старший

           add temp2,r0   ;4-й разряд нам тут не требуется, но он в r01

ret

bin2BCD16:   ;преобразование 16-разрядного hex в упакованный BCD

;input: hex value low=AregL hex value high = AregH

;output: BCD value digits 1 and 0 ResL

;BCD value digits 2 and 3(=0) ResH

           ldi tempi,16   ;Init loop counter

            clr ResH

           clr ResL

           clr ZH   ;clear ZH (not needed for AT90Sxx0x)

bBCDx_1: lsl AregL   ;shift input value

            rol AregH   ;through all bytes

            rol ResL;

            rol ResH

            dec temp1   ;decrement loop counter

             brne bBCDx_2   ;if counter not zero

            ret  ;return

bBCDx_2:ldi r30,AtBCD2+1   ;Z points to result MSB + 1

bBCDx_3:

            ld temp, — Z   ;get (Z) with pre-decrement

            subi temp, — $03   ;add 0x03

            sbrc temp,3   ;if bit 3 not clear

            st Z, temp   ;store back

            ld temp, Z   ;get (Z)

            subi temp, — $30   ;add 0x30

            sbrc temp, 7   ;if bit 7 not clear

            st Z,temp   ;store back

            cpi ZL,AtBCDO   ;done all three?

            brne bBCDx_3   ;loop again if not

             rjmp bBCDx_1

bin2bcd8:   ;преобразование 8-разрядного hex в неупакованный BCD

;вход hex= temp, выход BCD temp1 — старш.; temp — младш.

;эта процедура работает только для исходного меньше 100

            clr tempi   ;clear result MSD

bBCD8_1: subi temp,10   ;input = input — 10

             brcs bBCD8_2   ;abort if carry set

            inc temp1   ;inc MSD

            rjmp bBCD8_1   ;loop again

bBCD8_2:subi temp, — 10   ;compensate extra subtraction

ret

RESET:   ;точка запуска программы после включения

            ldi temp,low(RAMEND)   ;загрузка указателя стека

             out SPL,temp

            ldi temp,high(RAMEND)   ;загрузка указателя стека

            out SPH,temp

            ldi temp,1<<ACD

            out ACSR,temp   ;выкл. аналог, компаратор на всякий

;установка портов вход-выход

            ldi temp,0b00111111   ;разряды

            out DDRB,temp

            ldi temp,0b01111111   ;сегменты

            out DDRC,temp

            ldi temp,0b10000000   ;знак "минус"

            out DDRD,temp

;установка АЦП

            ldi temp, 1<<ADEN|1<<ADIE|1<<ADPS2 |1<<ADPS0

            ;start ADC 1/32 такт = 128 кГц  ;interrupt enable

             out ADCSRA,temp

;установка таймера

              ldi temp,0b00000010

             out TCCR0,temp

             ;Timer0 on div 1:8 управление разрядами 2000 Гц

;прерывания

              ldi temp,(1<<TOIE0)   ;разр. прер. Timer 0

              out TIMSK,temp

             ldi temp,255   ;сбросить все прерывательные флаги

             out TIFR,temp

             out GIFR,temp

;начальная установка переменных

              ldi r29,1   ;YH=1, пишем в RAM, начиная с 01:00

              clr count

             clr countCyk

             clr cRazr

             clr Flag

             sbr Flag,0x01  ; сначала измеряем температуру

;обнуление рабочих ячеек

             clr temp

             ldi r28,Tram   ;Tempr

             st Y+,temp

             st Y,temp

             ldi r2 8,Pram   ;Prs

             st Y+,temp

             st Y,temp

;запись коэффициентов

             ldi r28,tZH   ;начальный адрес

;Z Tempr=471

              ldi temp,High(471)   ;ст.

             st Y+,temp

             ldi temp,Low(471)   ;мл.

              st Y+,temp

;К Tempr=1020

            ldi temp,High(1020)   ;ст.

             st Y+,temp

            ldi temp,Low(1020)   ;мл.

            st Y+,temp

;Z prs=12

            ldi temp,High(12)   ;ст. на самом деле = 0

            st Y+,temp

            ldi temp,Low(12)   ;мл.

            st Y+,temp

;К prs=916

            ldi temp,High(916)   ;ст.

            st Y+,temp

            ldi temp,Low(916)   ;мл.

            st Y,temp

sei  ;разрешаем прерывания

G_cykle:   ;основной цикл

             rjmp G_cykle

Процедуры обмена по интерфейсу I 2 С

Протокол обмена I2С и пример его использования описан в главе 16. Процедуры составлены для передачи со скоростью около 100 кГц при тактовой частоте контроллера 4 МГц. При другой частоте контроллера или иной скорости передачи число циклов в процедуре delay, равное 6, следует пропорционально изменить. Например, для частоты кварца, равной 16 МГц и скорости передачи, пониженной до 30 кГц, команду ldi cnt,6 следует заменить на команду ldi cnt,75 (приблизительно). Ошибка в ±50 % в скорости передачи обычно роли не играет. При наличии сбоев увеличивайте число циклов до тех пор, пока связь не установится.

Программа содержит процедуры для двух конкретных устройств: энергонезависимой памяти с интерфейсом I2С (типа АТ24) и часов реального времени (RTC) с таким же интерфейсом (например, DS1307). Процедуры Write-Flash/ReadFlash предназначены для обмена с памятью, процедуры write_i2c/read_i2c для обмена с часами. Примеры их использования см. в главе 16. Для других устройств легко построить собственную процедуру по аналогии, если использовать универсальные процедуры формирования протокола (start, write, read и stop), находящиеся в данном тексте. Исключите ненужные процедуры перед компиляцией программы, чтобы не загромождать память МК.

Текст листинга П5.3 целесообразно скопировать в отдельный файл, и назвать его, например, i2c.prg. Готовый файл i2c.prg также доступен в архиве по адресу , где еще содержится программа для измерителя температуры и давления, обсуждаемая в главе 16. При необходимости использовать эти процедуры в другом устройстве следует отредактировать начальные строки, которые задают выводы МК, задействованные в процессе обмена. В данном случае это биты порта D номер 4 (SCL) и 6 (SDA). Кроме этого, конечно, следует изменить регистры для переменных, если это требуется (и при необходимости число циклов, если частота тактового генератора другая). Файл подключается к вашей программе с помощью директивы. include "i2c.prg" после таблицы векторов прерываний (см. главу 16).

Листинг П5.3

;файл I2С.рrg

;Процедуры чтения и записи по интерфейсу I2C

;+----------- порт D ---------+

.equ pSCL = 4

.equ pSDA = 6

;-------------------------------

.def DATA = r17

.def ClkA = r18

.def cnt = r23

.def AddrL = r24   ;адреса EEPROM

.def AddrH = r25

;---------------- запись EEPROM ------------

WriteFlash:   ;в AddrL,AddrH — адрес, данные в DATA

                  ;на выходе если бит с = 1 в регистре флагов, то ошибка

         cbi PORTD,pSDA

         cbi PORTD,pSCL

         ldi cnt,120   ;120 попыток прописать

loop120f:

         push DATA

         rcall start

         ldi DATA,0xA0   ;addr device=0,r/w=0

         rcall write

         brcs rt_writef   ;C=1 ERROR

         mov DATA,AddrH   ;set HI address

         rcall write

         brcs rt_writef   ;C=1 ERROR

         mov DATA,AddrL   ;set LO address

         rcall write

         brcs rt_writef   ;C=1 ERROR

         pop DATA   ;set data to DATA

         rcall write

         brcs rt_f   ;C=1 ERROR

         rcall stop

         brcs rt_f   ;C=1 ERROR

          ret

;--------------- чтение EEPROM -------------

ReadFlash:   ;в AddrL,AddrH — адрес, данные в DATA

                  ;если бит с = 1 в регистре флагов, то ошибка

         cbi PORTD,pSDA

         cbi PORTD,pSCL

ldi cnt,120

loop_read_f:

         rcall start

         ldi DATA,0xA0   ;addr device=0,r/w=0

         rcall write

         brcs rt__f   ;C=1 ERROR

          mov DATA,AddrH   ;set HI address

         rcall write

         brcs rt__f   ;C=1 ERROR

         mov DATA,AddrL   ;set LO address rcall write

         brcs rt__f   ;C=1 ERROR

         rcall start

         ldi DATA,0xA1   ;addr device=0,r/w=1

         rcall write

         brcs rt__f   ;C=1 ERROR

         clt;   ;no put ACK

         rcall read

         rcall stop

         brcs rt__f   ;G=1 ERROR

         ret

rt__f:

         dec cnt

         brne loop_read_f

         ret

rt_writef:

         pop DATA

rt_f:

         brcc Ok_wr_f

         dec cnt

         brne loop120f

Ok_wr_f:

         ret

;------------ запись RTC ------------

write_i2c:   ;b ClkA — адрес, данные в DATA

                  ;если бит с = 1 в регистре флагов, то ошибка

         cbi PORTD,pSDA

         cbi PORTD,pSCL

         ldi cnt,120   ;120 попыток прописать

lоор120:

         push DATA

         rcall start

         ldi DATA,0bi1010000   ;addr device,r/w=0

         rcall write

         brcs rt_write   ;C=1 ERROR

         mov DATA,ClkA   ;set HI address

         rcall write

         brcs rt_write   ;C=1 ERROR

         pop DATA   ;set data to DATA

         rcall write

         brcs rt_   ;C=1 ERROR

         rcall stop

         brcs rt_   ;C=1 ERROR

          ret

;-----------чтение RTC-----------

read_i2c:   ;ClkA — адрес, данные в DATA

                ;если бит с = 1 в регистре флагов, то ошибка

         cbi PORTD,pSDA

         cbi PORTD,pSCL

ldi cnt,120

loop_read_:

         rcall start

         ldi DATA 0b11010000   ;addr device,r/w=0

         rcall write   ;C=1 ERROR

          mov DATA ClkA   ;set HI address

         rcall write

         brcs rt   ;C=1 ERROR

          rcall stare

         ldi DATA, 0b11010001   ;addr device, r/w=1

         rcall write

         brcs rt   ;C=1 ERROR

         clt  ;no put ACK

         rcall read

         rcall stop

         brcs rt   ;C=1 ERROR

         ret

rt__:

         dec cnt

         brne loop_read_

         ret

rt_write:

         pop DATA

rt_:

         brcc Ok_wr_

         dec cnt

         brne loop120

Ok_wr_:

         ret

;--------------------------------

write:   ;запись байта из DATA

         push DATA

         push cnt

         ldi cnt,8   ;счетчик бит

x42:

         rol DATA

         brcs sei

         sbi DDRD,pSDA

         rjmp del_wr

sel:

         cbi DDRD,pSDA

del_wr:

         cbi DDRD,pSCL

         rcall delay

         sbi DDRD,pSCL

         rcall delay

         dec cnt

         brne x42   ;следующий бит

         cbi DDRD,pSDA   ;освободить pSDA для АСК

         rcall delay

         cbi DDRD,pSCL

         rcall delay

         clc

         sbic PIND,pSDA   ;читаем в бит С состояние АСК

         sec  ;АСК не пришел

         sbi DDRD,pSCL

         rcall delay

         pop cnt

         pop DATA

         ret

read:   ;чтение в DATA, бит t=1 —> ответить АСК, t=0 не отвечать АСК

         ldi DATA,1

loop_read:

         sbi DDRD,pSCL   ;SCL=0

         cbi DDRD,pSDA   ;SDA=1

         rcall delay

         cbi DDRD,pSCL   ;SCL=1

         rcall delay

         clc

         sbic PIND,pSDA   ;читать SDA в бит С

          sec

         rol DATA

         brcc loop_read

         ;отсылаем ACK ()

          sbi DDRD,pSCL   ;SCL=0

         rcall delay

         brts se0

         cbi DDRD,pSDA   ;не отвечать ACK (t), SDA=1

         rjmp rd_

se0:

         sbi DDRD,pSDA   ;отвечать ACK (t), SDA=0

rd_:

         clc

         rcall delay

         cbi DDRD,pSCL   ;SCL=1

         rcall delay

ret

start:

         cbi DDRD,pSDA

         cbi DDRD,pSCL

         rcall delay

         sbis PINC,pSDA

         rjmp start

         sbis PINC,pSCL

         rjmp start

         sbi DDRD,pSDA  ;0=SDA

         rcall delay

         sbi DDRD,pSCL   ;0=SCL

         rcall delay

ret

stop:

         sbi DDRD,pSDA

         sbi DDRD,pSCL

         rcall delay

         cbi DDRD,pSCL   ;1=SCL

         rcall delay

         cbi DDRD.pSDA   ;1=SDA

          rcall delay

         clc

         sbic PIND,pSDA

         ret

sbic PIND,pSCL

         ret

         sec

ret

delay:   ;~5 мкс (кварц 4 МГц)

          push cnt

          ldi cnt,6

cyk_delay: dec cnt

          brne cyk_delay

          pop cnt

ret

 

Приложение 6

Словарь часто встречающихся терминов

В табл. П6.1 и П6.2 приведен перевод некоторых терминов, часто встречающихся в технической документации. Термины, вошедшие в русский язык в оригинальном звучании или близком к нему (transistor, resistor, logic, timer, emitter и т. п.) и потому понятные без перевода, за некоторыми исключениями в таблицах не приводятся. Не приводятся также термины и сокращения, подробно рассмотренные в тексте соответствующих глав (SRAM, DRAM, EEPROM и т. п.).

Таблица П6.1

Русско-английский

Блок (узел, устройство) — unit

центральный процессорный блок — central processor unit, CPU

Внешний — external

Внутренний — internal

Восьмеричный — octal

Вход — input

Вывод (компонента) — pin, lead

Выпрямитель — rectifier

Выход — output

Вычитание — subtraction

Генератор тактирующих — импульсов clock

Данные — data

Двоичный — binary

Действующий (значение напряжения) — effective

Деление — division

Делитель — divisor

Десятичный — decimal

Диапазон — range, scale

Доступ — access

Дрейф — drift

Емкость — capacity, capacitance

Задержка — delay

Заряд — charge

Затвор — gate

Земля — ground

Измерение — measuring

Индуктивность (катушка индуктивности) — coil

Исток, источник — source

Канал — channel

— передачи данных — data transfer channel

Кнопка — button, key

Конденсатор — capacitor

Корпус — case, package

Коэффициент усиления — gain

— по напряжению — voltage gain

Мост — bridge

— выпрямительный — rectifier bridge

Мощность — power

Набор — kit

Напряжение — voltage

      высокий уровень ~high voltage

      низкий уровень ~low voltage

— питания supply voltage

— смещения bias

Ноль — zero

Объединение (каналов) — multiplex

Отношение — ratio

Пайка — soldering

Память — memory

Панель (для микросхем) — socket

Параллельный — parallel

Переключатель — switch

Период (импульсов) — cycle

Питание — power

      источник питания — power supply

Плата — board

Поддержка — support

Показатель — rate

Полоса (частот) — band

       ширина полосы — bandwidth

Полупроводник — semiconductor

Поправка — correction

Последовательный — serial

Преобразователь — converter

        аналого-цифровой ~analog-to-digital converter, ADC

Проверка, контроль — check

Провод — wire

        гибкий~ (шнур) — cord

Проводник — conductor

Произвольный — random

Прямой — direct

Регулировать — adjuist, control

Регулировка — adjuistment

Режим (работы) — mode

Синхронизация — clock

Сложение — adding

Смещение — offset

Соединение — connect

Соединитель (разъем) — connector

Состояние — state

Стирание — erase

Сток — drain

Сторожевой — (таймер) watchdog

Схема — circuit

Счетчик — counter

Ток — current

— базы — base current

       втекающий~ sink current

       вытекающий~ source current

— насыщения — saturation current

        переменный~ alternating current, AC

        постоянный~ direct current, DC

— смещения — bias current

        сила тока — amperage

Точность (погрешность) — accuracy

Умножение — multiplication

Умножитель — multiplier

Управление — control

        центральное устройство управления — mean control unit, MCU

Усилитель — amplifier

Установка — set

        начальная~ (переустановка) — reset

Устройство — device

Утечка — leakage

Хранение — storage

Частота — frequency

Шестнадцатеричный — hexadecimal

Шина — bus

Элемент (гальванический) — cell, battery

Таблица П6.2

Англо-русский

AC (alternating current) — переменный ток

Access — доступ

Accuracy — точность (погрешность)

ADC (analog-to-digital converter) — аналого-цифровой преобразоватепь

Adding — сложение

Adjuist — регулировать

Adjuistment — регулировка

Amperage — сила тока

Amplifier — усилитель

Band — полоса (частот)

Bandwidth — ширина полосы

Battery — элемент (гальванический)

Bias — смещение; напряжение смещения

Binary — двоичный

Board — плата

Bridge — мост

       rectifier~ выпрямительный мост

Bus — шина

Button — кнопка, клавиша

Capacitor — конденсатор

Capacity, capacitance — емкость

Case — корпус

Cell — ячейка, элемент (гальванический)

Channel — канал

        data transfer~ канал передачи данных

Charge — заряд

Check — проверка, контроль

Circuit — схема

Clock — синхронизация; генератор тактирующих импульсов

Coil — индуктивность (катушка индуктивности)

Conductor — проводник

Connect — соединение

Connector — соединитель (разъем)

Control — управлять, регулировать, управление

Converter — преобразователь

Cord — гибкий провод (шнур)

Correction — поправка

Counter — счетчик

CPU (central processor unit) — центральный процессорный блок

Current — ток

       base~ ток базы

       bias~ ток смещения

       saturation~ ток насыщения

       sink~ втекающий ток

       source~ вытекающий ток

Cycle — период (импульсов)

Data — данные

DC (direct current) — постоянный ток

Decimal — десятичный

Delay — задержка

Device — устройство

Direct — прямой

Division — деление

Divisor — делитель

Drain — сток

Drift — дрейф

Effective — действующий (значение напряжения)

Erase — стирание

External — внешний

Frequency — частота

Gain — коэффициент усиления

Gate — затвор (полевого транзистора); логический элемент, вентиль (AND gate)

Ground — земля

Hexadecimal — шестнадцатеричный

Input — вход

Internal — внутренний

Key — кнопка

Kit — набор

Lead — вывод (компонента)

Leakage — утечка

Limit — предел

Loop — контур обратной связи; цикл (в программе)

MCU — (mean control unit) центральное устройство управления

Measuring — измерение

Memory — память

Mode — режим (работы)

Mount — монтировать

Multiplex — объединение (каналов)

Multiplication — умножение

Multiplier — умножитель

Octal — восьмеричный

Offset — смещение

Output — выход

Package — корпус

Parallel — параллельный

Pin — вывод (компонента)

Power supply — источник питания

Power — мощность

Power — питание

Random — произвольный, случайный

Range — диапазон

Rate — показатель

Ratio — отношение

Rectifier — выпрямитель

Reset — переустановка; начальная установка

Scale — диапазон

Semiconductor — полупроводник

Serial — последовательный

Set — установка

Socket — панель (для микросхем)

Soldering — пайка

Source — исток, источник

State — состояние

Storage — хранение

Subtraction — вычитание

Support — поддержка

Switch — переключатель

Unit — блок (узел, устройство)

Value — значение

Voltage — напряжение

      high~ высокий уровень напряжения

      low~ низкий уровень напряжения

      supply~ напряжение питания

— gain — коэффициент усиления по напряжению

Watchdog — сторожевой (таймер)

Wire — провод

Zero — ноль