roboforum.ru

Технический форум по робототехнике.

запуски таймеров Т0 и Т2 по таймеру Т1 в Атмеге

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

запуски таймеров Т0 и Т2 по таймеру Т1 в Атмеге

Сообщение к561ЛА7 » 11 янв 2014, 22:13

Можно ли аппаратно запустить таймеры ТО и Т2 с частотой предделителя 1024
по достижении таймером Т1 чисел 208 и 416,

сам таймер Т1 считает от нуля до 625 по внешнему прерыванию с частой предделителя 256 100 раз
в секунду


сначала думал написать в бесконечном цикле (не в прерывании) так
( в си++ на кодвижн авр)
Код: Выделить всёРазвернуть
if (TCNT1>208){   //  врубаем счетчик 
TCCR0 = 0x00; //stop timer
TCNT0 = 0x01; //записать в регистр таймера число 1
TCCR0 = 0b00000101; //start timer  - clock/-5  делим частоту на 1024 -
}

if (TCNT1>416){   //  врубаем счетчик
TCCR2 = 0x00; //stop timer
TCNT2 = 0x01; //записать в регистр таймера число 1
TCCR2 = 0b00000101; //start timer  - clock/-5  делим частоту на 1024 -
}



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

если написать
Код: Выделить всёРазвернуть
(TCNT1=208)

то не работает в влаб, счетчики не считают

Т1 запускаю так

Код: Выделить всёРазвернуть
TCCR1A = 0x00; //stop timer
TCCR1B = 0x00; //stop timer
TCNT1 = 0x01; //
TCCR1B = 0b00000100; //start timer  - clock/-4 


может предделитель сбрасывается?
Ваш IP-адрес 85.140.5.459 был внесён в черный список и заблокирован. Для получения дополнительной информации перейдите по ссылке http://www.spamhaus.org/query/bl?ip=85.140.5.459.
Аватара пользователя
к561ЛА7
 
Сообщения: 404
Зарегистрирован: 08 дек 2009, 19:21
Откуда: Й-Ола

Re: запуски таймеров Т0 и Т2 по таймеру Т1 в Атмеге

Сообщение avr123.nm.ru » 11 янв 2014, 23:21

к561ЛА7 писал(а):Можно ли аппаратно запустить таймеры ТО и Т2 с частотой предделителя 1024
по достижении таймером Т1 чисел 208 и 416, сам таймер Т1 считает от нуля до 625


Можно, но програмно.

Вначале поставить прерывание по совпадению Т1 на 208 (возможно на 207 чтоб с учетом времени входа в прерывание получилось 208 - это уже надо в симуляторе точно замерить)

В процедуре этого прерывания:

проверьте что таймер не превысил например 220 (значит это прерывание именно от 208)
сделайте то что нужно на 208.
настройте следующее совпадение на 416.

если превысил 220 то это прерывание по 416.
сделайте то что нужно на 416
настройте след совпадение снова по 208


вот так примерно.

Добавлено спустя 3 минуты 38 секунд:
Код: Выделить всёРазвернуть
if (TCNT1<220){   //  произошел досчет только до 208. 
TCCR0 = 0x00; //stop timer
TCNT0 = 0x01; //записать в регистр таймера число 1
TCCR0 = 0b00000101; //start timer  - clock/-5  делим частоту на 1024 - врубаем счетчик
настроить след "прервание по совпадению" на счет 416 таймера 1
}
else     {   //  произошел досчет только до 416
TCCR2 = 0x00; //stop timer
TCNT2 = 0x01; //записать в регистр таймера число 1
TCCR2 = 0b00000101; //start timer  - clock/-5  делим частоту на 1024 - //  врубаем счетчик
настроить след "прервание по совпадению" на счет 208 таймера 1
         }


Надо убедится что нули TCCR2 = 0b00000101;
не повлияют на другие настройки таймера.

Если влияют то надо не трогать эти биты 7...3
TCCR2 &= 0b11111000; // обнулить биты 2 1 0
TCCR2 |= 0b00000101; // установить биты 2 и 0
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27