Sfera-perm.ru

Сфера Пермь
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Таймер счетчик для atmega32

Таймер счетчик для atmega32

Описание работы таймера/счётчика 1.
Прерывания от TC1

Таймер/счётчик 1 (TC1) представляет из себя 16-битный модуль, содержащий 10 8-битных регистров. Эти регистры фактически являются набором из 5 16-битных регистров. Счёт происходит в регистрах TCNT1H (Timer counter 1 High byte) и TCNT1L (Low byte), вместе составляющих 16-битный регистр TCNT1. ВНИМАНИЕ! Если использовать прямое чтение 8-битных регистров TCNT1H и TCNT1L, то нельзя быть уверенным, что эти регистры прочитались одновременно. Может произойти следующая ситуация: Счётчик содержал значение $01FF, Вы считали TCNT1H (содержащий значение 01 в какую-то переменную). За это время произошёл счётный импульс, и содержимое TCNT1L стало равно $00, а в TCNT1H записалось значение $02. Теперь Вы читаете значение TCNT1L в другую переменную, получаете в этой переменной значение $00 (ведь таймер-счётчик уже произвёл счёт). 16-битное значение этих переменных получилось $0100, но на момент считывания старшего байта содержимое счётчика было $01FF, и младший байт у Вас должен был прочитаться как FF. Для предотвращения такой ситуации служит временный регистр, содержащийся в блоке таймера-счётчика. Этот регистр прозрачный, т.е. действует автоматически. При считывании значения регистра TCNT1L в переменную, содержимое TCNT1H попадает в этот регистр. Затем при чтении старшего байта в переменную, считывается значение временного регистра. Временный регистр абсолютно прозрачен для пользователя, но для его корректной работы необходимо соблюдать такую последовательность действий:
Для 16-битной операции записи, старший байт должен быть записан первым. Младший — вторым.
Для операции 16-битного чтения, младший байт должен быть прочитан первым, а содержимое старшего байта считывается вторым.
Регистр TCCR1A служит для задания режимов работы таймера/счётчика 1:

Биты COM1A1,COM1A0, COM1B1 и COM1B0 — контролируют поведение выводов OC1A и OC1B.
Биты FOC1A, FOC1B, WGM11 и WGM10 служат для задания работы ТС1 как широтно-импульсного модулятора.
Скорость счёта ТС1 можно установить в регистре TCCR1B:

Где биты ICNC1, ICES1, WGM13 и WGM12 также служат для PWM, а CS12, CS11 и CS10 настраивают скорость счёта следующим образом:

В случае, если в эти биты записаны значения 000, ТС0 остановлен. Если записано 001, то тактовая частота процессора подаётся через схему делителя без изменений, и на каждый такт процессора ТС1 увеличивает значение в регистре TCNT1. Соответственно, если в CSxx Записано 101, то увеличение значения в TCNT1 происходит на каждый 1024-ый такт процессора.

16-битные регистры OCR1A и OCR1Bслужат для задания значения, при достижении которого в режиме счёта, ТС1 генерирует соответствующие прерывания.

Обработка прерываний от TC1

ТС1 при переполнении значения TCNT1 посылает процессору сигнал Timer/Counter 1 Overflow. Также процессору посылается сигнал Timer/Counter 1 A или B Compare Match при совпадении значений в регистрах TCNT1 и OCR1A и OCR1B соответственно. Реакция процессора на эти сигналы (вызов соответствующих прерываний) зависит от значения регистров TIMSK и флага I в Status регистре процессора.
Для задания реакции на события TC1 в регистре TIMSK служат четыре бита:

Читайте так же:
Есть ли льготы для пенсионеров по установке счетчиков

Бит 2 — TOIE1 — Когда этот бит установлен в 1 и разрешены прерывания, процессор реагирует на сигнал переполнения ТС1 и вызывает прерывание по вектору $010 (OVF1addr).
Бит 3 — OCIE1B — Когда этот бит установлен в 1 и разрешены прерывания, процессор реагирует вызовом прерывания по вектору $00E (OC1Baddr) на событие совпадения счёта с константой в регистре OCR1B. Бит 4 — OCIE1A — Когда этот бит установлен в 1 и разрешены прерывания, процессор реагирует вызовом прерывания по вектору $00C (OC1Aaddr) на событие совпадения счёта с константой в регистре OCR1A. Бит 5 — TICIE1 — Если установлен этот бит и разрешены прерывания, разрешено прерывание захвата ТС1, расположенного по вектору $00A (ICP1addr).

Таймер счетчик для atmega32

Возможности тестера:

Постоянное напряжение 0.00 — 5.00 В
Постоянное напряжение 00.0 +/- 99.9 В
Прозвонка диодов 0 — 5000 мВ
Сопротивление 1 Oм — 50 MOм с точность два разряда, автомат диапазона
Емкость 1 пФ — 65000 мкФ с точностью три разряда, автомат диапазона
ESR конденсаторов 0 — 200 Oм с шагом 0.25 Ом
Индуктивность 1мГ — 65000 мГ с точностью 1мГ, в одном диапазоне
Счетчик импульсов 0 — FFFFFFFF
Частотомер 0 — 10 МГц с точностью 1Гц, в одном диапазоне
Генератор импульсов 0 — 10 МГц
Логический анализатор: асинхронный, длинна записи 2048 бит, чтение автономное на индикатор, дискретизация до 2МГц, выбор условия старта

Все режимы на один вход, переключение режимов кнопками, подтверждение звуком
Питание от внутреннего аккумулятора


Управление прибора програмное, поэтому особо описывать нечего. Процессор опрашивает клавиатуру, получает управляющие сигналы и выставляет регистры своих внутренних таймеров, ацп, портов и т.д. в соответствии с выбранным режимом. Для пользователя это выглядит так: — подача питания — звуковой сигнал — режим напряжгние (можно мерять) — нажатие кнопки — звуковой сиенал — режим частотомер (можно мерять) — нажатие кнопки — и т.д. Режимы подтверждаются соответствующей индикацией. Режимы переключаются по кольцу. Кнопка-2 гонит кольцо вперед, кнопка-1 назад, кнопка-0 служебная используерся для обнуления счетчика импульсов, переключения ситем счисления индикации и т. п.

Режимы работы тестера:


Программа написана на MikroBasic for AVR от фирмы Microelektronica. Критичные участки кода на встроенном в Basic Assembler.

Фьюзы нужно выставлять следующие: SUT0=0, CKOPT=0

Переключение режимов осуществляется через опрос трех кнопок и переключателя делителя напряжения для диапазона 100В. Опрос общий для всех режимов и ведется постоянно.

Напряжение в диапазоне до 5.00V измеряется непосредственно входом ADC0. Напряжение в диапазоне до +/- 100.0V измеряется через делитель двумя входами ADC5 и ADC7 поочереди, для определеня полярности. Делитель подключается механически переключателем см. схему.

Читайте так же:
Тарифы по воде для жильцов без счетчика

Прозвонка — на вход подается 5V через резистор 560 Ом. ADC0 измеряет падение напряжения на p-n переходе диода.

Сопротивление — измеряется в семи поддиапазонах пересчитывается по формуле см. исходник.

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

ESR — измеряется просто, как активное сопротивление разряженнго конденсатора.

Индуктивность — измеряется также как и емкость только все наоборот.

Счетчик импульсов — в качестве счетчика импульсов используется аппаратный таймер-счетчик плюс расширение до 32 разрядов за счет двух регистров, логические уровни выводятся символьном виде H L U, соответственно высокий низкий неопределенный.

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

Генератор импульсов — аппаратный таймер-счетчик в режиме генератора, либо програмный генератор.
Логический анализатор — программа с определенной частотой опрашивает входной пин контроллера, данные о состоянии пина сдвигаются в аккумулятор, содержимое аккумулятора перезаписывается в память (RAM контроллера), адрес памяти инкрементируется и так далее пока весь блок памяти не закончится. Чтение происходит в обратном порядке по нажатию соответствующей кнопки. За одно нажатие кнопки на индикатор выводится содержимое четырех байт памяти.

СТОРОЖЕВОЙ ТАЙМЕР В МК AVR

Рис. 4.5. Структурная схема сторожевого таймера

других непредвиденных ситуаций, препятствующих ее нормальному выполнению. Структурная схема сторожевого таймера приведена на рис. 4.5.

Для управления сторожевым таймером предназначен регистр WDTCR. Формат регистра приведен в табл. 4.11.

Таблица 4.11. Формат регистра WDTCR

Для включения;выключения сторожевого таймера используют два разряда регистра WDTCR-WDE и WDTOE. Если разряд WDE установлен в 1, сторожевой таймер включен, если сброшен в О – выключен. Непосредственно перед включением таймера рекомендуется также сбросить его командой WDR.

Для предотвращения непреднамеренного выключения таймера предназначен разряд WDTOE. Дело в том, что выключение сторожевого таймера (сброс разряда WDE) можно осуществить только при установленном разряде WDTOE, который через четыре машинных цикла после установки в 1 аппаратно сбрасывается. Благодаря этому возможность случайного выключения сторожевого таймера практически исключается.

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

1) одной командой записать 1 в разряды WDE и WDTOE;

2) в течении следующих четырех машинных циклов записать О в разряд WDE.

Период наступления тайм-аута сторожевого таймера задается с помощью разрядов WDP2-WDP0 регистра WDTCR согласно табл. 4.12.

Чтобы избежать непреднамеренного сброса микроконтроллера при изменении периода сторожевого таймера, необходимо перед записью разрядов WDP2-\^P0 запретить работу таймера либо сбросить его (WDR).

Читайте так же:
Длина прямого участка трубы перед счетчиком

Таблица 4.12. Задание периода сторожевого таймера для AT90S8515

Число тактов генератора

Период наступления

тайм-аута (типовое значение)

Программирование сторожевого таймера

Подготовить программу для исследования сторожевого таймера. Полагая, что при нажатии на кнопку SWO тайм-аут таймера наступает через 0,49 с, а при нажатии на SW1 – через 1,9 с, выберем из табл. 4.12 (VCC= 5 В) значения загружаемых коэффициентов согласно заданному периоду сторожевого таймера. В обоих случаях до наступления тайм-аута светодиоды должны быть включены, после происходит сброс микроконтроллера, и светодиоды гаснут.

Программа для микроконтроллера приведена ниже. (Внимание! Перед программированием микроконтроллера ATmega8515 в окне STK500 AVR Studio 4 на вкладке Fuses установить флажок S8515C и запрограммировать конфигурационную ячейку.)

Коммутация выводов: SWO – PDO, SW1 – PD1, LED – РВ 10-проводным шлейфом.

.•Программа 4.6 для МК АТ9х8515: демонстрация работы ;сторожевого таймера с независимым генератором. ;При нажатии на SWO (PERI0D_1) наступление тайм-аута .•происходит через 0,4 9 с (время включения светодиодов) , ;SW1 (PERI0D_2) – через 1,9 с.

.•Соединения: PDO : PD1-SW0 : SW1, PB-LED (10-проводной шлейф)

.include «8515def.inc» ;файл определений AT90S8515

.-.include «m8515def. inc» ;файл определений ATmega8515

.def temp = rl6 ;временный регистр

.Выводы порта PD

.equ PERI0D_1 = 0

.equ PERI0D_2 = 1

rjmp INIT .-обработка сброса ;***Инициализация МК

INIT: Idi temp, low (RAMEND) .-установка

out SPL,temp ; указателя стека

Idi temp, high (RAMEND) .- на последнюю

out SPH,temp ; ячейку ОЗУ

clr temp .-инициализация порта PD

out DDRD,temp ; на ввод

Idi temp, 0x03 .-включение подтягивающих

out PORTD,temp ; резисторов порта PD

ser temp ;инициализация порта РВ

out DDRB,temp ; на вывод

out PORTE,temp ;выключение светодиодов

Idi temp,$18 ;выключение

out WDTCR,temp ; сторожевого

Idi temp,$10 ; таймера:

out WDTCR,temp ;WDE=0

WAIT_SWO: sbic PIND,PERI0D_1 ;ожидание нажатия

rjmp WAIT_SW1 ; кнопки PERI0D_1

;***Назначение периода наступления тайм-аута = 0,4 9 с clr temp ;включение

out PORTB,temp ; светодиодов

Idi temp,$OD ;включение сторожевого таймера, out WDTCR,temp ; период 0,4 9 с WAIT_SW1: sbic PIND,PERI0D_2 ;ожидание нажатия

rjmp WAIT_SWO ; кнопки PERI0D_2

;***Назначение периода наступления тайм-аута = 1,9 с clr temp ;включение

out PORTB,temp ; светодиодов

Idi temp,$OF ;включение сторожевого таймера, out WDTCR,temp ; период 1,9 с rjmp WAIT_SWO

Задания для самостоятельного программирования

1. Изменить программу 4.1, добавив в нее обработку нажатия кнопки, исключающую влияние дребезга.

Для этого запрограммировать линию порта РВО на вывод для программного ввода событий в таймер. Ввод событий выполнять при условии замыкания кнопки SWx, присоединенной к порту (линию и порт выбрать самостоятельно). Выполняя проверку состояния кнопки SWx, эмулировать сигнал 1 на выводе РВО при замкнутом состоянии О кнопки. Перед загрузкой программы выполнить ее отладку в AVR Studio и, убедившись в правильности работы программы, проверить ее в STK500.

2. Изменить программу 4.1 так, чтобы при замыкании кнопки START (SW1) состоялся вывод на индикаторы числа зарегистрированных событий.

Читайте так же:
Варфрейм что такое комбо счетчик

3. Подготовить программу по примеру 4.2 для проверки работы таймера;счетчика Т1 в режиме таймера. Время включения светодиодов 1 и 8 с.

4. Написать программу, которая каждые 50 мс по запросу прерывания от таймера считывает состояние кнопочного регистра SW, при замыкании определяет номер замкнутой кнопки и высвечивает его на линейке светодиодов.

5. Написать программу для электронного секундомера, предусмотрев вывод секундных значений в младшзто тетраду, десятков секунд – в старшую тетраду светодиодной линейки STK500. Для отсчета времени использовать 16-разрядный таймер Т1, при переполнении которого формируется запрос прерывания для вызова обработчика прерывания, выполняющего накопление таймерных интервалов времени и обновление показаний индикатора.

Таймер на микроконтроллере atmega8

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

Компактные размеры

Видео проверки таймера

Сердцем данного таймера является очень популярный и уже не дорогой микроконтроллер Atmega8. Вы можете сказать, что для прошивки нам потребуется программатор которого нет, но это не так, для прошивки Atmega достаточно всего пять коротких 10-15 см. проводков подключенных через резисторы 150-200 Ом. напрямую к LPT порту по этой схеме.

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

На этом рисунке Вы видите: Схему распиновки ножек МК для подключения и прошивки.

Пункт 1. Подготовим все необходимое для изготовления таймера.

Самые обязательные радиодетали схемы, остальное обычно можно подобрать у себя дома, самая маленькая микросхема, это часы DS1307.

Нам потребуются такие радиоэлементы:
• Микроконтроллер Atmega8
• Интегральные часы DS1307
• LCD жидкокристаллический индикатор
• Стабилизатор 7805
• Конденсатор 500-1000 Мф — 16 вольт.
• Реле или электронный ключ (в зависимости от нагрузки которая планируется подключаться).
• Резисторы сопротивлением 5,1ком — 3 шт., резистор переменный (по мануалу LCD дисплея).
• Кварц часовой 32768 Гц.
• Кнопки без фиксации — 4 шт.
• Батарейка таблетка на 3 вольта.
• Текстолит для платы.
• Небольшой трансформатор

6-12в.
• Коробка распаечная для корпуса.
+ Для программатора: резисторы 150-200 Ом. — 4 шт., разъем LPT порта (для удобства, не обязателен).

Обязательные инструменты каждого радиолюбителя:
• Паяльник для пайки микросхем, паяльник для пайки пассивных радиодеталей и проводов.
• Тестер для прозвонки дорожек и проверки радиодеталей.
• Олово, канифоль.
+ Принтер лазерный (для изготовления платы или другой способ).

Пункт 2. Приступим к изготовлению.

Таймер будем делать по этой главной схеме.

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

Читайте так же:
Счетчики циклов для пресс форм

Лично я своем таймере применил вот такую схему БП и исполнительное устройство на транзисторе и реле.

Они более компактные (без радиатора), но менее мощные, чем простое реле.

В соответствии с главной принципиальной схемой + БП + ИУ и анализом монтажных габаритов вашей коробки для корпуса, а также размеров подобранных радио элементов, проектируем форму, размер и рисунок дорожек на плате. Для этого удобно пользоваться программой Sprint Layout.

Для моего устройства получилась вот такая простая плата.

400C вместо обычных

200С, я кстати когда-то по глупости купил этот принтер именно для ЛУТ :(., поэтому в результате моя плата рисована маркером.
Нанесенный на медь рисунок вытравливаем в ванночке с хлорным железом или любым другим специальным раствором.

На готовую плату припаиваем детали согласно схеме, особое внимание обращаем при монтаже и пайке микросхемы часов и кварцевого элемента. Длина дорожек между ними должна быть минимальной, а лучше использовать микро кварц из наручных часов и припаять его непосредственно к ножкам МС часов. Все свободное пространство рядом с МС часов и кварца заполняем площадками корпуса (GND). Батарея необходима для поддержания часов в рабочем состоянии во время отключения от сети. Если по какой-то причине вы не стали устанавливать эту батарейку, то посадите плюсовой провод на корпус, иначе часы просто не пойдут.

Микроконтроллер прошиваем программатором или с помощью 5 проводков.

Автор прошивки специально для удобства (за что ему спасибо) и не стал изменять заводские фьюзы, что очень сильно облегчает, без заморочки, прошивку для начинающего радиолюбителя. Если МК еще не использовался, новый из магазина, то просто заливаете прошивку и все, но если уже есть изменения в фьюзах, то надо выставить их так CKSEL=0001. Все остальное просто и не нуждается в пояснении.

Пункт 3. Сборка.

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




Управление меню осуществляется четырьмя кнопками.

Меню состоит из трех пунктов, СLOCK -установка часов, TIMЕ — установка таймеров и RESET -сброс всех установленных таймеров.

Сначала заходим (*) в меню часов и выставляем точное время.

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

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

На видео в начале статьи можно посмотреть подробнее о меню.

Я применяю этот таймер для полива гидропоники.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector