Юрий Ревич - Занимательная микроэлектроника
- Название:Занимательная микроэлектроника
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2007
- Город:Санкт-Петербург
- ISBN:978-5-9775-0080-7
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Юрий Ревич - Занимательная микроэлектроника краткое содержание
Для широкого круга радиолюбителей
Занимательная микроэлектроника - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Семейство Tuny (что в буквальном переводе означает «легко запоминающийся») предназначено для наиболее простых устройств, часть таких МК не имеет возможности программирования по последовательному интерфейсу (а АТ-tuny10 даже является однократно программируемым), и потому мы их не будем рассматривать в этой книге (за исключением ATtuny2313, точнее его «классического» аналога AT90S2313, оба они очень удобны для проектирования небольших, но функциональных устройств, и к тому же могут работать с частотой до 20 МГц). Это не значит, что Tuny следует избегать, среди них есть очень удобные и функциональные микросхемы. Но нельзя объять необъятное — здесь в основном мы будем рассматривать Mega.
Перечислим отличительные особенности Mega.
• Flash-пэмять программ от 8 до 128 кбайт (у семейства Classic 2–8 кбайт).
• Статическое ОЗУ (SRAM) от 512 байт до 4 кбайт (для Classic 128–512 байт).
• EEPROM данных от 512 байт до 4 кбайт (для Classic 128–512 байт).
• Различные способы тактирования: от встроенного RC-генератора, внешней RC-цепочки, внешнего кварцевого резонатора, внешнего сигнала (у Classic — только от кварцевого резонатора или внешнего сигнала). Удобная возможность для удешевления и упрощения схем, хотя и усложняет начальное программирование кристалла, причем у некоторых старших моделей имеется возможность программного снижения частоты.
• Расширенные режимы пониженного энергопотребления.
• Наличие встроенного детектора снижения напряжения питания (Brown-Out Detector, BOD).
• Усовершенствованный полнодуплексный последовательный синхронноасинхронный порт USART (на практике автором использовался исключительно в режиме обычного UART).
• Последовательный двухпроводной интерфейс TWI (по другому, I 2С — на практике автор никогда не мог его заставить работать лучше, чем программный имитатор I 2 С, пригодный практически для всех моделей AVR).
• Инструкции аппаратного умножения 8-разрядных чисел (в семействе Classic отсутствуют).
Для ознакомления с тем, как устроены МК AVR, возьмем «классический» AT90S8515. Он включает в себя все существенные узлы моделей МК AVR из середины линейки, т. е. как младших Mega, так и старших Tuny, за исключением имеющегося в некоторых моделях АЦП (как, например, в его близком родственнике AT90S8535/ATmega8535, который мы будем широко использовать). Выбор именно Classic обусловлен тем, что блок-схема AYR громоздкая и без того, а в Mega присутствует еще много компонентов, которые для нас останутся второстепенными. Как и АЦП, эти компоненты (Brown-Out Detector, Fuse-биты, USART, дополнительные таймеры и т. п.) мы рассмотрим по ходу дела в дальнейшем.
На рис. 12.2 показана внутренняя структура МК AT90S8515. Нумерация выводов приведена для корпуса DIP-40, кроме этого, процессор выпускается в 44-выводных корпусах PLCC и TQFP (см. рис. 12.1). Даже беглого взгляда на рисунок достаточно, чтобы понять, что для детального рассмотрения структуры этого МК здесь просто не хватит места. Поэтому мы не будем переписывать фирменное описание (с некоторыми подробностями мы познакомимся по ходу дальнейшего изложения), а рассмотрим только некоторые ключевые узлы этой структуры и особенности их функционирования.
Рис. 12.2. Структура AT90S8515
Параллельные порты ввода/вывода
Начнем с внешних портов. В этой модели их четыре, и если подсчитать необходимые выводы (8x4 = 32), прибавить к ним обязательные выводы питания (контакты 20 и 40 ), тактового генератора (контакты 18 и 19 ) и вывод Reset (контакт 9 ), также присутствующий во всех моделях МК без исключения, то получится, что на все остальное остается три вывода. Это, конечно, недостаточно, поэтому почти все выводы портов, кроме своей основной функции (двунаправленного ввода/вывода) несут также и дополнительную. А как они (функции) разбираются между собой? А никак. Никакого специального переключения выводов портов не требуется, просто, если вы, к примеру, в своей программе инициализируете последовательный порт UART, то соответствующие выводы порта D (PD0 и PD1, выводы 10 и 11 микросхемы) будут работать именно в альтернативной функции, как ввод и вывод UART. При этом в промежутках между этим режимом выводов они могут выполнять функцию обычных двунаправленных выводов (хотя на практике это неудобно, потому что приходится применять схемотехнические меры для изоляции функций друг от друга, но иногда к этому прибегают). Аналогичная ситуация со всеми остальными альтернативными функциями — они начинают работать, когда в программе инициализированы соответствующие устройства МК.
По умолчанию все дополнительные устройства отключены, а порты работают на вход, причем находятся в состоянии с высоким импедансом (т. е. высоким входным сопротивлением). Работа на выход требует специального указания, для чего в программе нужно установить соответствующий нужному выводу бит в регистре направления данных (обозначается DDR x , где х — буква, обозначающая конкретный порт, например для порта А это будет DDRA). Если бит сброшен (т. е. равен логическому нулю), то вывод работает на вход (установка по умолчанию), если установлен (т. е. равен логической единице) — то на выход. Причем для установки выхода в состояние «1» нужно отдельно установить соответствующий бит в регистре данных порта (обозначается PORTx), а для установки в «0»— сбросить этот бит. Направление работы вывода (вход-выход, регистр DDRх), и его состояние (0–1, PORTх) путать не следует.
Регистр данных PORTх фактически есть просто выходной буфер, все, что в него записывается, тут же оказывается на выходе. Но если установить вывод порта на вход (т. е. записать в регистр направления логический ноль), как это сделано по умолчанию, то регистр данных DDRх будет играть несколько иную роль — установка его в «0» (так по умолчанию) означает, что вход находится в третьем состоянии с высоким сопротивлением, а установка в «1» подключит к выводу «подтягивающий» (pull-up) резистор сопротивлением около 35 кОм (подобно рис. 11.3, а ; вернитесь к описанию работы подобного выходного каскада на «общую шину» в главе 11 — и вы поймете, зачем он нужен).
Сразу отметим, что встроенный pull-up-резистор лучше употреблять при работе на «общую шину» в пределах одной платы, но в большинстве случаев, когда требуется такой резистор (например, если вы подключаете ко входу выносную кнопку с двумя выводами, которая коммутируется на «землю», или при работе на «общую шину» с удаленными устройствами), лучше устанавливать дополнительный внешний резистор параллельно этому внутреннему, с сопротивлением от 1 до 5 кОм (в критичных для потребления случаях его величину можно увеличить до 20–30 кОм). В ответственных устройствах такой резистор следует устанавливать на выводе 9 (Reset) и на выводах 6, 7 и 8, которые служат для программирования и подключены к программирующему разъему ISP (см. главу 13 ), поскольку их также следует «подтягивать» к напряжению питания (тем более что довольно часто они также используются в качестве обычных входных/выходных линий, что процессу программирования, как правило, не мешает).
Читать дальшеИнтервал:
Закладка: