Страница 1 из 1

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

Добавлено: Пт дек 30, 2011 16:16:27
akulov
В Atmega32 таймер2 насстроен на работу от внешнего часового кварца 32768Гц, Кдел.=1, прерывание по переполнению, на выходе имеем 128Гц.
Выставил:

Код: Выделить всё

ASSR=0x08;
TCCR2=0x01;
TCNT2=0x00;
OCR2=0x00;

TIMSK=0b01000010; 

Мне нужно подкорректировать частоту на выходе таймера. Изменяю начальный код в регистре TCNT2, ничего не изменяется.
Пробовал выставить переполнение по совпадению:

Код: Выделить всё

 ASSR=0x08;
TCCR2=0x09;
TCNT2=0x00;
OCR2=0x7F;

TIMSK=0b10000010;

тогда не выходит на счетный режим.
Может еще что-то надо менять?

Re: Помогите настроить таймер в Atmega

Добавлено: Пт дек 30, 2011 16:48:31
pyzhman
в регистре TCNT2
Его надо менять в обработчике прерывания.

Re: Помогите настроить таймер в Atmega

Добавлено: Пт дек 30, 2011 20:22:07
akulov
pyzhman писал(а):
в регистре TCNT2
Его надо менять в обработчике прерывания.
Пробовал менять в обработчике прерывания таймера2, программа зацикливается и постоянно возвращается в исходное состояние.
В программировании я новичок!
Есть программа для часы/будильник/метеостанция. Есть коррекция хода часов, но шаг коррекции 1/128Гц. Это много, часы или сильно отстают или спешат. Хотел подправить корректировкой счетчика таймера, но не знаю как это программно сделать. Программа написана в CodeVisionAVR, исходный код:

Re: Помогите настроить таймер в Atmega

Добавлено: Сб дек 31, 2011 10:35:05
pyzhman

Код: Выделить всё

        OutInd(0);
        OutInd(1);
        }
TCNT2= 0x0000;// подбираем здесь.     
}              

Re: Помогите настроить таймер в Atmega

Добавлено: Сб дек 31, 2011 12:22:13
akulov
pyzhman писал(а):

Код: Выделить всё

        OutInd(0);
        OutInd(1);
        }
TCNT2= 0x0000;// подбираем здесь.     
}              
Спасибо, все работает, буду подбирать.
В интернете вычитал, что
После любой записи в регистры асинхронного таймера нужно дождаться установки соответствующего этому регистру флага прерывания, обработать его или сбросить, и только потом валиться в спячку
И еще, нужно дождаться записи кода в регистр. Пишут, что запись происходит через 2(3) такта.
Я написал

Код: Выделить всё

        }
TCNT2= 0x0000;// подбираем здесь.
while (ASSR&0b00000100);     
}
Правильно ли я сделал?
С наступающим Новым Годом!

Re: Помогите настроить таймер в Atmega

Добавлено: Вс янв 01, 2012 13:11:39
pyzhman
валиться в спячку
Судя по стилю - чья-то отсебятина, возможно и верная. Читайте даташиты, дабы все было чики-пуки.
С Новым годом!

Re: Помогите настроить таймер в Atmega

Добавлено: Вт янв 03, 2012 15:04:28
watchmaker
отсебятина
Ди Халта?