Мини осциллограф Arduino на LCD 5110

Juris
Juris аватар
Offline
Зарегистрирован: 28.10.2016

Добрый день!
Я тут попытался очень внимательно проходить по всем постам дискуссии, сохраняя интересные посты, коды, картинки, расставляя по полочкам (папкам), и просматривая собранное, у меня такое просьба-обращение к Авторам:
Cilentlekx, Dm77, fly245, Onegin, dtvims,
очень, очень было бы хорошо увидеть (и попробовать) конечные (ну или последние перед забрасыванием темы) варианты ваших конструкций кодов. Сделаите подарок пожалуйста, буду очень рад :) Заранее Спасибо!
У кого было "сыро чтоб выставлять", у кого touch не работал, итп, итд - разскажите пожалуйста чем Ваши проекты закончились :)
Ещё раз - Спасибо авансом.

pastry777
Offline
Зарегистрирован: 16.01.2014

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

Midnight
Offline
Зарегистрирован: 30.11.2016

Добрый вечер.

какова схема и программа на сегодняшний день наиболее оптимальна? Очень необходим хоть какой-нить осциллограф((( (Ремонт импульсных БП и УЗЧ) есть https://ru.aliexpress.com/item/LCD-module-TFT-2-4-inch-TFT-LCD-screen-fo... такой дисплей и Ф=Arduino Pro 16MHz 5V.

Juris
Juris аватар
Offline
Зарегистрирован: 28.10.2016

Midnight пишет:

Добрый вечер.

Очень необходим хоть какой-нить осциллограф...(Ремонт импульсных БП и УЗЧ) е... LCD-module-TFT-2-4-inch... Arduino Pro 16MHz 5V.


По быстрому можете собрать вот это:

http://srukami.inf.ua/pultoscop_v2.html

Вот фото моей пробной сборки той конструкции:

http://bildites.lv/a/ppcj4sbt#788tc9y2

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

Братцы случайно нет у вас кода под дисплей 3.0/3.2 ips tft lcd

библиотека

#include <UTFT.h>

инициализируется на меге

UTFT myGLCD(CTE32HR,38,39,40,41);

Midnight
Offline
Зарегистрирован: 30.11.2016

Спасибо за ответ. Уже занимаюсь как раз именно этим вариантом).

 

Вопрос что за разгон? чем череват и как это грамотно сделать. Использую Arduino Uno 328

Juris
Juris аватар
Offline
Зарегистрирован: 28.10.2016

Сам я не программирую, но случайно набрёл на ресурс одного мужика, который, кроме прочего, энтузиаст разрабатывать оптимизированные библиотеки работы с дисплеями. Решил сдесь такой частично "off-topic" залинковать, может сведующим интересно. На мой взгляд не-программиста у него там всё хорошо документировано и свободно доступно.
Извините, если уже известно и/или не нужно.
Вот:
http://andybrown.me.uk/
https://github.com/andysworkshop?tab=repositories
http://andybrown.me.uk/category/stm32plus/page/2/
http://andybrown.me.uk/category/arduino/
... и так далее.

tolkach
Offline
Зарегистрирован: 05.02.2017

Собирал данный девайс как просто осциллограф.Все работает но хочется иметь доработанный вариант как у Вас.Можете дать скетч?Вопрос к Dm77.

Midnight
Offline
Зарегистрирован: 30.11.2016

//дистплей TFT SPFD5408
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0x0A00
#define WHITE   0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
//пользовательские настройки!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#define levo 12
#define ok 11
#define pravo 10
#define vertikal 2   //размер вертикальной сеткаи(если "0" отключениа)
//пользовательские настройки!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
byte mass[501];//массив АЦП
byte massDEL[501];
byte menu=1;//переменная верхнего меню
byte razv=0;//значение развертки
float x=60;//счетчик оси Х
int Vmax=0;// максимальное напряжение
//float Vakb=0;//напряженеиЕКБ
unsigned long t=0;//переменная для ращета развертки
unsigned long pause=0;//переменная для замены Delay
int t_del=0; //значение цены деления развертки в микросекундах
bool opornoe=1; //флаг опорного напряжения
bool paus=0; //флаг режима паузы
bool clen_p=0;//флаг чистки паузы

void setup(){  
    // Vakb=analogRead(A6)*5.3/1024;//проверка напряжения на АКБ
    if(opornoe==0){ADMUX = 0b11100101;}//выбор внутреннего опорного 1,1В
    if(opornoe==1){ADMUX = 0b01100101;}//Выбор внешнего опорного
    uint16_t identifier = tft.readID();  
    tft.begin(identifier);
    delay(50);
    tft.fillScreen(BLACK);
    delay(500);
}

void Zamer(){//заполнение буфера АЦП
  if (razv>=6){ADCSRA = 0b11100010;}//delitel 4
  if (razv==5){ADCSRA = 0b11100011;}//delitel 8
  if (razv==4){ADCSRA = 0b11100100;}//delitel 16
  if (razv==3){ADCSRA = 0b11100101;}//delitel 32
  if (razv==2){ADCSRA = 0b11100110;}//delitel 64
  if (razv<2){ADCSRA = 0b11100111;}//delitel 128
  if (razv==0){
      t=micros();
      for(int i=0;i<500;i++){
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          delayMicroseconds(100);
          mass[i]=ADCH;
      }
      t= micros()-t;
      t_del=t*25/501;
  }
  if (razv>0){
      t=micros();
      for(int i=0;i<500;i++){
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          mass[i]=ADCH;
      }
      t= micros()-t;
      t_del=t*25/501;
  }
 
}

void MenuT(){//перерисовка нижнего меню    
    tft.setRotation(0);  
    tft.fillRect(7, 15, 23,55, BLACK);//стирание поля меню под мс
    tft.fillRect(7, 245, 23,53, BLACK);//стирание поля меню под амплитуду
    tft.setRotation(1);
    tft.setCursor(20,215);
    if(razv<7){tft.print(t_del);}
    if(razv==7){tft.print(t_del/2);}
    if(razv==8){tft.print(t_del/3);}
    if(razv==9){tft.print(t_del/4);}
    if(razv==10){tft.print(t_del/5);}
    tft.setCursor(250,215);
    if(opornoe==0){tft.print(Vmax*1.1/255);}
    if(opornoe==1){tft.print(Vmax*4.4/255);}
    tft.print("B");
    //tft.print(Vakb);  
}

void loop() {
Zamer();  
//отрисовка и перебор меню###############################

if(menu==0){
  tft.setRotation(1);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.fillRect(0, 0, 85, 25, CYAN);
  tft.setCursor(0,5);
  if(opornoe==0){tft.print("1.1B   ");}
  if(opornoe==1){tft.print("5.0B   ");}
  if(digitalRead(pravo)==HIGH){
    tft.setRotation(0);
    tft.fillRect(65, 0, 120, 50, BLACK);//стирание напряжения
    tft.fillRect(45, 60, 140, 260, BLACK);//стиране поля графика
    opornoe=!opornoe;}
  if(digitalRead(levo)==HIGH){
    tft.setRotation(0);  
    tft.setRotation(0);
     tft.fillRect(45, 60, 140, 260, BLACK);//стиране поля графика
    tft.fillRect(65, 0, 120, 50, BLACK);//стирание напряжения
    opornoe=!opornoe;}
  tft.setRotation(1);  
  tft.print("PA3B - ");
  tft.print(razv);
  tft.print("     ""\xEE""AY3A");
}
if(menu==1){
  tft.setRotation(1);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.fillRect(90, 0,120, 25, CYAN);
  tft.setCursor(0,5);
  if(opornoe==0){tft.print("1.1B    ");}
  if(opornoe==1){tft.print("5.0B    ");}
  if(digitalRead(pravo)==HIGH){//доработать скорость
  tft.setRotation(0);
  tft.fillRect(45, 60, 140, 260, BLACK);//стиране поля графика
  razv++;
  if(razv==11){razv=10;}
  }
  if(digitalRead(levo)==HIGH){//доработать скорость
  tft.setRotation(0);
  //tft.fillRect(45, 60, 140, 260, BLACK);//стиране поля графика -------------------------------------- выключил
  razv--;
  if(razv==255){razv=0;}
  }
  tft.setRotation(1);
  tft.print("PA3B - ");
  tft.print(razv);
//  tft.print("    P OFF");
  tft.print("     ""\xEE""AY3A");
}
if(menu==2){//пауза
  paus=1;
  if(clen_p==0){
  clen_p=1;  
  tft.setRotation(1);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.fillRect(210, 0,100, 25, CYAN);
  tft.setCursor(0,5);
  if(opornoe==0){tft.print("1.1B    ");}
  if(opornoe==1){tft.print("5.0B    ");}
  tft.print("PA3B - ");
  tft.print(razv);
  tft.setTextColor(MAGENTA);
  if(paus==0){tft.print("     ""\xEE""AY3A");}
  tft.setTextColor(RED);
  if(paus==1){tft.print("     ""\xEE""AY3A");}
}
}
if(digitalRead(ok)==HIGH){
  menu++;
  tft.setRotation(0);
  tft.fillRect(45, 60, 140, 260, BLACK);//стиране поля графика  
  if(menu==3){menu=0;paus=0;clen_p=0;}
  tft.setRotation(1);
  tft.fillRect(0, 0,320, 25, BLACK);    
}
//отрисовка и перебор меню###############################
//Выбор опорного#########################################  
if(opornoe==0){ADMUX = 0b11100101;}//выбор внутреннего опорного 1,1В
if(opornoe==1){ADMUX = 0b01100101;}//Выбор внешнего опорного
delay(5);
//Выбор опорного#########################################  
tft.setRotation(0);
//ось напряжения##########################################
tft.drawFastVLine(46,50,270, YELLOW);
tft.drawFastVLine(72,50,270, YELLOW);
tft.drawFastVLine(98,50,270, YELLOW);
tft.drawFastVLine(124,50,270, YELLOW);
tft.drawFastVLine(148,50,270, YELLOW);
tft.drawFastVLine(176,50,270, YELLOW);
//ось времени#############################################
//tft.drawFastHLine(35,60,150,YELLOW);
tft.drawFastHLine(40,60,144,YELLOW);

tft.drawFastHLine(40,85,144,YELLOW);tft.drawFastHLine(40,110,144,YELLOW);tft.drawFastHLine(40,135,144,YELLOW);
tft.drawFastHLine(40,160,144,YELLOW);tft.drawFastHLine(40,185,144,YELLOW);tft.drawFastHLine(40,210,144,YELLOW);tft.drawFastHLine(40,235,144,YELLOW);
tft.drawFastHLine(40,260,144,YELLOW);tft.drawFastHLine(40,285,144,YELLOW);tft.drawFastHLine(40,310,144,YELLOW);
//ось времени#############################################

//сетка вертикальная #####################################
tft.setRotation(1);  
tft.setTextColor(RED);
tft.setTextSize(2);
    

    
    tft.setCursor(75,215);
    tft.print("mc       AM""\xEE"" =");

//шкала напряжения########################################
if(opornoe==0){
    tft.setCursor(37, 180);tft.println("0");
    tft.setCursor(0, 155);tft.println(" 0.2");
    tft.setCursor(0, 130);tft.println(" 0.4");
    tft.setCursor(0,105);tft.println(" 0.6");
    tft.setCursor(0, 80);tft.println(" 0.8");
    tft.setCursor(0, 55);tft.println(" 1.1");   
}
if(opornoe==1){
    tft.setCursor(37, 180);tft.println("0");
    tft.setCursor(0, 155);tft.println(" 1.0");
    tft.setCursor(0, 130);tft.println(" 2.0");
    tft.setCursor(0,105);tft.println(" 3.0");
    tft.setCursor(0, 80);tft.println(" 4.0");
    tft.setCursor(0, 55);tft.println(" 5.0");   
}
//шкала напряжения########################################
if(paus==0){MenuT();}
//максимальное значение сигнала##########################
Vmax=0;
for(int i=0;i<500;i++){  
        if(Vmax<mass[i]){ Vmax=mass[i];}
}
//максимальное значение сигнала##########################
//отрисовка графика№№№№№№№№№№№№№№№№№№№№№
if(paus==0){
  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-massDEL[y]/2+1, x+2,190-massDEL[y+1]/2+1, BLACK);//стираем график
      tft.drawLine(x,190-massDEL[y]/2, x+1,190-massDEL[y+1]/2, BLACK);//стираем график
      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);//график
         
  }
  for(int i=0;i<500;i++){massDEL[i]=mass[i];}
}
if(paus==1){//режим паузы
    //tft.setRotation(0);
    //tft.fillRect(45, 60, 140, 260, BLACK);//стиране графика
    if(digitalRead(pravo)==HIGH){//листаем
        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);//график
      }
      MenuT();
    }
    if(digitalRead(levo)==HIGH){//листаем
      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);//график
      }
      MenuT();
    }     
}
}
 

tolkach
Offline
Зарегистрирован: 05.02.2017

Midnight.Я так понял что это для меня.Спасибо за проявленное внимание.Это скетч для SPFD5408.Выдал "ошибка при компиляции".Если-бы у меня был модуль с этим чипом то все заработало но у меня ST7781-спасибо друзьям из поднебесной.Обращался к DM77,пост #408,но пока без ответа.В инете есть видео с сенсорным управлением экрана но нет ссылок чтобы посмотреть скетч.Сейчас буду искать дальше.На сайте есть тема по пультоскопу но там другие дисплеи,читал добросовесно все страницы.Жду еще 1 модуль но опять могут кота прислать.Спрашивал у продавца какой чип и библиотеку но он скромно молчит. 

DAFdriver
Offline
Зарегистрирован: 12.08.2016

tolkach пишет:

Midnight.Я так понял что это для меня.Спасибо за проявленное внимание.Это скетч для SPFD5408.Выдал "ошибка при компиляции".Если-бы у меня был модуль с этим чипом то все заработало но у меня ST7781-спасибо друзьям из поднебесной.Обращался к DM77,пост #408,но пока без ответа.В инете есть видео с сенсорным управлением экрана но нет ссылок чтобы посмотреть скетч.Сейчас буду искать дальше.На сайте есть тема по пультоскопу но там другие дисплеи,читал добросовесно все страницы.Жду еще 1 модуль но опять могут кота прислать.Спрашивал у продавца какой чип и библиотеку но он скромно молчит. 

 Я запустил по данному скетчу . просто добавил библиотеку к своему дисплею и инициализацию :

//страничка проекта http://srukami.inf.ua/pultoscop_v2.html
//дистплей TFT SPFD5408//БЫЛО
#include <LGDP4535.h> // Hardware-specific library//СТАЛО
#include <Adafruit_GFX.h>    // Core graphics library
//#include <Adafruit_TFTLCD.h> // Hardware-specific library
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
LGDP4535 tft;//ДОБАВИЛ
 Думаю под любой дисплей можно . У меня TFT LCD SHIELD FORD ARDUINO UNO сенсорный с сиди картой . Как в ветке : 

Arduino UNO R3 + LCD 2.4 TFT

этого форума .

 Собирал по схеме проэкта , а скетч использовал:Midnight.
 
gera1234256@gmail.co
Offline
Зарегистрирован: 05.12.2017

Приветствую! Есть у меня кучка дисплеев, но не знаю как их подключать к arduino/esp/stm :( Хоть один бы из них подключить...

Удалось найти даташит на M150XN05 v.3 , но к сожалению на v5, но по распиновки подходит. Подключается по LVDS. 
P.S. не спрашивайте, зачем мне 15 дюймовая матрица в проекте на arduino

Матрица 32001014-02 ufk 1212 38 от неизвестного планшета, когда-то видел даташит, вроде тоже по lvds подключается, но сейчас что-то не могу найти

Дисплей от телефона Samsung GT-S3600 (GT-S3600_MAIN_FPCB_REV0.2) без платы. Даташит найти не смог.

Мини матрица WD-X0908V от motorola razr V3 + основная матрица от него же (на ней никаких опозновательных знаков), даташита тоже нет, но хотелось бы подключить т.к. удобный по размерам дисплей.

Дисплей RB342-AG 744 E от телефона SONY ericsson k320i, распиновку нашёл только от телефона k310i, но вроде подходит ссылка 

Дисплей TXDT450EKPA-57 от какого-то китайца, даташита тоже нет. + шлейф на нём чуть покоцан, но ближе к дисплею есть места, куда можно подпаяться

Дисплей fpc4535a-v3-C от samsung gt-s1080

Advenced
Offline
Зарегистрирован: 02.03.2017

ВСем привет.

Спасибо автору за проект. Очень понравилось. Не жил бы я в жопе мира, помог бы автору за проект.

Меня интересует использование карманного осциллографа в Авто,

Подскажите как праивльно для стандартной финальной версии расчитать делитель  до 15в?

Как его откалибровать?

К финальной версии можно прикрутить потенциометр развертки?

И еще вопрос, возможно ли на нем смотреть сигнал от 0 до 1 вольта?

 

Joiner
Offline
Зарегистрирован: 04.09.2014

Advenced пишет:

....................... Не жил бы я в жопе мира, помог бы автору за проект.................

А это где?

apeks1
apeks1 аватар
Offline
Зарегистрирован: 19.05.2016

Joiner пишет:

Advenced пишет:

....................... Не жил бы я в жопе мира, помог бы автору за проект.................

А это где?

там где мы есть, а где нас нет там хорошо 

Advenced
Offline
Зарегистрирован: 02.03.2017

Привет всем,

Вопрос, зачем по схеме входа для щюпа паралельно подключен еще пятый цифровой вход?

Можно ли дополнительно прикрутить потенциометр для развертки.

И установить отдульную кнопку Пауза?