LINUX.ORG.RU

lxardoscope — осциллограф на базе Linux+Arduino

 , ,


0

3

LXARDOSCOPE — программная реализация осциллографа, использующая Arduino UNO для захвата данных. Интерфейс программы построен так, чтобы быть понятным тем, кто привык иметь дело с аппаратными осциллографами.

Технические характеристики:

  • режими отображения: два канала, суммирование; развёртка по времени или xy
  • цена вертикальных делений: от 2мВ до 10В.
  • управление усилением для калибровки
  • цена горизонтальных делений: от 100мкс до 5с
  • триггер с выбором канала и срабатыванием по нарастающему или спадающему фронту
  • до 3000 замеров в секунду на канал

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

Cкриншот

>>> Подробности

★★

Проверено: maxcom ()

Ответ на: комментарий от prozium

эммм... диода не вижу (смотрю схему из архива с прогой 23,24 ноги).

xSudo ★★★ ()
Ответ на: комментарий от xSudo

> эммм... диода не вижу

Выдержка из datasheet на ATmega8: «All I/O pins have protection diodes to both VCC and Ground as indicated in Figure 21.»

prozium ★★ ()
Ответ на: комментарий от Zubok

Лол. Предлагаю использовать полосовую дискретизацию с обращением высоких частот в область низких. При помощи перестраиваемого аналогового полосового фильтра нарезаем частотный диапазон полосами по 3кГц, оцифровываем по очереди.

Для цифрового восстановления частот делаем интерполяцию с повышением частоты дискретизации, потом БПФ и производим свёртку в частотной области с дельта-функциями, которые будут сдвигать сигнал в соответствующую полосу и поочерёдно восстанавливать все полосы исходного сигнала. Для этого к схеме неплохо бы подключить ПЛИС.

А в центре этого будет гордая атмега.

Или даже ТИНЬКА, для большего пафоса.

prischeyadro ★★★☆☆ ()

У них что на скриншоте? Такое впечатление что экран выливается.

webhamster ()
Ответ на: комментарий от Zubok

Сравни с

//------------------------------------------------
// Fast Acquisition
// By: Igor R.
// 03/09/2011
//------------------------------------------------


#define CHRONO  0


void setup()
{
  Serial.begin(1000000);  //1 Mbps
  
  //Prescaler
  //ADPS2 - ADPS1 - ADPS0 - Division Factor
  //0        - 0       - 0        ->2
  //0        - 0       - 1        ->2
  //0        - 1       - 0        ->4
  //0        - 1       - 1        ->8
  //1        - 0       - 0        ->16
  //1        - 0       - 1        ->32
  //1        - 1       - 0        ->64
  //1        - 1       - 1        ->128
  //Configure to Prescaler=16 (11793.57 Hz a 115200)
  //Configure to Prescaler=16 (66418.71 Hz a 1000000)

  bitWrite(ADCSRA,ADPS2,1);
  bitWrite(ADCSRA,ADPS1,0);
  bitWrite(ADCSRA,ADPS0,0);
  
  //Analog Input A5
  ADMUX=(1<<ADLAR)|(0<<REFS1)|(1<<REFS0)|(0<<MUX3)|(1<<MUX2)|(0<<MUX1)|(1<<MUX0);
}


void loop()
{

  #if CHRONO==1
  
    MeasureTime();
    for (;;)
    {
    }

  #else
  
    int i;

    for (;;)
    {
      while (!(UCSR0A & (1 << UDRE0)));
      UDR0 = analogReadFast();
      i++;
      if (i==-1);
    }
    
  #endif
  
}

//Read ADC
int analogReadFast()
{
 ADCSRA|=(1<<ADSC);
 // ADSC is cleared when the conversion finishes
 while (bit_is_set(ADCSRA, ADSC));
        return ADCH;
}


//Chrono function
void MeasureTime()
{
  unsigned int i=1;
  unsigned long tStart;
  unsigned long tEnd;
  
  //--------------------------------------------
  //CHRONO
  tStart=micros();
  for (;;)
  {
    while (!(UCSR0A & (1 << UDRE0)));
    UDR0 = analogReadFast();
    i++;
    if (i== 1000)  break;
  }
  tEnd=micros();  
  // END CHRONO
  //--------------------------------------------
  
  Serial.begin(115200);
  delay(100);
  Serial.println("");
  
  Serial.print("tStart=");
  Serial.println(tStart);
  
  Serial.print("tEnd=");
  Serial.println(tEnd);
  
  Serial.print("Puntos=");
  Serial.println(i);
  
  Serial.print("Frecuecy=");
  Serial.print((float)1000000000.0/((float)tEnd-(float)tStart));
  Serial.println(" Hz");
  
}

http://real2electronics.blogspot.com/2011/09/arduino-adc-muestreo-alta-veloci...

З.Ы.: Хак с 1Мб каналом меня просто умиляет :)

AlexVR ★★★★★ ()

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

Это, увы, типично для многих открытых проектов (не всех, конечно): для реальной работы малопригоден, но как игрушка побаловаться классная.

Я правильно понял, что реально польза от него только в диапазоне звуковых частот? А если так, нельзя ли написать что-то подобное, взяв вместо ардуины обычную звуковуху?

hobbit ★★★★★ ()
Ответ на: комментарий от AlexVR

>Сравни с

В тексте на своей испанской языке они пишут, что изначально ограничились 8-разрядными данными, а не полной шкалой. Это позволило им поставить меньший коэффициент делителя частоты для АЦП (в 16) и, соответственно, увеличить скорость преобразования за счет снижения точности. А эти (в новости) работают с полной шкалой (10 бит, ReadAnalog максимально считывает 10000 раз/с), да и постоянно опрашивают два канала АЦП, но передают на 115200. Вот и сравнение. Со скоростью 1Mbs выиграли, да.

Zubok ★★★★★ ()
Ответ на: комментарий от hobbit

>Я правильно понял, что реально польза от него только в диапазоне звуковых частот?

Все гораздо скромнее в данном случае. Можно до звуковых дотянуться, но за счет точности. Я подозреваю, что авторы поделки еще просто не добрались до этого. Похоже, что большую часть времени они посвятили не ардуине, а написанию морды осциллографа.

А если так, нельзя ли написать что-то подобное, взяв вместо ардуины обычную звуковуху?

Можно, конечно. Так и делают обычно.

Zubok ★★★★★ ()
Ответ на: комментарий от hobbit

так есть же. Прочитай в этой теме предыдущие сообщения.

xSudo ★★★ ()

Ох, не я один значит свой осцилл ваяю (открытым он вряд ли будет, много дефицитных деталюх). Будет что-то вроде lcf- -genmeandr -oscilloscope meter. И как-то с Lcd 162x132 65к color (мало, но stm32vldiscovery слабовата для high resolution). Согласен, что проще купить нормальные аналоговый (на 200-350МГц) и цифровой (50-100МГц с длинной памятью) причем обязательно вместе (с детскими игрульками на 5-10МГц я уже вдоволь наигрался), но мы простых путей не ищем, да и скилл на FPGA/CPLD может качну.

ApostolPetr ()
Ответ на: комментарий от prischeyadro

>Академик Котельников смотрит на тебя недовольно, свирепо, но в то же время грустно и с недоумением.

По роду моих занятий знать мне это не нужно. А порядок я назвал верный.

andreykyz ★★ ()
Ответ на: комментарий от Zubok

>Проект тянет только на ученический.

Короче, главной страницы ЛОРа не достоин.

andreykyz ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.