Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: счетчик импульсов
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
JimBaton
Подскажите как организовать счет импульсов за определенное время.Смысл такои......Допустим на INT0 пускаи считает до бесконечности сколько сможет а на INT1 считает количество импульсов за 1 секунду, записывает в переменную R,сбрасывается на 0 и считает заново.Я что-то недопонимаю, так как только начал работать с контроллерами.Подправте код

' ***************************************************************************
' *
' * Title : int0.bas
' * Program code : BASCOM AVR
' ***************************************************************************
$regfile = "m8def.dat" ' use the Mega8

$crystal = 4000000
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6

Enable Interrupts
Enable Int0
Enable Int1
Config Int1 = Rising
Config Int0 = Rising
On Int0 Label33
On Int1 Label33
Dim Counter As Long
Dim N As Long
Counter = 0



Do
N = 100 * Counter
Locate 1 , 1
Lcd "Int0: " ; N

Loop

End



Label33:
Incr Counter
Return
Aesthete Animus
Если только начали работать с контроллерами, может стоит сразу глянуть в сторону AVR-GCC wink.gif ? Если он для вас читабелен, то могу порыться в своих архивах (но только днем wink.gif )...
Непомнящий Евгений
Ого, бейсик для МК появился... А чем компилируете?
JimBaton
Aesthete Animus
мне больше нравится и удобнее Bascom

Непомнящий Евгений
Bascom AVR

Ну так что неужели никто не работает в Барсике и не знает как сделать?
Непомнящий Евгений
Так в чем проблема-то? Вы пишете о некой переменной "R". Что-то в проге я ее не вижу.
У вас по-идее при каждом импульсе по входам 0, 1 увеличивается Counter и постоянно выводится на дисплей (это насколько я понял ваш код - в васике я для МК ничего не писал smile.gif ).
Что конкретно не работает?
Евгений Германович
А где у вас секунда,кто ее формирует?
JimBaton
в переменную N считаются логические 1 с INT0 до усёра, а в переменную R должны считаться логические 1 с INT1 так чтобы он считал количество по истечение 1 секунды а потом счетчик INT1 сбрасывался на 0 а INT0 продолжал считать дальше.Еслибы я знал где секунда и кто ее формирует, Евгений Германович, я бы все давно сделал, а дело в том что я еще совсем зеленый в контроллерах и прошу помощи организовать программу.
Непомнящий Евгений
Вы мне лучше скажите, где у вас переменная R???
И кстати, насколько я понял и для int0 и для int1 вы используете один и тот же обработчик. Наверное стоит разные использовать...
Насчет секунды - используйте таймер. К примеру, режим СТС, выставив регистры так, чтобы он переполнялся 1 раз в секунду. В прерывании таймера сбрасываете переменную R.
JimBaton
да черт с неи с этои пременнои R ну что не определить переменную разве. Dim R as long вот переменная.Режим СТС......я же говорю что я еще мало чего знаю........прошу кусок кода для записи в переменную R количества импульсов с INT1 за 1 секунду.Ну это же должно быть так просто, а я из-за еще недостаточных знании не понимаю как и для меня переполнение регистра 1 раз в секунду ничего не говорит.
Непомнящий Евгений
Вам надо разобраться, как включить таймер и настроить на нем режим СТС так чтобы он срабатывал раз в секунду.
Про таймер и его режимы почитайте в даташите на вашу мегу, я с ней не работал.
Как записать регистры в васике я не знаю - опять же почитайте доку к нему.
Затем делаете обработчик прерывания таймера, в котором пишите R = 0.
В отдельном обработчике прерывания int1 пишете R = R+1.
Собственно все...
JimBaton
ну ладно.Тогда сможете организовать на чем умеете.На Си как я понимаю?.
Непомнящий Евгений
Вам не уйти от необходимости прочитать даташит smile.gif В нем же наверняка есть и примеры работы с таймером на асме и С... На С малость посложнее будет работать с дисплеем - придется найти где-нибудь библиотеку функций для вашей модели.
tyro
Цитата(JimBaton @ Jan 5 2008, 16:00) *
ну ладно.Тогда сможете организовать на чем умеете.На Си как я понимаю?.

bb-offtopic.gif Он разрешил! Он сегодня добрый! Спешите ублажить! biggrin.gif bb-offtopic.gif
Евгений Германович
Вы наверное видели картину Васнецова(если не соврал)"Три богатыря"? Так вот приложите руку к голове как Илья Муромец и направте свой взор на описание вашего контроллера,а именно на тот раздел,который освещает(иногда весьма тускло.)работу таймеров.
Что вам нужно:1 если таймера позволяют задать выдержку в 1Сек напрямую то вам повезло.
Заносите выдержку в регистры таймера,и разрешаете прерывание от него .
Если нет то задаете выдержку кратную секунде разрешаете прерывания и в каком-нибуть регистре подсчитываете число прерываний пока не досчитаете до 1Сек.
JimBaton
tyro.......ФАК Я.Не умничаи

Да что мне этот даташит.Если я не понимаю как работает таимер, но очень хочу разобратся.На ассемблере или на Си не хочу,хочу на барсике.Я просто нашел этот код в сети и мне бы его с вашеи помощью подработать до нужного мне результата.Примерчик для толчка вот и все
Dog Pawlowa
Цитата(JimBaton @ Jan 5 2008, 19:31) *
Если я не понимаю как работает таимер, но очень хочу разобратся....
Примерчик для толчка вот и все...

Вы противочите сам себе. Или Вы хотите разобраться, или одно из двух.
Толчок дан а направлении datasheet.
Примерчик есть на С, но я не уверен, что он поможет Вам разобраиться.
Евгений Германович
Цитата(JimBaton @ Jan 5 2008, 18:31) *
tyro.......ФАК Я.Не умничаи

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

В общем случае таймер трудится весьма просто:
1 если таймер считает на увеличение то с приходом очередного импульса он увеличивает свое значение на 1 и так до переполнения или достижения заданного значения.При переполнении или достижении ,в зависимости от конструкции может остановиться или сбросится и начать считать с 0
2 на уменьшение тоже самое только уменьшается на 1
Вас не зря просят прочитать описание,кстати за вас этого никто не сделает
JimBaton
ладна тема закрыта.Я нашел выход из ситуации путем преобразования частоты в напряжение и считывание с ADC.Всем спасибо.
Aesthete Animus
2JimBaton

"Да что мне этот даташит" - Ну-ну...
"На ассемблере или на Си не хочу,хочу на барсике" - "Не хочу учиться, хочу жениться... " lol.gif

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

Определитесь с языком, заметьте, мало кто пишет на Bascom. Не задумывались почему? А потому что он способствует непониманию архитектуры контроллера!

Нельзя пытаться все охватить сразу, надо декомпозировать задачу! К примеру в вашем случае надо разобраться с таймером, внешними прерываниями и, наверное, с UART`ом - ведь Вы должны куда-то отображать результат. Если Вы не представляете как сделать каждое из этих звеньев, то это задача для вас пока сложная и надо поставить в виде задачи, скажем, работу с таймером.

Цитата(JimBaton @ Jan 5 2008, 18:31) *
tyro.......ФАК Я.Не умничаи

А вот грубить не надо - это mauvais tone!
JimBaton
Просто не люблю когда умничают.Обязательно разберусь с таимерами.Очень срочно нужно было решить проблему и некогда было разбираться с таимерами.Так как проблема решена другим способом,теперь есть время разобрать таимеры.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.