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

Electronik83
Offline
Зарегистрирован: 06.12.2015

Задача примено ясна. Будут вопросы - напишу.
P.S. извинятся не надо, тут все свои))))

Electronik83
Offline
Зарегистрирован: 06.12.2015

Пока переделывал исходник под поставленную задачу обнаружил два интересных факта:

1. При частоте сигнала ровно 1 кГц пультоскоп не покажет её.

2. При напряжении сигнала 2,5 вольта частота отобразиться неверно наверно.

Electronik83
Offline
Зарегистрирован: 06.12.2015

https://yadi.sk/d/7N3IYzIm3TirBG 

Кто нибудь сможет затестить? Должно работать как в оригинале. Ничего не менял, немного код причесал, оптимизировал...

Novice User
Offline
Зарегистрирован: 25.09.2017

Так и будет,у вас же

// выводим частоту  

  // ===== ТУТ НЕ ПРАВЛЬНО! ТА ЖЕ ОШИБКА! РОВНО КИЛОГЕРЦ НЕ ВЫВЕДИТЬСЯ! [El83] =====
  if (countX<1000) { display.print(" "); display.print(countX); display.print("Hz");}
  if (countX>1000) { float countXK=countX/1000.0; display.print(countXK,1); display.print("KHz");}

через else можно попробовать или так

....

if (countX=>1000) { float countXK=countX/1000.0; display.print(countXK,1); display.print("KHz");}

 

Electronik83
Offline
Зарегистрирован: 06.12.2015

Я в курсе. Просто логику работы сохранил полностью.

Electronik83
Offline
Зарегистрирован: 06.12.2015
VicSan
Offline
Зарегистрирован: 27.04.2017

Расцвел цветок и на этом все

 

Electronik83
Offline
Зарегистрирован: 06.12.2015

А авторская версия прошивки работает?? У меня то все нормально))))

VicSan
Offline
Зарегистрирован: 27.04.2017

Работает Ваша Бета последняя. Собрано по схеме автора (которая на сайте) с кнопками на питание.  Попробовал авторскую прошивку- работает.

condensator80
Offline
Зарегистрирован: 24.02.2018

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

condensator80
Offline
Зарегистрирован: 24.02.2018

и думаю перед на вход пультоскопа операционник поставить не шибко тормозной

rusoturisto
rusoturisto аватар
Offline
Зарегистрирован: 20.03.2018

   Добрый вечер всем пультоскопщикам. Я в прошивании ардуино-ноль по Кельвину. Может ли уважаемый bodriy2014 или кто-то ещё написать пошаговую инструкцию по прошивке ардуино для пультоскопа типа "прошивка для домохозяек". У меня ардуино нано и дисплей 5110 (красный). Для меня, да и для других инструкция может быть такой: ШАГ 1-Подключаем шнур разъёмом мини-юсб к плате а юсб к компу. (Должно ли что-то появиться на мониторе в разделе Мой компьютер ? У меня ничего не появляется). ШАГ 2- Открываем портабл IDE, который находится в скачаной и разархивированой папке arduino-1.6.5-r5. (Куда там подводить курсор и что нажимать). И так далее и тому подобное. Буду премного благодарен.

Electronik83
Offline
Зарегистрирован: 06.12.2015

1. Подключаем ардуинку к юсб (если подключили первый раз, то ставим драйвера).

2. В диспетчере устройств должен появиться новый Com port (далее - ком порт). Проверить можно - выткнуть ненадолго и обратно воткнуть ардуинку. Запоминаем номер ком порта. Можно конечно не прибегать к диспетчеру, и не запоминать ком порт, но нужно знать что точно драйвера встали на ардуинку, тогда в пунке 6 можно действовать методом пребора доступных ком портов.

3. Распаковываем -> Открываем ардуино IDE с сайта автора (именно оттуда - важно!).

4. В IDE нажимаем Файл->Открыть, указываем на заранее скачаный и распакованный файл PULTOSCOPE_LCD5110_final2_DDS_Z.ino.

5. В IDE нажимаем Инструменты->Плата, выбираем свою.

6. Теперь нужно выбрать ком порт, на котором повисла ардуинка через Инструменты->Порт, и выбрать наш нужный, что запоминали в пункте 2.

7. Эскиз->Вгрузить. Ждем - Все.

Electronik83
Offline
Зарегистрирован: 06.12.2015

condensator80 пишет:

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

Да хоть звездачками:) Понял. Так и сделаю))) В процессе. Если честно - времени мало, по час в сутки перед сном....

P.S. А вертикальные линии не в менюхе ли моей подсмотрели?:)))))) Правда там горизонтальные)

condensator80
Offline
Зарегистрирован: 24.02.2018

Да нет, это уже давняя идея, линиями более нагляднее мне кажется

 

rusoturisto
rusoturisto аватар
Offline
Зарегистрирован: 20.03.2018

   Добрый вечер, Electronik83; благодарю за инструкцию.                                                                                                                          Вспомнил студенческий анекдот 80-х годов. На базаре людоед продаёт мозги; мозги физиков по 100 рублей за кило, а мозги историков по 1000 рублей. Народ интересуется: почему мозги историков такие дорогие. Людоед отвечает: "А вы знаете сколько нужно перебить историков, чтобы добыть килограмм мозгов?"

rusoturisto
rusoturisto аватар
Offline
Зарегистрирован: 20.03.2018

   Добрый вечер. Я пытался установить драйверы для своей нано с неродной CH340C. Предполагал идти таким путём: открыть ардуино IDE c сайта автора, установить её и драйвера из неё. Затем найти и установить драйвера для CH340C. Но не получается установить ардуино IDE (при открывании arduino.exe на секунду появляется бирюзовый прямоугольник с надписью Arduino и исчезает). Видимо я неверным путём иду, дорогие товарищи. Кто может подсказать, как запустить IDE и драйверы для CH340C установить. У меня Виндовс 7.

Novice User
Offline
Зарегистрирован: 25.09.2017

а какое отношение ваш пост имеет к пультоскопу?

не надо ничего предполагать,надо гуглить сн340 ардуино и се...

Electronik83
Offline
Зарегистрирован: 06.12.2015

Получил первый медленный график. Скоро выложу....

И еще заметил, что когда обращаемся в ОЗУ к неотведенной памяти - расцветает цветок. Странно.

Не могу понять зависимость амплитуды сигнала от времени отображения. Странно2.

https://yadi.sk/d/LYRoZujk3TtuAx

Интерференция? Я фонил 50 Гц на провод своим пальцем.

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

Оживлю тему, не появилось ли новое решение пультоскопа под дисплей 3,2 TFT 480x320?

*TFT_HX8357.h

Electronik83
Offline
Зарегистрирован: 06.12.2015

Я думаю что не появится. Очень долго рисовать на таком дисплее ардуиной. Сам пробовал.)))

condensator80
Offline
Зарегистрирован: 24.02.2018

попробовал новую прошивку, впечатляет

 

VicSan
Offline
Зарегистрирован: 27.04.2017

Нашел косяк (то-ли в своем дисплее, то-ли в коде не пойму). Вообщем так, расцветал цветок сразу при запуске с прошивкой ув. товарища Electrronic83. У всех работает, а у меня нет. Короче, при замене в основном меню пунктов с кириллицы на латиницу - все заработало без сбоев. Иначе - цветок.

Очень полезную функцию внесли. Отдельное спасибо.

rusoturisto
rusoturisto аватар
Offline
Зарегистрирован: 20.03.2018

   Добрый вечер. Вчера устанавливал драйвер для CH340, ни один ком порт не открылся. Просмотрел все пункты в диспетчере устройств, в пункте "Действие" открыл ком порты и тогда драйвер установился. Открыл IDE с помощью "запуск от администратора"... Вгрузил. На чёрном фоне красными буквами - low memory available, stability problems may occur, что по моему означает "мало доступной памяти, могут случаться проблемы со стабильностью. Может это потому, что у меня МК ATmega 328 PB-U ? Подал внешнее питание-работает. Сегодня утром включил-работает; при нажатии кнопки "минус" загорается св.диод L - так должно быть? Выключил питание- подсоединил ко входу генератор звуковой, подал питание на пультоскоп-а у него экран пустой. Пол-дня не трогал. Питание у меня от самодельного стаб. БП 7,7в. Вечером решил добавить напряжение- 9,0в. Экран пустой, а замигал св.диод L -раз в секунду; он так мигал когда ещё не было прошивки-предполагаю, что программа слетела. Может установить предыдущюю прошивку, которая занимает меньше памяти ? И ещё: у меня нет подсветки экрана : вывод BL есть- сажаю его на минус -света нет; может брак ? Может кто подскажет на счёт прошивки (без подсветки прожить можно) ?

VicSan
Offline
Зарегистрирован: 27.04.2017

BL на плюс питания через резистор.  На этих дисплеях у меня такое было. Попробуйте на металлическую оправку понажимать в разных точкках (только не сильно).

Electronik83
Offline
Зарегистрирован: 06.12.2015

rusoturisto:

"low memory available, ......" - Эта ошибка выскакивает у всех. Буфер приема АЦП значений автор выставил равным 700 байт при двух килобайтах общей памяти RAM микроконтроллера + всякие переменные + внутренние переменные, что генерит компилятор, библиотека под дисплейчик тоже наверное нормально жрет оперативу (в планах релиз - с отказом от неё). Выходит, что ранние версии прошивки вам не помогут, т.к. и там эта ошибка есть, просто можно закрыть глаза на нее. И это не ошибка даже, а просто предупреждение.

Программа просто так слететь не может. Мне кажется что у вас дело в железе. Проверяте все по схеме. Но попробуйте прошиться заново - это не сложно (чем черт не шутит)). Свою ардуинку я шью раз 20 за вечер, пока проверяю свои творения - пока живет, но жду смерти её))). А светодиод мигал раз в секунуду - это так прошивают новые ардуинки для проверки. 

При нажатии влево (или минус) - светодиод у всех моргает.

Про подсветку не подскажу - не помню уже. Скажу лишь, что прошить МК можно и без подсветки, и без дисплея, и без кнопок. Эта вся перефирия никак ни влияет на сам процесс прошивки. Удачи!

Electronik83
Offline
Зарегистрирован: 06.12.2015

При быстрой отрисовке дисплей умеет быть не только черно-белым https://yadi.sk/d/XTlJjmCL3TxAkr . Есть и градации серого:))

rusoturisto
rusoturisto аватар
Offline
Зарегистрирован: 20.03.2018

   Добрый день. VicSan, благодарю.  Electronik83, благодарю за подробное объяснение. Не зря издавали сельскохозяйственный журнал "ЗНАНИЕ-СИЛОС":)

Lotus6202
Lotus6202 аватар
Offline
Зарегистрирован: 12.01.2018

Подскажите как добавить частотомер в   второй вариант на TFT дисплее....  Пытался взять  кусок кода с первого варианта 5110..  не получилось...  Хотелась бы частотомер  добавить место ардуинке ещё 40 %  ///....

Andry Smart
Offline
Зарегистрирован: 06.09.2016

подскажите почему на схеме вход щупа а3 соединен с pin5?

ведь в регистре конфигурации ацп прописан вход а3   или я чего не уследил в коде?

Andry Smart
Offline
Зарегистрирован: 06.09.2016

подскажите почему на схеме вход щупа а3 соединен с pin5?

ведь в регистре конфигурации ацп прописан вход а3   или я чего не уследил в коде?

Electronik83
Offline
Зарегистрирован: 06.12.2015

Там по пин5 меряется частота, если амплитуда сигнала больше 2.5 вольта.

Andry Smart
Offline
Зарегистрирован: 06.09.2016

что то не могу найти в коде непосредственно чтение состояния пина 5.  если не трудно ткните носом.

Electronik83
Offline
Зарегистрирован: 06.12.2015

В либе FreqCount. Скорее всего на аппаратном прерывании висит.

Electronik83
Offline
Зарегистрирован: 06.12.2015

Закончил вроде как с медленным осциллом, по пути доработал много чего. Держите

https://yadi.sk/d/V66xoq473U2ipx

Есть смысл делать главное меню в графике???? Есть задумки.... Нужно кому нибудь ваще все это?

condensator80
Offline
Зарегистрирован: 24.02.2018

Спасибо, будем пробовать совместно с ГКЧ

Lotus6202
Lotus6202 аватар
Offline
Зарегистрирован: 12.01.2018

Неработает функция  опорное напряжение 1.1 вольт.

 

Electronik83
Offline
Зарегистрирован: 06.12.2015

Lotus6202 пишет:

Неработает функция  опорное напряжение 1.1 вольт.

 


Уточните пожалуйста, где именно??

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Lotus6202 пишет:

Неработает функция  опорное напряжение 1.1 вольт.

Если в развертках 6 и выше, то это давний баг. Наблюдается при кварцах больше 20 МГц.

Бодрый 2014 выкладывал ролик с лечением. Мне не помогло. Поэтому использую с кварцем на 20.

Lotus6202
Lotus6202 аватар
Offline
Зарегистрирован: 12.01.2018

Собрал на TFT  c pro mini   всё стандартное на 16 МГц.    подаю сигнал от генератора  опорное 5.3 работает а переключаю на 1.1   полоса уходит в верх зашкаливает. напряжение генератора 0.3........0.8 в   и никаких изменений даже частотомер непоказывает частоту....

Lotus6202
Lotus6202 аватар
Offline
Зарегистрирован: 12.01.2018
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#include <UTFTGLUE.h>
UTFTGLUE myGLCD(0xB509,A2,A1,A3,A0);
#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 BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define SERY 0x5B4D // 0x5B4D
//пользовательские настройки!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#define levo 12
#define ok 11
#define pravo 10

//пользовательские настройки!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
byte mass[501];//массив АЦП
byte massDEL[501];
byte menu=1;//переменная верхнего меню
byte razv=0;//значение развертки
float x=60;//счетчик оси Х
int Vmax=0;// максимальное напряжение
float Vakb=0;//напряженеи AКБ
unsigned long t=0;//переменная для ращета развертки
unsigned long pause=0;//переменная для замены Delay
int t_del=0; //значение цены деления развертки в микросекундах
bool opornoe=1; //флаг опорного напряжения
bool paus=0; //флаг режима паузы
bool clen_p=0;//флаг чистки паузы

int Htime; //integer for storing high time
int Ltime; //integer for storing low time
float Ttime; // integer for storing total time of a cycle
float frequency; //storing frequency



void setup(){
pinMode(A5,INPUT);

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

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(0, 20, 20,320,BLACK);//стирание поля меню низ
tft.setTextColor(WHITE);
tft.setRotation(1);
tft.setCursor(54,220);
tft.print("t=");
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.print("us ");
tft.print("Vmax=");
if(opornoe==0){tft.print(Vmax*1.1/255);}
if(opornoe==1){tft.print(Vmax*5.3/255);}
tft.print(" B");
tft.print(Vakb);
}

void loop() {

// /*
tft.setRotation(1);
Htime=pulseIn(A5,HIGH); //read high time
Ltime=pulseIn(A5,LOW); //read low time
Ttime = Htime+Ltime;
frequency=1000000/Ttime; //getting frequency with Ttime is in Micro seconds
tft.fillRect(105, 36, 320, 15 ,BLACK);//стирание
tft.setTextColor(CYAN);
tft.setCursor(95,38);
tft.print("*");
tft.setTextColor(BLUE);
tft.setCursor(110,37);
tft.print(frequency);
tft.print(" Hz");
delay(5);

//*/


Zamer();
//отрисовка и перебор меню###############################
if(menu==0){
tft.setRotation(1);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.fillRect(57, 0, 90, 25, RED); // 1
tft.setCursor(60,5);
if(opornoe==0){tft.print("op-1.1V ");}
if(opornoe==1){tft.print("op-5.3V ");}
if(digitalRead(pravo)==HIGH){
tft.setRotation(0);
tft.fillRect(65, 0, 120, 50, BLACK);//стирание напряжения
opornoe=!opornoe;}
if(digitalRead(levo)==HIGH){
tft.setRotation(0);

tft.fillRect(65, 0, 120, 50, BLACK);//стирание напряжения
opornoe=!opornoe;}
tft.setRotation(1);
tft.print("Razv*");
tft.print(razv);
tft.print(" P-OFF");
}
if(menu==1){
tft.setRotation(1);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.fillRect(150, 0, 95, 25, RED); // 2
tft.setCursor(60,5);
if(opornoe==0){tft.print("op-1.1V ");}
if(opornoe==1){tft.print("op-5.3V ");}
if(digitalRead(pravo)==HIGH){ //доработать скорость
tft.setRotation(0);
razv++;
if(razv==11){razv=10;}
}
if(digitalRead(levo)==HIGH){ //доработать скорость
tft.setRotation(0);
razv--;
if(razv==255){razv=0;}
}
tft.setRotation(1);
tft.print("Razv*");
tft.print(razv);
tft.print(" P-OFF");
}
if(menu==2){//пауза
paus=1;
if(clen_p==0){
clen_p=1;
tft.setRotation(1);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.fillRect(247, 0,60, 25, RED); // 3
tft.setCursor(60,5);
if(opornoe==0){tft.print("op-1.1V ");}
if(opornoe==1){tft.print("op-5.3V ");}
tft.print("Razv*");
tft.print(razv);
if(paus==0){tft.print(" P-OFF");}
if(paus==1){tft.print(" P-ON");}
}
}
if(digitalRead(ok)==HIGH){
menu++;
tft.setRotation(0);
if(menu==3){menu=0;paus=0;clen_p=0;}
tft.setRotation(1);
tft.fillRect(0, 0,380, 25, BLACK);
}

//отрисовка и перебор меню###############################
//Выбор опорного#########################################
if(opornoe==0){ADMUX = 0b00100101;}//выбор внутреннего опорного 1,1В
if(opornoe==1){ADMUX = 0b01100101;}//Выбор внешнего опорного
delay(5);

//Выбор опорного#########################################
tft.setRotation(0);
//ось напряжения##########################################

tft.drawFastHLine(44,60,140,BLUE); // полоса вертикальная
tft.drawFastHLine(44,59,140,BLUE); // полоса вертикальная
tft.drawFastHLine(44,389,140,BLUE); // полоса вертикальная
tft.drawFastHLine(44,390,140,BLUE); // полоса вертикальная

tft.drawFastVLine(53,51,8, BLUE);
tft.drawFastVLine(76,51,8, BLUE);
tft.drawFastVLine(102,51,8, BLUE); // деление синее
tft.drawFastVLine(128,51,8, BLUE);
tft.drawFastVLine(154,51,8, BLUE);
tft.drawFastVLine(180,51,8, BLUE);

tft.drawFastVLine(53,389,8, BLUE);
tft.drawFastVLine(76,389,8, BLUE);
tft.drawFastVLine(102,389,8, BLUE); // деление синее
tft.drawFastVLine(128,389,8, BLUE);
tft.drawFastVLine(154,389,8, BLUE);
tft.drawFastVLine(180,389,8, BLUE);

//ось времени#############################################
tft.drawFastVLine(43,60,326, RED); // полоса горизонтальная
tft.drawFastVLine(42,60,326, RED); // полоса горизонтальная
tft.drawFastHLine(35,60,9,RED);tft.drawFastHLine(35,85,9,RED);tft.drawFastHLine(35,110,9,RED);
tft.drawFastHLine(35,135,9,RED);tft.drawFastHLine(35,160,9,RED);tft.drawFastHLine(35,185,9,RED);
tft.drawFastHLine(35,210,9,RED);tft.drawFastHLine(35,235,9,RED);tft.drawFastHLine(35,260,9,RED);
tft.drawFastHLine(35,285,9,RED);tft.drawFastHLine(35,310,9,RED);tft.drawFastHLine(35,335,9,RED);
tft.drawFastHLine(35,360,9,RED);tft.drawFastHLine(35,385,9,RED); // деление красное
//ось времени#############################################


//сетка вертикальная #####################################


tft.drawFastHLine(44,85,140,SERY); // полоса вертикальная
tft.drawFastHLine(44,110,140,SERY);
tft.drawFastHLine(44,135,140,SERY);
tft.drawFastHLine(44,160,140,SERY);
tft.drawFastHLine(44,185,140,SERY);
tft.drawFastHLine(44,210,140,SERY);
tft.drawFastHLine(44,235,140,SERY);
tft.drawFastHLine(44,260,140,SERY);
tft.drawFastHLine(44,285,140,SERY);
tft.drawFastHLine(44,310,140,SERY);
tft.drawFastHLine(44,335,140,SERY);
tft.drawFastHLine(44,360,140,SERY);

tft.drawFastVLine(53,62,326, SERY); // полоса горизонтальная
tft.drawFastVLine(76,62,326, SERY);
tft.drawFastVLine(102,62,326, SERY);
tft.drawFastVLine(128,62,326, SERY);
tft.drawFastVLine(154,62,326, SERY);
tft.drawFastVLine(180,62,326, SERY);

//сетка вертикальная #####################################

tft.setRotation(1);
tft.setTextColor(MAGENTA);
tft.setTextSize(2);
//шкала напряжения########################################
if(opornoe==0){
tft.setCursor(34, 183);tft.println("0");
tft.setCursor(0, 155); tft.println("0.22");
tft.setCursor(0, 128); tft.println("0.44");
tft.setCursor(0,105); tft.println("0.66");
tft.setCursor(0, 80); tft.println("0.88");
tft.setCursor(0, 50) ;tft.println("1.1V");
}
if(opornoe==1){
tft.setCursor(34, 183);tft.println("0");
tft.setCursor(0, 155); tft.println("1.00");
tft.setCursor(0, 128); tft.println("2.00");
tft.setCursor(0, 105); tft.println("3.00");
tft.setCursor(0, 80); tft.println("4.00");
tft.setCursor(0, 50); tft.println("5.0V");
}

//шкала напряжения########################################
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);
x=60;
for(int y=0;y<324;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){//режим паузы
if(digitalRead(pravo)==HIGH){//листаем
tft.setRotation(0);
tft.fillRect(44, 61, 140, 325, BLACK);//стиране графика
x=60;
for(int y=0;y<324;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(44, 61, 140, 325, BLACK);//стиране графика
x=60;
for(int y=0;y<324;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();
//отрисовка графика№№№№№№№№№№№№№№№№№№№№№

}
}
}

 

TFT  3  дюйма.  

добавлена удобная сетка и частотомер.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

А постоянки на выходе генератора нет ? Вы зачем то обьявляете 3 библиотеки экрана , уберите строки 3,4,6 , хотя это на уровени сигнала не должно влиять.

MIK22
Offline
Зарегистрирован: 09.02.2017
Убрал измерение частоты, добавил частотомер на библиотеке <FreqMeasure.h>
Может кому понадобится. Точность порядка 100%.
 
if(FreqMeasure.available()) {     
  sum = sum + FreqMeasure.read();
  count = count + 1;    if (count > 30) {
  float frequency = FreqMeasure.countToFrequency(sum / count); 
  tft.setRotation(0); 
  tft.fillRect( 0, 0, 8, 126, BLACK); 
  tft.setRotation(1); 
  tft.setTextColor(TEAL); tft.setCursor(0, 120); tft.print("F=");
  //--------Блок вычисления частоты в ГЦ---------------------
  if (frequency < 1000){  tft.setCursor(13, 121); tft.print(frequency);  tft.println("Hz");       }
  //--------Блок вычисления частоты в КГЦ---------------------      
  else { float freq = frequency / 1000; tft.setCursor(13, 121); tft.print(freq);  tft.println("KHz");      }
      
      sum = 0;
      count = 0;   
    }
  }  
Electronik83
Offline
Зарегистрирован: 06.12.2015

Я бы сэкономил минимум три байта памяти программ ROM и написал бы так:

if (FreqMeasure.available())  {
  sum += FreqMeasure.read();
  if (++count > 30) {
    float frequency = FreqMeasure.countToFrequency(sum / count); 
    tft.setRotation(0); 
    tft.fillRect( 0, 0, 8, 126, BLACK); 
    tft.setRotation(1);  tft.setTextColor(TEAL);
    tft.setCursor(0, 120); tft.println("F="); tft.setCursor(13, 121);
    float freq = frequency / 1000;
    //--------Блок вычисления частоты в ГЦ---------------------
    if (frequency < 1000) tft.println(frequency);
    //--------Блок вычисления частоты в КГЦ---------------------      
    else { tft.print(freq);  tft.println("K"); }
    tft.println("Hz");
    sum = 0;  count = 0;   
  }
}
 
P.s. И не вижу смыла в записи tft.setCursor(13, 121); - зачем лишний раз передергивать курсор?;
И с SetRotation тоже доконца не понятно - можно же в fillRect другие коррдинаты задать.;
MIK22
Offline
Зарегистрирован: 09.02.2017

Electronik83. Я взял часть из скетча пультоскопа. Пример частотомера в самой библиотеке.

Electronik83
Offline
Зарегистрирован: 06.12.2015

Анимированное меню https://yadi.sk/d/1vxdv-CS3UBPoJ для любителей экранчиков 5110.

VicSan
Offline
Зарегистрирован: 27.04.2017

Может не нужно постоянно обновлять дисплейчик в меню? Мерцает. Через переменную можно сделать обновление.

В терминале можно отлавливать символ перехода на новую строку и переходить на дисплейчике. И все-таки символ ">" в терминале в начале строки необходим (мне так кажется).

А вот генератор и DDS генератор мне больше нравятся Ваши из бетки.

И настройки генератора  и терминала сохранять в EEPROM. 

Это не критика ни в коем случае.  Получилось классно.

Electronik83
Offline
Зарегистрирован: 06.12.2015

С обновлением дисплея переделаю.

С терминалом согласен - просто многие видят пустой экран - и все: думают ничего не работает.

По поводу Бетки - я утерял исходники вместе с винтом. Искать не охота и решил переписать все заново)) Хоть мозги разомну немного...

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

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

Если будет интерес к прошивке - буду делать дальше:)))

VicSan
Offline
Зарегистрирован: 27.04.2017

Интерес большой. Как оказалось- по работе стал очень необходим и маленький осцил и генератор прямоугольных импульсов. Я уже плату развел, осталось вытравить, маску сделать, спаять. Жду ЗИП из поднебесной. Потом фотки и печатку выложу.

Electronik83
Offline
Зарегистрирован: 06.12.2015