реклама на сайте
подробности

 
 
> mega88PA асинхронный счетчик2, не получается запустить Т2
arttab
сообщение Nov 1 2012, 03:38
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Если повтор, то извиняйте - не нашел. тыкните куда надо

нужно запустить Т2 асинхронно с последующим переводом power save и с периодическим пробуждению по переполнению. тактирование от от встроенного кварца 8МГц с , делителем на 8

сделал г.код для отладки именно этого момента:
__disable_interrupt();
while(ASSR); //wait 0
TIMSK2=0; // not inerrupt
while(ASSR); //wait 0
ASSR=(0<<AS2);
while(ASSR); //wait 0
TCNT2=5;
while(ASSR); //wait 0
OCR2A=0;
while(ASSR); //wait 0
OCR2B=0;
while(ASSR); //wait 0
TCCR2B=(1<<CS22)|(1<<CS21)|(0<<CS20);//TIMER0_PRECSALER; // ///////////////CLK/256/250 = 15.625 (64ms)
while(ASSR); //wait 0
TCCR2A=0; //ctc
while(ASSR); //wait 0
TIMSK2=(1<<TOIE2); /* TIMER0 ON */
while(ASSR); //wait 0
TIFR2=(0<<TOV2);
while(ASSR); //wait 0


в сон:

while(ASSR);
while ( count_old==count ) {
__enable_interrupt();
SMCR|=(1<<SM1)|(1<<SM0)|(1<<SE);//MCUCR|=(1<<SE);
__sleep();
SMCR&=~(1<<SE);//MCUCR&=~(1<<SE); // Â sleep



--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Nov 1 2012, 07:02
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



А как именно оно не работает? Если надо просто просыпаться, не входя в обработчик прерывания, то перед sleep() надо запретить прерывания.
"Т2 асинхронно" - это с внешним кварцем? Тогда в ASSR надо взвести бит AS2 и проверка while(ASSR) уже будет некорректна. До взведения этого бита можно писать в регистры таймера не дожидаясь снятия статусных битов ASSR.
Запись SMCR |= не самый лучший вариант. SMCR = в этом месте было бы и короче и надежнее.
TIFR2=(0<<TOV2); тоже не имеет смысла - этот флаг сбрасывается записью в него 1.
TCCR2A=0; //ctc - мне кажется тут комментарий не соответствует коду


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 20:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.09322 секунд с 7
ELECTRONIX ©2004-2016