Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
28.04.2011, 16:31
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Скоректируйте программу частотомера
Неужто 500 раз ?
|
|
|
|
28.04.2011, 17:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Скоректируйте программу частотомера
=GM=, только для Вас.
CvAVR на это
PHP код:
|
while 1{ if TCNT0==0 {a++} }
|
выдаст примерно такое
PHP код:
|
;начало in r30,TCNT0 (1) tst r30 (1) brne PC+5 (1. 2) ldi r31,high(0) (1) ldi r30,low(1) (1) ld r29,Z (2) inc r29 (1) st Z,r29 (2) rjmp начало (2)
|
Итого 12 тактов. При входной частоте 100Гц 81 920/12=6 826,667 раз . "Чуть" больше...
|
|
|
|
28.04.2011, 17:55
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Скоректируйте программу частотомера
Спасибо, конечно, за эксклюзив...но я не понимаю главного, зачем это всё? Поясните, что это за фрагмент, что он делает, по-вашему?
Вы хотите сказать, что этот фрагмент сработает 6826 раз за один период частоты 100 Гц? Ну и что дальше.
Последний раз редактировалось =GM=; 28.04.2011 в 18:00.
|
|
|
|
28.04.2011, 21:02
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
|
Re: Скоректируйте программу частотомера
Сообщение от st_1
|
"При входной частоте 100Гц и полной шкале в восемь разрядов... включи - и езжай в отпуск..."
|
Для чего вы хотите считать до наполнения восьми разрядов?
Я ведь написал считать 10 импульсов.
|
|
|
|
28.04.2011, 23:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Скоректируйте программу частотомера
ТС спросил
Сообщение от begun
|
Все ли у меня верно,
Не будут ли мешать два прерывания друг другу и если да, как от этого избавится?
|
на что получил ответ. Собъяснениями почему.
Сообщение от omercury
|
....В прерывании переполнения считать некорректно. Точность будет низкой. При входе в прерывание выполняемая МК команда в любом случае завершается. А она бывает на разное количество тактов.....
|
продолжает интересоваться (что похвально)
Сообщение от begun
|
Так можно сделать?, или чтото надо при этом учесть ?
|
.....
Сообщение от omercury
|
На высокой входной частоте пострадает точность, вверху диапазона очень сильно(реальная частота может почти в 2 раза отличаться от отображаемой).
|
...и опять человеку интересно, он продолжает, притом очень вежливо...
Сообщение от begun
|
я подумал что можно и без флагов получить тоже самое дождаться в бесконечном цикле переполнения таймера и вести счет,т.е.
while(1)
{
--
if(TCNT0==0xFE)
а++;
--
можно же таким образом посчитать количество переполнеия таймера?
(извините,если Я не то говорю)
Спасибо.
|
только здесь случились непонятки. begun явно не понимает, о каких флагах идёт речь.
Сообщение от omercury
|
Поэтому и делается без прерываний, но по флагам прерываний.
|
А дальше началось.... ТопикСтартера оттёрли.
Сообщение от =GM=
|
зачем это всё?
|
Сообщение от =GM=
|
и что дальше.
|
...вот и мне интересно. О деле-то будет что-нибудь?
|
|
|
|
29.04.2011, 01:30
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Скоректируйте программу частотомера
Сообщение от omercury
|
О деле-то будет что-нибудь?
|
Хм, о деле. У топикстартера максимальное количество импульсов порядка 8.2 млн, вполне достаточно 24 бит для хранения. так что переменная "c" вполне может быть 16-битной, а переменная "d" - 8-битной.
А где вы, кстати, мой совет откопали 2007 года https://kazus.ru/forums/showpost.php...85&postcount=8
Последний раз редактировалось =GM=; 29.04.2011 в 01:40.
|
|
|
|
29.04.2011, 08:25
|
|
Гражданин KAZUS.RU
Регистрация: 18.07.2006
Сообщений: 866
Сказал спасибо: 230
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Скоректируйте программу частотомера
omercury-писал
--------------
Можно-то можно, но...нельзя... Потому, что сработать может несколько раз. Флаг прерывания устанавливается при переполнении счетчика таймера(переходе из 0хFF в 0х00), поэтому им пользоваться удобнее. После использования флаг надо сбросить (автоматом он сбрасывается при выходе из прерывания).
--------------------------------------------------------
Но ведь, когда ожидаем флаг, мы же в каждом цикле проверяем его возникновение ,и если он возник, то его потом надо еще и сбросить и потратить на это такты процессора, а в WHILE как только таймер доходит до нужного значения ,инкриментируем переменную и ничего не сбрасываем.
Далее идет программа, и когда вновь возникнет равенство, опять повторяем процедуру и так далее до получения результата.
Так Я верно говорю или опять не то?
Очень интересно следить за дискуссией АS -ов.
Спасибо.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:23.
|
|