Пультоскоп v.2 Осциллограф + генератор

Пока я собрался с мыслями сделать новый портативный осциллограф, «Pultoscope» уже был на стадии разработки второй версии. Его автор, bodriy2014, адаптировал код для двух дисплеев: Nokia 3310 (китайский дисплей 5110) и цветного дисплея 240x320 SPFD5408. У меня в корпусе уже стоял дисплей от Nokia 3410, так что пришлось переделывать скетч под него. Общаясь с автором, и делая самостоятельные коррективы, получился результат, который привожу в этой статье.

Все составляющие легко поместились в имеющийся корпус.

Схема осциллографа «Pultoscope v.2» не сложная, проста в сборке. В отличии от стандартной сборки, я добавил в нее встроенный делитель 1:3, под который заточил программный код. При необходимости, можно добавить в нее дополнительные делители, усилители и т.д. Единственное, что хочу отметить, для портативной версии лучше собирать преобразователь питания на микросхеме типа MC34063, т.к. китайский DC-DC повышающий преобразователь показал себя не в лучшем виде. В частности, при разгоне arduino mini и замене кварца до 25Mhz, падала стабильность устройства, уходила нулевая линия отображения сигнала и проявлялись прочие проблемы, которые не наблюдались при включении от стабильного сетевого источника питания. По этим причинам я оставил свою версию прибора без замены кварца, хотя у автора установлен кварц с частотой 27Mhz.

Рассматривая дисплей «пультоскопа» в режиме работы осциллографа, можно выделить информативных 10 полей. 1 – шкала отображения вольтажа, имеет автоматические градации 0-1v, 0-5v, 0-15v, 0-3.3v (при опорном напряжении 1.1v). 2 – поле с сеткой, подстраиваемой под шкалу 1, на котором отображается график сигнала. 3 – максимальное напряжение просматриваемого сигнала. 4 – частота сигнала до 2MHz. Частота сигнала до 1.8 вольт измеряется программным способом, свыше – аппаратным (более точным). 5 – первый пункт меню, выбор опорного напряжения (5 или 1.1v). 6 – второй пункт меню, выбор развертки (0-8). 7 – третий пункт, масштаб (1:1, 2:1, 3:1). 8 – четвертый пункт, позиционирование (1-9). Позиционирование поднимает или опускает график сигнала. 9 – пятый пункт, режим паузы. 10 – шестой пункт, синхронизация.

В режиме генератора 3 информативных поля. 1 – отображение ШИМ в процентах; 2 – отображение генерируемой частоты; 3 – выбор множителя для изменения частоты или переключение изменения ШИМ.

Хочу отметить такой момент, что проект «Пультоскоп» не стоит на месте и планируется разработка новой (третьей) версии. В ней должен присутствовать внешний АЦП, возможно, встроенный ОУ и прочие необходимые доработки.

Файлы печатной платы осциллографа / генератора в формате *.lay6, скетч  - *.ino и необходимые библиотеки для работы с дисплеем от Nokia 3410 выкладываю отдельным архивом ЗДЕСЬ.

Поділитись:
Сторінки:
1 2 3
sergeyaz, сказав 26.11.2016 о 21:26:

Щуп готовый использовали?
Каким волновым сопротивлением коаксиал?

admin, сказав 27.11.2016 о 14:12:

sergeyaz, щуп самодельный - швейная игла, кабель - часть AV коаксиального кабеля.

Arthur1993, сказав 21.04.2018 о 22:00:

https://youtu.be/5tGoBKO_CR8                     MC34063 вариант

admin, сказав 22.04.2018 о 08:14:

Arthur1993, устройство универсальное, каждый добавляет в него, что считает нужным для себя. Жаль, что автор пропал, у него были наработки по поводу увеличения скорости и точности осциллографического пробника.

Arthur1993, сказав 22.04.2018 о 10:44:

Я начинающий радиолюбитель , не принимаю какой пультоскоп можно собирать

admin, сказав 22.04.2018 о 11:22:

Arthur1993, определитесь какими функциями Вы будете пользоваться, и выберите нужную версию. Или пересоберите версию для себя.

Arthur1993, сказав 22.04.2018 о 14:29:

Этот версию АС напражнения работает?

admin, сказав 22.04.2018 о 15:09:

Да.

arthur1993, сказав 21.05.2018 о 07:41:

Когда будет третьей версия?

admin, сказав 21.05.2018 о 08:09:

Скорее всего, ее не будет. На данной комбинации "железа", большего сложно выжать.

apeks1, сказав 01.07.2018 о 22:31:

советую обратиь внимание на http://radioskot.ru/forum/12-14297-1   простой и достаточно мощный осцилограф получился 🙂

 

admin, сказав 02.07.2018 о 07:35:

apeks1, имеется видео с примером работы? Программный код открытый?

Arthur_1993, сказав 30.10.2018 о 20:58:

Где третьей версия на АЦП?

admin, сказав 30.10.2018 о 21:02:

Arthur_1993, основной код писал автор, который забросил этот проект. Моя работа заключалась в адаптации его под дисплей от Нокии 3410, который имеет большее разрешение. Если автор возобновит работу над проектом, возможно, я также выполню свою часть.

arthur_1993, сказав 03.11.2018 о 13:44:

Вы бы посоветовали собрать эту осциллографию?

Добавленно позже (в 13:46 03.11.2018):

/user_files/unverified__mj678d52/59753

admin, сказав 03.11.2018 о 18:16:

arthur_1993, какие характеристики заявлены?

 

arthur_1993, сказав 03.11.2018 о 21:56:
admin, сказав 03.11.2018 о 22:48:

Да, прибор достойный. Можно собирать.

Arthur_1993, сказав 14.11.2018 о 14:26:

Как я могу сделать прошивка этот пультоскоп , пожалуйста, напишите последовательность шагов?

admin, сказав 16.11.2018 о 14:28:

Arthur_1993, покупаете любой ttl программатор и через программу IDE arduino заливаете скомпилированный скетч в МК. Всё стандартно. Ознакомьтесь с принципом работы arduino и Вам станет всё ясно.

tolya10, сказав 18.01.2019 о 12:48:

Ваша версия пультоскопа информативней чем у автора. Но мне нужно к такому же дисплею и Вашей прошивке прикрутить DDS генератор и терминал, но тк с программированием дела не имел попытка скрестить вашу прошивку и авторскую не получаетс. В меню добавил нужные пункты, разделы скопировал в вашу прошивку, до стрелка не хочет выбирать дальше осцила и генератора, если в коде на DDS напишу Generator то соответственно DDS работает но нет генератора :(. Может глянете всетаки код ваш. Или подскажите как вы запустили прошивку автора на 3410. Пробовал подставить ваши исправленные драйвера от 3310 и скомпилировать прошивку автора не хочет. Вот мой код

↓ SPOILER ↓

//Страница проэкта http://srukami.inf.ua/pultoscop_v25110.html
//Переделка под дисплей от Nokia 3410 и оптимизация кода //alldiy.top
#include
#include
#include
#include
#include
#define led 9 //пин для генератора сигналов (не менять)
#define dds 10 //пин для генератора dds (не менять)
//#################№№№№№№####пользовательские настройки
#define levo 11 //кнопка ЛЕВО(можно любой пин)
#define ok 8 //кнопка ОК(можно любой пин)
#define pravo 12 //кнопка ПРАВО(можно любой пин)
#define akb A6 //любой свободный аналоговый пин для измерения напряжения АКБ
#define overclock 16 //Частота на которой работает Ардуино
Adafruit_PCD8544 display = Adafruit_PCD8544(2, 3, 4, 6, 7);//пины к которым у вас подключен дисплей
byte cont=75;//контрастность дисплея
byte SinU=5; //уровень синхронизации 0 до 255
int PWM = 100;//стартовое значение ШИМ от 0 до 255
float fiveV = 5.13; //наши 5v, меряем мультиметром
int32_t frequency = 5000; //стартовое значение частоты в Гц
//###########################################################
float maxV = 0.0; // вычисление вольтажа
float printV = 0.0; // вывод вольтажа
float batt =0.00; // для вывода вольтажа батареи
int d=0;
byte menuDDS=0;
byte sinM[32]={1,6,15,29,48,69,92,117,143,168,191,212,229,243,251,255,254,248,237,222,203,181,156,131,106,81,59,39,22,10,3,1};
byte pilaM[32]={1,9,17,25,33,41,49,57,65,73,81,89,97,105,113,121,129,137,145,153,161,169,177,185,193,201,209,217,225,235,245,255};
byte RpilaM[32]={250,246,238,230,222,214,206,198,190,182,174,166,158,150,142,134,126,118,110,102,94,86,78,70,62,54,41,33,25,17,9,1};
byte trianglM[32]={1,18,35,52,69,86,103,120,137,154,171,188,205,222,239,255,239,223,207,191,175,159,143,127,111,95,79,63,47,31,15,1};
byte hag=0;
int mnog=0;
boolean flag=0;
byte mass[256];
byte x=0;
byte menu=0;//переменная выбора меню
bool opornoe=1; //флаг опорного напряжения
bool paus=0; //флаг режима паузы
bool pultoskop=1; //флаг выбора генератора или осциллографа
byte razv=6;
byte sinhMASS=0;
long countX=0;
long speedTTL=9600; //скорость терминала
byte zoom=1; //Приближение по умолчанию 1:1
byte poz=8; //Позиционирование
int koef=1; //коэффициент для синхронизации
int newpoz=0;
unsigned long count =0;
void setup(){
display.begin();
display.setContrast(cont);
display.clearDisplay();
display.setCursor(5,20);
display.setTextColor(BLACK);
display.print("Pultoscope v.");
display.setCursor(82,13);
display.setTextSize(2);
display.print("2");
display.setTextSize(1);
display.setCursor(3,45);
display.println(utf8rus("Версия для 3410"));
display.setCursor(10,55);
display.print("alldiy.top");
batt=analogRead(akb)*fiveV/1024;
display.display();
delay(2000);

while(digitalRead(ok)==LOW){
display.clearDisplay();
display.setCursor(15,10);
display.println(utf8rus("Осциллограф"));
display.setCursor(15,20);
display.println(utf8rus("Генератор"));
display.setCursor(15,30);
display.println(utf8rus("DDSгенератор"));
display.setCursor(15,40);
display.println(utf8rus("Терминал"));
display.setCursor(5,55);
display.print(utf8rus("Батарея "));
display.print(batt);
display.println(utf8rus(" в"));
if(pultoskop==1) display.setCursor(5,10);
if(pultoskop==0) display.setCursor(5,20);
if(pultoskop==2) display.setCursor(5,30);
if(pultoskop==3) display.setCursor(5,40);
display.print(">");
display.display();
if(digitalRead(levo)==HIGH){delay(200);pultoskop=pultoskop-1;}
if(digitalRead(pravo)==HIGH){delay(200);pultoskop=pultoskop+1;}
if(pultoskop>3){pultoskop=0;}
delay(50);
}
if(pultoskop==1){FreqCount.begin(1000);}
if(pultoskop==0){InitTimersSafe(); bool success = SetPinFrequencySafe(led, frequency);}
display.setTextColor(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){
for(byte i=0;i0){
for(byte i=0;i<255;i++){
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
mass[i]=ADCH;
}
}

}
void loop() {
if(pultoskop==1){
String text="";
byte test;
if(opornoe==0){ADMUX = 0b11100100;}//выбор внутреннего опорного 1,1В
if(opornoe==1){ADMUX = 0b01100100;}//Выбор внешнего опорного
delay(5);
if(paus==0){Zamer();}
//#######################################определение точки синхронизации

maxV = 0;
for(int y=1;y<85;y++){
if(maxV=85) koef=1;
else {
if(maxV>=17) koef=3;
else koef=15;
}
}

bool flagSINHRO=0;
bool flagSINHRnull=0;
for(int y=1;y<255;y++){
if(flagSINHRO==0){if(mass[y]*koefSinU){flagSINHRO=1;sinhMASS=y;}}
}
}
//if(flagSINHRO==0){if(mass[y]SinU){flagSINHRO=1;sinhMASS=y;}}

//#######################################отрисовка графика

x=10;
if (zoom==2) x=5;
if (zoom==3) x=3;

if(poz==9) newpoz=-14;
if(poz==8) newpoz=0;
if(poz==7) newpoz=7;
if(poz==6) newpoz=14;
if(poz==5) newpoz=21;
if(poz==4) newpoz=28;
if(poz==3) newpoz=35;
if(poz==2) newpoz=42;
if(poz==1) newpoz=49;

display.clearDisplay();
display.fillCircle(91,45-SinU/5.8, 2, BLACK);//рисуем уровень синхронизации
//for(int y=1;y<85;y++){
for(int y=sinhMASS;y<sinhMASS+85;y++){
if(razv<7){x++;}
if(razv==7){x=x+2;}
if(razv==8){x=x+3;}
if(x<=95) {
display.drawLine(x*zoom, (46+newpoz)-(mass[y]/5.6*koef)*zoom, (x+1)*zoom, (46+newpoz)-(mass[y+1]/5.6*koef)*zoom, BLACK);
}
}
sinhMASS=0;
//#######################################отрисовка графика
for(int i=0; i<=45; i+=5) {
display.drawPixel(24,i, BLACK);
display.drawPixel(49,i, BLACK);
display.drawPixel(74,i, BLACK);

}//разметка экрана вертикальная
if(opornoe==0) {
for(int i=9; i=0;i=i-9){display.drawFastHLine(0,i,9, BLACK);}
for(int i=9; i<95; i+=5) {
display.drawPixel(i,18, BLACK);
display.drawPixel(i,36, BLACK);
}
display.drawChar (0, 14, '9', 1, 0, 1);
display.drawChar (0, 33, '3', 1, 0, 1);
if(maxV<85) {
display.drawChar (0, 14, '3', 1, 0, 1);
display.drawChar (0, 33, '1', 1, 0, 1);
}
if(maxV=25){SinU=SinU-20;}}
if(digitalRead(pravo)==HIGH){if(SinU<=225){SinU=SinU+20;}}
display.fillCircle(91,45-SinU/5.8, 3, BLACK);
display.fillCircle(91,45-SinU/5.8, 2, WHITE);
}
if(digitalRead(ok)==HIGH){menu++;if(menu==6){menu=0;paus=0;}}//перебор меню
if (FreqCount.available()) {count = FreqCount.read();}//вывод частоты по готовности счетчика
countX=count*(overclock/16.0);
if(countX==0) {
//#######################################частоты сигнала
byte Frec1=0;
int Frec=0;
bool flagFrec1=0;
bool flagFrec2=0;
bool flagFrec3=0;
for(int y=1;y<255;y++){
if(flagFrec1==0){if(mass[y]*koefSinU){flagFrec1=1;Frec1=y;}}}
if(flagFrec1==1){if(mass[y]*koefSinU){
if (razv>=6){Frec=1000000/((y-Frec1-1)*3.27);}//delitel 4
if (razv==5){Frec=1000000/((y-Frec1)*3.27)/2;}//delitel 8
if (razv==4){Frec=1000000/((y-Frec1)*3.27)/4;}//delitel 16
if (razv==3){Frec=1000000/((y-Frec1)*3.27)/8;}//delitel 32
if (razv==2){Frec=1000000/((y-Frec1)*3.27)/16;}//delitel 64
if (razv==2){Frec=1000000/((y-Frec1)*3.27)/32;}//delitel 128
if (razv==1){Frec=1000000/((y-Frec1)*3.27)/32;}//delitel 128
if (razv==0){Frec=1000000/((y-Frec1)*500);}//delitel 128
flagFrec1=0;flagFrec3=0;}}}
//#######################################частоты сигнала
countX=Frec*(overclock/16.0);
}

if(opornoe==0) text="1";
if(opornoe==1) text="5";

text=text+utf8rus(" Р:")+razv+utf8rus(" ")+zoom+utf8rus(":1")+utf8rus(" П:")+poz;

display.setCursor(2, 48);
display.print(text);

if(opornoe==1) printV=maxV*fiveV/255*3,2; //if(opornoe==1) printV=maxV*fiveV/255*3,2;
if(opornoe==0) printV=maxV*1.10/255*3,2; // напряжение на делителе 1.1в

display.setCursor(1, 58);
display.print(printV);display.print("v ");
display.print(countX);display.print("Hz");
display.fillRect(85, 48, 2, 7, 1);
display.fillRect(88, 48, 2, 7, 1);
//display.setCursor(55, 0); display.print(maxV); //градации напряжения
//#######################################отрисовка menu

display.display();
delay(300);
}
if(pultoskop==0){Generator();}
if(pultoskop==2){DDSGenerator();}
if(pultoskop==3){TTL();}
}
//#######################################режим ренератора
void Generator(){
display.clearDisplay();
if (flag==0){//флаг выборов режима настройки ШИМ или Частоты
if(digitalRead(levo)==HIGH){
frequency=frequency-mnog;
if(frequency<0){frequency=0;}
bool success = SetPinFrequencySafe(led, frequency);
delay(3);//защита от дребезга
}
if(digitalRead(pravo)==HIGH){
frequency=frequency+mnog;
bool success = SetPinFrequencySafe(led, frequency);
delay(3);//защита от дребезга
}
}
if (flag==1){//флаг выборов режима настройки ШИМ или Частоты
if(digitalRead(levo)==HIGH){
PWM=PWM-3;
if(PWM255){PWM=0;}
delay(3);//защита от дребезга
}
}
if(digitalRead(ok)==HIGH){//переключение разряда выбора частоты
delay(3);//защита от дребезга
hag++;
if(hag>=5){hag=0;}
}
////////////
display.setTextSize(1);
display.setCursor(20,15);
display.print("PWM = ");
display.print(PWM*100/255);
display.print("%");
display.drawRect(2,2,92,10, BLACK);
display.fillRect(2,2,92*PWM/255.0,10, BLACK);

///////////
display.setCursor(5,30);
display.setTextSize(2);
long frequencyX=frequency*(overclock/16.0);
if(frequencyX=1000){if(frequencyX=10000){if(frequencyX=100000){display.print((frequencyX/1000.0),2);display.setTextSize(1);display.println("KHz");}
display.setCursor(15,55);
display.setTextSize(1);
display.print(">> X ");
if(hag==0){//выбор множителя частоты

display.print(1*(overclock/16.0),1);
mnog=1;
flag=0;
}
if(hag==1){//выбор множителя частоты
display.print(10*(overclock/16.0),0);
mnog=10;
}
if(hag==2){//выбор множителя частоты
display.print(100*(overclock/16.0),0);
mnog=100;
}
if(hag==3){//выбор множителя частоты
display.print(1000*(overclock/16.0),0);
mnog=1000;
}
if(hag==4){//выбор PWM
display.print(utf8rus("ШИМ"));
flag=1;
}
display.print(" <<");
pwmWrite(led, PWM);
display.display();
delay(300);
}
/////////////////////DDS
void DDSGenerator(){
int fr=10;
if(menuDDS==0){
display.clearDisplay();
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.setCursor(10,0);
display.println(utf8rus("Синус"));
display.setTextColor(BLACK);
display.setCursor(10,10);
display.println(utf8rus("Треугольник"));
display.setCursor(10,20);
display.println(utf8rus("Пила"));
display.setCursor(10,30);
display.println(utf8rus("Пила Обр"));
display.setTextColor(BLACK);
display.setCursor(0,40);
//display.print(utf8rus("Частота="));
//display.print(57);
//display.print(utf8rus("Гц"));
delay(100);
display.display();
while(D11_Read==LOW){
PWM=sinM[d];
pwmWrite(dds,PWM);
//delayMicroseconds(fr);
d++;
if(d==32){d=0;}}
menuDDS++;
delay(200);}
if(menuDDS==1){
display.clearDisplay();
display.setTextColor(BLACK); // 'inverted' text
display.setCursor(10,0);
display.println(utf8rus("Синус"));
display.setTextColor(WHITE, BLACK);
display.setCursor(10,10);
display.println(utf8rus("Треугольник"));
display.setTextColor(BLACK);
display.setCursor(10,20);
display.println(utf8rus("Пила"));
display.setCursor(10,30);
display.println(utf8rus("Пила Обр"));
display.setTextColor(BLACK);
//display.setCursor(0,40);
//display.print(utf8rus("Частота="));
// display.print(57);
//display.print(utf8rus("Гц"));
delay(100);
display.display();
while(D11_Read==LOW){
PWM=trianglM[d];
pwmWrite(dds,PWM);
//delayMicroseconds(fr);
d++;
if(d==32){d=0;}}
menuDDS++;
delay(200);}
if(menuDDS==2){
display.clearDisplay();
display.setTextColor(BLACK); // 'inverted' text
display.setCursor(10,0);
display.println(utf8rus("Синус"));
display.setTextColor(BLACK);
display.setCursor(10,10);
display.println(utf8rus("Треугольник"));
display.setTextColor(WHITE, BLACK);
display.setCursor(10,20);
display.println(utf8rus("Пила"));
display.setTextColor(BLACK);
display.setCursor(10,30);
display.println(utf8rus("Пила Обр"));
display.setTextColor(BLACK);
//display.setCursor(0,40);
//display.print(utf8rus("Частота="));
// display.print(57);
//display.print(utf8rus("Гц"));
delay(100);
display.display();
while(D11_Read==LOW){
PWM=pilaM[d];
pwmWrite(dds,PWM);
// delayMicroseconds(fr);
d++;
if(d==32){d=0;}}
menuDDS++;
delay(200);}
if(menuDDS==3){
display.clearDisplay();
display.setTextColor(BLACK); // 'inverted' text
display.setCursor(10,0);
display.println(utf8rus("Синус"));
display.setTextColor(BLACK);
display.setCursor(10,10);
display.println(utf8rus("Треугольник"));
display.setTextColor(BLACK);
display.setCursor(10,20);
display.println(utf8rus("Пила"));
display.setTextColor(WHITE, BLACK);
display.setCursor(10,30);
display.println(utf8rus("Пила Обр"));
display.setTextColor(BLACK);
//display.setCursor(0,40);
//display.print(utf8rus("Частота="));
// display.print(57);
// display.print(utf8rus("Гц"));
delay(100);
display.display();
while(D11_Read==LOW){
PWM=RpilaM[d];
pwmWrite(dds,PWM);
//delayMicroseconds(fr);
d++;
if(d==32){d=0;}}
menuDDS++;
delay(200);}
if(menuDDS==4){menuDDS=0;}

}
/////////////////////TTL
void TTL(){
display.clearDisplay();
display.setTextColor(BLACK);
display.setCursor(10,0);
display.println(utf8rus("Терминал"));
display.setCursor(10,10);
display.println(utf8rus("Скорость"));
display.setCursor(10,20);
display.print("-");
display.print(speedTTL);
display.println("+");
display.setCursor(0,30);
display.println(utf8rus("Нажми ОК-старт"));
if(digitalRead(pravo)==HIGH){speedTTL=speedTTL+100;}
if(digitalRead(levo)==HIGH){speedTTL=speedTTL-100;}
if(speedTTL250000){speedTTL=0;}
if(digitalRead(ok)==HIGH){Serial.begin(speedTTL*(16/overclock));
display.clearDisplay();
delay(100);
display.display();
int x=0;
int y=0;
while(1){
char incomingBytes;
if (Serial.available() > 0) { // Если в буфере есть данные
incomingBytes=Serial.read(); // Считывание байта в переменную incomeByte
display.setCursor(x,y);
display.print(incomingBytes); // Печать строки в буффер дисплея
display.display(); x=x+6;
if(x==84){x=0;y=y+8;}
if(y==48){x=0;y=0;
display.clearDisplay();
delay(100);
display.display();}}
}}
delay(100);
display.display();
}

↑ SPOILER ↑

Добавленно позже (в 12:50 18.01.2019):

а что под спойлер не прячет?

admin, сказав 19.01.2019 о 18:12:

tolya10, прошло уже 3 года, тонкостей не помню. И разбираться времени, на данный момент, нет. Попробуйте вносить изменения поэтапно, проверяя каждый раз результат. Так Вы поймете где идет "нестыковка" и поправите ее.

tolya10, сказав 12.02.2019 о 14:08:

Добрый день. Побеспокою Вас еще раз. Уже месяц воюю с вашей прошивкой. Добавляю пункт меню но он не выбирается. Меню менял, от кучи прошивок ставил на вашу, ваше, с дополнительными пунктами, ставил на другие на других прошивках все работает могу добавить убрать пункты меню. У Вас в прошивке только 2 пункта, причем это pultoskop0 и pultoskop1, если 1 и 2 ( и далее в прошивке изменю подпрограммы на 1 и 2) то выбирает только 1 тк нет 0, если в коде какую либо подпрограмму не вашу, а например DDS или TTL назову как 0 или 1 то она соответственно запустится. Подскажите от чего зависит количество пунктов меню ( про кол-во строк и размер шрифта я догадываюсь 🙂 и их выбор? И еще Вы изменяли драйвера для 3310 там нет заглушки на меню типа 2 пункта и все ( просмотрел не увидел но вам виднее)? Я понимаю что давно дело было, но глядя на Ваши изделия видно что Вы человек аккуратный и где то должны остаться наработки ну или руки то помнят :)Придайте направление.

admin, сказав 12.02.2019 о 17:17:

tolya10, драйвера никакого отношения к коду пультоскопа не имеют.
Расписываю как добавить один пункт меню. По аналогии - и остальные. Пишу без проверки, по памяти, могут быть неточности.
if(pultoskop==1) display.setCursor(5,10);
if(pultoskop==0) display.setCursor(5,20);

Здесь выбирается место курсора ">" относительно пункта. Т.е. можно добавить строку:
if(pultoskop==2) display.setCursor(5,30);
=============
display.setCursor(15,20);
display.println(utf8rus("Генератор"));

Здесь добавляем название новой функуии, например:
display.setCursor(15,30);
display.println(utf8rus("Новая Функция"));

=============
if(digitalRead(levo)==HIGH){delay(200);pultoskop=!pultoskop;}
if(digitalRead(pravo)==HIGH){delay(200);pultoskop=!pultoskop;}

Заменить на следующую конструкцию:
if(digitalRead(levo)==HIGH){
if(pultoskop>1) pultoskop--;
}
if(digitalRead(pravo)==HIGH){
if(pultoskop<2) pultoskop++;
}

Здесь "2" - максимальный номер меню, начиная с "0". Т.е. третий.
=============
if(pultoskop==2){New_function();}
Так вызывается новая функция третьего пункта меню, делается по аналогии с функцией Generator().

Добавленно позже (в 21:46 12.02.2019):

Кстати, добавил функцию "SPOILER" в комментариях. Теперь ей можно пользоваться.

tolya10, сказав 13.02.2019 о 10:56:

Спасибо за оперативный ответ, но если бы все было так просто.... это я сделал сразу хотя и никогда не программировал ни на чем просто просмотрев другие коды понял что за что примерно отвечает и методом тыка сделал, я же и писал что в других кодах могу добавлять убирать итд пункты меню, в вашем работает только pultoskop==0 и pultoskop==1. и более ничего не выбирает. 🙁
к вашему коду приделываетмя любое меню. но все равно не выбирает.
Даже если я ничего не трогая и не добавляя просто переименую в вашем коде например pultoskop==0 на pultoskop==2 и далее в коде где встречаются ссылки на pultoskop==0 переименую на pultoskop==2 то и ваш код не выбирает тоже. Хотя казалось бы что я меняю просто указание в меню на какую подпрограмму ссылаться но ничего не происходит. Кстати тоже самое если оставить pultoskop==0 а переименовать pultoskop==1 на pultoskop==2 или3,4,5..... тоже будет выбирать только 0 а другую цифру не выбирает.
Почему именно ваш код- адекватно работающий осциллограф и наличие дисплея 3410. Если не получится прийдется брать 5110 🙁

Сторінки:
1 2 3
Необхідно авторизуватись, щоб мати можливість коментувати.