цифровая электроника
вычислительная техника
встраиваемые системы

 



Простейший осциллограф на Arduino в 10 строк кода

Автор: Mike(admin) от 21-07-2023, 03:55

Иногда бывают случаи, когда вам нужно посмотреть на форму аналоговых сигналов, с которыми вы работаете, а под рукой нет осциллографа. В этом случае можно взять Arduino и задействовать один из его каналов АЦП. При этом вам не нужно будет писать какую-либо большую и сложную программу. На самом деле код такого простейшего осциллографа может уместиться всего в 10 строчек и несколько дополнительных вкладок заголовочных файлов.


Простейший осциллограф на Arduino в 10 строк кода

Для начала вам нужно написать следующий код.


Простейший осциллограф на Arduino в 10 строк кода

Далее подключите источник сигнала к контакту A0 (и GND, конечно). Убедитесь, что сигнал находится в известных пределах. Как можете видеть на изображении выше, у нас есть четыре каскадных include-файла, первый из них, "a.h", выглядит так:



#include "b.h"
#include "b.h"
#include "b.h"
#include "b.h"
#include "b.h"
#include "b.h"
#include "b.h"
#include "b.h"

Следующий файл, "b.h", состоит из восьми строк, содержащих


#include "c.h"

Следующий, "c.h", состоит из восьми строк, содержащих


#include "z.h"

Последний файл под названием "z.h" имеет реальный код (только одну строку).


analogRead(A0),

Делая это таким образом, AnalogRead вызывается 8 * 8 * 8 = 512 раз при инициализации массива. Это делается настолько быстро, насколько может процессор, повторные инструкции не требуются.


Вы можете подумать, что это можно сделать проще, используя макрос, но проблема возникает из-за запятой после вызова функции.




© digitrode.ru


Теги: Arduino, осциллограф




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
Вчера попробовал твоим способом 17мС. на 512 точек. 2 килогерца смотреть таки можно.
Потом все сломал. Перегрузил проект Ёлами ))

Сегодня проснулся, сделал копию проекта. Отключил ВСЁ тормозящее. Все в комменты ушло.

Стало 57мс (( Точно как и циклом читать (
Где собака?

////////////////////////////////
int a10[512];

unsigned long Time = micros();
for (int i=0; i<500; i++){a10[i]=analogRead(A0);}
Time = micros() - Time;
Serial.print(F("for:"));Serial.print(Time/1000);Serial.println(F("
;mS"));

Time = micros(); // Запоминаем текущее время в микросекундах
int a12[512]={
#include "a.h"
};
Time = micros() - Time;
Serial.print(F("include:"));Serial.print(Time/1000);Serial.println(F(&
quot;mS"));

//for (int i=0; i<128; i++) {display.drawPixel(i, 63-(a12[i]/25), WHITE);}
//display.display();
delay(999);
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
12 строк. Зато без файлов и с генератором! И быстрей на порядок.
--------------------------
void setup() {
Serial.begin(115200);
ADMUX=0x60;
ADCSRA=0xe2;
}
void loop(){
int a10[512];
tone(9, 28800, 150);// частоту на D9 который соединить с A0 (для теста)
for(int i=0; i<512; i++) {a10[i]=ADCH;}
for(int i=0; i<512; i++) {Serial.println(a10[i]);}
delay(777);
}
----------------------------------------------
Эээээээ:: для увеличения длительности развертки ставить в цикл чтения делейМикросек 1 2 4 8 итд.

Можно и прямо в сериалПорт читать с АЦП, тогда на 1 строку короче )) но почему то фигня получается.

СильноУмные говорят, что таким способом можно до 500кГц смотреть.
И минимально ставить delayMicroseconds(2);
моя китайская Нана ,без делей, походу больше 50к не может.
А тоне больше 28800 не может.
Смотреть звуковые частоты впроне норм.

У кого под рукой гена есть, посмотрите на каком плата сколько реально смотреть?
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
И это, с частотами тут по аккуратнее. Кристалл и пожечь можно.