romez777 0 12 ноября, 2004 Опубликовано 12 ноября, 2004 · Жалоба Осваиваю avr, atmega162 Пытаюсь сделать задержку в 1 сек. Использую 16-битный таймер, выставляю prescaler CLK/1024, частота чипа 8МГц, соотв. длительность одного тика должна быть 8Mhz/1024=7812.5hz, то есть 0.000128сек. соответственно в TCNT пишем значение 65535-7812=57723 Правильно ли я понимаю, или это все не так происходит? Спасибо за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lamerok 0 12 ноября, 2004 Опубликовано 12 ноября, 2004 · Жалоба Ну в принципе если вы используете прерывание по переполнению или опрашивате флаг переполнения. ИМХО, лучше использовать блок сравнения, тогда просто надо будет в регистр сравнения = TCNT+INTERVAL(7812). Так можно организовать служюу времени, без сбития счетчика, непосредственной записи в регистр TCNT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Tумблер- 0 12 ноября, 2004 Опубликовано 12 ноября, 2004 · Жалоба Пытаюсь сделать задержку в 1 сек. Использую 16-битный таймер, выставляю prescaler CLK/1024, Да все правильно - только я бы использовал CLK/8. Это гораздо удобнее. И организовал бы какие-нибудь постоянные системные тики. например, 1 мс. Это как правило, все равно всегда нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 12 ноября, 2004 Опубликовано 12 ноября, 2004 · Жалоба Использование регистра сравнения даёт абсолютно точный отсчёт временнЫх интервалов (как сказал lamerok) в отличие от перезаписи регистра счётчика (ошибка на время реакции на прерывание). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romez777 0 13 ноября, 2004 Опубликовано 13 ноября, 2004 · Жалоба Пытаюсь сделать задержку в 1 сек. Использую 16-битный таймер, выставляю prescaler CLK/1024, Да все правильно - только я бы использовал CLK/8. Это гораздо удобнее. И организовал бы какие-нибудь постоянные системные тики. например, 1 мс. Это как правило, все равно всегда нужно. Приветствую. А чем кстати удобнее предделитель меньшего размера? И второе - с какой целью организовывать свои системные тики, почему недостаточно аппаратного генератора? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romez777 0 13 ноября, 2004 Опубликовано 13 ноября, 2004 · Жалоба Использование регистра сравнения даёт абсолютно точный отсчёт временнЫх интервалов (как сказал lamerok) в отличие от перезаписи регистра счётчика (ошибка на время реакции на прерывание). А можно ли как-то средствами avr studio наблюдать длительность выполнения функций, т.е. как мне проверить что задержка действительно 1 сек? Если в avr studio такого механизма нет, то кто умеет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Monstrer 0 15 ноября, 2004 Опубликовано 15 ноября, 2004 · Жалоба Пытаюсь сделать задержку в 1 сек. Использую 16-битный таймер, выставляю prescaler CLK/1024, Да все правильно - только я бы использовал CLK/8. Это гораздо удобнее. И организовал бы какие-нибудь постоянные системные тики. например, 1 мс. Это как правило, все равно всегда нужно. Доброе утро. вообще то если поделить CLK/8 = 8Mhz/8 = 1Mhz, что эквивалентно 1 мкс, а не мс. А в чем автор абсолютно прав, сначало нужно получть CLK для таймера, которое кратно целому числу требуемого времени. Поэтому можно попробовать получить остальное деление обычным счетом числа до 1000000. интревал будет выдержан с достаточной точностью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 15 ноября, 2004 Опубликовано 15 ноября, 2004 · Жалоба А можно ли как-то средствами avr studio наблюдать длительность выполнения функций, т.е. как мне проверить что задержка действительно 1 сек? Проще простого, (но только в симуляторе :) )! Устанавливаете нужную частоту генератора, точку останова в обработчике прерывания по таймеру, запускаете программу, по достижении точки останова обнуляете Stop Watch и запускаете снова. В Stop Watch как раз и будет искомый интервал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romez777 0 17 ноября, 2004 Опубликовано 17 ноября, 2004 · Жалоба А можно ли как-то средствами avr studio наблюдать длительность выполнения функций, т.е. как мне проверить что задержка действительно 1 сек? Проще простого, (но только в симуляторе :) )! Устанавливаете нужную частоту генератора, точку останова в обработчике прерывания по таймеру, запускаете программу, по достижении точки останова обнуляете Stop Watch и запускаете снова. В Stop Watch как раз и будет искомый интервал. приветствую. никак не найду в студии stop watch, куда правильно смотреть? :-) у меня avr studio 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 17 ноября, 2004 Опубликовано 17 ноября, 2004 · Жалоба никак не найду в студии stop watch, куда правильно смотреть? :-) у меня avr studio 4 При открытом проекте и запущенном симуляторе в поле рабочего пространства (Workspace), которое если не видно включить View/Workspace, перейти на вкладку I/O (там их три: Project, I/O, Info), раскрыть группу Processor. В строке Stop watch, для того, чтобы сбросить value, дважды кликнуть на величине. Всё. PS Для того, чтобы поменять частоту МК, выбрать или ввести новое значение в соотв. поле меню Debug/AVR Simulator Options Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romez777 0 17 ноября, 2004 Опубликовано 17 ноября, 2004 · Жалоба никак не найду При открытом проекте и запущенном симуляторе в поле рабочего пространства (Workspace), которое если не видно включить View/Workspace, перейти на вкладку I/O (там их три: Project, I/O, Info), раскрыть группу Processor. В строке Stop watch, для того, чтобы сбросить value, дважды кликнуть на величине. Всё. PS Для того, чтобы поменять частоту МК, выбрать или ввести новое значение в соотв. поле меню Debug/AVR Simulator Options огромное спасибо :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romez777 0 18 ноября, 2004 Опубликовано 18 ноября, 2004 · Жалоба Использование регистра сравнения даёт абсолютно точный отсчёт временнЫх интервалов (как сказал lamerok) в отличие от перезаписи регистра счётчика (ошибка на время реакции на прерывание). Приветствую. То есть правильно ли я понял, что основное отличие compare режима от счетчика в высокой точности? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lamerok 0 18 ноября, 2004 Опубликовано 18 ноября, 2004 · Жалоба romez Я думаю, что не правильно ;) Основное отличие - это что, что блок compare он для того и нужен, чтобы задавать нужные интервалы, формировать задержки и т.д. А счетчик он просто считает себе и считает, и трогать его не рекомендуется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romez777 0 18 ноября, 2004 Опубликовано 18 ноября, 2004 · Жалоба romez Я думаю, что не правильно ;) Основное отличие - это что, что блок compare он для того и нужен, чтобы задавать нужные интервалы, формировать задержки и т.д. А счетчик он просто считает себе и считает, и трогать его не рекомендуется. Тогда разбираемся дальше :) По вашему совету немного переделал функцию задержки, дабы она работала через compare регистр. Что имеем: 1) В SREG установил флаг глобальных прерываний 2) в TCCR0 поместил коэф. деления 3) TIMSK определил работу по прерыванию (OCIE0) 4) TCNT0 = VAL; 5) OCR0 = VAL+period; Если я правильно понял даташит, то как только операция сравнения TCNT0 c OCR0 завершится удачно (т.е. TCNT0=OCR0), то сгенерируется прерывание. Отлаживаю в avr studio и никакого перехода на свою функцию обработки этого прерывания не происходит, и даже не выставляется бит OCF0. Где я напортачил? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lamerok 0 18 ноября, 2004 Опубликовано 18 ноября, 2004 · Жалоба romez777 В принципе все правильно, за исключением того, что наверное писать в таймер не надо, можно просто прочитать из него и прибавть к этому значению, period. Насчет авр студио, тут я вам не помошника, так как работаю под ИРОм, возможно авр студио не может в прерывания ходить в симуляторе, но я не знаю. Проверьте еще у вас вообще меняется значение TCNT??? Может оно не менятся. Проверьте тот ли захват вы используете, там их несколько. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться