Юрий Ревич - Занимательная микроэлектроника

Тут можно читать онлайн Юрий Ревич - Занимательная микроэлектроника - бесплатно ознакомительный отрывок. Жанр: sci_radio, издательство БХВ-Петербург, год 2007. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Занимательная микроэлектроника
  • Автор:
  • Жанр:
  • Издательство:
    БХВ-Петербург
  • Год:
    2007
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-9775-0080-7
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Юрий Ревич - Занимательная микроэлектроника краткое содержание

Занимательная микроэлектроника - описание и краткое содержание, автор Юрий Ревич, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Книга на практических примерах рассказывает о том как проектировать, отлаживать и изготавливать современные электронные устройства в домашних условиях. Теоретические основы, физические принципы работы электронных схем и различных типов радиоэлектронных компонентов иллюстрируются практическими примерами в виде законченных радиолюбительских конструкций и дополняются советами по технологии изготовления любительской аппаратуры. На доступном уровне излагаются теоретические основы цифровой техники — математическая логика и различные системы счисления. Вторая часть книги полностью посвящена программированию микроконтроллеров, как основы современной электроники. Особое внимание уделяется обмену данными микроэлектронных устройств с персональным компьютером, приводятся примеры программ на Delphi.
Для широкого круга радиолюбителей

Занимательная микроэлектроника - читать онлайн бесплатно ознакомительный отрывок

Занимательная микроэлектроника - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Юрий Ревич
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Доработка программы

Доработку программы измерителя (напоминаю, что за основу берем листинг П5.2, приведенный в Приложении 5 , в разделе «Программа измерителя температуры и давления») начнем с того, что, во-первых, включим питание аналоговой части. Для этого в разделе начальной загрузки, там, где устанавливаются порты («установка портов вход/выход»), вместо команды ldi temp, 0b10000000(перед out DDRD, temp) запишем ldi temp, 0b11000000. Теперь вывод 20 сконфигурирован на выход и для надежности следует добавить еще оператор cbi PortD, 6(т. к. включается ключ низким уровнем).

Во-вторых, инициализируем таймер (Timer 1). В пробной программе записи во flash из главы 16 мы его настраивали ровно на 15 с, а здесь выберем вдвое меньший интервал — 7,5 с. В загрузочную секцию вместо строк инициализации Timer 0 ( ldi temp, (i<и out TIMSK, temp) добавляем строки листинга 17.1.

Листинг 17.1

;++++++++Set Timer 1

ldi temp,high(292 97)

out OCR1AH,temp

ldi temp,low(2 9297)

out OCR1AL,temp

ldi temp,0b00001101

out TCCR1B,temp ;1/1024; очистить после совпадения

ldi temp,(1<< ;разреш. прерывания

;по совпадению для Timer 1 и переполнению Timer 0

out TIMSK,temp

Переключающий режим для вывода PDS-OC1Aздесь мы не используем. Кроме этого, введем переменную count_min, с помощью которой будем считать интервалы в 7,5 с. В секции объявления переменных добавим:

def count_min = r23 ;счетчик 7,5-секундных интервалов

А в секции начальных установок его не забудем обнулить:

clr count_min

Далее введем специальный флаг sleep(пусть будет бит 7 в регистре Flag), который будет сигнализировать о режиме. Если этот бит установлен — пора «спать», если обнулен — работаем, как ни в чем не бывало. По умолчанию он обнулен (см. секцию «начальная установка переменных») и нам ничего не грозит, если мы вставим в основной цикл запуск режима энергосбережения по схеме, согласно листингу 17.2.

Листинг 17.2

Gcykle:

sbrs Flag,7 ;если бит 7 установлен, то засыпаем

гjmp Gcykle ;иначе бесконечный цикл

cli ;на всякий случай запрещаем прерывания; все порты на вход, и нули в разряды, кроме PortD,6

clr temp

out DDRB,temp

out DDRC,temp

out DDRD,temp

out PortB,temp

out PortC,temp

ldi temp,0b01000000 ;выключение питания на всякий случай

out PortD,temp

ldi temp,0b11100000 ;разрешение Sleep, режим Standby прерывание по уровню

out MCUCR,temp

ldi temp,(1< ;разрешение INTO

out GICR,temp

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

Sleep ;наконец, спим

cbr Flag, $80 ;по выходу из сна сбрасываем флаг sleep

clr count_min ;отсчет времени

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

cli ;на всякий случай запрещаем прерывания

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

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

ldi temp,0b11000000 ; знак минус и питание

out DDRD,temp

clr temp

out PortD,temp ;включить аналоговое питание

out MCUCR,temp ;запрещаем режим Sleep

out TCNT1H,temp ;очищаем счетные регистры таймера

out TCNT1L,temp

ldi temp,0b00001101 ; запускаем таймер

out TCCR1B,temp ;1/1024 очистить после совпадения

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

rjmp Gcykle ;бесконечный цикл

Теперь самое сложное: разобраться с прерываниями и установкой флага sleep. Не забудьте заменить retiна rjmp TIM1_COMPAв таблице прерываний, в строке для прерывания Timer1 Compare А ( шестое сверху, не считая RESET). Прерывание таймера иллюстрирует листинг 17.3.

Листинг 17.3

ТIМ1_СОМРА:

inc count_min

cpi count_min,1 ;через 7,5 с разрешаем INTO

brne schet_time

ldi temp,(1< ;разрешение INTO

out GICR,temp ;GIMSK и GIGR — синонимы

schet_time: ;здесь отсчет времени

sbrs count_min,3 ;если бит 3=1, то прошло 8 интервалов =1 мин

reti ;иначе выходим

clr count_min ;в след, раз — сначала

sbr Flag,$80 ;устанавливаем бит sleep

clr temp ;останавливаем таймер

out TCCR1B,temp

reti ;выходим

Если бы мы не связывались с кнопкой, то на этом можно было бы закончить — через 1 минуту после включения у нас измеритель уходит в «сон», из которого его можно вывести только выключением-включением питания или подачей сигнала Reset. Но мы хотим все делать грамотно, потому используем кнопку. Прерывание INTO тогда будет выглядеть так, как показано в листинге 17.4 (также не забудьте заменить в таблице прерываний во второй строке retiна rjmp EXT_INT0).

Листинг 17.4

EXT_INT0:

clr temp

out GICR,temp ;запрещаем внешние прерывания

sbrs Flag,7 ;если были во сне, то больше ничего не делаем

reti

clr temp ;иначе готовимся ко сну

out TCCR1B,temp ;останавливаем таймер

clr temp ;чистим счетные регистры таймера

out TCNT1H,temp

out TCNT1L,temp

ldi temp,0b00001101 ;заново запускаем

out TCCR1B,temp

ldi count_min,7 ;на интервал 7,5 с

reti

Теперь у нас измеритель будет работать как задумывали: после включения через 1 мин. он уходит в режим энергосбережения, когда индикаторы гаснут, и потребление минимизируется. Если нажать на кнопку, то МК «проснется» и выполнит все процедуры после команды Sleep. Если ничего не делать, то через минуту измеритель опять «заснет». Если нажать до истечения этого срока на кнопку (но не ранее, чем через 7,5 с), то он «заснет» через 7,5 с после нажатия. В принципе таймер можно было бы и не останавливать перед засыпанием, но так мы более уверены, что он начнет отсчет с самого начала.

Время задержки вы легко можете регулировать, просто меняя число, которое загружается в регистры OCR1AH/L. Оно рассчитывается исходя из формулы: время задержки в секундах равно частоте кварца в герцах, деленному на коэффициент предварительного деления (1024) и на это число. Например, если вместо 29 297 загрузить 11 719, то пауза до засыпания по нажатию кнопки станет равной 3 с, а время работы сократится менее чем до полуминуты. Чтобы увеличить время «бодрствования» вдвое, команду sbrs count_min,3в прерывании таймера нужно заменить на sbrs count_min,4.

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

В прерывании кнопки для исключения случайного попадания в конец отсчитываемого интервала времени используется очистка регистров таймера. Тогда таймер начнет считать сначала, пока не достигнет заданного числа. Если вам потребуется задать отсчитываемый интервал очень точно, то следует почистить также счетчик предделителя (в семействе Classic такой возможности не было). Для этого в регистре SFIORнужно записать единицу (не ноль!) в бит, соответствующий таймеру: для Timer 1 (а также Timer 0, так как у них предделитель общий) это будет бит 0 под названием PSR10. Этого не нужно делать при установленном счете напрямую (с коэффициентом деления тактовой частоты 1/1), в остальных случаях при запуске таймера в произвольный момент времени счетчик предделителя начнет со случайного числа (за исключением момента начального запуска при включении питания). Чем меньше коэффициент деления и чем больше число, отсчитываемое таймером, тем меньше относительная погрешность, но абсолютная ошибка всегда может достигнуть величины интервала между отчетами таймера (при коэффициенте 1/1 она попросту неустранима, только и всего).

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Юрий Ревич читать все книги автора по порядку

Юрий Ревич - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Занимательная микроэлектроника, автор: Юрий Ревич. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x