Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не могу запустить Timer0 в ATtiny261
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Pyku_He_oTTyda
Подскажите взглядом со стороны, в чем ошибка?
Утро убил, понять не могу.
Собственно хочу запустить таймер с переполнением 1мСек

Код
void init_mk(void)
{
ACSRA=0x80;        //запрет компаратора

DDRB =0b01000010; //PB1,PB3,PB6 - выхода
PORTB=0b10110000; //подтягивающие резисторы на входах PB4,PB5
DDRA =0b11111100; //PA2,PA3,PA4,PA5,PA6,PA7
PORTA=0b00000000;

wdt_enable(WDTO_2S);   //сторожевой таймер 2 сек

DIDR0=0x00;
DIDR1=0x00;
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1); //разрешение АЦП 125кГц


PLLCSR=(1<<PLLE);        // Enable the PLL
_delay_us(100);
while ((PLLCSR & 1)==0); // Wait for the PLL to lock
PLLCSR|=0x04;//PLLCSR=(1<<PCKE);        // Enable the 64MHz clock

TCCR1A=(1<<COM1A1)|(1<<PWM1A);  //настройка режима таймера1
TCCR1B=(1<<CS11)|(1<<CS10);     //настройка делителя таймера1
OCR1A=0x01;                     //начальное значение таймера1


TCCR0B=(1<<CS01)|(1<<CS00);     //установка делителя 64 для Timer0
TCNT0H=0x00;
TCNT0L=0x83;                    //начальное значение период 1 mS


TIMSK=(1<<TOIE0);  //разрешение прерывания при переполнении Timer0


}


Заранее спасибо!
МП41
Возможно, проблема в порядке заполнения старших и младших байтов регистра? Это имеет значение, надо посмотреть в даташите, как правильно. У меня по такой причине таймер на совпадение работал неправильно и неадекватно.
mempfis_
У вас нигде нет инициализации TCCR0A (определяет режимы работы) и вы не указали частоту на которой пытаетесь заставить работать ТС0. Если TCCR0A не инициализирован то непонятно в каком режиме он будет работать.

Посмотрел по документации на описание регистров вроде должно быть так:

Код
TCCR0A = 0x00; //тут WGM00 установит режим работы Normal а TCW0 восьмибитный режим
TCCR0B=(1<<CS01)|(1<<CS00);     //установка делителя 64 для Timer0
TCNT0H=0x00;
TCNT0L=0x83; //а можно попробовать так TCNT0=0x0083 пусть компилятор сам разбирается с порядком
TIMSK=(1<<TOIE0);  //разрешение прерывания при переполнении Timer0 доступа


Если вы использует ппрерывание по переполнению то не забывайте в нём заново инициализировать счётный регистр
Код
TCNT0H=0x00;
TCNT0L=0x83;


Я обычно для таких случаев использую прерывание по совпадению и режим сброс по совпадению CTC (бит WGM0=1 в TCCR0A). Удобно т.к. не нужно каждый раз реинициализировать счётный регистр.
GDI
Цитата
Возможно, проблема в порядке заполнения старших и младших байтов регистра?

Вообще то компилятор с таким сам разбирается, хотя можно проверить на этот счем асм файл. Или вы про
Код
TCNT0H=0x00;
TCNT0L=0x83;


Pyku_He_oTTyda а вы опишите что у вас сейчас происходит, таймер вообще не считает или считает но с другим периодом?
В AVR Studio как код себя ведет?
Pyku_He_oTTyda
Таймер не считает вообще, ни в железе, ни в студии.
TCNT0L стоит как вкопанный со значением 0x83.
Студия 4.15, WinAVR 20060421

Цитата
Если вы использует ппрерывание по переполнению то не забывайте в нём заново инициализировать счётный регистр

не забыл, просто не привел этот кусочек
mempfis_
Цитата(Pyku_He_oTTyda @ Dec 1 2008, 13:52) *
Таймер не считает вообще, ни в железе, ни в студии.
TCNT0L стоит как вкопанный со значением 0x83.
Студия 4.15, WinAVR 20060421
не забыл, просто не привел этот кусочек


Тогда попробуйте поставить коэф. деления равный 1 (системная тактовая частота). И посмотрите будет-ли считать в студии. Проверьте настройку ПЛЛ.
Pyku_He_oTTyda
Похоже глюки в студии, dW показало, что таймер считает. А в железе не работало, что кусочек кода по запаре закооментировал.
Спасибо за внимание!
mempfis_
Цитата(Pyku_He_oTTyda @ Dec 1 2008, 14:24) *
Похоже глюки в студии, dW показало, что таймер считает. А в железе не работало, что кусочек кода по запаре закооментировал.
Спасибо за внимание!


Сделал простой проект в ИАРе с вашим МК. ТС0/ТС1 тоже не считают.
Странно то что ТС0 не считает. В нём используется только системная тактовая частота без ПЛЛ.
ARV
Уважаемые!
Цитата из AVR Studio Simulator Help:
Цитата
Notes for Attiny261/461/861
Timer/Counter0 and Timer/Counter1 are not simulated

по-моему, это ответ на ваши проблемы...
Pyku_He_oTTyda
Цитата
ARV

Да, конечно, полностью.
Спасибо!
А куда они эту строчку запихали?
ARV
Цитата(Pyku_He_oTTyda @ Dec 1 2008, 15:04) *
А куда они эту строчку запихали?
дык в help же и запихали smile.gif
В меню студии идем Help - Release Notes and known issues, далее внизу страницы Simulator user guides, ну а там снова внизу Known issues. Но это еще не все - снова внизу странички список поддерживаемых девайсов, и вот уже тут щелчок на нужном откроет списочек конкретных ограничений smile.gif
Pyku_He_oTTyda
Благодарю!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.