| Ваш IP: 18.232.38.214 | Online(34) - гости: 28, боты: 6 | Загрузка сервера: 1.42 ::::::::::::


Осциллограф на Arduino (LCD TFT 2.4″)

На базе Arduino UNO или NANO можно сделать простой осциллограф с минимальными функциями. В осциллографе применен дисплей LCD TFT 2,4 (SPFD5408). Максимальная частота сигнала которую можно фиксировать осциллографом 20000 Гц. Длительной развертки осциллографа можно менять от 0,1 до 20 мс. Максимальное напряжение подаваемое на вход осциллографа 5 В. Разрешение дисплея 320х240 точек.

Осциллограф имеет четыре режима работы:

  • Основной режим (доступен после включения осциллографа) — в основном режиме можно при помощи кнопок «+» и «-» менять разрешение развертки. Так же в нем применена автоматическая синхронизации по среднему уровню сигнала. В верхней части экрана можно видеть режим работы синхронизации (SYNC AUTO), длительность развертки, частоту сигнала и напряжения сигнала (максимальное, минимальное, амплитудное).
  • Ручная синхронизация (SYNC ADJ) — в режиме ручной синхронизации можно установить уровень напряжения входного сигнала при котором будет срабатывать синхронизация.
  • Режим паузы — режим паузы HOLD позволяет просматривать осциллограмму при помощи кнопок «+» и «-«. Для просмотра доступно 640 точек измерения.
  • Выбор входного напряжения — эта опция активируется при одновременном нажатии кнопок «+» и «-«, при этом вход осциллографа переключается в режим измерения с максимальным напряжением 1,1 В, этот режим обозначается на дисплее как «0.22V/DIV» (0.22 В/дел.). При повторном одновременном нажатии кнопок «+» и «-«, вход осциллографа переходит в основной режим измерения 1В/дел.(макс. 5 В) и на дисплее обозначается как «1.00V/DIV».

Основной режим

Ручная синхронизация

Режим HOLD

Подключение:

  • Дисплей LCD TFT 2,4 (SPFD5408) имеет 5 контактов шины синхронизации и 8 контактов для данных

TFT 2.4 — LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET // Arduino — A3, A2, A1, A0, A4

TFT 2.4 — D0, D1, D2, D3, D4, D5, D6, D7  // Arduino 8, 9, 2, 3, 4, 5, 6, 7

  • Кнопки управления

13   — menu

12  — плюс

10 — минус

  • Вход — можно использовать А7 (по умолчанию) или А5, входной сигнал необходимо подавать через резистор 4,7 кОм
  • Генератор — 11 цифровой выход используется как тестовый генератор. Частота ШИМ составляет приблизительно 490 Гц.

Библиотеки

Adafruit_GFX.zip

SPFD5408.zip

#include <Adafruit_GFX.h>    
#include <TftSpfd5408.h>
#include <SPI.h>
 
TftSpfd5408 tft(A3,A2,A1,A0,A4);/// LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET // A3,A2,A1,A0,A4
// D0 pin 8, D1 pin 9, D2 pin 2, D3 pin 3, D4 pin 4, D5 pin 5, D6 pin 6,D7 pin 7
void setup(){tft.reset();tft.begin(0x9341);Serial.begin(9600);
  tft.setRotation(1);tft.fillScreen(0x0000);tft.setTextColor(0xFFFF);tft.setTextSize(2); 
   analogWrite (11, 127); // PWM 9 ВЫХОД для тестирования осциллографа
   pinMode(13,INPUT);/// menu
   pinMode(12,INPUT);/// +
   pinMode(10,INPUT);/// -
   ADMUX  = 0b01100111;  // 0bxxxxx111 A7 nano // 0bxxxxx101 A5 uno // 0b01xxxxxx 5V // 0b11xxxxxx 1.1 V
   ADCSRA = 0b11100010;
}
 
int h0,sss=45,zz=20,x,y,i,i1,u,i2,i3,sinhro,sinhro1,kof;
int arr=0,arr1=255,menu,hold,hold_reg,raz=3;
float u_max,u_min=0,u_sig,per,f;
byte data[640],data1[640],w,w1;
unsigned long times,time,time1,time3;
 
void loop(){
  tft.setTextColor(0xFFFF);tft.setRotation(1);tft.setTextSize(1);
  tft.setCursor(140,20);tft.print(" RCL-RADIO.RU ");
  tft.setCursor(0, 0);
 
///////////////////////////// кнопки управления /////////////////////
  if(digitalRead(13)==HIGH){menu++;tft.fillRect(0, 0, 120, 20, 0x0000);
   tft.fillRect(0, 40, 10, 200, 0x0000);}if(menu>2){tft.fillScreen(0x0000);menu=0;}
  if(menu==2){hold=1;}else{hold=0;hold_reg=0;}
 
  if(menu==0){
    if(digitalRead(12)==HIGH){raz++;tft.fillRect(120, 0, 110, 20, 0x0000);tft.fillRect(0, 40, 320, 220, 0x0000);}
    if(digitalRead(10)==HIGH){raz--;tft.fillRect(120, 0, 110, 20, 0x0000);tft.fillRect(0, 40, 320, 220, 0x0000);}
    if(raz>7){raz=7;}if(raz<0){raz=0;}
  switch(raz){  
   case 0: zz=1;  kof=2; per=0.1;break;
   case 1: zz=1;  kof=1; per=0.2;break;
   case 2: zz=7;  kof=1; per=0.5;break;
   case 3: zz=17; kof=1; per=1;  break;
   case 4: zz=36; kof=1; per=2;  break;
   case 5: zz=95; kof=1; per=5;  break;
   case 6: zz=185;kof=1; per=10; break;
   case 7: zz=380;kof=1; per=20; break;
}}
 
  if(menu==1){ // ручная синхронизация
    if(digitalRead(12)==HIGH){sss+=5;}
    if(digitalRead(10)==HIGH){sss-=5;}
    if(sss>240){sss=240;}if(sss<20){sss=20;}}
 
  if(menu==2){ // кнопки в режиме HOLD
    if(digitalRead(12)==HIGH){hold_reg+=5;}
    if(digitalRead(10)==HIGH){hold_reg-=5;}
    if(hold_reg>319){hold_reg=319;} if(hold_reg<0){hold_reg=0;}}
 
  if(digitalRead(12)==HIGH&&digitalRead(10)==HIGH){w++;w1=1; tft.fillScreen(0x0000);if(w>1){w=0;}}
    if(w==0&&w1==1){ADMUX  = 0b01100111;w1=0;}
    if(w==1&&w1==1){ADMUX  = 0b11100111;w1=0;}
 
//////////////////////////////// измерение и синхронизация //////////////////////
  if(hold==0){
  ADS();while(ADCH!=sinhro){ADS();ADCH;h0++;if(h0>10000){break;}}h0=0; // ждем минимальной амплитуды
  ADS();while(ADCH<sss){ADS();ADCH;h0++;if(h0>10000){break;}}h0=0;// СИНХРОНИЗАЦИЯ
  times=micros();
  while(i<639){i++;
   delayMicroseconds(zz);
   ADS();data[i]=ADCH; // ИЗМЕРЕНИЕ 
   }i=0;times=micros()-times;
  Serial.println(times); // монитор порта время измерения 640 точек 
  }
////////////////////////////////////////////////////////////////////////////////
 
/////////////////////////////ВЕРХНЯЯ ЧАСТЬ ЭКРАНА //////////////////////////////
//////////////////// максимальное и минимальное напряжение //////////// 
  if(millis()-time>1000&&hold==0){
    while(i<319){i++;arr = max(arr,data[i]);arr1=min(arr1,data[i]);}i=0;sinhro1=arr;sinhro=arr1;
     tft.setCursor(250,0);tft.setTextSize(1);tft.fillRect(280, 0, 25, 30, 0x0000);tft.fillRect(60, 15, 80, 20, 0x0000);
     if(w==0){u_max=arr*5.0/255;u_min=arr1*5.0/255;}else{u_max=arr*1.1/255;u_min=arr1*1.1/255;}
     tft.setTextColor(0xFFFF);tft.print("Umax=");tft.print(u_max);tft.print(" V ");
     tft.setCursor(250,10);
     tft.setTextColor(0xFFFF);tft.print("Umin=");tft.print(u_min);tft.print(" V ");
     tft.setCursor(250,20);
     tft.setTextColor(0xFFFF);tft.print("Usig=");tft.print(u_sig=u_max-u_min);tft.print(" V ");
     if(menu!=1){sss=(sinhro1-sinhro)/2;} /// средний уровень напряжения для автосинхронизации
     arr=0;arr1=255;
    ///// частотомер от 315 Гц//////  
    ADS();while(ADCH>sss-10){ADS();ADCH;h0++;if(h0>10000){break;}}h0=0;
    ADS();while(ADCH<sss+10){ADS();ADCH;h0++;if(h0>10000){break;}}h0=0;time3=micros();
    ADS();while(ADCH>sss-10){ADS();ADCH;h0++;if(h0>10000){break;}}h0=0;
    ADS();while(ADCH<sss+10){ADS();ADCH;h0++;if(h0>10000){break;}}h0=0;f=micros()-time3;
     f=(1/f)*1000;
     tft.setTextSize(1);tft.setCursor(0,20);if(w==0){tft.print("1.00V/DIV ");}else{tft.print("0.22V/DIV ");}
     tft.print(" F=");tft.print(f,3);tft.print(" kHz ");
 
     time=millis();}i=0;
     /// вывод HOLD, длительность развертки, синхронизация и частота
     tft.setCursor(0,0);
     if(hold==1){tft.setTextSize(2);tft.setTextColor(0xFFFF);tft.print("HOLD     ");}
     if(menu==0){tft.setTextSize(2);tft.setTextColor(0xFFFF);tft.print("SYNC AUTO");
     tft.print("   ");tft.print(per,1);tft.println(" mS");}
     if(menu==1){tft.setTextSize(2);tft.setTextColor(0xFFFF);tft.print("SYNC ADJ ");}
/////////////////////////////////////////////////////////////////////////////////   
     setka();
///////////////////////////// вывод сигнала //////////////////////////////////// 
  while(i<639){i++;if(hold==0){data[i]=data[i]/1.29;}}i=0;// поправка на размер экрана int 255 > int 240
  while(i<319){i++; /// основной цикл вывода изображения на экран
    tft.drawLine(i*kof,239-data1[i],i*kof,239-data1[i-1],0x0000);// стирание сигнала
   if(i<2){}else{tft.drawLine(i*kof,239-data[i+hold_reg],i*kof,239-data[i-1+hold_reg],0xF800);}}i=0;// вывод сигнала
  while(i<319){i++;data1[i]=data[i+hold_reg];}i=0; // массив под стирание
////////////////////////////////////////////////////////////////////////////////
 
}// LOOP
 
void setka(){ ///// сетка 
 
  if(menu==1){ //////////// метка ручной синхронизации
    tft.drawFastHLine(0,240-(sss-5)/1.27,10, 0x0000);tft.drawFastHLine(0,240-sss/1.27,10, 0x07ff);tft.drawFastHLine(0,240-(sss+5)/1.27,10, 0x0000);}
  if(hold==1){ //////////// метка прокрутки осциллограммы в режиме HOLD
    tft.drawFastHLine(hold_reg-10,30,10, 0x0000);tft.drawFastHLine(hold_reg,30,10, 0x07ff);tft.drawFastHLine(hold_reg+10,30,10, 0x0000);
    tft.drawFastHLine(hold_reg-10,31,10, 0x0000);tft.drawFastHLine(hold_reg,31,10, 0x07ff);tft.drawFastHLine(hold_reg+10,31,10, 0x0000);}
 
  for(y=40;y<240;y=y+40){
  for(x=10;x<320;x=x+10){
tft.drawPixel(x, y, 0xCDCD);}}
 
  for(x=52;x<320;x=x+52){
  for(y=40;y<240;y=y+10){
tft.drawPixel(x, y, 0xCDCD);}}}
 
void ADS(){while ((ADCSRA & 0x10)==0);ADCSRA|=0x10;}

Комментарии

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

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

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

  • Приемники прямого усиления (приемник с рамочной антенной)

    Приемники прямого усиления (приемник с рамочной антенной)

    Приемник с рамочной антенной предназначен для приема ради вещательных станций в диапазоне СВ (средние волны) на встроенную рамочную магнитную антенну. Приемник состоит из антенны L1, двухкаскадного усилителя радиочастоты(РЧ) на транзисторах V1V2, детектора на диодах V3V4 выполненного по схеме удвоения выпрямленного напряжения, и каскада усиления ЗЧ(звуковой частоты) на транзисторе V5, который …Подробнее...
  • Простой микрофонный усилитель на LM358

    Простой микрофонный усилитель на LM358

    На основе ОУ LM358 можно собрать простой микрофонный усилитель. Микросхема LM358 в одном корпусе содержит два независимых маломощных операционных усилителя с высоким коэффициентом усиления и частотной компенсацией. Отличается низким потреблением тока. Особенность данного усилителя – возможность работать в схемах с одно полярным питанием от 3 до 32 вольт. Выход имеет защиту …Подробнее...
  • Электропроводки (общие сведения, рекомендации)

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

    Особенности распространения радиоволн

    В этом выпуске: как распространяются радиоволны, какие особенности распространения радиоволн.Подробнее...
  • Совместимость металлов

    Конструкторы, работающие с металлами, сталкиваются с такой проблемой: при соединении двух различных металлов через какое-то время один из них разрушается. Это явление называется электрокоррозией. Оно связано с тем, что некоторые пары металлов при соприкосновении образуют так называемые гальванические пары, приводящие к разрушению одного из них. При этом нарушается электрический контакт, …Подробнее...