| Ваш IP: 3.95.63.218 | Online(71) - гости: 17, боты: 54 | Загрузка сервера: 1.07 ::::::::::::

Простой осциллограф на Arduino Nano (Uno)

На основе Arduino Nano (Uno) можно собрать простой осциллограф имеющий минимальный функционал. Максимальная частота сигнала которую может отобразить экран осциллографа 20 кГц (7 импульсов на ширину экрана), максимальное входное напряжение 5 В.

Осциллограф управляется четырьмя кнопками:

  • Кнопка «HOLD» — режим паузы, кнопками «+» и  «-» можно перемещать изображение сигнала вправо и влево.
  • Кнопка «Синхронизации» — позволяет задавать уровень синхронизации.
  • Кнопки «+» и  «-» — управление разверткой, уровнем синхронизации и перемещение изображения сигнала в режиме HOLD.

На экране Nokia 5110 отображается размерная сетка, по вертикали каждая клетка равна 1 В, по горизонтали одна клетка равна разрешению развертки которая имеет следующие значения: 0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0 и 50.0 мс. Значение развертки меняется кнопками «+» и  «-«, которое отображается в левом верхнем углу.

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

При маленьком уровне сигнала можно масштабировать шкалу напряжения, для этого перейдите в режим ручной регулировки синхронизации, уменьшите уровень синхронизации до нижней клетки, после чего одно деление шкалы станет равным 0,4 В, если снова уровень синхронизации уменьшить до одной нижней клетки то деление шкалы станет равной 0,2 В. В нижней части экрана появиться значение 0.4 V или 0.2 V, когда надписей нет, значить одно деление шкалы равно 1 В / дел.

Подключение

  • D10 — кнопка «+»
  • D11 — кнопка «-«
  • D12 — кнопка HOLD
  • D13 — кнопка синхронизации
  • A0 — аналоговый вход осциллографа, сигнала подается через резистор 4.7 кОм
  • D9 — тестовый выход генератора 500 Гц
  • Экран — 7, 6, 5, 4, 3  CLK ,DIN ,DC ,CE , RST. На VCC подается +3,3 В, на BL подается питание 3,3 В через резистор 200 Ом или 5 В через резистор 300 Ом.

Библиотеки

Adafruit_PCD8544.zip

Adafruit_GFX.zip

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <SPI.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);//CLK,DIN,DC,CE,RST |||| VCC +3.3 V , BL ++ 200 OM ++ 3.3 V
 
int izm,x,y,u,i2,zz,hold,h0,h1,h2,raz=0,menu,sss=512,u_dig,data[168]{};
unsigned long time,times;
float per;
byte i;
 
void setup() {Serial.begin(9600);
    display.begin();display.clearDisplay();display.display();
    display.setContrast(40); // установка контраста
    display.setTextSize(1);  // установка размера шрифта
    display.setTextColor(BLACK); // установка цвета текста
    pinMode(10,INPUT);  // +
    pinMode(11,INPUT);  // -
    pinMode(12,INPUT);  // hold
    pinMode(13,INPUT);  // синх
    ADMUX  = 0b01000000; // 0B0100000 10 bit A0 // 0B01100000 8 bit A0
    ADCSRA = 0b11110010;// CLK/4;
    analogWrite (9, 127); // PWM 9 ВЫХОД
}
 
void loop() {
///////////////////////////УПРАВЛЕНИЕ КНОПОК//////////////////////////////
 if(menu==0){
  if(digitalRead(10)==HIGH){if(hold==0){raz++;}if(hold==1){i2=i2+1;}delay(100);}
  if(digitalRead(11)==HIGH){if(hold==0){raz--;}if(hold==1&&hold>0){i2=i2-1;}delay(100);}
  }
  if(digitalRead(12)==HIGH){hold++;i2=0;delay(100);}
  if(digitalRead(13)==HIGH){menu++;delay(100);}
  if(hold>1){hold=0;}if(menu>1||menu<0){menu=0;}
  if(raz<=0){raz=0;}if(raz>8){raz=8;}
  if(menu==1){hold=0;
  if(digitalRead(10)==HIGH){sss+=24;delay(100);}
  if(digitalRead(11)==HIGH){sss-=24;delay(100);}
  if(sss>1023){sss=1023;}if(sss<0){sss=0;}
  }
   display.setCursor(0,0); // установка позиции курсора
/////////////////////////ВРЕМЯ РАЗВЕРТКИ откалибровано по генератору ////////////////////////////
  if(raz==0){zz=1;h2=2;per=0.1;}
  if(raz==1){zz=1;h2=1;per=0.2;}
  if(raz==2){zz=12;h2=1;per=0.5;}
  if(raz==3){zz=32;h2=1;per=1;}
  if(raz==4){zz=75;h2=1;per=2;}
  if(raz==5){zz=200;h2=1;per=5;}
  if(raz==6){zz=380;h2=1;per=10;}
  if(raz==7){zz=750;h2=1;per=20;}
  if(raz==8){zz=1900;h2=1;per=50;}
///////////////////////////////////////////////////////////////////
 if(hold==0&&millis()-time>0){
 
 ads();while(izm<sss){ads();h0++;if(h0>5000){break;}}h0=0;// СИНХРОНИЗАЦИЯ
 times=micros();
 while(i<167){i++;delayMicroseconds(zz);
  ads();data[i]=izm; // ИЗМЕРЕНИЕ 10 bit
  }i=0;times=micros()-times;
  Serial.println(times);
 }
////////////////////ВЫВОД НА ЭКРАН///////////////////////////////
  if(millis()-time>100){
    display.clearDisplay();
    if(sss<204&&sss>100){u_dig=10;display.setCursor(0,40);display.print("0.4V");}
    else if(sss<100){u_dig=5; display.setCursor(0,40);display.print("0.2V");}
    else{u_dig=25;}
     display.setCursor(0,0);
 while(i<167){i++;setka();
    display.drawLine(i*h2-i2, 47-data[i]/u_dig,i*h2-i2+h2-1, 47-data[i+1]/u_dig, BLACK);}i=0;
    display.print(per,1);display.print(" mS  ");
  if(menu==0){if(hold==1){display.print("HOLD   ");}else{display.print("AUTO   ");}}
  if(menu==1){display.print(sss/200.0,1);display.print(" V ");}
  if(menu==1){display.drawLine(0, 48-sss/u_dig,4, 48-sss/u_dig, BLACK);}
    time=millis();
}
   display.display();    
}// loop
 
void ads(){ //////// 10 bit ///////////
  do{ADCSRA |= (1 << ADSC);} 
  while((ADCSRA & (1 << ADIF)) == 0);izm = (ADCL|ADCH << 8);} 
  ////////////////// 8 bit ///////////
  // ПОТРЕБУЕТСЯ ИЗМИНЕНИЕ ВСЕХ ПОПРАВОЧНЫХ ПЕРЕМЕННЫХ (sss, u_dig)
  // while ((ADCSRA & 0x10)==0);
  //   ADCSRA|=0x10;
  //   izm = ADCH;
 
void setka(){
 for(y=8;y<47;y=y+8){
 for(x=0;x<83;x=x+4){
   display.drawPixel(x, y, BLACK);}}
 
 for(x=0;x<83;x=x+26){
 for(y=10;y<47;y=y+4){
   display.drawPixel(x, y, BLACK);}}
}

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Преобразователь напряжения 3В в 9В

    Схема преобразователя представлена на рис.. Основа уст-ва однотактный автогенератор с трансформаторной связью и обратным включением диода. Генератор преобразователя выполнен на VT2. Германиевый транзистор имеет малое сопротивление насыщения, и это обеспечивает легкий запуск и нормальную работу преобразователя при низком напряжении питания. На VT1 собран стабилизатор базового тока транзистора VT2, предназначенный для …Подробнее...
  • Инфракрасный датчик

    Назначение: на основе предложенной схемы можно собрать уст-во которое будет считать прохожих, включать свет при проходе через дверь, охранную сигнализацию и тому подобное. Излучатель ИК VD4 на АЛ147А (он установлен в пультах ДУ ТВ типа 4-УСЦТ) излучает сигнал промодулированный импульсами 1000Гц. Генератор — источник импульсов выполнен на VT2 VT3. Частота …Подробнее...
  • Любительская паяльная станция

    Схема станции показана на рис. 1. На ОУ DA3 собран усилитель напряжения термопары ВК1. Плюсовой вывод термопары ВК1 должен быть обязательно подключен к общей точке резисторов R4 R11. На ОУ DA4 выполнен компаратор напряжения. На его не инвертирующий вход поступает напряжение, задаваемое делителем R5R7R8R9, на инвертирующий вход — напряжение с …Подробнее...
  • Обмоточные провода

    При эксплуатации и ремонте электроустановок применяются обмоточные, монтажные и установочные провода и провода специального назначения. Первые используют для изготовления обмоток электрических машин, трансформаторов, приборов и аппаратуры; при помощи вторых осуществляют соединения в различных схемах электрооборудования и электроустройства; третьи используют в качестве нагревательных элементов электроустановок. Обмоточные провода могут иметь волокнистую изоляцию, …Подробнее...
  • Аналоговый ВЧ вольтметр

    Аналоговый ВЧ вольтметр

    На рисунке показана схема простого ВЧ вольтметра. Входное напряжение вольтметра от 0 до 5В. Максимальная частота до 200 МГц. Вольтметр состоит из двух частей — зонда и усилителя которые соединены между собой коаксиальным кабелем. В качестве индикатора используется микроамперметр (100мкА) с линейной шкалой. Для калибровки вольтметра необходимо на его вход …Подробнее...