Возможен ли счет без счетчика в микроконтроллере?

Привет, друзья, я новичок в области микроконтроллеров, хочу знать, невозможно ли подсчитывать события без использования счетчика, я имею в виду, контролируя вывод, который подключен к генератору событий. Я задаю этот вопрос, потому что в настоящее время я хочу рассчитать частоту датчика я уже проверил его частоту с помощью DSO (цифровой запоминающий осциллограф), и он (DSO) говорит, что его частота составляет 98 кГц, но, как мы все теперь, максимальное значение 8-битного счетчика составляет 255, тогда как это возможно ... ...Датчик подключен к PB0(TCNT0/счетчик 0 Atmega16) .........пожалуйста, помогите


person Shrikant Vaishnav    schedule 30.07.2015    source источник
comment
Какая связь между любой наблюдаемой частотой (на данном датчике?) и максимальным значением счетчика данной разрядности?   -  person greybeard    schedule 30.07.2015
comment
Датчик подключен к PB0 (TCNT0/счетчик 0 Atmega16).   -  person Shrikant Vaishnav    schedule 31.07.2015
comment
Максимальная частота датчика 120 кГц...пожалуйста, помогите   -  person Shrikant Vaishnav    schedule 31.07.2015
comment
почему это помечено avr и stm32? О каком из них вы говорите?   -  person Andy Brown    schedule 31.07.2015
comment
сэр, я говорю об Avr, я удалил stm32 ...   -  person Shrikant Vaishnav    schedule 02.08.2015
comment
Знаете ли вы упрощенное измерение частоты с… megaAVR? (Это должно, по крайней мере, обеспечить общий словарь для участников, заинтересованных в этом вопросе.) (@Marcelino говорит о различных подходах к измерению частоты с использованием микроконтроллера и исходного кода на языке семейства C).)   -  person greybeard    schedule 02.08.2015


Ответы (2)


Вы можете сделать это 2 разными способами. Первый использует предварительный делитель. Например, вы можете установить его на 1024, чтобы каждый 1024-й раз, когда срабатывает PB0 (или каким бы то ни было правильным термином, прошло некоторое время с тех пор, как я имел дело с микроконтроллерами), счетчик увеличивался на 1. Таким образом, по сути, счетчик будет считать каждый раз. кГц (приблизительно).

Второй способ заключается в том, чтобы не использовать предварительный делитель, а настроить MCU так, чтобы каждый раз, когда счетчик переполняется, вы увеличивали какой-либо другой регистр на 1, и каждый раз, когда этот регистр переполнялся, вы увеличивали другой регистр на 1. Используя 8-битный таймер и эти 2 дополнительных 8 битовых регистров можно насчитать до 16 777 215. Я на самом деле предпочитаю этот второй метод, но я, вероятно, одинок в этом :)

Также Greybeard и Andy Brown правы насчет тегов stm32 и microprocessor, их следует удалить.

person Marcelino Lucero III    schedule 01.08.2015
comment
Кроме того, когда вы получаете доступ к счету с более высокого уровня, если байты считываются индивидуально, вам нужно будет маскировать прерывания, пока вы читаете счетчик(и). Вы можете использовать volatile, но это уместно только в том случае, если все значение счетчика записывается/читается как естественный размер int машины. - person Weather Vane; 01.08.2015
comment
Погода, сэр, я вас не понимаю, не могли бы вы уточнить информацию о volatile и int..... пожалуйста - person Shrikant Vaishnav; 02.08.2015

Вы можете назначить вывод датчика внешнему выводу прерывания (INT0\INT1), а затем создать глобальную переменную, которая увеличивает значение ISR при каждом внешнем сигнале от датчика и получать выборку через каждый фиксированный промежуток времени.

Это время настраивается прерыванием таймера, но не зависит от количества отсчетов (таймер работает только как часы), поэтому внутри ISR таймера вы должны разделить количество отсчетов на это фиксированное количество времени (counter/Ts).

Затем вы должны установить переменную, которая представляет счетчик, на ноль, переменная счетчика здесь может быть unsigned long, чтобы убедиться, что он работает с высокими частотами.

person Youssef Molham    schedule 13.01.2016