Страница 1 из 1

FastAnalogRead_328_168 высокоскоростной ацп для ардуино

Добавлено: 25 окт 2025, 18:41
lfgjikjjyj
2025-10-25_220651.png
FastAnalogRead_328_168_(Code_-_Professional).ubi
---------------------------------------------------------------------------------------------
FastAnalogRead_328_168_v1.0_(Code_-_Professional).ubi
(добавлен выбор частоты 0,125-1 мгц)

---------------------------------------------------------------------------------------------

На атмегу 328 но и должно работать на 168

Настроено на опроник 5в всё как по умолчанию в флпрог

Если используется 1 канал то без задержки а если более 1 канала то присутствует задержка в 2мкс для стабильности ацп

Для точности 125 кГц
Для скорости (250 кГц, 500 кГц или 1 МГц
)

Использую исключительно для повышения цыклов

Для сравнения берём голый пин и пишет просто в переменную:
- стандартный ардуино аналогрид в флпрог понижает цыклы до примерно 4,5к
- родной пин из флпрог понижает до 6,5к (вероятно приподняли частоту немножко ибо стандартная обёртка слишком медленая)
- мой пин в флпрог понижает до 67к как бы не вау но есть куда похуже результаты (хотя даташит обещал преоброзование в 13мкс а это максимум до 77к цыклов но видимо тут библиотеки флпрога и прочее затормаживает)
это цыфры которые будут становится очень сильно меньше когда будет наращиваться код

К примеру в одном старом проекте у меня дошло что код крутится всего в 200 цыклов в сек почти на издыхании

Re: FastAnalogRead_328_168 высокоскоростной ацп для ардуино

Добавлено: 26 окт 2025, 09:17
dstrufanov
lfgjikjjyj писал(а): 25 окт 2025, 18:41 ... даташит обещал преоброзование в 13мкс ...
Насколько я помню, в даташите написано не время преобразования 13мкс, а число тактов преобразования, причем после запуска преобразования или смены канала первый цикл 25 тактов, а последующие 13

Re: FastAnalogRead_328_168 высокоскоростной ацп для ардуино

Добавлено: 26 окт 2025, 10:43
lfgjikjjyj
Ну так пощитайте всю цепочку и получите значение
По умолчанию частота 125кгц
1/125000 имеем 8мкс тактов у нас 13 итого 8*13 получаем 104мкс одно измерение в течение которого процесор ничего не делает кроме обработкой АЦП от сюда и огромная просадка в цыклах

В моём варианте 1/1000000 это 1мкс где 1*13 получим 13мкс затрат времени процесором на обработку АЦП

Но для точных измерений надо использовать 125кгц без вариантов в остальных случаях без разницы если работаете с состояниями к примеру потенциометр через масштабирование приводим к 0-100 то тут мне мой блок без вариантов использую

Но лучше конечно ограничивать итерации запросов к АЦП в ручную а не непрерывным потоком к примеру можно добавить вход на опрос либо создать блок на прерываниях тогда и вовсе луп будет полностью чистым и проц будет работать с другим кодом неотвликаясь на АЦП кроме обработку прерывания это несколько микросекунд на один запрос данных

Re: FastAnalogRead_328_168 высокоскоростной ацп для ардуино

Добавлено: 26 окт 2025, 10:47
dstrufanov
lfgjikjjyj писал(а): 26 окт 2025, 10:43 104мкс одно измерение в течение которого процесор ничего не делает кроме обработкой АЦП от сюда и огромная просадка в цыклах
Если процессор работает с АЦП по прерываниям, то он может не стоять, а заниматься другими делами. Как только АЦП завершит преобразование, оно вызовет прерывание процессора

Re: FastAnalogRead_328_168 высокоскоростной ацп для ардуино

Добавлено: 26 окт 2025, 11:45
lfgjikjjyj
В том то и проблема что флпрог игнорирует возможности на прерываниях
Что АЦП взять что входные пины всё в Лупе валяется
А ведь столько возможностей отбрасывается к примеру тот же далас рубит цыкл на 750мс а если по таймеру АЦП кинуть в прерывания не частые и закольцевать буфер данных то и даные не теряются и АЦП паралельно крутится по запросу взял буфер и получил значения

Re: FastAnalogRead_328_168 высокоскоростной ацп для ардуино

Добавлено: 26 окт 2025, 11:52
dstrufanov
lfgjikjjyj писал(а): 26 окт 2025, 11:45 если по таймеру АЦП кинуть в прерывания не частые и закольцевать буфер данных то и даные не теряются и АЦП паралельно крутится по запросу взял буфер и получил значения
Для одного входа и прерывания не нужны - устанавливаете бит ADFR (режим непрерывного преобразования) и каждый раз получаете новые значения