CodeKnight & CapacitorX
Я тут микроконтроллерную программу пишу, чтобы скачки напряжения засекать с точностью до наносекунд. Мог бы использовать что-то чистое, оптимизированное. Как тебе кажется?
Здорово, неплохая идея – но помни, что большинство микроконтроллеров не выдадут наносекундную точность. Тебе понадобится высокоскоростной АЦП или FPGA, используй DMA для захвата данных и ставь временные метки с высокочастотным счетчиком. ISR сделай максимально короткой, просто установи флаг, а потом обрабатывай буфер в основном цикле. Если готов к вызову – попробуй с частотой 100 МГц и посмотри, что получится. Удачи!
Ладно, так: PLL на 100 мегагерц, подаем на 12-битный АЦП, DMA в кольцевой буфер. ISR просто переключает флаг, главный цикл выгружает буфер. Схема: Vcc 3.3 вольта, земля, вход АЦП от датчика, тактовый сигнал АЦП от PLL, DMA в оперативную память, МК считывает, обрабатывает. Приступаю к коду.
Вроде пока всё неплохо. Только перепроверь окно сэмплирования и удержания у АЦП; с 12-битным разрешением тебе понадобится минимум 12 тактов на преобразование. Размер DMA-передачи делай кратным степени двойки, чтобы избежать сбоев из-за переполнения буфера, и убедись, что арифметические операции с указателем кольцевого буфера используют беззнаковые типы, чтобы переполнение не вызывало незаметных ошибок. Если будут проблемы с джиттером, попробуй добавить небольшую задержку после флага, перед началом следующего цикла чтения. Удачи с кодом!
Понял, настрою АЦП на преобразование по 12 часов, размер DMA кратный степени двойки, буду использовать указатели без знака, добавлю задержку флагом. Запишу любые помехи. Спасибо.