Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: Задержка 8-разрядного контроллера  (Прочитано 35882 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« : 19-04-2010 06:10 » 

Контроллер AT90S2313. Мне нужно сделать задержку в 1 мс. Нашел такой пример кода (задержка на 0,5 мс):
Код:
ldi    YH,low(497)
ldi    YH,high(497)
d05_1: sbiw    YL,1
            brne    d05_1
Все понятно, кроме: почему именно 497? Как именно просчитать это магическое число? Например, для 1 мс...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 19-04-2010 06:15 » 

поставь лучше 666 , прикольнее будет Улыбаюсь Имхо - от балды число
Записан

Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #2 : 19-04-2010 06:22 » 

На 666 времени нету. Улыбаюсь
Но формула-то должна бить Меня одолевают смутные сомнения . У меня программа-таймер, мне от балды число нельзя  Не-а...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 19-04-2010 06:26 » 

считаешь число машинных циклов и умножаешь на время выполнения машинного цикла, которое зависит от частоты котнроллера.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #4 : 19-04-2010 06:30 » 

Тоесть, считаем нужное количество тактов, исходя из частоты контроллера (тоесть, знаем, сколько контроллер тратит на 1 такт)? Или я не так понял?

З.Ы. Временно оффлайн.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 19-04-2010 06:37 » 

а, сорри, команду неправильно понял. Наверное, всё же не просто так число подобрано
Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 19-04-2010 06:45 » 

Считаем сколько машинных циклов занимает каждая команда в цикле  (я не знаю о каком контроллере идет речь, и не столь это важно)
Умножаем на количество машинных тактов для выполнения одной команды.
Делим на частоту - получаем нужное время.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 19-04-2010 07:16 » 

Немного понятнее (IMHO): считаем число таков, необходимых для выполнения всех команд в цикле и делим на полученное значение тактовую частоту чипа. Когда нужна повышенная точность, в формулу надо вводить смещение, вызванное исполнением команд инициализации, обслуживающих цикл (загрузка счетчика, возврат из подпрограммы и т.п.).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #8 : 19-04-2010 08:34 » 

а, сорри, команду неправильно понял. Наверное, всё же не просто так число подобрано
Жжешь
Немного понятнее (IMHO): считаем число таков, необходимых для выполнения всех команд в цикле и делим на полученное значение тактовую частоту чипа. Когда нужна повышенная точность, в формулу надо вводить смещение, вызванное исполнением команд инициализации, обслуживающих цикл (загрузка счетчика, возврат из подпрограммы и т.п.).
Это, примерно, я и хотел сказать  Улыбаюсь

Всем огромное спасибо! Понял и сделал.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 19-04-2010 10:01 » 

А таймера нет на этом контроллере ?  Жаль
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 19-04-2010 10:09 » 

resource, а не всегда таймер нужен,
время на инициализацию таймера,
потом в любом случае в таймер счетчик прописывать.
Преимущество таймера - это "многозадачность" (он считает, а ты что делаешь
А если у тебя линейный алгоритм?
Ждать когда таймер выдаст готовность? На малых промежутках проще все же циклом.

Но есть такая штука как прерывания. Если время критично, то на время цикла запрещаются прерывания,
но, не все прерывания нужно отключать - критические нужно оставлять.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 19-04-2010 10:12 » 

resource, таймеры слишком грубы и нуждаются в обработчике прерываний. Когда требуется малая, а тем более - точная задержка, цикл просто необходим. При длительных точных задержках можно комбинировать таймер и цикл.
Кстати, такой подход свойственен не только МК, но и большим ОС.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 19-04-2010 10:18 » 

Ну насчет многозадачности и того, что таймер нужен для длительных интервалов, согласен. Остальное всё весьма спорно.
Что тут грубого? И что с того, что надо обработать прерывание? Там одной командой флаг поставил, а второй вышел из обработчика.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 19-04-2010 10:28 » 

Не точность таймера:
1. Грубые кванты. Обычно дерется частота машинных циклов и еще дополнительно делится.
2. Обработка других прерываний может помешать своевременной обработке прерывания таймера.
3. Команда из нескольких машинных циклов не может быть прервана до завершения.
4. Обработчик прерывания таймера требует много больше ресурсов времени и памяти, чем простая загрузка счетчика. Это может быть критично.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 19-04-2010 10:30 » 

Обычно, таймер имеет самый высокий уровень прерывания (если по уму)
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 19-04-2010 10:59 » 

resource, "высший приоритет"
Не всегда, если по уму.
Все зависит от задач.
Если нужно выдержать точную задержку - то да, а если это просто счетчик, +- лапоть и не критичный, то пусть работает как есть.
Критичные прерывания  - это аварийные сигналы.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 19-04-2010 11:06 » 

Слав, ну это должна быть реально серьезная "авария". Но с AT90S2313 что-то серьезное вообще не вяжется. А если говорить, о промышленных контроллерах (типа сименс), то всё что мы тут понаписали вообще неактуально становится.
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 19-04-2010 11:13 » 

Слав, ну это должна быть реально серьезная "авария". Но с AT90S2313 что-то серьезное вообще не вяжется. А если говорить, о промышленных контроллерах (типа сименс), то всё что мы тут понаписали вообще неактуально становится.
А что там с Сименсами такое, что программные таймеры не актуальны для него?
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 19-04-2010 11:14 » 

Прерывания не актуальны (если о таймерах говорить). Всмысле вручную они там не обрабатываются.
И задержки там делаются исключительно таймерами. Делать на сименсе задержку, забирая драгоценные такты, это вообще немыслимо. Ну и ПО, залитое в контроллер, крутится совсем по другому.
« Последнее редактирование: 19-04-2010 11:20 от resource » Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 19-04-2010 11:17 » 

resource, а как прерывания обрабатываются если не вручную?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 19-04-2010 11:20 » 

resource, подход к программированию контроллеров должен быть одинаков.
И на простом, недорогом контроллере можно замутить систему предупреждения.

А что Сименс? Чи не пример, знали видели.
Огромный ящик, с огромным, нафик никому не нужным функционалом. Улыбаюсь

Мне тут недавно показали систему управления тепловозом от Сименса. Несколько больших черных ящиков.

И показали свою разработку.
компактность, энергопотребление.
Из недостатков - достаточно сложная настройка. Нужны средства для разработки системы мониторинга.
А в остальном, прекрасная маркиза...

Но это уже офтоп.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 19-04-2010 11:28 » 

Serg79,  а никак. Фактически в сам момент прерывания ты управления не получишь. Там организовано всё по другому. Софт изначально автоматом крутится в цикле. Проверяешь нужные флаги и всё. Там скорости хватает.

Sla, сименс - это промышленные контроллеры, и пользуют их там, где "карлики" не подойдут. Для них много какого оборудования родного имеется. Ну собственно они и с неродным могут работать, если оно по стандарту сделано. Мы например ставили на них частотники Danfoss. Сименсы очень удобно вяжутся в сети, с нормальными интерфейсами.
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 19-04-2010 11:34 » 

Serg79,  а никак. Фактически в сам момент прерывания ты управления не получишь. Там организовано всё по другому. Софт изначально автоматом крутится в цикле. Проверяешь нужные флаги и всё. Там скорости хватает.
Ну ты даешь, ты путаешь программную реализацию с аппаратной. Кто тебе мешает на AVR-ах не обработчик прерывания устанавливать а в цикле проверять флаг срабатывания прерывания. Так же не кто не запрещает в Сименсах устанавливать обработчик прерывания вместо программного опроса флага прерывания.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 19-04-2010 11:42 » 

Цитата: Serg79
Кто тебе мешает на AVR-ах не обработчик прерывания устанавливать а в цикле проверять флаг срабатывания прерывания.
Согласен. Я ж практически о том и пытался сказать в посте №12 (мысль чутка в сторону ушла  Улыбаюсь )

Цитата: Serg79
не кто не запрещает в Сименсах устанавливать обработчик прерывания вместо программного опроса флага прерывания.
Та я и не спорю. Но зачем? Кто в трезвом виде будет такое делать?
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 19-04-2010 11:58 » 

resource, ну ты даешь. Все зависит от круга решаемых задач. Те методы и способы которые применяются для одного круга задач, не всегда оптимальны для другого, а в некоторых случаях просто не приемлемы.

И валить все под одну гребенку нельзя.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 19-04-2010 12:08 » 

Ну я так и сказал еще в посте №16
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #26 : 20-04-2010 06:39 » 

Быть такого не может Меня что-то число пугает: если частота микроконтроллера 4 МГц, то 1 мс - это 40000 тактов; так как у меня 1 цикл занимает 2,5 такта, то это 16000 циклов. Или я что-то не так подсчитал?

Кстати, в документации сказано, что на выполнение команды BRNE нужно 0,5 такта, поэтому, я получил 2,5 такта на цикл. Это правильно? Или нужно брать 3 такта?
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #27 : 20-04-2010 06:53 » 

YevhenUA, если у тебя частота тактирования 4 МГц тогда действительно имеет смысл использовать таймер как советовал resource. В этом случае погрешность должна быть маленькой и составлять порядка 4 - 6 тактов.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #28 : 20-04-2010 06:55 » 

YevhenUA, частота процессора и такты - срочно читать документацию.
Может там так и есть
0.5 такта?  хм...

Покажи эту часть документации, рыться в инете не хочу.
 
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #29 : 20-04-2010 07:00 » 

Вложил. Как одновременно отобразить его в посте - не знаю.

* 05cykla.bmp (86.8 Кб - загружено 1044 раз.)
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #30 : 20-04-2010 07:04 » 

читай внимательно!!!
0.5 цикла

а сколько тактов на цикл?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #31 : 20-04-2010 07:05 » 

YevhenUA, это вовсе не 1/2 цикла. Это либо 1 цикл, если условие перехода не выполняется и ветвление не происходит, либо 2 цикла, если условие перехода выполнено.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
lag
Участник

ru
Offline Offline

« Ответ #32 : 20-04-2010 07:11 » 

Цитата
на выполнение команды BRNE нужно 0,5 такта
это интересно в каком же "документе" такая ересь?

ps. ага - увидел, только там нет 0,5 такта, а 1/2 такта, что означает один или два такта,
в зависимости от выполнения условия. 1 такт, если условия не соблюдены.
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #33 : 20-04-2010 07:14 » 

читай внимательно!!!
0.5 цикла

а сколько тактов на цикл?
Просто там все у циклах: INC - 1 цикл, DEC - 1 цикл и т. д.

Неправильно понял 1/2... Спасибо.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #34 : 20-04-2010 07:18 » 

все таки заставил Жаль

1/2 -  один или два


зы dale это уже сказал

* cc.jpg (36.68 Кб - загружено 1463 раз.)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #35 : 20-04-2010 07:24 » 

Кстати, следует еще учитывать, что семейство AT90 использует конвейер глубиной 1. Пока текущая команда выполняется, следующая выбирается из памяти программ и декодируется (есть некоторые нюансы, но в первом приближении можно считать, что это всегда так).

Если последовательность выполнения команд нарушается (переход, вызов подпрограммы и т.д.), возникает "провал" конвейера: заранее выбрана и декодирована следующая инструкция, а выполнять  нужно не ее, а другую. Поэтому будет потерян дополнительный такт.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #36 : 20-04-2010 07:42 » 

Dale, там именно следующая (т.е. по следующему адресу) команда? В том смысле, что как там система предсказаний переходов (умная, глупая, есть вообще или нет) ?

Я собственно таймер упомянул как вариант вообще. Но тут походу стоит обратить на него внимание. При задержке в 1мс., несколько микросекунд неточности врядли что решат. Да и при желании можно устанавливать таймер с учетом, того сколько займут команды пересылки данных и запуска таймера (не знаю как в этом контроллере это выглядит).
« Последнее редактирование: 20-04-2010 07:48 от resource » Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #37 : 20-04-2010 08:06 » 

Dale, там именно следующая (т.е. по следующему адресу) команда? В том смысле, что как там система предсказаний переходов (умная, глупая, есть вообще или нет) ?

Реализован самый примитивный вариант конвейера - всегда предвыборка по следующему адресу. Для простенького 8-разрядного чипа ценой несколько баксов (а начальные модели вроде и до бакса недотягивают) предсказание переходов - непозволительная роскошь.

Я собственно таймер упомянул как вариант вообще. Но тут походу стоит обратить на него внимание. При задержке в 1мс., несколько микросекунд неточности врядли что решат. Да и при желании можно устанавливать таймер с учетом, того сколько займут команды пересылки данных и запуска таймера (не знаю как в этом контроллере это выглядит).

Конечно, имеет смысл задействовать таймер. Тем более что наверняка по истечении заданного интервала контроллер должен ответить каким-то сигналом, а для этого у 2313 есть специальный выход схемы сравнения таймера T1. Не будет вообще никакой программной задержки.

P.S. Вообще-то микросхема устаревшая и не рекомендована производителем к применению. Имеет смысл подобрать что-нибудь посвежее. Конечно, если это не студенческая лабораторная работа.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #38 : 20-04-2010 12:52 » 

P.S. Вообще-то микросхема устаревшая и не рекомендована производителем к применению. Имеет смысл подобрать что-нибудь посвежее. Конечно, если это не студенческая лабораторная работа.
Она родимая Улыбаюсь
Записан
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines