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

 
 
 
Reply to this topicStart new topic
> 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
Сергей Борщ
сообщение 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
arttab
сообщение Nov 1 2012, 08:04
Сообщение #3


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

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



не работает - т.е. не заходит в прерывание __interrupt void TIMER0_OVF2_interrupt(void).
в прерывании дергаю вывод и смотрю на осциллографе - интервал остается 64мсек.

"Т2 асинхронно" видимо я не правильно выразился. я имел в виду что перевожу ядро в save mode.

еще по разбираюсь - вроде заработало, но не уверен.

Спасибо!





--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 1 2012, 08:52
Сообщение #4


Гуру
******

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



QUOTE (arttab @ Nov 1 2012, 11:04) *
"Т2 асинхронно" видимо я не правильно выразился. я имел в виду что перевожу ядро в save mode.
А, ну если источник тактирования у таймера и ядра один - то тогда вообще ASSR читать не нужно.


--------------------
На любой вопрос даю любой ответ
"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
arttab
сообщение Nov 1 2012, 09:24
Сообщение #5


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

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



теперь думаю как проверить что ЦП уходит в save mode


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 1 2012, 12:38
Сообщение #6


Гуру
******

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



Загнать в цикл sleep() и дерганье ногой? Если уходит - будет дерганье с частотой таймера, если нет - с частотой ядра.


--------------------
На любой вопрос даю любой ответ
"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
arttab
сообщение Nov 2 2012, 07:11
Сообщение #7


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

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



WD выключил и добавил ногодруганья перед перед и после sleep - дрыгается wink.gif

Спасибо!!!


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th August 2025 - 12:12
Рейтинг@Mail.ru


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