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

TovBender
Offline
Зарегистрирован: 12.04.2015

240265 пишет:

TovBender пишет:

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

дисплей 1,8 LCD 160х128 ST7735.

и ещё кто нибудь ставил 4 кнопку. для выхода в начальное меню или откат назад ? через ресет не удобно.

Если убрать ДДС можно выиграть еще 1 КБ.

тов 240265

я имел ввиду что неплохо былобы, при первом включении прибора, сделать заставку, для пультоскопа на дисплее 1,8 LCD 160x128 st7735 ( загружать с CD карты. )

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

и ещё есть ли возможность, добавить в скетч, Пультоскопа, добавить 4 кнопку, ( выход в основное меню, или откат назад. ) 4 кнопка нужна.

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

TovBender пишет:

и ещё есть ли возможность, добавить в скетч, Пультоскопа, добавить 4 кнопку, ( выход в основное меню, или откат назад. ) 4 кнопка нужна.

 А зачем это в скетче? Просто кнопку на резет ардуино и все. Оказываемся в меню. Я именно так и сделал.

mazaysky
Offline
Зарегистрирован: 19.05.2014

bodriy2014 пишет:

Привет.

Okmor делал в этой ветке. http://arduino.ru/forum/proekty/vyzhimaem-maksimum-usb-ostsillograf-na-a...

 

Дякую Вельмишановний пане Автор!  

Этот вариант я уже сделал и использую. Но речь
не об этом. Я видел в одной из конструкций, (просто возможно не на этом ресурсе), 
ослика с меню, в котором была возможность  выбора режимов осциллографа, частотомера, 
генератора и собственно того, что мне нужно - монитора UART. Хочу в одной конструкции 
скрестить "ужа с ежом"  для экономии дисплея. В программировании к сожалению не силён :(
bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

mazaysky пишет:

bodriy2014 пишет:

Привет.

Okmor делал в этой ветке. http://arduino.ru/forum/proekty/vyzhimaem-maksimum-usb-ostsillograf-na-arduino

 

Дякую Вельмишановний пане Автор!  

Этот вариант я уже сделал и использую. Но речь
не об этом. Я видел в одной из конструкций, (просто возможно не на этом ресурсе), 
ослика с меню, в котором была возможность  выбора режимов осциллографа, частотомера, 
генератора и собственно того, что мне нужно - монитора UART. Хочу в одной конструкции 
скрестить "ужа с ежом"  для экономии дисплея. В программировании к сожалению не силён :(

Я вас не так понял, подумал что вы хотите  смотреть  сигнал  на компе.

То что вы спрашиваете есть в последней версии пультоскопа, там смотрите в видео есть пояcнения что и как.

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

 

TovBender
Offline
Зарегистрирован: 12.04.2015

товарищь Ghost_d в главе #1456 

строки 435 и 436.  две одинаковые строчки

if (razv==2){Frec=1000000/((y-Frec1)*3.27)/32;}//delitel 128 

if (razv==1){Frec=1000000/((y-Frec1)*3.27)/32;}//delitel 128

*****************************************************************************

и товарищь  240265  в главе #1501 строки 0262  -  до  0267    и  #1524

if (razv==2){  Frec=1000000/((y-Frec1)*3.27)/32;  }//delitel 128

 if (razv==1){ Frec=1000000/((y-Frec1)*3.27)/32;  }//delitel 128  

две строки одинаковые может такое быть ???    или я не совсем понял в этом скетче ??

 

oleg.forkop
Offline
Зарегистрирован: 21.06.2015

bodriy2014 Вы как-то намекали , что у вас есть скеч на пультоскоп с дисплеем ТФТ 2,4 со всеми плюшками . Просьба поделится , зарание БОЛЬШОЕ СПАСИБО .

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

oleg.forkop пишет:

bodriy2014 Вы как-то намекали , что у вас есть скеч на пультоскоп с дисплеем ТФТ 2,4 со всеми плюшками . Просьба поделится , зарание БОЛЬШОЕ СПАСИБО .

помоему он говорил что на тфт 2.4 нельзя засунуть все потому что не хватает пинов у ардуинки

oleg.forkop
Offline
Зарегистрирован: 21.06.2015

Xumuk Да хотя бы половину, это был бы большой плюс .Иметь ослик , частотомер и генератор в одном стакане , да ещё на ТФТ 2,4 это мечта идиота .

dgeka
Offline
Зарегистрирован: 05.07.2016

укажите номер строки ,пожалуйста, где указывать частоту кварца?

vltab
Offline
Зарегистрирован: 02.08.2016

подскажте есть 2 дисплея от s65 ls020 и l2f50 неняю библиотеки все работает но на ls020 какбы нехватает контраста на l2f50 все

нормально вопрос есть возможность регулировать контраст как в 5110 или это качество дисплея он был снят с неисправной мобилы

 

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

vltab пишет:

 на ls020 какбы нехватает контраста

По контрасту точно не подскажу, но как я понимаю, у вас вероятно просто не хватает яркости подсветки. Я свой запитывал в диапазоне 11-15 вольт на подсветку, но обязательно через токоограничивающий резистор. Важно не превысить ток в 20 ма. Сейчас я использую с примерно 14 ма.

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

на днях приехал мне вот такой ослик собрал играюсь пока)

dgeka
Offline
Зарегистрирован: 05.07.2016

укажите номер строки ,пожалуйста, где указывать частоту кварца? для tft 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

dgeka пишет:

укажите номер строки ,пожалуйста, где указывать частоту кварца? для tft 

Для TFT, не нужно ничего менять в скетче под новый кварц, чтоб установить кварц нужно указать его значение в board.txt скомпилировать пришивку и залить с старым кварцем.(прошивка при компиляции все учтет).

После того как залили можно впаять новый быстрый кварц.

Если останется не ясно в ютюбе есть видео про разгон Ардуино от Алекс_линк там он показывает.

В версии с TFT для разгона скетч не трогаем!

sirota
Offline
Зарегистрирован: 18.08.2015

bodriy2014 пишет:

dgeka пишет:

укажите номер строки ,пожалуйста, где указывать частоту кварца? для tft 

Для TFT, не нужно ничего менять в скетче под новый кварц, чтоб установить кварц нужно указать его значение в board.txt скомпилировать пришивку и залить с старым кварцем.(прошивка при компиляции все учтет).

После того как залили можно впаять новый быстрый кварц.

Если останется не ясно в ютюбе есть видео про разгон Ардуино от Алекс_линк там он показывает.

В версии с TFT для разгона скетч не трогаем!

Можно ни чего этого не делать. На 168 и 32 какой он там есть вполне себе рабочий загрузчик оптибут (он кста лежит в ардуино иде). Меняем в конфиге загрузчика частоту, компилируем и прошиваем на сток кварце. меняем кварц и добавляем в боард новую частоту. Все. Можно шить не перепивая кварц. Но так не прокати с 2560 и с кварцем больше 20МГц могут возникать ошибки сериала, ибо програмнная корректировка ошибок расчитана только до 20МГц. Но я спокойно шил и на 24 и на 27МГц нанки и прочее. Бывает взбрыкнет. Ах да, с таким раскладом стоит забыть о том что бы общаться с чем-то по по уарту. Опять же из-за большого колва ошибок.

dgeka
Offline
Зарегистрирован: 05.07.2016

бум пробовать 

 

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

Добрый день! Хочу поделится радостями, сегодня пришёл по почте шилд TFT, залил код Пультоскопа на Arduino Uno, нактнул на него этот TFT, и ... Ta-Daaa ! Работает :-) Спасибо Автору за эту конструкцию. Теперь знаю, что сам TFT работает, библиотеки подходят, надо подвесить кнопки и реальный вход (touch не будет?).
Фотоотчёт прилагаю:      http://bildites.lv/a/ppcj4sbt#788tc9y2
Также из моих в bookmarks заложенных проектиков попробовал вот это:
https://www.element14.com/community/community/arduino/blog/2014/12/26/a-...
Тоже в принципе работает.
Также на радости теперь заказал для экспериментов такой Nokia шилд:
"LCD4884 LCD Joystick Shield v2.0"
http://www.ebay.com/itm/272299846363?
 

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

Juris пишет:

Добрый день! Хочу поделится радостями, сегодня пришёл по почте шилд TFT, залил код Пультоскопа на Arduino Uno, нактнул на него этот TFT, и ... Ta-Daaa ! Работает :-) Спасибо Автору за эту конструкцию. Теперь знаю, что сам TFT работает, библиотеки подходят, надо подвесить кнопки и реальный вход (touch не будет?).
Фотоотчёт прилагаю:      http://bildites.lv/a/ppcj4sbt#788tc9y2
Также из моих в bookmarks заложенных проектиков попробовал вот это:
https://www.element14.com/community/community/arduino/blog/2014/12/26/a-simple-diy-oscilloscope-with-arduino-uno-and-mega
Тоже в принципе работает.
Также на радости теперь заказал для экспериментов такой Nokia шилд:
"LCD4884 LCD Joystick Shield v2.0"
http://www.ebay.com/itm/272299846363?
 

добрый день а до скольки килогерц мерит тот ослик на меге? не нашел параметров 

bulat943
Offline
Зарегистрирован: 19.09.2016

очень заинтересовал прибор,делал на 5110,все работает

интересует вариант на AD9280,будет ли готовый прибор со схемой?из жки есть ILI9341

bulat943
Offline
Зарегистрирован: 19.09.2016

2 раза отправилось,извините

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

bulat943 пишет:

очень заинтересовал прибор,делал на 5110,все работает

интересует вариант на AD9280,будет ли готовый прибор со схемой?из жки есть ILI9341

Вам сюда.

Тему разделили.

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

Этап раздумий и тестирования. Сейчас это на китайском UNO, кварц стандартный. Можно было бы минимизировать на Pro Mini, но там кварц не поменяешь. Может всё же Atmegu голышом? Хмм.. Как я и говорил - раздумия :) Картинки:

http://bildites.lv/a/daxkuzd2#8stbtwj7

bulat943
Offline
Зарегистрирован: 19.09.2016

Okmor пишет:

bulat943 пишет:

очень заинтересовал прибор,делал на 5110,все работает

интересует вариант на AD9280,будет ли готовый прибор со схемой?из жки есть ILI9341

Вам сюда.

Тему разделили.

вот спасибо!буду изучать!

придется самому изготовить ардуино про мини,а то у меня все уно...

dgeka
Offline
Зарегистрирован: 05.07.2016

bodriy2014  скажите а синхронизацию к tft варианту прицепить нельзя? (пультоскоп частично хватает сигнал ,через раз )??? :(

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

Обращаюсь к уважаемому VetalST (и, наверное к Xumuk?). По случаю прибытия ко мне дисплеев LS020, стараюсь делать себе подборку проектов для пробы на таком. Скажите пожалуйста, самый свежий вариант вашего LS020 это архив с названием: PULTOSCOPE_LCD_ls020__DSS_delit_OFF_V2  ? Или, может уже существует что-то ещё потом?
Спасибо!

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

Juris пишет:

Обращаюсь к уважаемому VetalST (и, наверное к Xumuk?). По случаю прибытия ко мне дисплеев LS020, стараюсь делать себе подборку проектов для пробы на таком. Скажите пожалуйста, самый свежий вариант вашего LS020 это архив с названием: PULTOSCOPE_LCD_ls020__DSS_delit_OFF_V2  ? Или, может уже существует что-то ещё потом?
Спасибо!

Пока отвечу за него. Я пробовал с ЛС020. На макетной панели. Неплохо. Вполне красивый вариант. Единственно - не советую сильно разгонять. Выше 20 мгц не стоит. Тогда сохраняется полный функционал (выше 6-ой развертки на чувствительности 1,1 вольта). По версии - просто самый последний по времени вариант. Думаю, что позже он переключился на VirtOS.

А VetalST что-то давно здесь не появлялся. Будем надеяться, что у человека не произошло ничего действительно серьезного.

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

Лекс 59 пишет:

[...Я пробовал с ЛС020. На макетной панели. Неплохо. Вполне красивый вариант.


Спасибо, Лекс. Я так понимаю, лучший вариант для экспериментов с участием LS020, это изготовление подобия "шилда" с делителями на резисторах для сигналов? Правда, наверное надо и предусмотреть напрямую, если основная схема 3-вольтовая. И ещё тогда вопрос - подсветка LS020 при подаче низких напряжений (5, или даже 3.3 вольт) вообще ничего? А то я смотрю есть схемы (конкретно осцики одного поляка V2, V3, наверное знаете) где так нарисованно для подсветки. Попробую конечно :) Но лучше запастись опытом других тоже. Спасибо!

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

Juris пишет:

 наверное надо и предусмотреть напрямую, если основная схема 3-вольтовая. И ещё тогда вопрос - подсветка LS020 при подаче низких напряжений (5, или даже 3.3 вольт) вообще ничего? А то я смотрю есть схемы (конкретно осцики одного поляка

Переключение на 3,3 - это как вам нужно. Я такой необходимости не нашел для себя. Подсветка это просто светодиоды. Они до напряжения открывание просто не реагируют. Именно этой схемы я не помню, но встречал упоминание о переделке подсветки, замене последовательного соединения светодиодов на параллельное, а то и полной замене светодиодов. Я бы не стал. Гемороя много и риск повреждения не так мал. А подобрать точно характеристики направленности и положение крошечных светодиодов при замене - та еще задачка. ДС-АП проще и доступнее. Правда габариты лишние.

Русл@н
Offline
Зарегистрирован: 14.04.2016

Ребят подскажите как сунуться пультоскопом в цепь 25-50в? Если кто делал сам щупы, можете объяснить из чего и как.

Русл@н
Offline
Зарегистрирован: 14.04.2016

D.I.M пишет:

Полагаю, что искажения из-за звуковой карты ноутбука, сигнал брался с нее. А вот с тем, что сигнал обрезает снизу еще не разобрался((

Ссылка на страничке srukami битая, скачивается только библиотека.

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

sirota
Offline
Зарегистрирован: 18.08.2015

Русл@н пишет:

Ребят подскажите как сунуться пультоскопом в цепь 25-50в? Если кто делал сам щупы, можете объяснить из чего и как.

Делитель напряжения. Но погрешность соответственно делителю.

ika256
Offline
Зарегистрирован: 19.11.2016

спасибо bodriy2014 за этот замечательный осциллограф/генератор

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

ну и ише и терминал генератор.

насчет кварца, можно  в Arduino IDE заливать скеч с >16MHz кварцем, я пользовался 24, и мой boards.txt (upload.speed = 57600* 24/16)

#####################################################################
## Arduino Duemilanove or Diecimila w/ ATmega328 with 24MHz
## ---------------------------------------------
diecimila.menu.cpu.atmega328x24=ATmega328x24

diecimila.build.f_cpu=16000000L
diecimila.menu.cpu.atmega328x24.upload.maximum_size=30720
diecimila.menu.cpu.atmega328x24.upload.maximum_data_size=2048
diecimila.menu.cpu.atmega328x24.upload.speed=86400

diecimila.menu.cpu.atmega328x24.bootloader.high_fuses=0xDA
diecimila.menu.cpu.atmega328x24.bootloader.extended_fuses=0x05
diecimila.menu.cpu.atmega328x24.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex

diecimila.menu.cpu.atmega328x24.build.mcu=atmega328p
######################################################################
//Страница проэкта  http://srukami.inf.ua/pultoscop_v25110.html
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <FreqCount.h> 
#include <PWM.h>
#include <CyberLib.h>
#define led  9   //пин для генератора сигналов (не менять)
#define dds  10   //пин для генератора dds (не менять)
//#######################################пользовательские настройки
#define power 8 //пин который опрашивает кнопку включения
#define OFF 14 //пин который управляет ключем питания
#define timepowerON 50 //время удержания кнопки выключения
#define levo 11  //кнопка ЛЕВО(можно любой пин)
#define ok 13    //кнопка ОК(можно любой пин), "ok" with internal led
#define pravo 12 //кнопка ПРАВО(можно любой пин)
#define akb A5 //любой своюодный аналоговый пин для измерения напряжения АКБ 
#define overclock 24  //Частота на которой работает Ардуино 
#define cont 52 //контрастность дисплея
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 4, 3, 2); //пины к которым у вас подключен дисплей  
                        //Adafruit_PCD8544(clk, din, d/c, cs, rst);     
byte SinU=30;   //уровень синхронизации 0 до 255 
int PWM = 128; //стартовое значение ШИМ от 0 до 255        
int32_t frequency = 500; //стартовое значение частоты в Гц
float VCC=5.0;  //напряжение питания, меряем мультиметром
//###########################################################
const byte PROGMEM sinM[32]={1,3,11,22,38,57,79,103,128,153,177,199,218,234,245,253,  255,253,245,234,218,199,177,153,128,103,79,57,38,22,11,3}; //+
const byte PROGMEM trianglM[32]={1,17,33,49,65,80,96,112,128,144,160,176,192,207,223,239,  255,239,223,207,192,176,160,144,128,112,96,80,65,49,33,17}; //+
const byte PROGMEM pilaM[32]={1,9,17,26,34,42,50,58,67,75,83,91,99,108,116,124,132,140,148,157,165,173,181,189,198,206,214,222,230,239,247,255}; //+
const long PROGMEM ttlM[13]={300,600,1200,2400,4800,9600,19200,38400,56000,57600,115200,230400,250000};
byte powerON=0;//состояние кнопки питания
byte hag=0;
int mnog=0;
boolean flag=0;
byte mass[701];
byte x=0; 
byte menu=0;//переменная выбора меню 
byte menuDDS=0; 
bool opornoe=1; //флаг опорного напряжения
bool paus=0; //флаг режима паузы
byte pultoskop=1; //флаг выбора генератора или осциллографа
byte razv=6;  
unsigned long count =0;
byte sinX=30; 
byte meaX=83;
int Vmax=0;// максимальное напряжение 
byte sinhMASS=0;
long countX=0;
long speedTTL=9600; //скорость терминала 
int prokr=0;
byte menuTTL=0;

void setup(){
pinMode(A4,INPUT);
pinMode(led,OUTPUT); pinMode(dds,OUTPUT);
pinMode(5,INPUT); pinMode(A3,INPUT);
pinMode(levo,INPUT); pinMode(pravo,INPUT); pinMode(ok,INPUT);
//////////////////////////////////////////
//  Serial.begin(speedTTL*(16.0/overclock));
//  while (!Serial) {  ; /* wait for serial port to connect. Needed for native USB port only */ }
/////////////////////////////////////////
digitalWrite(OFF,HIGH);//включем питание 
/////////////////////////////////////////
display.begin();
display.setContrast(cont);  
while(digitalRead(ok)==LOW){  
/////////////////////////////////////////удержание кнопки отключения
if(digitalRead(power)==HIGH){powerON++;delay(10);}  
if(powerON>=timepowerON){digitalWrite(OFF,LOW);}///отключаем питание
/////////////////////////////////////////удержание кнопки отключения 
  if(pultoskop==1){
    display.clearDisplay();
    display.setCursor(0,0);
    display.setTextColor(WHITE, BLACK); // 'inverted' text
    display.println(" Pultoscope ");
    display.setCursor(0,10);
    display.setTextColor(BLACK); 
    display.println(" Generator ");
    display.setCursor(0,20);
    display.println(" DDS-Generator");
    display.setCursor(0,30);
    display.println(" Terminal ");
    display.setCursor(0,40);
    display.println(" Terminal-Gen ");
    //display.setCursor(0,40);
    //display.print("Batt=");
    //display.print(analogRead(akb)*5.0/1024, 1);
    //display.print("V");    
  }
    if(pultoskop==2){
    display.clearDisplay();
    display.setCursor(0,0);
    display.setTextColor(BLACK);
    display.println(" Pultoscope ");
    display.setCursor(0,10);
    display.setTextColor(WHITE, BLACK); // 'inverted' text
    display.println(" Generator ");
    display.setCursor(0,20);
    display.setTextColor(BLACK);
    display.println(" DDS-Generator");
    display.setCursor(0,30);
    display.println(" Terminal ");
    display.setCursor(0,40);
    display.println(" Terminal-Gen ");
    //display.setCursor(0,40);
    //display.print("Batt=");
    //display.print(analogRead(akb)*5.0/1024, 1);
    //display.print("V");   
  } 
    if(pultoskop==3){
    display.clearDisplay();
    display.setCursor(0,0);
    display.setTextColor(BLACK);
    display.println(" Pultoscope ");
    display.setCursor(0,10);
    display.println(" Generator ");
    display.setCursor(0,20);
    display.setTextColor(WHITE, BLACK); // 'inverted' text;
    display.println(" DDS-Generator");
    display.setCursor(0,30);
    display.setTextColor(BLACK);
    display.println(" Terminal ");
    display.setCursor(0,40);
    display.println(" Terminal-Gen ");
    //display.setCursor(0,40); 
    //display.print("Batt=");
    //display.print(analogRead(akb)*5.0/1024, 1);
    //display.print("V");   
    }
    if(pultoskop==4){
    display.clearDisplay();
    display.setCursor(0,0);
    display.setTextColor(BLACK);
    display.println(" Pultoscope ");
    display.setCursor(0,10);
    display.println(" Generator ");
    display.setCursor(0,20);
    display.println(" DDS-Generator");
    display.setCursor(0,30);
    display.setTextColor(WHITE, BLACK); // 'inverted' text
    display.println(" Terminal ");
    display.setTextColor(BLACK);
    display.setCursor(0,40);
    display.println(" Terminal-Gen ");
    //display.setCursor(0,40); 
    //display.print("Batt=");
    //display.print(analogRead(akb)*5.0/1024, 1);
    //display.print("V");   
    }
    if(pultoskop==5){
    display.clearDisplay();
    display.setCursor(0,0);
    display.setTextColor(BLACK);
    display.println(" Pultoscope ");
    display.setCursor(0,10);
    display.println(" Generator ");
    display.setCursor(0,20);
    display.println(" DDS-Generator");
    display.setCursor(0,30);
    display.println(" Terminal ");
    display.setCursor(0,40);
    display.setTextColor(WHITE, BLACK); // 'inverted' text
    display.println(" Terminal-Gen ");
    display.setTextColor(BLACK);
    //display.setCursor(0,40); 
    //display.print("Batt=");
    //display.print(analogRead(akb)*5.0/1024, 1);
    //display.print("V");   
    }    
  if(digitalRead(levo)==HIGH){delay(100); pultoskop--; if(pultoskop==0){pultoskop=5;}}
  if(digitalRead(pravo)==HIGH){delay(100); pultoskop++; if(pultoskop==6){pultoskop=1;}}
  delay(200);  
  display.display(); }
if(pultoskop==1){FreqCount.begin(1000);}
if(pultoskop==2){InitTimersSafe(); bool success=SetPinFrequencySafe(led, frequency);}
if(pultoskop==3){InitTimersSafe(); bool success=SetPinFrequencySafe(led, 200000);}
/* PWM frequencies are tied together in pairs of pins. If one in a
 * pair is changed, the other is also changed to match: 
 *   - Pins 5 and 6 are paired on timer0
 *   - Pins 9 and 10 are paired on timer1
 *   - Pins 3 and 11 are paired on timer2 */
display.setTextColor(BLACK);
delay(200); 
}

void loop(){
/////////////////////////////////////////удержание кнопки отключения
if(digitalRead(power)==HIGH){powerON++;delay(10);}  
if(powerON>=timepowerON){digitalWrite(OFF,LOW);}///отключаем питание
/////////////////////////////////////////удержание кнопки отключения    
if(pultoskop==1){Pultoscope();};
if(pultoskop==2){Generator();}
if(pultoskop==3){DDSGenerator();}
if(pultoskop==4){TTL();}
if(pultoskop==5){TTLGen();}
}

   
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(int i=0;i<700;i++){ 
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          delayMicroseconds(500);
          mass[i]=ADCH;
      }
  }
  if (razv>0){
      for(int i=0;i<700;i++){ 
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          mass[i]=ADCH;
      }
  }
}

//#########################################################################################Pultoscope
void Pultoscope(){

if(opornoe==0){ADMUX = 0b11100011;}//выбор внутреннего опорного 1,1В
if(opornoe==1){ADMUX = 0b01100011;}//Выбор внешнего опорного
delay(5);
if(paus==0){Zamer();}
//#######################################определение точки синхронизации
bool flagSINHRO=0;
bool flagSINHRnull=0;
for(int y=1;y<255;y++){
  if(flagSINHRO==0){if(mass[y]<SinU){flagSINHRnull=1;}}
  if(flagSINHRO==0){if(flagSINHRnull==1){if(mass[y]>SinU){flagSINHRO=1;sinhMASS=y;}}}}
//#######################################определение точки синхронизации
//максимальное значение сигнала##########################
Vmax=0; 
for(int y=1;y<255;y++){if(Vmax<mass[y]){Vmax=mass[y];} }
//максимальное значение сигнала##########################
//#######################################определение точки синхронизации
//#######################################отрисовка графика 
if(paus==0){
display.clearDisplay();
display.fillCircle(80,47-SinU/7, 2, BLACK);//рисуем уровень синхронизации    
x=3;
for(int y=sinhMASS;y<sinhMASS+80;y++){
      if(razv<7){x++;}
      if(razv==7){x=x+2;}
      if(razv==8){x=x+3;} 
      display.drawLine(x, 47-mass[y]/7, x+1, 47-mass[y+1]/7, BLACK);
      display.drawLine(x+1, 47-mass[y]/7+1, x+2, 47-mass[y+1]/7+1, BLACK);        
}
sinhMASS=0;}
if(paus==1){
display.clearDisplay();
display.drawLine(prokr/8,8,prokr/8+6,8, BLACK);//шкала прокрутки
display.drawLine(prokr/8,9,prokr/8+6,9, BLACK);//шкала прокрутки
          x=3;
          for(int y=prokr;y<prokr+80;y++){
                if(razv<7){x++;}
                if(razv==7){x=x+2;}
                if(razv==8){x=x+3;} 
                display.drawLine(x, 47-mass[y]/7, x+1, 47-mass[y+1]/7, BLACK);
                display.drawLine(x+1, 47-mass[y]/7+1, x+2, 47-mass[y+1]/7+1, BLACK); 
          }}
//#######################################отрисовка графика
for(byte i=47;i>5;i=i-7){
  display.drawPixel(0,i, BLACK);display.drawPixel(1,i, BLACK);display.drawPixel(2,i, BLACK);
  display.drawPixel(83,i, BLACK);display.drawPixel(82,i, BLACK);display.drawPixel(81,i, BLACK);} //разметка экрана  вертикальная
//////////////////////////////////////////////////сетка
for(byte i=47;i>5;i=i-3){display.drawPixel(21,i, BLACK);display.drawPixel(42,i, BLACK);display.drawPixel(63,i, BLACK);}
for(byte i=3;i<84;i=i+3){display.drawPixel(i,33, BLACK);display.drawPixel(i,19, BLACK);}
//////////////////////////////////////////////////сетка
//#######################################отрисовка menu
if(menu==0){
    display.setCursor(0,0);
    display.setTextColor(WHITE, BLACK); // 'inverted' text 
    display.print(razv);        
    display.setTextColor(BLACK);
    display.print(" ");
    if(opornoe==0){display.print("1.1");}
    if(opornoe==1){display.print(VCC,1);}
    display.print(" P");
    if(digitalRead(levo)==HIGH){razv--;if(razv==255){razv=0;}}
    if(digitalRead(pravo)==HIGH){razv++;if(razv==9){razv=8;}}
}
if(menu==1){
    display.setCursor(0,0);
    display.setTextColor(BLACK); 
    display.print(razv);      
    display.setTextColor(WHITE,BLACK);
    display.print(" ");  
    if(opornoe==0){display.print("1.1");}
    if(opornoe==1){display.print(VCC,1);}
    display.setTextColor(BLACK);
    display.print(" P");
    if(digitalRead(levo)==HIGH){opornoe=!opornoe;}
    if(digitalRead(pravo)==HIGH){opornoe=!opornoe;}    
}
if(menu==2){
    display.setCursor(0,0);
    display.setTextColor(BLACK);
    display.print(razv);
    display.print(" ");
    if(opornoe==0){display.print("1.1");}
    if(opornoe==1){display.print(VCC,1);}
    display.setTextColor(WHITE, BLACK); // 'inverted' text 
    display.print(" P");
    paus=1;
    if(digitalRead(levo)==HIGH){prokr=prokr-10;if(prokr<0){prokr=0;}}
    if(digitalRead(pravo)==HIGH){prokr=prokr+10;if(prokr>620){prokr=620;}} 
}
if(menu==3){
    prokr=0;
    paus=0;
    display.setCursor(0,0);
    display.setTextColor(BLACK);
    display.print(razv);
    display.print(" ");
    if(opornoe==0){display.print("1.1");}
    if(opornoe==1){display.print(VCC,1);}
    display.print(" P");
    if(digitalRead(levo)==HIGH){SinU=SinU-20;if(SinU<20){SinU=20;}}
    if(digitalRead(pravo)==HIGH){SinU=SinU+20;if(SinU>230){SinU=230;}}   
    display.fillCircle(80,47-SinU/7, 5, BLACK);
    display.fillCircle(80,47-SinU/7, 2, WHITE); 
}
if(digitalRead(ok)==HIGH){menu++;if(menu>3){menu=0;paus=0;}}//перебор меню
if(FreqCount.available()){count=FreqCount.read();}//вывод частоты по готовности счетчика
//#######################################частоты сигнала
byte Frec1=0;
long Frec=0;
bool flagFrec1=0;
bool flagFrec2=0;
bool flagFrec3=0;
for(int y=1;y<255;y++){
  if(flagFrec1==0){if(mass[y]<SinU){flagFrec2=1;}}
  if(flagFrec1==0){if(flagFrec2==1){if(mass[y]>SinU){flagFrec1=1;Frec1=y;}}}
  if(flagFrec1==1){if(mass[y]<SinU){flagFrec3=1;}}
  if(flagFrec3==1){if(mass[y]>SinU){
  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==1){Frec=1000000/((y-Frec1)*3.27)/32;}//delitel 128
  if (razv==0){Frec=1000000/((y-Frec1)*500);}//delitel 128
  flagFrec1=0;flagFrec3=0;
  }}}
//#######################################частоты сигнала
display.setTextColor(BLACK);
if(opornoe==1){
if((Vmax*VCC/255)>2.5){countX=count*(overclock/16.0);}
if((Vmax*VCC/255)<2.5){countX=Frec*(overclock/16.0);}}
if(opornoe==0){countX=Frec*(overclock/16.0);}
if(countX<1000){display.print(" ");display.print(countX);display.print("Hz");}
if((countX>=1000)&&(countX<10000)){display.print(" "); float countXK=countX/1000.0;display.print(countXK,1);display.print("KHz");}
if(countX>=10000){float countXK=countX/1000.0;display.print(countXK,1);display.print("KHz");}
if(opornoe==1){display.setCursor(5,40); display.setTextColor(BLACK); display.print(Vmax*VCC/255,1);}
if(opornoe==0){display.setCursor(5,40); display.setTextColor(BLACK); display.print(Vmax*1.1/255,1);}
display.print("V");
//##############отрисовка menu
delay(200);  
display.display();
}

//##############################################################################################режим ренератора
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-1;
              if(PWM<0){PWM=255;} 
              delay(3);//защита от дребезга
            }
            if(digitalRead(pravo)==HIGH){
              PWM=PWM+1;
              if(PWM>255){PWM=0;} 
              delay(3);//защита от дребезга 
            }  
}      
if(digitalRead(ok)==HIGH){//переключение разряда выбора частоты 
  delay(3);//защита от дребезга
  hag++;
  if(hag>=5){hag=0;}
} 
////////////
display.setTextSize(1);
display.setCursor(0,5);
display.print("PWM=");
display.print(PWM*100.0/255);
display.print(" %");
display.drawLine(0,0,83*PWM/255.0,0, BLACK);
display.drawLine(0,1,83*PWM/255.0,1, BLACK);
display.drawLine(0,2,83*PWM/255.0,2, BLACK);
display.drawLine(0,15,83*PWM/255.0,15, BLACK);
display.drawLine(0,16,83*PWM/255.0,16, BLACK);
display.drawLine(0,17,83*PWM/255.0,17, BLACK);
///////////    
display.setCursor(5,20);
 display.setTextSize(2);
long frequencyX=frequency*(overclock/16.0);
if(frequencyX<1000){display.print(frequencyX);display.setTextSize(1);display.println("Hz");}
if((frequencyX>=1000)&&(frequencyX<10000)){display.print((frequencyX/1000.0),2);display.setTextSize(1);display.println("KHz");}
if((frequencyX>=10000)&&(frequencyX<100000)){display.print((frequencyX/1000.0),1);display.setTextSize(1);display.println("KHz");}
if(frequencyX>=100000){display.print((frequencyX/1000.0),0);display.setTextSize(1);display.println("KHz");}
display.setCursor(0,40);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK); // 'inverted' text 
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("PWM");
          //display.print(PWM*100.0/255);
          //display.print("%"); 
          flag=1;
      } 
display.print(" << ");
display.setTextColor(BLACK);        
pwmWrite(led, PWM);
delay(200);  
display.display();
}

//########################################################################################################DDS
void DDSGenerator(){
int d=0;
int fr=10; 
if(menuDDS==0){
    display.clearDisplay(); 
    display.setTextColor(WHITE, BLACK); // 'inverted' text
    display.setCursor(0,0);
    display.println(" Sine ");
    display.setTextColor(BLACK);
    display.setCursor(0,10); 
    display.println(" Triangle ");
    display.setCursor(0,20);
    display.println(" Saw ");
    display.setCursor(0,30);
    display.println(" Rev-Saw ");
    display.setTextColor(BLACK);
    //display.setCursor(0,40);
    delay(200);  
    display.display();
    while(D13_Read==LOW){
      //PWM=sinM[d];
      PWM=pgm_read_byte(&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(0,0);
    display.println(" Sine ");
    display.setTextColor(WHITE, BLACK);
    display.setCursor(0,10); 
    display.println(" Triangle ");
    display.setTextColor(BLACK);
    display.setCursor(0,20);
    display.println(" Saw ");
    display.setCursor(0,30);
    display.println(" Rev-Saw ");
    display.setTextColor(BLACK);
    delay(200);  
    display.display();
    while(D13_Read==LOW){
      //PWM=trianglM[d];
      PWM=pgm_read_byte(&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(0,0);
    display.println(" Sine ");
    display.setTextColor(BLACK);
    display.setCursor(0,10); 
    display.println(" Triangle ");
    display.setTextColor(WHITE, BLACK);
    display.setCursor(0,20);
    display.println(" Saw ");
    display.setTextColor(BLACK);
    display.setCursor(0,30);
    display.println(" Rev-Saw ");
    display.setTextColor(BLACK);
    delay(200);  
    display.display();
    while(D13_Read==LOW){
      //PWM=pilaM[d];
      PWM=pgm_read_byte(&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(0,0);
    display.println(" Sine ");
    display.setTextColor(BLACK);
    display.setCursor(0,10); 
    display.println(" Triangle ");
    display.setTextColor(BLACK);
    display.setCursor(0,20);
    display.println(" Saw ");
    display.setTextColor(WHITE, BLACK);
    display.setCursor(0,30);
    display.println(" Rev-Saw ");
    display.setTextColor(BLACK);
    delay(200);  
    display.display();
    while(D13_Read==LOW){
      //PWM=pilaM[31-d];
      PWM=pgm_read_byte(&pilaM[31-d]);
      pwmWrite(dds,PWM);
      //delayMicroseconds(fr);
      d++;
      if(d==32){d=0;}}
      menuDDS++;
    delay(200);}
if(menuDDS>3){menuDDS=0;}
}

//#####################################################################################################TTL
void TTL(){
int speedTTLindex=0;
while (pgm_read_dword(&ttlM[speedTTLindex])!=speedTTL) {speedTTLindex++; if(speedTTLindex>12){speedTTLindex=0;} }
display.clearDisplay(); 
display.setTextColor(BLACK); 
display.setCursor(10,0);
display.println("Terminal");
display.setCursor(10,10);
display.println("Velocity");
display.setCursor(10,20);
display.setTextColor(WHITE, BLACK);
display.print(" - ");
display.print(speedTTL);
display.println(" + ");
display.setCursor(10,30);
display.setTextColor(BLACK);
display.println("Press OK");
if(digitalRead(pravo)==HIGH){speedTTLindex++; delay(100); if(speedTTLindex>12){speedTTLindex=0;}}
if(digitalRead(levo)==HIGH) {speedTTLindex--; delay(100); if(speedTTLindex<0){speedTTLindex=12;}}
speedTTL=pgm_read_dword(&ttlM[speedTTLindex]);
if(digitalRead(ok)==HIGH){
      Serial.begin(speedTTL*(16.0/overclock));
      display.clearDisplay(); 
      delay(200);
      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(200);  
display.display();  
}


//#####################################################################################################TTL
void TTLGen(){
int speedTTLindex=0;
while (pgm_read_dword(&ttlM[speedTTLindex])!=speedTTL) {speedTTLindex++; if(speedTTLindex>12){speedTTLindex=0;} }
display.clearDisplay(); 
display.setTextColor(BLACK); 
display.setCursor(10,0);
display.println("Terminal");
display.setCursor(10,10);
display.println("Velocity");
display.setCursor(10,20);
display.setTextColor(WHITE, BLACK);
display.print(" - ");
display.print(speedTTL);
display.println(" + ");
display.setCursor(10,30);
display.setTextColor(BLACK);
display.println("Press OK");
if(digitalRead(pravo)==HIGH){speedTTLindex++; delay(100); if(speedTTLindex>12){speedTTLindex=0;}}
if(digitalRead(levo)==HIGH) {speedTTLindex--; delay(100); if(speedTTLindex<0){speedTTLindex=12;}}
speedTTL=pgm_read_dword(&ttlM[speedTTLindex]);
if(digitalRead(ok)==HIGH) {
      Serial.begin(speedTTL*(16.0/overclock));
      display.clearDisplay(); 
      display.setCursor(0,0);
      display.print("0123456789ABCDEF @SPD:");
      display.print(speedTTL);
      display.setCursor(0,30);
      display.print("Sending every");
      display.setCursor(0,40);
      display.print("1 second.");
      delay(200);
      display.display();
      while(1){ 
                Serial.print("0123456789ABCDEF @SPD:"); 
                Serial.println(speedTTL);
                delay(1000); 
      }}  
delay(200);  
display.display();  
}

 

HAWES
HAWES аватар
Offline
Зарегистрирован: 05.04.2016

Juris пишет:

По случаю прибытия ко мне дисплеев LS020, стараюсь делать себе подборку проектов для пробы на таком.

Juris ,на радиокоте есть неплохой пробник-ослик "Москит" под все чипы экранов от SIEMEN S65.

http://radiokot.ru/circuit/digital/measure/142/

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

HAWES пишет:

Juris ,на радиокоте есть неплохой пробник-ослик "Москит" под все чипы экранов от SIEMEN S65.

http://radiokot.ru/circuit/digital/measure/142/

Спасибо за наводку! Хмм, весьма странно, что при моих фанатических поисках (и многих находках) проектов разных DIY осциллов за последний месяц или где то так, вот этот не был мною найден. Благодарю.

R2PM
Offline
Зарегистрирован: 28.12.2015

Доброе время суток!!!!

Подскажите пожалуста в скетче поста 2132 воэможно поменять LCD  на графический дисплей с контроллером ST7920 - он хотябы побольше с заменой библиотек.

Спасибо Виктор

dgeka
Offline
Зарегистрирован: 05.07.2016

снова я  ! ребят можно в версии tft прикрутить синхронизацию?

dgeka
Offline
Зарегистрирован: 05.07.2016

Xumuk как впечатления от dso 138?

oleg.forkop
Offline
Зарегистрирован: 21.06.2015

ika256 - А Вы не могли бы выложить HEX файл ? Заинтересовал Ваш скетч , но не могу его скомпилировать . Буду очень блогадарен .

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

dgeka пишет:

Xumuk как впечатления от dso 138?

ну я им пока мало пользовался=))) в основном смотрел шим ардуинки=)) больше всего нравится то что показывает скважность

dgeka
Offline
Зарегистрирован: 05.07.2016

подскажите  ребят !? Xumuk?

при таких настройках время /деления dso138 впоймает сигнал?

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

впоймает

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

я если честно не силен в работе с осликами, и в данной картинке я особо не понимаю настройку =))) но если скажете конкретно какую частоту проверить или еще чего то я попробую помочь, попробовать

dgeka
Offline
Зарегистрирован: 05.07.2016

Спасибки 240265

! согласно расчетам 1 кГц 

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

На С1-83 выставлено:

Время/дел - 1mS

V/дел - 0,1 V

Включен 1-й канал

Снхронизация внутренняя, 1 - канал, по спаду

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

dgeka пишет:

Спасибки 240265

! согласно расчетам 1 кГц 

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

dgeka
Offline
Зарегистрирован: 05.07.2016

спасибки буду брать (невтему xumik в сборе брали или рассыпухой?ссыль на продавца мона?) 24

dgeka
Offline
Зарегистрирован: 05.07.2016

спасибки буду брать (невтему xumik в сборе брали или рассыпухой?ссыль на продавца мона?)

240265  я правильно частоту сощитал?

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

В данный момент 1 КГерц будет виден 1 период на деление, чтобы получше рассмотреть сигнал нужно выставить 0,2 или 0,1 миллисекунд на деление

Погуглите на тему как пользоваться осцилографом или что-то наподобие.

https://www.google.ru/search?q=%D0%BA%D0%B0%D0%BA+%D0%BF%D0%BE%D0%BB%D1%...

 

dgeka
Offline
Зарегистрирован: 05.07.2016

240265 спасибки :)

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

Пробный запуск "Пультоскопа" с экранчиком Siemens LS020 (на плате переходнике, содержащей резисторные делители на сигналах и китайский DC-DC Step-Up для питания подсветки LS020):
http://bildites.lv/a/kjws49cc#skzv8y56
Там пока только Ардуино, экран, кнопки.
Залита прошивка PULTOSCOPE_LCD_ls020__DSS_delit_OFF_V2 (я правильно выбрал?).
При компиляции идут кое-какие предупреждения, это наверное в порядке вещей?
Меню DDS - визуально что-то должно происходить при нажатии "OK" на каком из форм?
Спасибо за возможные подсказки! :)