Курсовая работа: Устройство управления системой измерения веса
TCNT1 - данный регистр служит для загрузки и считывания показаний счетчика/таймера.
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
MSB | |||||||
LSB | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Рис. 3.8 – регистр текущего значения счетчика TCNT1
TCCR1B – регистр управления таймером/счетчиком1
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ICNC1 | ICES1 | - | WGM13 | WGM2 | CS12 | CS11 | CS10 |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
Рис. 3.9 – Регистр управления таймером/счетчиком1 TCCR1B
Биты 2, 1, 0 – выбор коэффициента деления предварительного делителя.
CS02 | CS01 | CS00 | Значение |
0 | 0 | 0 | Стоп |
0 | 0 | 1 | СК |
0 | 1 | 0 | СК/8 |
0 | 1 | 1 | СК/64 |
1 | 0 | 0 | СК/256 |
1 | 0 | 1 | СК/1024 |
1 | 1 | 0 | Вн. Сигнал Т1, нар. фронт |
1 | 1 | 1 | Вн. Сигнал Т1, спад. фронт |
Рис. 3.10–Выбор коэффициента деления предварительного делителя.
Инициализация таймера/счетчика1 происходит только при вызове функции Time wate (), которая устанавливается делитель частоты на 1024, путем записи значения PrescalerTmr1= 5 в регистр TCCR1B.
OCR1A – регистр совпадения А таймера/счетчика1. В этом регистре хранятся данные, которые непрерывно сравниваются с текущим значением таймера/счетчика1. Действие по совпадению задается регистрами управления таймером/счетчиком1 и регистром состояния.
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
MSB | |||||||
LSB | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Рис. 3.11 - регистр совпадения А таймера/счетчика1 OCR1A
Рассчитаем значение, которое необходимо занести в OCR1A для сравнения с содержимым таймера/счетчика1.
Количество тактовых импульсов, которые приходят на таймер/счетчик1 за 1 секунду, рассчитывается по формуле:
, где
К – значение делителя частоты
f – значение частоты генератора
Выбираем значение делителя частоты 1024, т.к. это максимально возможный коэффициент деления/задержки. Частота генератора задается путем подключения кварцевого резонатора к соответствующим выводам контроллера. В данном случае был выбран кварц на 7, 3728*106 Гц.
Т.к. необходима выдержка в 5 секунд то:
7200*5=36000
Т.к. прерывание по совпадению таймера/счетчика1 происходит только на следующий такт после совпадения, необходимо от значения 36000 вычесть 1. Это значение присваивается переменной comp_t1=35999, которая заносится в OCR1A.
voidTime_wate(void)
{#asm("cli")
TCCR1B = PrescalerTmr1;
OCR1A = comp_t1;
#asm("sei")
while (Tmr1Flag == 0)
}
3.3 Процедура обработки нажатия кнопки Пуск
Процедура обработки нажатия кнопки Пуск, вызывается при переполнении таймера/счетчика0. Использование таймера для проверки состояния порта через заданные интервалы времени является некоторой защитой от импульсных помех. Еще более повысить устойчивость приема сигнала от датчика импульсов в условиях помех можно за счет использования мажоритарного элемента. Если известно текущее состояние входного сигнала и два его предшествующих состояния, то значение сигнала определяется по следующему принципу:
OldOldPortSignal | OldPortSignal | NewPortSignal | RealSignal | Comment |
0 | 0 | 0 | 0 | НОЛЬ! |
0 | 0 | 1 | 0 | Кажется, ноль |
0 | 1 | 0 | 0 | Кажется, ноль |
0 | 1 | 1 | 1 | Кажется, единица |
1 | 0 | 0 | 0 | Кажется, ноль |
1 | 0 | 1 | 1 | Кажется, единица |
1 | 1 | 0 | 1 | Кажется, единица |
1 | 1 | 1 | 1 | ЕДИНИЦА! |
void CheckButton (void)