Прошу вашему вниманию самый простой осциллограф на Aduino.
Подходят только китайские Arduino ценой не более 1,5$/шт.
Схема предусматривает измерение отрицательного сигнала.
Администраторов прошу не наказывать. Текст мой и код мой, просто лень для нескольких форумов все наново переписывать. Передрал и все тут.
Удалось достичь максимальной частоты которую позволяет АЦП контроллера.
20kHz выглядят так:
Програмка: https://yadi.sk/d/ww1kQopXm8LA2
Схема:
Скетч:
В строке:Код://Осциллограф ©RasyakRoman #include <CyberLib.h> unsigned long currentTime; unsigned long loopTime; byte N = 0; byte Rb = 255; uint8_t MyBuff[255]; void setup() { UART_Init(256000); ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADATE) | (0 << ADIF) | (1 << ADIE) | (0 << ADPS2) | (1 << ADPS1) | (0 << ADPS0); ADMUX = (0 << REFS1) | (0 << REFS0) | (1 << ADLAR) | (0 << MUX3) | (0 << MUX2) | (0 << MUX1) | (0 << MUX0) ; } void loop() { currentTime = millis(); if (currentTime >= (loopTime +100)) // сравниваем текущий таймер с переменной loopTime + 1 секунда { ADCSRA &= ~(1 << ADIE); //Выключить UART_SendByte(15); UART_SendByte(0); UART_SendByte(15); UART_SendArray(MyBuff, 255); UART_SendByte(OCR1A); //Не используются UART_SendByte(OCR1B); //Не используются UART_SendByte(N); //Начальная точка UART_SendByte(1); UART_SendByte(15);UART_SendByte(1); ADCSRA |= (1 << ADIE); // Включить прерывание loopTime = currentTime; } if (UART_ReadByte(Rb)) { ADCSRA = (ADCSRA >> 3) << 3 | Rb ; }; } ISR(ADC_vect) { MyBuff[N] = ADCH; N++; }
if (currentTime >= (loopTime +100))
Можно изменить частоту выборок. В представленом варианте производится 10 выборок в секунду. Можно поставить больше.
Обяснение по интерфейсу:
"Open" - открывает порт.
"Старт" - включает/останавливает отрисовку.
"Стабілізація" - пытается стабилизировать график сдвигая его на десятые доли выборок вправо или влево.
"AVG проходи" - усредняет значение отрисовки с предварительніми выборками. Число означает количество усреднений. 1 - рисует живой график.
"Дільник" - делитель прерываний АЦП. Онже частота выборок.
"Калибровка" - Я этот пункт оставил для ручных настроек. Количество настроек можно добавлять войдя в вкладку "Режими". После правок можно сохранитьнастройки. Я не делал калибровочных замеров (лень). Буду благодарен за предоставленную информацию для каждого из режимов делителя.
Принцип работы:
Ацп отталкивается от стабилизированного выхода 3,2В и считает его максимумом. Входная шкала составляет 8 бит, тоесть 0 - 254.
Примитивный делитель делит 3,2/2=1,6В на два плеча. Такую схему нельзя использовать если масса ПК и измеряемой модели соединены. Идеальный вариант, как делал я, использовать ноутбук.
Итого 1,6В на входе А0 будет равно 127 - вход это первый столбец параметров "Калибровка". После вход масштабируется в соответствии с вторым столбцом "Калибровка".
Ячейка, что размещена отдельно в параметрах "Калибровка" отвечает за горизонтальную шкалу.
Исходный код предоставлять не вижу смысла, ибо использовалисть платные библиотеки EhLib (честно купленные). С энтузиастами могу поделится в личке.
Немножко кривой калибровки
И несколько тестов:
![]()




Ответить с цитированием