Привет, друзья, я новичок в области микроконтроллеров, хочу знать, невозможно ли подсчитывать события без использования счетчика, я имею в виду, контролируя вывод, который подключен к генератору событий. Я задаю этот вопрос, потому что в настоящее время я хочу рассчитать частоту датчика я уже проверил его частоту с помощью DSO (цифровой запоминающий осциллограф), и он (DSO) говорит, что его частота составляет 98 кГц, но, как мы все теперь, максимальное значение 8-битного счетчика составляет 255, тогда как это возможно ... ...Датчик подключен к PB0(TCNT0/счетчик 0 Atmega16) .........пожалуйста, помогите
Возможен ли счет без счетчика в микроконтроллере?
Ответы (2)
Вы можете сделать это 2 разными способами. Первый использует предварительный делитель. Например, вы можете установить его на 1024, чтобы каждый 1024-й раз, когда срабатывает PB0 (или каким бы то ни было правильным термином, прошло некоторое время с тех пор, как я имел дело с микроконтроллерами), счетчик увеличивался на 1. Таким образом, по сути, счетчик будет считать каждый раз. кГц (приблизительно).
Второй способ заключается в том, чтобы не использовать предварительный делитель, а настроить MCU так, чтобы каждый раз, когда счетчик переполняется, вы увеличивали какой-либо другой регистр на 1, и каждый раз, когда этот регистр переполнялся, вы увеличивали другой регистр на 1. Используя 8-битный таймер и эти 2 дополнительных 8 битовых регистров можно насчитать до 16 777 215. Я на самом деле предпочитаю этот второй метод, но я, вероятно, одинок в этом :)
Также Greybeard и Andy Brown правы насчет тегов stm32 и microprocessor, их следует удалить.
volatile
, но это уместно только в том случае, если все значение счетчика записывается/читается как естественный размер int
машины.
- person Weather Vane; 01.08.2015
Вы можете назначить вывод датчика внешнему выводу прерывания (INT0\INT1
), а затем создать глобальную переменную, которая увеличивает значение ISR
при каждом внешнем сигнале от датчика и получать выборку через каждый фиксированный промежуток времени.
Это время настраивается прерыванием таймера, но не зависит от количества отсчетов (таймер работает только как часы), поэтому внутри ISR
таймера вы должны разделить количество отсчетов на это фиксированное количество времени (counter/Ts
).
Затем вы должны установить переменную, которая представляет счетчик, на ноль, переменная счетчика здесь может быть unsigned long
, чтобы убедиться, что он работает с высокими частотами.
avr
иstm32
? О каком из них вы говорите? - person Andy Brown   schedule 31.07.2015