Shtepsel писал(а):есть внешнее прерывание с частотой 1024Гц, а мне надо, чтобы код прерывался с частотой 0,5Гц. Как можно аппаратно "поделить" внешнее прерывание на 512? Или 256 хотя бы? такую строку bascom "съедает" Config Int0 = Falling , Prescale = 512 но не работает.
Здравствуйте.
Какое отношение имеет предделитель к внешнему прерыванию? Его можно настроить либо по фронту, либо по спаду. И когда этот фронт (спад) придет - программа уйдет в обработчик внешнего прерывания. При чем тут прескаллер? С какой частотой будут происходить фронты / спады, с такой и будет вызываться прерывание, никаких аппаратных делителей у внешних прерываний нет. Но что мешает поделить программно?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Shtepsel писал(а):есть внешнее прерывание с частотой 1024Гц, а мне надо, чтобы код прерывался с частотой 0,5Гц. Как можно аппаратно "поделить" внешнее прерывание на 512? Или 256 хотя бы? такую строку bascom "съедает" Config Int0 = Falling , Prescale = 512 но не работает.
Здравствуйте.
Какое отношение имеет предделитель к внешнему прерыванию? Его можно настроить либо по фронту, либо по спаду. И когда этот фронт (спад) придет - программа уйдет в обработчик внешнего прерывания. При чем тут прескаллер? С какой частотой будут происходить фронты / спады, с такой и будет вызываться прерывание, никаких аппаратных делителей у внешних прерываний нет. Но что мешает поделить программно?
Накой тут int0? Может проще counter0=falling, prescale=512? Если далее разрешить прерывание по счётчику, то и будет срабатывать прерывание через 0.5 Гц. Сам так делал.
edm2007 писал(а):Не, раз речь идет именно о внешнем прерывании, то как я понял, имеется именно входной сигнал на INT0. И его нужно делить.
Shtepsel писал(а):есть внешнее прерывание с частотой 1024Гц
Shtepsel писал(а):Как можно аппаратно "поделить" внешнее прерывание на 512? Или 256 хотя бы?
Либо автор неправильно обзывает прерывания (хотя, конфигурирует-то он именно INT0). Если есть возможность, то необходимо перейти именно на вход таймера / счетчика. В ином случае - только программный делитель.
Автор возможно не знает или забыл, что на этой ноге и счётчик сидит.
Tankor, Если речь идет об аппаратном подсчете внешних импульсов средствами таймера, то выводы Т (Т0, Т1 и т.д.) нельзя переназначить, они жестко прикручены.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
edm2007 писал(а):Tankor, Если речь идет об аппаратном подсчете внешних импульсов средствами таймера, то выводы Т (Т0, Т1 и т.д.) нельзя переназначить, они жестко прикручены.
Я не спорю, Вы меня не поняли. Данные выводы имеют и другой функционал. Все зависит от конфигурации. Ну как ещё объяснить? Возьмите к примеру мегу 328. Вывод T0 у неё можно сконф. как внешнее прерывание PCINT20, Ясно выразился?
Нет, это понятное дело, но я о другом: это нужен контроллер, у которого и T и INT0 находятся на одном выводе. Какой контроллер отвечает указанным требованиям? И какой контроллер у автора?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
edm2007 писал(а):Нет, это понятное дело, но я о другом: это нужен контроллер, у которого и T и INT0 находятся на одном выводе. Какой контроллер отвечает указанным требованиям? И какой контроллер у автора?
Есно, что никакой.
Последний раз редактировалось Tankor Ср июн 03, 2015 15:28:19, всего редактировалось 1 раз.
Теперь ясно о чем. У меня Мега8, скорее всего, она такого не умеет. Пока сделал программно подсчет. Как-то можно узнать сколько проц потратит времени на выполнение подпрограммы прерывания? Или лепить бесконечный цикл и считать кол-во циклов за секунду в протеусе, например?
Shtepsel писал(а):Теперь ясно о чем. У меня Мега8, скорее всего, она такого не умеет. Пока сделал программно подсчет. Как-то можно узнать сколько проц потратит времени на выполнение подпрограммы прерывания? Или лепить бесконечный цикл и считать кол-во циклов за секунду в протеусе, например?
Я не спец, но примитив вижу такой: в начале программы обработки прерывания дергаю свободную ногу на осцил, а в конце подпрограммы дёргаю в обратную сторону. Всё, знаем период- знаем время.
Shtepsel писал(а):Как-то можно узнать сколько проц потратит времени на выполнение подпрограммы прерывания? Или лепить бесконечный цикл и считать кол-во циклов за секунду в протеусе, например?
Я делаю так. Создаю таймер, по которому переходит в эту процедуру (можно и бесконечный do...loop). В самом начале процедуры выводим 1 на какой-либо свободный вывод. А в конце ноль туда же. В протеусе осциллографом смотрю ширину горба (единицу). Так я подбирал частоту прерываний для динамической индикации поскольку код у меня длинный. пока писал Tankor все объяснил