Микроконтроллеры | Частотомер на AVR |
|
---|---|---|
GM: ну какое прерывание успеет обработаться, тем более на си? |
|
|
Пяток лет назад так бы и сказал. Сейчас скажу, что нужно знать оба языка, а чему отдать предпочтение должно зависеть от задачи. В моих проектах порядка 70 программных файлов, примерно половина на си. Вообще, каждая задача требует понимания физики происходящих процессов, если вы меня понимаете. Литература, хм-м, я как-то больше по дейташитам сейчас изучаю и устройство и систему команд, всегда есть примеры, тоже полезно посмотреть, ну и форумы разные развивают, как ни странно. Одну книжку помню, Соучек Б. Микроконтроллеры и микроэвм, произвела неизгладимое впечатление. Трудно найти, можно попробовать у букинистов поискать или в библиотеке. А что вы так заскучали с вашим частотомером с программой на си? Ещё ничего не потеряно, всё впереди! Просто вам надо силой воли отказаться от прерываний. Что можно сделать. Пусть пока прерывания захвата приходят с частотой 1 МГц, т.е. каждые 8 МЦ. В си-программе открываете ваш ключ разрешения захвата, скажем, на 1 мс. Что произойдёт? Прилетит порядка 1000 фронтов, последний останется в ICR1 и его можно использовать для вычисления N. Далее, надо определить содержимое счётчика0, соответствующее последнему фронту. Навскидку так например, читаете 4 раза содержимое счётчика0, закрываете ключ, ещё 4 раза читаете и смотрите, где произошли изменения, простая логика и М у вас в кармане. Будет работать и на 4 МГц, и даже на си. Ну и всё, остальную часть вы знаете. |
|
|
Вобщем предыдущий вариант заработал, тот что с проверкой переполнения счетчика0 в прерывании захвата. В симуляторе пробывал до 2-х МГц работоло без пропусков входной частоты. Но как ни странно большой вклад в это произвело измение срабатывания счетчика0, со спада на фронт (по Вашему совету). Из 15-ти измерений для частоты 1МГц - все показания совпадали, причем только в одном случае произвелась кариктировка показания счетчика0 в прерыванни захвата. |
|
|
GM: Навскидку так например, читаете 4 раза содержимое счётчика0, закрываете ключ, ещё 4 раза читаете и смотрите, где произошли изменения, |
|
|
Y@rik: О каких изменениях идет речь? Счетчик считать-тo не перестает после запрещения ключем захвата Y@rik: И еще, а задержка между определением N и M никак не повлияет? Y@rik: Из 15-ти измерений для частоты 1МГц - все показания совпадали, причем только в одном случае произвелась корректировка показания счетчика0 в прерывании захвата |
|
|
GM: И пресловутые 2 герца не появлялись? Есть вопрос по поводу вычислений. Тип float насколько точен, вычисляя частоту на калькуяторе по числам N и M - получаю 1000000.0Гц, контроллер же мне на дисплей выводит (в симуляторе также) 999999,8Гц. Использую комплятор CodeVision. |
|
|
GM: Пусть пока прерывания захвата приходят с частотой 1 МГц, т.е. каждые 8 МЦ. В си-программе открываете ваш ключ разрешения захвата, скажем, на 1 мс. Что произойдёт? Прилетит порядка 1000 фронтов, последний останется в ICR1 и его можно использовать для вычисления N. GM: Навскидку так например, читаете 4 раза содержимое счётчика0, закрываете ключ, ещё 4 раза читаете и смотрите, где произошли изменения, простая логика и М у вас в кармане. |
|
|
Y@rik: Тип float насколько точен, вычисляя частоту на калькуяторе по числам N и M - получаю 1000000.0Гц, контроллер же мне на дисплей выводит (в симуляторе также) 999999,8Гц Y@rik: А с низкими частотами что делать, ниже 1кГц ничего не померяешь? Y@rik: Какое же тогда значение из восьми выбрать, по какому признаку? |
|
|
Со стабильностью измерений кажется разобраля, но вот точностьи не получается добится. Показания такие, как будто я меряю не методом захвата, а методом ворот: на секундном интервале получаю постоянно +/-1Гц. Как мне кажется, это из-за того, что число импульсов входной частоты тоже гуляет от -1 до +1 такта, хотя должно быть числом точным. |
|
|
Здравствуйте. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |