|
организовать задержку |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 16)
|
Nov 12 2004, 14:35
|

Частый гость
 
Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040

|
Цитата(romez777 @ Nov 12 2004, 11:04 AM) Пытаюсь сделать задержку в 1 сек. Использую 16-битный таймер, выставляю prescaler CLK/1024, Да все правильно - только я бы использовал CLK/8. Это гораздо удобнее. И организовал бы какие-нибудь постоянные системные тики. например, 1 мс. Это как правило, все равно всегда нужно.
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
Nov 13 2004, 08:14
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата(-Tумблер- @ Nov 12 2004, 06:35 PM) Цитата(romez777 @ Nov 12 2004, 11:04 AM) Пытаюсь сделать задержку в 1 сек. Использую 16-битный таймер, выставляю prescaler CLK/1024, Да все правильно - только я бы использовал CLK/8. Это гораздо удобнее. И организовал бы какие-нибудь постоянные системные тики. например, 1 мс. Это как правило, все равно всегда нужно. Приветствую. А чем кстати удобнее предделитель меньшего размера? И второе - с какой целью организовывать свои системные тики, почему недостаточно аппаратного генератора?
|
|
|
|
|
Nov 13 2004, 10:52
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата(IgorKossak @ Nov 12 2004, 08:25 PM) Использование регистра сравнения даёт абсолютно точный отсчёт временнЫх интервалов (как сказал lamerok) в отличие от перезаписи регистра счётчика (ошибка на время реакции на прерывание). А можно ли как-то средствами avr studio наблюдать длительность выполнения функций, т.е. как мне проверить что задержка действительно 1 сек? Если в avr studio такого механизма нет, то кто умеет?
|
|
|
|
|
Nov 15 2004, 04:40
|
Участник

Группа: Новичок
Сообщений: 23
Регистрация: 13-11-04
Из: Нижний Новгород
Пользователь №: 1 120

|
Цитата(-Tумблер- @ Nov 12 2004, 06:35 PM) Цитата(romez777 @ Nov 12 2004, 11:04 AM) Пытаюсь сделать задержку в 1 сек. Использую 16-битный таймер, выставляю prescaler CLK/1024, Да все правильно - только я бы использовал CLK/8. Это гораздо удобнее. И организовал бы какие-нибудь постоянные системные тики. например, 1 мс. Это как правило, все равно всегда нужно. Доброе утро. вообще то если поделить CLK/8 = 8Mhz/8 = 1Mhz, что эквивалентно 1 мкс, а не мс. А в чем автор абсолютно прав, сначало нужно получть CLK для таймера, которое кратно целому числу требуемого времени. Поэтому можно попробовать получить остальное деление обычным счетом числа до 1000000. интревал будет выдержан с достаточной точностью.
|
|
|
|
|
Nov 17 2004, 03:35
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата(IgorKossak @ Nov 15 2004, 01:12 PM) Цитата(romez777 @ Nov 13 2004, 02:52 PM) А можно ли как-то средствами avr studio наблюдать длительность выполнения функций, т.е. как мне проверить что задержка действительно 1 сек? Проще простого, (но только в симуляторе  )! Устанавливаете нужную частоту генератора, точку останова в обработчике прерывания по таймеру, запускаете программу, по достижении точки останова обнуляете Stop Watch и запускаете снова. В Stop Watch как раз и будет искомый интервал. приветствую. никак не найду в студии stop watch, куда правильно смотреть? :-) у меня avr studio 4
|
|
|
|
|
Nov 17 2004, 07:18
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(romez777 @ Nov 17 2004, 06:35 AM) никак не найду в студии stop watch, куда правильно смотреть? :-) у меня avr studio 4 При открытом проекте и запущенном симуляторе в поле рабочего пространства (Workspace), которое если не видно включить View/Workspace, перейти на вкладку I/O (там их три: Project, I/O, Info), раскрыть группу Processor. В строке Stop watch, для того, чтобы сбросить value, дважды кликнуть на величине. Всё. PS Для того, чтобы поменять частоту МК, выбрать или ввести новое значение в соотв. поле меню Debug/AVR Simulator Options
|
|
|
|
|
Nov 17 2004, 09:51
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
[quote=IgorKossak,Nov 17 2004, 10:18 AM] [QUOTE=romez777,Nov 17 2004, 06:35 AM] никак не найду При открытом проекте и запущенном симуляторе в поле рабочего пространства (Workspace), которое если не видно включить View/Workspace, перейти на вкладку I/O (там их три: Project, I/O, Info), раскрыть группу Processor. В строке Stop watch, для того, чтобы сбросить value, дважды кликнуть на величине. Всё. PS Для того, чтобы поменять частоту МК, выбрать или ввести новое значение в соотв. поле меню Debug/AVR Simulator Options [/quote] огромное спасибо
|
|
|
|
|
Nov 18 2004, 08:04
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата(IgorKossak @ Nov 12 2004, 07:25 PM) Использование регистра сравнения даёт абсолютно точный отсчёт временнЫх интервалов (как сказал lamerok) в отличие от перезаписи регистра счётчика (ошибка на время реакции на прерывание). Приветствую. То есть правильно ли я понял, что основное отличие compare режима от счетчика в высокой точности?
|
|
|
|
|
Nov 18 2004, 10:53
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата(lamerok @ Nov 18 2004, 12:39 PM) 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. Где я напортачил?
|
|
|
|
|
Nov 18 2004, 12:19
|

Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 22-06-04
Из: Челябинск
Пользователь №: 88

|
romez777 В принципе все правильно, за исключением того, что наверное писать в таймер не надо, можно просто прочитать из него и прибавть к этому значению, period. Насчет авр студио, тут я вам не помошника, так как работаю под ИРОм, возможно авр студио не может в прерывания ходить в симуляторе, но я не знаю. Проверьте еще у вас вообще меняется значение TCNT??? Может оно не менятся. Проверьте тот ли захват вы используете, там их несколько.
|
|
|
|
|
Nov 18 2004, 23:50
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата(lamerok @ Nov 18 2004, 03:19 PM) romez777 В принципе все правильно, за исключением того, что наверное писать в таймер не надо, можно просто прочитать из него и прибавть к этому значению, period. Насчет авр студио, тут я вам не помошника, так как работаю под ИРОм, возможно авр студио не может в прерывания ходить в симуляторе, но я не знаю. Проверьте еще у вас вообще меняется значение TCNT??? Может оно не менятся. Проверьте тот ли захват вы используете, там их несколько. Но начальное значение в таймер поместить надо? ПРи отладке TCNT0 увеличивается, тут все в порядке  Я использую WinAVR, там сигнал прерывания по сравнению определен как SIG_OUTPUT_COMPARE0.
|
|
|
|
|
Nov 19 2004, 01:25
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата(IgorKossak @ Nov 15 2004, 01:12 PM) Проще простого, (но только в симуляторе  )! Устанавливаете нужную частоту генератора, точку останова в обработчике прерывания по таймеру, запускаете программу, по достижении точки останова обнуляете Stop Watch и запускаете снова. В Stop Watch как раз и будет искомый интервал. Приветствую. Попробовал это проделать в режиме пошаговой отладки - могу менять значение stop watch. Если же запустить (f5), то симулятор не позволяет этого: IO-view cannot set values while target is running Опять тапки?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|