Пультоскоп на Arduino 27МГц!!!

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

karl2233, хорошо делать что-то своё, когда нет в продаже подходящего аналога (ну или он стоит бешеных денег).  Несколько лет назад делал электронную нагрузку для испытания БП компов. В то время с микроконтроллерами был ещё не знаком, вольтметр собирал на icl7607. Недавно индикатор сдох вместе с микрухой. Теперь вот появился шанс сделать измерительную часть на ардуине, и расширить функционал в разы.  Нужно? -Очень! Правда пока лень.. :)

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

что-то своё и уникальное - это так.

но и что-то похожее на существующее но проще и доступнее - почему б нет?

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Смысл есть -ну нет возможности купить готовый ,а сигнал посмотреть надо аналоговый,при том не таская с собой комп.Даешь народный  и простой осцллограф-пробник!

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Предлагаю отказатся от генерации задержек, а также компаратора.

Отрисовка происходит в несколько этапов.

1. Захват области. Например 120 точек.

2. Разделение стека на 4 части и наложение

3. Расчет сдвига для каждого сектора.  Тут фесь фокус!!!

И отрисовка графика.

Тут работает математика вместо железа.

Края отрезаем и выбрасываем.

Метод не работает при попадании на гармонику сигнала.

Кстати коэфициент смещения для каждого сектора будет общий для всех секторов. Остается рассчитать его.

 

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Okmor. Привет, еще работаю поэтому бегло прочитал с телефона.

Но уже понимаю, что ветку создалл не зря!!!

Очень неплохо звучит по сравнению с  хреново-работающим компараторм!

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Небольшое моделирования процесса в EXCEL показало, для ухода от гармоник задержки между секциями не помогают.

Мы уходим от одной гармоники и стакой же вероятностью попадаем в другую.

Если по правде, задержки должны быть каждый раз разные. Можно использовать псевдослучайную функцию, но она медленная. Как вариант, использовать какую то простую функцию от результата предыдущего измерения. 

Использование функции типа delayMicroseconds(Fdelay(mass[i-1])) позволит узнать используемую задержку.

Тогда процедура захвата будет иметь следующий вид:

void Zamer(){//заполнение буфера АЦП
  for(int i=0;i<325;i++){ 
  while ((ADCSRA & 0x10)==0);
  ADCSRA|=0x10;
  mass[i]=ADCH;
  }
  delayMicroseconds(Fdelay(mass[325]));
  
  for(int i=326;i<650;i++){ 
  while ((ADCSRA & 0x10)==0);
  ADCSRA|=0x10;
  mass[i]=ADCH;
  }
    delayMicroseconds(Fdelay(mass[650]));
  
  for(int i=651;i<975;i++){ 
  while ((ADCSRA & 0x10)==0);
  ADCSRA|=0x10;
  mass[i]=ADCH;
  }
  delayMicroseconds(Fdelay(mass[975]));
  
  for(int i=976;i<1300;i++){ 
  while ((ADCSRA & 0x10)==0);
  ADCSRA|=0x10;
  mass[i]=ADCH;
  }
 
}

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Okmor Сел обрабатывать вашу идею, она отличная но реалтзовать так как вы предложили не получится.((

Если делать так как вы предложили то замер каждого буфера будет начинаться с разных мест сигнала, один буфер начнет с фронта второй с спада другие с других мест, мы подберем время сдвига а Юзер изменит частоту измеряемого сигнала и наши сдвиги уже не подойдут.

Замер нужно делать один и максимальный на допустим на 1300 значений и первое не используем оно делается медленне других. Внутрь ничего не пихаем не тормозим АЦП.

И уже буфер из 1300 делим на части и их сдвигаем.

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

Постарался пояснее выразиться, надеюсь донес мысль.)

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Okmor моим методом пока тоже ничего хорошего не получилось(((, думаю.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Okmor получилось пока в порт выводить измеряемый стробо сигнал, но пришлось уменьшить скорость АЦП чтоб шумел меньше тогда стгнал четче синхронизируется(делитель*16)

На скрине измеряемый сигнал

-30КГц с эфектом стробо на скорости АЦП 75КГц

-30КГц без стробо на скорости АЦП 300КГц

Разница в измерении повторяющегося сигнала на лицо, правда пауза между стробами с 30КГц не подходит для другой частоты нужно додумывать(((

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Изза отсутствия идей и нормального генератора, пока прекращаю опыты.

Максимум чего посмотрел: 25Кгц живой сигнал без стробо. Предделитель1/4.

При использовании стробоскопического эфекта, на резких фронтах будет пилообразное отображение сигнала.

При усреднении (как делал я), сигнал размазывается.

Предлагаю оставить в покое стробоскопический эффект.

Есть вопрос. Можно ли извлечь данные АЦП до окончания измерения? Тоесть прочитат регистр (не знаю какой), в котором идет подсчет АЦП.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Okmor пишет:
.....

Предлагаю оставить в покое стробоскопический эффект.

Есть вопрос. Можно ли извлечь данные АЦП до окончания измерения? Тоесть прочитат регистр (не знаю какой), в котором идет подсчет АЦП.

Поддерживаю, потратив не мало сил и времени пришел к выводу что  наложение замеров для создания стробо эфекта требует определенной точности АЦП. Без точности не получатся синхронизация, а точность Atmega328 с таким предделителем 1/4 дать не может((

Причешу то что есть и выложу, дальнейшее умощьнение вижу в сторону добавления внешнего АЦП или замены камня на STM32.

На счтет данных регистров не проверял, овчинка выделки не стоит с такой точностью((

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

вот что надо :) параллельный, 8 разрядный, вход до 20 мГц

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Valera19701 пишет:

вот что надо :) параллельный, 8 разрядный, вход до 20 мГц

Ого военная?

Их на драг металлы еще все не перебили?

Я такие на кортинке только и видел!)

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

у мну 2 штуки есть :)

такие вещи нельзя на драгметалл сдавать

правда фигово, то что ему надо питание +5в и  -6в

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Valera19701 пишет:

у мну 2 штуки есть :)

такие вещи нельзя на драгметалл сдавать

правда фигово, то что ему надо питание +5в и  -6в

А что из нового можете порекомендовать чтоб и быстрый и недорогой!?

Нашел только такой вариант AD9280ARSZ

revlerik
Offline
Зарегистрирован: 26.12.2015

bodriy2014 пишет:

Нашел только такой вариант AD9280ARSZ

Самый оптимальный вариант.

Igor_kip
Offline
Зарегистрирован: 03.01.2016

Добрый всем вечер. При компиляции скетча со страницы автора (bodriy2014) получаю

" Скетч использует 17 500 байт (56%) памяти устройства. Всего доступно 30 720 байт.
Глобальные переменные используют 1 572 байт (76%) динамической памяти, оставляя 476 байт для локальных переменных. Максимум: 2 048 байт.
Недостаточно памяти, программа может работать нестабильно. "

В настройках IDE выбрана Arduino Pro Mini atmega328 , как и у автора . 

При компиляции под Mega2560 (с заменой библиотек под свой дисплей) всё проходит нормально , но хочется применить аурдинку

рекомендованую автором , в чём засада (я только учусь , хоть в 50 может и поздно , но интересно)

Спасибо.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Igor_kip пишет:

....
Недостаточно памяти, программа может работать нестабильно. "

...

Привет. У меня тоже выскакивет это предупреждение при компеляции. Я намеренно почти всю память занял под массив данных АЦП. По мере того как скетч буду дополнять новыми фишками-буду ужимать, но мы все время будем оперативку на 80-90% использовать, а 10% оставлять для зазора возможных накладок с записью переменных.

Igor_kip
Offline
Зарегистрирован: 03.01.2016

Спасибо , собираю.

revlerik
Offline
Зарегистрирован: 26.12.2015

Здравствуйте,я вот сегодня получил из китая ардуинку и дисплейчик,до этого с ардуино дел не имел,при компиляции скетча ошибка: C:\Documents and Settings\admin\РњРѕРё документы\Arduino\PULTOSCOPE_TFT\PULTOSCOPE_TFT.ino:3:54: fatal error: Adafruit_GFX.h: No such file or directory
 

Подскажите как исправить.

Не ругайте сильно,первый раз...

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

revlerik пишет:

Не ругайте сильно,первый раз...

Привет.

В архиве с скетчем положил библиотеки, он ругается на их отсутствие.

Установите перестанет.

revlerik
Offline
Зарегистрирован: 26.12.2015

Спасибо,теперь компилируется,но после заливки в дуинку просто белый экран.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

revlerik пишет:

Спасибо,теперь компилируется,но после заливки в дуинку просто белый экран.

А экран у вас какой на каком контроллере?

С библиотекой идут примеры пробовали их заливать?Работают?

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Обновил прошивку, свежее видео.

В конце видео есть демострация стробо эфекта!(9-я минута)

revlerik
Offline
Зарегистрирован: 26.12.2015

Экран с контроллером SPFD5408.

Попробовал тест с вашей библиотеки не работаю,просто белый экран,а с библиотекой от сюда:https://github.com/JoaoLopesF/SPFD5408 ,тест работает,показывает экран разные эффекты и надписи.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

гляну завтра вашу библиотеку, посмотрю что не так.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

revlerik пишет:

Экран с контроллером SPFD5408.

Попробовал тест с вашей библиотеки не работаю,просто белый экран,а с библиотекой от сюда:https://github.com/JoaoLopesF/SPFD5408 ,тест работает,показывает экран разные эффекты и надписи.

А можно фото вашего дисплея с обратной стороны, непойму почему так.

У меня с вашей библиотекой белый экран с моей работает.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

dimax пишет:

bodriy2014, на STM32 есть готовый набор . Какой смысл изобретать лисапед? :)

Смысл оказывается есть!

В этой ветке http://www.stm32duino.com/viewtopic.php?f=19&t=107

ребята обогнали в двое DSO138, на том же STM//

revlerik
Offline
Зарегистрирован: 26.12.2015
bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Попробуйте в моем скетче изменить строки

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library

на

#include <SPFD5408_Adafruit_GFX.h>    // Core graphics library
#include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library

 

revlerik
Offline
Зарегистрирован: 26.12.2015

Урррааааа!Заработал!

Спасибо за подсказки,мне еще много учится нужно (хотя уже в возрасте).

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

revlerik пишет:

Урррааааа!Заработал!

Спасибо за подсказки,мне еще много учится нужно (хотя уже в возрасте).

Нужно добавить вторую библиотеку.

Китайцы умудрились на одном и том же контроллере сделать разные шилды!))

Если можно фото прибора, очень интересно посмотреть.

cilentlekx
Offline
Зарегистрирован: 14.12.2014

bodriy2014, Здравствуйте! Собрал ваш второй пультоскоп,очень нравится! Правда пока на резонаторе 12 мгц.В принципе , судя по видео то что он умеет на таких частотах,думаю по крайней мере для меня будет достаточно!Вопрос- вход для щупа также обвязывается емкостью и резистором,или напрямую,или есть другая схема согласования? И по делителю также или изменения есть какие то?  За ранее спасибо,за ответ!

 

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

cilentlekx пишет:

bodriy2014, Здравствуйте! Собрал ваш второй пультоскоп,очень нравится! Правда пока на резонаторе 12 мгц.В принципе , судя по видео то что он умеет на таких частотах,думаю по крайней мере для меня будет достаточно!Вопрос- вход для щупа также обвязывается емкостью и резистором,или напрямую,или есть другая схема согласования? И по делителю также или изменения есть какие то?  За ранее спасибо,за ответ!

Привет!.

Да все так-же.

Для переменки(закрытый вход) подключаем через кондер.

Для постоянки(открытый вход) напрямую.

И в обеих свучаях резистор последовательно 10КОм и более, чтоб не спалить МК если ткнете не туда))

Делитель так-же.

cilentlekx
Offline
Зарегистрирован: 14.12.2014

Все понял,спасибо за консультацию!

revlerik
Offline
Зарегистрирован: 26.12.2015
bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

revlerik пишет:

Вот,пока кварц на 16мГц,ну и кнопок нету :)

http://piccy.info/view3/9370383/4d55594e271199f5fdc69e280ff621e0/
 

Отлично!!!

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

Кстати у вас это не последняя версия прошивки.

Здесь последняя.

 

revlerik
Offline
Зарегистрирован: 26.12.2015

Залил последнюю версию,заказал парочку ардуино мини,приедут буду в корпус запихать.

И нужно делитель забацать.Конечно лучше было бы аттенюатор,но я так понимаю не получится,в ардуинке ног мало остается.

cilentlekx
Offline
Зарегистрирован: 14.12.2014

bodriy2014! Еще пару вопросов-Если поставлю делитель 1:10,то при опорном напряжении  1,1 в то напряжение сигнала будет равно 

10умноженное на Vmax? И еще может я конечно не компетентен,но в своем скетче с дисплеем ILI9361C я стирал линию графика следующей такой же ,но черным цветом.Этим убрал моргание дисплея А вы стираете область.С чем это связано?

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Если поставите делитель 1к10 то при измерении 10 вольт на ардуино попадет 1вольт не зависимо от опорного.
А на счет графика спасибо за идею!!!Исправю у себя.
За что и люблю форумы-коллективно часто идеи толковые приходят.

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Мой экранчик на драйвере ST7781 работае с ним всего пара тройка либ.Увы но не хочет заводится..((

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

fly245 пишет:

Мой экранчик на драйвере ST7781 работае с ним всего пара тройка либ.Увы но не хочет заводится..((


Чтоб завелся нужно все выводы в скетче на экран подогнать под свой.
Без наличия оного у меня, для вас изменить скетч не могу.
Уже сделал для nokia 5110 скоро выложу, может этот вариант вас заинтересует.

cilentlekx
Offline
Зарегистрирован: 14.12.2014

Когда исправите со стиранием графика,выложите скетч пожалуйста,а то у меня с вашим скетчем так не получается пока сделать!

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Попробую переделать.

Jtest
Offline
Зарегистрирован: 02.06.2015

bodriy2014, привет!

Стою в очередь на nokia!))

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Привет. Сегодня будет.

cilentlekx
Offline
Зарегистрирован: 14.12.2014

bodriy2014

void graf()
{
  tft.setRotation(0); 
      tft.fillRect(45, 60, 140, 260, BLACK);//стиране графика 
      x=60;
      for(int y=0;y<260;y++){
          tft.setRotation(1);
          if(razv<7){x++;}
          if(razv==7){x=x+2;}
          if(razv==8){x=x+3;}
          if(razv==9){x=x+4;}
          if(razv==10){x=x+5;}
          tft.drawLine(x+1,190-mass[y]/2+1, x+2,190-mass[y+1]/2+1, GREEN);//любая линия по четырем точкам          
          tft.drawLine(x,190-mass[y]/2, x+1,190-mass[y+1]/2, GREEN);//любая линия по четырем точкам

Вобщем эти две линии рисования нужно повторить,но с другой переменной равной mass и в черном цвете,чтобы они стирали предыдущие! Подскажите пожалуйста! Может получится моргание убрать.в предыдущем скетче у меня получилось! вот пример
         
                 
    for (xCounter = 14; xCounter <= DISPLAY_WIDTH; xCounter++)
  {
    tft.drawPixel(xCounter, (DISPLAY_HEIGHT - 1) - readings[xCounter], RED);
    if (xCounter > 1) {
      tft.drawLine(xCounter - 1, (DISPLAY_HEIGHT - 1) - oldReadings[xCounter - 1], xCounter, (DISPLAY_HEIGHT - 1) - oldReadings[xCounter], BLACK);
      tft.drawLine(xCounter - 1, (DISPLAY_HEIGHT - 1) - readings[xCounter - 1], xCounter, (DISPLAY_HEIGHT - 1) - readings[xCounter], RED);
    }
  }  
      

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

cilentlekx пишет:

bodriy2014


      void graf()
{
  tft.setRotation(0); 
      tft.fillRect(45, 60, 140, 260, BLACK);//стиране графика 
      x=60;
      for(int y=0;y<260;y++){
          tft.setRotation(1);
          if(razv<7){x++;}
          if(razv==7){x=x+2;}
          if(razv==8){x=x+3;}
          if(razv==9){x=x+4;}
          if(razv==10){x=x+5;}
          tft.drawLine(x+1,190-mass[y]/2+1, x+2,190-mass[y+1]/2+1, GREEN);//любая линия по четырем точкам          
          tft.drawLine(x,190-mass[y]/2, x+1,190-mass[y+1]/2, GREEN);//любая линия по четырем точкам

Вобщем эти две линии рисования нужно повторить,но с другой переменной равной mass и в черном цвете,чтобы они стирали предыдущие! Подскажите пожалуйста! Может получится моргание убрать.в предыдущем скетче у меня получилось! вот пример
         
                 
    for (xCounter = 14; xCounter <= DISPLAY_WIDTH; xCounter++)
  {
    tft.drawPixel(xCounter, (DISPLAY_HEIGHT - 1) - readings[xCounter], RED);
    if (xCounter > 1) {
      tft.drawLine(xCounter - 1, (DISPLAY_HEIGHT - 1) - oldReadings[xCounter - 1], xCounter, (DISPLAY_HEIGHT - 1) - oldReadings[xCounter], BLACK);
      tft.drawLine(xCounter - 1, (DISPLAY_HEIGHT - 1) - readings[xCounter - 1], xCounter, (DISPLAY_HEIGHT - 1) - readings[xCounter], RED);
    }
  }  

Я понял вашу мысль, буду делать синхронизацию уберу моргание и обязательно выложу!

Сейчас LCD5110 занят.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Jtest пишет:

bodriy2014, привет!

Стою в очередь на nokia!))

Вот Мини Осциллограф+ Генератор сигналов+Частотомер на LCD 5110

Всем удачи в реализации!!!

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

в упор не вижу как подключать дисплей 5110. может ткнёте в схемку или коментарий?