roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 06:25

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 16:41 
Не в сети

Зарегистрирован: 05 янв 2009, 01:48
Сообщения: 23
прог. языки: Си
Помогите с установкой таймера в atmega8. Нужно сделать задержку в 8мс. И после каждого переполнения вывести в порт некое значение и опять запустить таймер для следующего отсчета, после чего все повторяется аналогично. Вывод в порт и повторный запуск таймера делаю в прерывании.
Имею: тактовая частота 4МГц,
ставлю коэффициент деления тактовой частоты для таймера 256 (TCCR0=0x04) должен получить частоту на выходе делителя 15625Гц (период 64мкс),
для этого периода в 8-ми милисекудах счетчик должен будет инкрементироваться 125 раз. Так как счетчик 8-ми битный - ставлю начальное значение == 3.
В результате всего получаю интервал 16мс. Что я делаю не так? Вот часть кода:

char step[]={0b00000001,0b00000100,0b00000010,0b00001000,0b00000000}; //то, что будет выводиться в порт по кругу
volatile int nstep=0;

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0 = 3; //опять записать в регистр таймера число 3
SFIOR |= 1<<0; // Сброс предделителя
if (nstep == 5)
{
nstep=0;
};
PORTB = step[nstep] ;
++nstep;
}
void main(void)
{
TIMSK=0x01; // прерывание разрешено
SFIOR |= 1<<0; // Сброс предделителя
TCNT0 = 3; //записать в регистр таймера число 3
TCCR0=0x04; //start timer
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 16:45 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Flint писал(а):
для этого периода в 8-ми милисекудах счетчик должен будет инкрементироваться 125 раз. Так как счетчик 8-ми битный - ставлю начальное значение == 3.
В результате всего получаю интервал 16мс. Что я делаю не так?

А откуда 125 раз то взялось? Вроде 8-битный счетчик, значит 2^8=256 у него состояний? :)

Ставьте начальное значение не 3, а 255-125=130.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 18:12 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Flint писал(а):
после каждого переполнения вывести в порт некое значение и опять запустить таймер для следующего отсчета
Если точные интервалы нужны то счет не останавливайте, а просто обновите число в таймере, а потом делайте действия с портом.

Настройка таймера - http://avr123.nm.ru/z6.htm

Удобно смотреть как считает в симуляторе PROTEUS или VMLAB - сразу ясно что не так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 18:50 
Не в сети

Зарегистрирован: 05 янв 2009, 01:48
Сообщения: 23
прог. языки: Си
Да уж, это я ступил. Не пойму откуда я эти 128 только взял? Да, по поводу счета - я так потом сделал - сначала записать в счетчик новое значение, чтоб он там аппаратно начал считать, а потом уже программно сделать то, что мне надо. Так что задержек между двумя запусками создаваться не будет. Тоько вопрос один остался - как по хорошему сделать - нужно ли в обработчике каждый раз сбрасывать предделитель или нет? А сбросить его только один раз - при первом старте, в main().

Добавлено спустя 1 минуту 54 секунды:
avr123.nm.ru, там то я и смотрел :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 19:15 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Flint писал(а):
нужно ли в обработчике каждый раз сбрасывать предделитель или нет? А сбросить его только один раз - при первом старте, в main().

avr123.nm.ru, там то я и смотрел :)


Дак и делай как там - http://avr123.nm.ru/z6.htm


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 21:07 
Не в сети

Зарегистрирован: 11 янв 2009, 21:09
Сообщения: 57
Откуда: Москва
ФИО: Головлев Александр Александрович
avr123.nm.ru писал(а):
Flint писал(а):
нужно ли в обработчике каждый раз сбрасывать предделитель или нет? А сбросить его только один раз - при первом старте, в main().

avr123.nm.ru, там то я и смотрел :)


Дак и делай как там - http://avr123.nm.ru/z6.htm


Когда требуется получить заданную частоту всегда лучше использовать режим таймера CTC (обнулить таймер при достижении таймером значения OCRx). Тогда не придется думать ни о чем, сколько нопов использовать, когда куда чего записывать... и частота вызова прерывания будет абсолютно точной (с точностью до присутствия в теле основного цикла программы команд CLI и SEI) :)
Т.е. это значительно проще.

_________________
монтаж печатных плат http://www.mplata.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 21:25 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
algol1 писал(а):
avr123.nm.ru писал(а):
Дак и делай как там - http://avr123.nm.ru/z6.htm

Когда требуется получить заданную частоту всегда лучше использовать режим таймера CTC (обнулить таймер при достижении таймером значения OCRx). Тогда не придется думать ни о чем, сколько нопов использовать, когда куда чего записывать... и частота вызова прерывания будет абсолютно точной (с точностью до присутствия в теле основного цикла программы команд CLI и SEI) :)

Т.е. это значительно проще.


Дак там по ссылке ЭТО ИМЕННО и написано !

Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 21:29 
Не в сети

Зарегистрирован: 11 янв 2009, 21:09
Сообщения: 57
Откуда: Москва
ФИО: Головлев Александр Александрович
Так это тааам. А это здесь :)

_________________
монтаж печатных плат http://www.mplata.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 21:30 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
2avr123: А между прочим мне подача информации от algol1 в конкретном и полезном виде больше нравится :P

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 22:01 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
=DeaD= писал(а):
2avr123: А между прочим мне подача информации от algol1 в конкретном и полезном виде больше нравится :P
Отлично ! Больше инфы полезной и разной !

Просто когда у человека появится новый вопрос он может не ждать пока кто-то ответит, а просто взять и прочитать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 22:24 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
avr123.nm.ru писал(а):
Просто когда у человека появится новый вопрос он может не ждать пока кто-то ответит, а просто взять и прочитать.

Бывает такая инфа, про которую не знаешь что вообще такой метод есть, вот в этих случая справочники как раз не помогают, потому что туда тупо не полезешь.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 22:45 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
=DeaD= писал(а):
Бывает такая инфа, про которую не знаешь что вообще такой метод есть, вот в этих случая справочники как раз не помогают, потому что туда тупо не полезешь.

Вот потому я и показал наглядно что ТАМ была инфа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 23:03 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
вся инфа котрую надо читать есть в ДШ.... и сайт ваш, авр, простите ужасен, имхо.... форум он для ощения скорее чем для обмена ссылками... ответом на первый пост могло бы быть: "128? хм, вообще то вешнина 8-ми битного счетчкиа 255.." и человек бы понял что просто затупил...

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 18 янв 2009, 23:31 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Duhas писал(а):
ответом на первый пост могло бы быть: "128? хм, вообще то вешнина 8-ми битного счетчкиа 255.." и человек бы понял что просто затупил...
Точно ! Ответы могут быть разными - ИМХО главное чтоб ответы помогали тому кому нужна помощь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужный интервал для Таймера0 в Atmega8. Не могу установить
СообщениеДобавлено: 19 янв 2009, 23:18 
Не в сети

Зарегистрирован: 05 янв 2009, 01:48
Сообщения: 23
прог. языки: Си
Цитата:
обнулить таймер при достижении таймером значения OCRx

Да, можно и так интервал выдержать. Точный интервал мне не принципиален, но буду знать на будущее как точный реализовать. Но как я понял, режим обнуления при достижении значения в этом контроллере для таймера 0 - нет. А есть в таймере 1. Таймер 0 выборал просто из-за более простой конфигурации. Но чувствую мне понадобится еще один таймер, так что тогда будет кстати и местами их поменять.
Цитата:
А между прочим мне подача информации от algol1

Это где, не подскажите? :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO