Arduino осциллограф
- Войдите на сайт для отправки комментариев
Втр, 12/02/2013 - 16:41
Добрый день всем,
Нужно проверить работу ДМРВ. Так как это делает человек на видео: http://www.youtube.com/watch?v=x7jfdAWZPFM
можно ли использовать arduino вместо осциллограф? Serial.print(micros()); Serial.println(analogRead(A1)); ?
или Serial.println своей задержкой все испортит? может есть другие мысли как это реализовать?
Вам для начала все испортит скорость АЦП :)
Максимальная частота выборки (после танцев с бубном) теоретически 10кГц - оцифровываете в буфер "кадр" и "неторопясь" передаете это на комп. О "реалтайме" речи не идет, увы.
так что отпадает?
Можно записать данные в массив, типа аналог логического анализатора. Потом этот массив передать через Serial в комп и смотреть график. Если записывать данные по прерываниям от таймера, то получится достаточно неплохо, только шаг для рерываний придется вычислить заранее. Еще, чтобы не писать мусор, лучше всего начинать запись при переходе входящего сигнала через какой то уровень.
Это один из вариантов.
Если хотите передавать данные непрерывно, можно попробовать воспользоваться библиотекой Firmata, но с каким шагом она будет выдавать - трудно сказать, зависит от Ардуины и от скорости Serial, плюс от программы на компе, которая будет эти данные считывать. Но я бы не рассчитывал на высокие скорости. В демо режиме я в таком режиме программу гонял, но частоту опроса - не мерял.
Еще есть куча программ для Ардуино и на комп (поищите в гугле), которые выводят на экран данные с пинов на экран компа в виде графика. В гугле выдается много информации по строке "arduino oscilloscope"
большое спасибо за правду хорошие ответы!
а сам analogRead не будет глючить если его очень часто вызывать? не помню где но была такая проблема что когда очень часто вызываешь analogRead данные искажаются. или что то путаю?
Посмотрите на форуме, недавно leshak на эту тему писал, во всяком случае именно о помехах на соседних аналоговых пинах, не висящих в воздухе, а именно на подключенных.
Хотя, если не ошибаюсь, про это в даташитах на микропроцессор что то было, я бы для начала там посмотрел.
Не будет. Он контролирует флаг "конец преобразования". А вот если от таймера, то придется проверять флаз самостоятельно.
Если Вас не интересуют частоты сигналов больше 2кГц, то имеет смысл возиться, если 2 кГц - мало, то смотрите в сторону STM, но с ними сложнее - нужен определенный базовый уровень пронраммирования. Хотя научиться можно - есть форумы и уроки... Это не реклама, это опыт.
Мне, когда я боролся с энкодерами вот это помогло
http://letsmakerobots.com/node/31422
но деталей - я уже не помню.
Вроде даже 1mHz удавалось выжать.
Но, как правильно сказал AlexFisher, ни о какой RealTime - речи не идет.
Настраиваешь какой-то тригрер. Как только он сработал - начинается запись в память дуины. Сколько времени - ну естественно зависит от частоты. Но даже на mega1280 там на больших частотах хватало на сотни миллисекунд только. Когда "память кончилась" - все это отдается софту на комп неспеша - и смотришь в offline что там намеряло.
Думаю можно поигратся и увеличить время записи (там кажись скетч под 8-мь каналов сделан). ТО есть byte на каждый sample. Если одного канала достаточно, но то можно повыкаблучиватся с запихиванием 8-ми замеров в одни байт.
Но... эта софтина именно LogicAnalizer. Не осцилографф. Хотя, может быть есть и осцилографные аналоги.
Простейший - лобовой вариант - по каком-то событию просто делать кучу записей ваших analogRead() в какой-то массив, а потом выкидывать это в формате MegunoLink.
Возможно вам поможет данная статья.
http://robocraft.ru/blog/arduino/61.html
Сам не разбираюсь в вопросе, но там внизу ссылка на готовый, просто скачать и залить код на ардуино. Отображает данные на компьютере.
http://code.google.com/p/arduinoscope/wiki/Usage
У меня запустилось и, что-то отображалась, а что пока не знаю:).
Спасибо, но к сожалению этот не прокатит :( Уже как и решили как делать другим способом.
Не за что, просто не давно видел и баловался.
Удачи.